Open Problems In Computer Science

Oh look! Another ThreadMess!

With extra marshmallow troll-berries. I would recommend moving the "types" debate to another topic.


What are the major problems in programming or computer science that we haven't been able to solve?

It seems like day-to-day work in programming is filled with figuring out countless details and cobbling together algorithms to put a system together. In that sort of environment, it's easy to forget the big picture. So what are the biggest problems in computer science right now (academic or in practice)?

Why "outside of performance issues?" If you're going to measure whether one paradigm is better than another, I think the best way is to examine whether the easiest and most straightforward way of expressing concepts are also the best way to express them, where "best" refers, among other things, to performance, security, and correctness. As far as proofs go: I think most people who engage in holy wars have married themselves to an idea and are uninterested in properly comprehending alternatives; their decisions have been made, and their minds are closed. YOU, top, are that way about types; even after all your years on this wiki, you still display an appalling degree of ignorance regarding TypeTheory and the application of TypeTheory to language design (and the only reason you're 'displaying' it is because yours is the "vociferous ignorance" sort). I'm certain you've encountered people that way about relational. This falls under 'MostHolyWarsTiedToPsychology', but is more of the 'cult and religion' and selective ignorance on one or both sides than of anything more flattering - it certainly isn't about humans with different value systems giving different precedence to different viewpoints after fairly judging them all.

As to whether 'types' are better? I am strongly convinced they have proven themselves beyond any reasonable doubt better (for performance, correctness, AND security) than the 'no types' option: treating all of computer memory and hard disk as one large BLOB that is twiddled and tweaked. In that sense, even databases and files and processes or services and code vs. data constitute 'types' for parts of the blob. Beyond that, the question only becomes a matter of degree. You seem to be of the opinion that there is some cutoff (an apparently arbitrary one) at which more or stronger typing becomes a bad thing - perhaps because you've experienced a lack of foresight creating artificial limits and accidental complexities, and you'd rather just have a nice big string into which you can dump data rather than be tied to somebody's inadequate model. I happen to be of the opinion that strong typing is always a good thing so long as one chooses the correct types, but even I'll agree that foresight ain't perfect. However, I also come more from the open source community, and I've freedom to rebuild my code at my workplace, so I rarely feel tied to the model: if the model is inadequate, I tweak the model (or rewrite a chunk of it) rather than rail against it. Had I been educated in a culture of proprietary software and unforgiving, inflexible frameworks, perhaps my opinion would be different.

There are already topics where others besides me defend minimal types. I don't think this is the place to delve into those details. But one practical limitation of types that is readily apparent is that they make it difficult to mix and match tools, because sharing types across languages and tools has not been solved. For similar reasons, decent language-neutral GUI engines have failed to appear: they keep tying the engines to a specific OOP language. If one puts a high premium on mixing and matching tools, then types are a problem. If you want to discuss this claim further, visit CrossAppLanguageOopIsRough. --top

[I suspect much of this perennial HolyWar surrounding types is actually one of terminological usage. What Top describes as "minimal types" or "no types" appears to be strong dynamic typing with, I suspect, heavy reliance on implicit type casts. He appears to want DBMSes with a type system similar to Perl or PHP. It's an interesting idea, though writing as someone who developed accounting and payroll software, it's also scary.]

PHP has dynamic types while Perl has *no* types because it has no side-flags, at least on the scalar level. They are two different animals. Also, I agree that strong typing is better for some apps than others. I've worked in many companies that want complex systems on the cheap, and this is where type-free would be the best. Accounting and payroll cannot be done on the cheap (if you want the company to survive). In those, the bloated anal nature of static/strong typing is almost a must (although some argue that unit tests should be used to check stuff and not the type system). --Top

[Perl has no types? I'm sure LarryWall would be interested to discover that. Once again, you're using "type-free" and "*no* types" to refer to forms of dynamic typing. Your application of terminology is not in accordance with accepted use. Programming in MachineCode has effectively no types (at least from the developer's point of view); most other languages, including many assembly languages, have at least some notion of types even if they're weakly-typed.]

Let me restate it to bypass a definition battle. The default "cells" in DynamicRelational do not have hidden flags or schemas to indicate the "type" of a cell (although schema typing can be incrementally added). PHP does. Perl doesn't for scalars (to the best of my knowledge). PHP acts like it has flags while Perl does not. (I've never seen the insides, so I am basing this on their behavior via tests.) --top

What pray tell is a side flag? Where is the definition of what a side flag is? Is it accepted terminology across programmers? Or does only one single programmer in the entire world know what a side flag is? In order for humans to communicate, we need to precisely define terminology. In math, we know precisely what subtraction and addition is. What is a side flag and who has defined it where?

"Type tag" is probably the more common terminology. I avoided it originally to avoid confusion with markup language "tags".


For some of the work already done, see http://www.cs.brown.edu/people/mph/publications.html, especially: The Topological Structure of Asynchronous Computability (http://www.cs.brown.edu/people/mph/HerlihyS99/p858-herlihy.pdf) and A Classification of Wait-Free Loop Agreement Tasks (http://www.cs.brown.edu/people/mph/HerlihyR02/journal.pdf)

It isn't exactly categorized as logic, but I think the logic for distributed systems will eventually have to be based on something like this.


Is this really a computer science problem? Seems like a people issue.

I don't think it's in the same class as the "P = NP" problem, but some problems do very much involve people issues. My concern is that the problems immediately above this are largely academic problems. What are the important industry problems (if such a distinction is warranted)?

There are two parts to this problem. As an analogy, think of the origin of the relational model. This is clearly an example of the the right "computer science" idea in the right place at the right time. The object/relational holy war is only a computer science problem to the extent that a new, theoretically-grounded paradigm may be necessary to integrate them. Whether such a new paradigm succeeds depends on whether it is practical, and whether it is actually adopted. This is a "people issue".


These are not problems in computer science:

They aint solutions. Perhaps you really mean ComputerMathProblems??

No. As mentioned above by someone else, the first of these problems is a "people issue". There is nothing in it specific to computer science, even if you make it specific to a particular "paradigm difference" in computing. The second "problem" also has nothing to do with computing. It sounds like an economic problem, if you think it is a problem at all - which is a matter of opinion. The fact that "P ?= NP" has no known solution is not a matter of opinion.


This is a "problem" in electrical engineering, and has nothing to do with computer science.

You don't think that Computer Science includes the architecture of computers? You think it's only about software? Few would agree with you. Computer Science and Electrical Engineering overlap.


This is probably more of a freak science question, but has it ever occurred to anybody, what with however many googol of computations modern computers do each millisecond these days, there might not be some relativistic effects involved?

Definitely not in the sense you seem to mean. Special relativity does arise in some regards in the design of circuits, since it limits the speed of transmission of signals to roughly 1 foot per nanosecond, and it is an integral part of the quantum physics that governs semiconductor behavior, but it has nothing to do with the clock rate of a computer nor its MIP rating.

Is information processing scalable with respect to speed?

Since you seem to be asking this in the context of Special Relativity, the answer is a clear "yes". There are fundamental limits that physics places on the maximum rate of computation, but that is a different subject more closely related to thermodynamics.


It is very much a computer science problem. It will take work in compilers (instruction reordering, optimization, etc), architecture (speculative threading, relaxed memory models, etc), and programming languages to solve it.


The field of computer science is largely an awkward marriage between engineering and mathematics, and many arguments in computer science often assume one background or the other. The very term "open problem" implies this page is mainly for the mathematics stream of computer science. So I would suggest that the major cultural problem in computer science is how to better blend its mathematical and engineering heritage.

Is this a real problem? Certainly it gets played out a lot by some, but is it really any different than the tensions between management and developers or customers and suppliers? It seems like historically the greatest contributors to the field have mastered both the practical and theoretical sides.

[We might also need to differentiate between computer science and programming science. Computer science could be about the circuit boards in your computer. Programming science, should be about the science of programming a computer. In order to do programming, one does not need to know about capacitors, resistors, and solder that is in your computer. Computer science unfortunately is the term used in university, when in fact it should be "programming science". Computer science should be about building computers and electronics, not about programming. Some prefer to call it "computing science" instead of "computer science", but they are very similarly spelled, so are often confused. Why isn't there a computer science course that teaches one how the internals of a computer work, and another programming science course that teaches about programming? Computers are not programs, so isn't program science separate from computer science? One does not need a computer to run a program, one can write a program without a computer (i.e. languages like TutorialDee were created on paper, with no computer, originally.. and are now successfully implemented on an actual computer later)] ]

Tradition. There are a lot of terms that don't make sense, but get stuck in our collective due to use. It's a kind of QwertySyndrome.


How to keep information work from migrating to nations that didn't invest in creating it?

Discussion moved to SoftwareEngineerFolkEconomics.


Various open problems proposed above have been dismissed as "people issues", but to my mind one of the largest problems in Computer "Science" at the moment is the disregarding of people issues. Sure there is a hard core of math encased in a tough engineering wrapping, but then outside that it gets all soft and mushy as a large part of software work, esp programming, is all about people. As has been stated ad tedium, the computer doesn't care whether you wrote your program in assembler or smalltalk, it justs sees the machine code. So everything from programming languages up, including paradigms and interface issues, is obviously a people issue. Whether we broaden the definition of computer science to include these soft and squishy ideas, or fork it into a new discipline, I think this issue needs to be addressed, as more and more the important problems seem to be not "How can we reduce this algorithm from O(n2) to O(n)", but "How can we reduce the development time of this kind of simple app from 3 months to 2 weeks". Once we have named this field we will have legitimised its teaching and studying, and true advances can be made.

We have a name for it, and it is "SoftwareEngineering."

Well said. To me making a faster algorithm is often puzzle solving, instead of problem solving. Problems involve people, and reducing development time and cost is helpful to people.

{Note that I did not write the above. --top}


MarchZeroEight

CategoryMath CategoryScience ComputerScience


EditText of this page (last edited June 1, 2013) or FindPage with title or text search