In this speech by Richard Hamming, he says

In summary, I claim that some of the reasons why so many people who have greatness within their grasp don't succeed are: they don't work on important problems,...

That set me thinking... I do want to become great. I am a software developer. One way I can become great is by doing what Hamming says: working on some important problems in my field.

So here's my question... What are the important problems in the field of software development right now?

EDIT: By the way, please do read the article. Its excellent.


Moving to parallel processing in multi core environments


Natural Language Processing.

Natural language processing (NLP) is a field of computer science concerned with the interactions between computers and human (natural) languages.

If computer wants to take over human tasks some day, it first needs to communicate with us in our language, instead of relying on programmers. NLP also relates to searching.


Unfortunately, as I see it, the main problem with the software engineering field is a more general problem of human nature. Ironically for a field that relies so much on logic, we are such slaves to fashion, we fail to perceive (or refuse to acknowledge) the special cases, and with disastrous consequence.

Case in point: 99 times out of 100 a full stack web framework may be warranted, and of course they are all the rage since RoR. But all the functionality comes at a cost: performance. Still though, I've seen companies attempt to use a full stack framework for clients including some of the most heavily visited websites in the world. I got to profile 2 such applications shortly before they were to go live, and there were such performance issues they could barely handle 10 requests a second, whereas under load they were going to need to handle 100 or even 1000 times that number. Profiling revealed that 10's if not 100's of thousands of function calls were being made to render the home pages for these applications, and 95+% of those calls were framework specific. Long story short, accounts were lost, and people lost their jobs.

The only solution I can currently conceive to this problem is, as with physicians, some sort of certification or licensing. This way, not just any mediocre developer with "Senior" at the beginning of his title because he has 10 years of experience, is going to be able to as easily overrule the certified/licensed professional. (EDIT) I don't mean something like Java certification either; rather, something that for instance the ACM would admininister.

I applaud your desire to be great. Be prepared along the way to be considered a crackpot. If you are not generating lots of resistance, you either aren't trying hard enough, or just don't have the raw material to be truly great.


You need to work on important 'real world' problems, not just software dev. problems. Software industry is not that large in itself to create the kind of greatness you seem to be refering to. Software development should be thought of as a 'tool' to solve problems in a field, it shouldn't be considered your 'field' in itself in my opinion.

Some fields that are set out to be big, and certainly have some real problems which you could work on.

  • Genetics.
  • Space Research
  • Medical Industry
  • Military
  • Agriculture
  • Education

These are just some fields that haven't been impacted as much as they could/should have been with software development.


Biggest problem/challenge: delivering bug free software.

Anything you can do to help that cause has the potential to make you great/famous.


Wouldn't it be more efficient and to the point to ask "what big problem of the current world (real world problem) a software could resolve" ?

I think that's what he meant by "important problems", not software developpement specific problems but more general problems a software can resolve.


The important problems are the same as they have always have been:

  • war
  • peace
  • hate
  • love
  • waste
  • hunger
  • health
  • illness
  • environmental factors

the challenge is to apply your skills to those not to be famous just in the narrow world of software (e.g. Where would software be without Donald Knuth but who in the general population knows who he is?) but to do something that makes the world a better place. The solution might not even be "in" software but maybe bringing the thinking processes you have learned from software to bear on a non-software problem in a way a non-programmer would not think of.

But if you write some some code that solves one of those problems you could be great (maybe).


Model Checking, according to 2007 Turing Awards. It's a way of programming with mathematical accuracy.

In the field of logic in computer science, model checking refers to the following problem: Given a simplified model of a system, test automatically whether this model meets a given specification. Typically, the systems one has in mind are hardware or software systems, and the specification contains safety requirements such as the absence of deadlocks and similar critical states that can cause the system to crash.


I think some of the largest and most important issues right now include network security, parallel processing, cloud computing, and debugging. A lot of interesting work is being done with omniscient debuggers and similar tools that can help programmers write more effective code.


It continually astounds me that software is allowed to be as crap as it is. We call it Engineering, but seriously, it's very rarely anything like engineering. Where are the standards enforced by law? Where are the certifications (do NOT reply with, "Microsoft will certify you.")?

If you want to be great, I suggest you convince governments to take a hard line on software quality.

The worst thing is that we have conditioned our clients - the end user - to accept a very low standard. Everyone expects software to be full of bugs. What a load of rubbish.


Frankly, apart from AI and the challenge to develop software that is as aware of our surroundings as we are and can interact with it, there aren't many big problems IMO. Software is mostly a tool that helps solve problems outside its scope and thus Software Engineers just work on making things go faster or just different. If you want to do something really important, choose a second field, because you aren't going to write software that makes cars fly. ;-)


Solving P vs NP.

Followed at some distance by NLP.