I remember reading Kerighan and Pike’s Unix programming book many years ago – that is how I learnt my C and Unix programming at Columbia when I enrolled for an Operating SYstems course in my Masters without the basic prerequisite programming knowledge. Excertps from a Linux Journal interview:
There are only two real problems in computing: computers are too hard to use and too hard to program. We’ve made enormous progress on both of these over the past fifty years, but they are still the real problems. And I predict they still will be problems 50 years from now. Of course, we will be using machines far more powerful than today’s, and our languages undoubtedly will be more expressive. But we will be undertaking far more complicated tasks, so the progress will not be completely evident.
I expect that much of the real progress will be in mechanization: getting the machine to do more of the work for us. There are many examples today–compilers, parser-generators, application-specific languages, wizards, interface builders–all of which create code for us more easily than we could do it manually. This will keep getting better: as we understand some area so well that it becomes almost mechanical to program for it, we will mechanize the process. And, of course, the level of language will continue to rise, as languages become more declarative (“do what I want”, rather than “do these particular steps”) and as efficiency is less of a concern for any particular aspect of a computation.
I’m less sure what will happen on the “easier to use” side, however. Here the trend for the past 10 or 15 years has been unsatisfactory. Computers are hard to use, even with ostensibly friendly GUIs and assistants and the like. This is a real problem, because computers are pervasive, and more and more all of us have to deal with them in all kinds of settings, some critical (think of flying a plane, where the “blue screen of death” takes on a whole new meaning). We simply have to make better interfaces to machines.