
List of unsolved problems in computer science - jonbaer
http://en.wikipedia.org/wiki/List_of_unsolved_problems_in_computer_science
======
gbog
I'd like to see some more general unsolved problems concerning big code bases,
programming languages, etc. Examples:

\- Object-relational impedance mismatch

\- MVC (solves only half of the problem)

\- Global state

\- Schema vs schemaless data stores

\- Raising exceptions vs returning error codes

A good sign of an unsolved problem in this regard is that programmers go back
and forth between solutions, forgetting the downsides of the previous flavour
while enduring the downsides of the current flavour.

Very often, one new solution pretends it will get rid of complexity, but the
actual complexity is just moved a bit further behind the carpet.

~~~
chongli
>Object-relational impedance mismatch

This one is easy: don't do it! If you're talking to a database, you should be
using a powerful and declarative language for building your queries.

>Global state

This is a solved problem from a computer science perspective. The rest of the
work is getting programmers to understand how and change their habits
accordingly.

>Raising exceptions vs returning error codes

Option/Either types are a very strong middle ground. They don't require the
boilerplate of checking error codes and they don't have the unpredictability
of exceptions (particularly in the case of asynchronous code).

>Very often, one new solution pretends it will get rid of complexity, but the
actual complexity is just moved a bit further behind the carpet.

I know what you mean. A lot of solutions end up "punting" the complexity to
some other structure. The real answer (if there can be one) is to find ways to
eliminate this complexity altogether. One major way to do that is to work with
values and compose pure functions to build them. Pure functions dramatically
improve one's ability to reason about their properties in isolation.

~~~
v13inc
"""This one is easy: don't do it! If you're talking to a database, you should
be using a powerful and declarative language for building your queries."""

Not only that, but I have been finding that most problems where I would
originally turn to using objects and classes are better solved by using static
functions that operate on large data structures. This strategy also helps
sidestep the object-relational mismatch in a lot of cases.

~~~
chongli
I think people are finally starting to realize that objects are not a good way
to model information; maps, vectors and ADTs do a much better job.

~~~
gbog
Well, it depends. Say you want to model a user of your application, this looks
very much like a candidate for an object. Sure when you just start, you can
use a dict or even only the id, and have functions working on it.

But will this scale when the number of possible actions over a user will be in
the hundreds? Then, with all it drawbacks, the object model may make sense: at
least, you have a way to know which actions are available on a given thing.

~~~
chongli
>Then, with all it drawbacks, the object model may make sense: at least, you
have a way to know which actions are available on a given thing.

Not sure what you mean here. Could you elaborate a bit more? I don't want to
reply to a misconception of your idea.

~~~
gbog
When you have a "user" in hands, how do you know what you can do with it? When
it is an object, it is relatively easy, as the methods are bundled in the
object. If you use a functional paradigm, you'll have to resort to some other
mean, maybe you'll regroup user-related functions in a place (but some are
mixed), or check for function accepting user_id as an argument, but these
means seem less straightforward to me.

~~~
chongli
Ah, so you're talking about tooling. Specifically, the way object method
invocation lends itself well to autocompletion or intellisense?

In functional languages we tend to use far more generic facilities than this.
Some examples of this are lenses and scrap-your-boilerplate style generic
programming.

We also tend to think differently. We don't "hold a user in our hands" and ask
what we can do with it. We think in terms of extending our base language until
we can express the solution to our problem in a trivial way.

~~~
gbog
That's all good but my personal experience about complexity and big code bases
sadly don't include functional paradigm.

Note that I'm not taking about complex problem with potentially simple
solutions, I'm talking about inherently complex systems, like, say, the HR
system of General motors.

------
sauravt
List of unsolved problem in Mathematics
[http://en.wikipedia.org/wiki/List_of_unsolved_problems_in_ma...](http://en.wikipedia.org/wiki/List_of_unsolved_problems_in_mathematics)

------
larsberg
POPLmark seems to generally be considered solved. There are multiple good
solutions using different tools for all of those problems, I believe.

And the _real_ goal has largely been reached. At this point, if you're
proposing new PL theory and you don't have a mechanised proof of it, the
entire work is viewed with considerable skepticism.

That said, reuse and productivity are still not much better than that of real-
world software. My peers who do that sort of thing are in very high demand for
post-doc positions on projects funded by various governments/militaries to
"prove the X property about software system Y."

------
k__
I like how the POPLmark sounds like popel-mark in german. Which would mean
something like booger-money in english.

------
fractalsea
It would be nice to see more. I'm sure there are.

Having said that I suppose most problems we face in this field boil down to
mathematical problems at the fundamental level. At least that's the conclusion
I came to when I tried to think of unsolved AI problems.

------
MojoJolo
_What is the fastest algorithm for multiplication of two n-digit numbers?_

 _What is the fastest algorithm for matrix multiplication?_

I think those "What is the fastest" questions are relative. In my opinion,
they are not unsolved problem. There are already solutions for them. And in
those current solutions, there is of course the fastest.

When a faster algorithm is formulated, a time will come where another
algorithm will perform much better.

EDIT: Now I get it. That "fastest" is in terms of time complexity. Thanks
guys. :)

~~~
ginko
I believe fastest in this context means that it has been proven that there can
be no faster algorithm.

~~~
wlievens
Indeed, in terms of complexity theory I would guess, not in terms of
milliseconds.

~~~
ginko
An Algorithm with a lower time complexity will always take a shorter amount of
time once the problem size grows large enough. You could run one algorithm on
a modern cpu, utilizing Simd and tune for cache coherency and the other in
QBASIC on an old 386 and the O(n log n) algorithm would still terminate
earlier than the O(n^2) one past a certain n.

~~~
ufo
the problem is that while dropping from n^2 to n log n is a big deal, dropping
from (n log n) to n won't help much if you end up increasing the constant
costs at the same time.

~~~
tel
It will eventually. Practical problems are pretty much solved.

------
gerhardi
How about a list of greatest problems in computer science that have been
solved? Would make a nice list to study and to gain general knowledge!

------
aaron695
I don't know, I consider them more unsolved mathematics problems in the non
academic world.

I know tomato tomato, but to me in computer science it's more important to
know if they have been solved for most cases (Or alternatively considered
probably to hard in RL)

Getting to caught up in perfect solutions can be more a hindrance.

~~~
tel
I'm going to bicker about language, but that sounds more like a software
engineering mindset. Most of the most fundamental problems in computer science
have exactly that kind of mathematical nature.

Works well enough gets a paycheck, but doesn't impact the field.

