We All Suck at Programming 5
If Ruby is a step up from Java in productivity and power, and Smalltalk is a step up from Ruby, then we should all feel a little ashamed when we read the following from The Early History of Smalltalk by Alan Kay:
In January 1976, I took the whole group to Pajaro Dunes for a three day offsite to bring up the issues and try to reset the compass. It was called "Let's Burn Our Disk Packs." There were no shouting matches, the group liked (I would go so far to say: loved) each other too much for that. But we were troubled. I used the old aphorism that "no biological organism can live in its own waste products" to please for a really fresh start: a hw-sw system very different from the ALTO and Smalltalk, One thing we all did agree on was that the current Smalltalk's power did not match our various levels of aspiration. I thought we needed something different, as I did not see how OOP by itself was going to solve our end-user problems. Others, particularly some of the grad students, really wanted a better Smalltalk that was faster and could be used for bigger problems. I think Dan felt that a better Smalltalk could be the vehicle for the different system I wanted, but could not describe clearly.
I know that they went on to implement Smalltalk-76 as the follow-up to this, and that what we use today is a closer ancestor to that then the Smalltalk-72 that he is discussing here, but it was really just anther evolution. How is it that we haven't had a revolutionary advance in programming languages in the 30 years since then?
I don't have a solution, but I think that all too often we forget that there's even a problem to be solved.
Trackbacks
Use the following link to trackback from your own site:
http://kurt.karmalab.org/trackbacks?article_id=we-all-suck-at-programming&day=14&month=05&year=2007
-
Kurt Schrader posted We All Suck at Programming yesterday, asking: How is it that we haven’t had a revolutionary advance in programming languages in the 30 years since [the development of Smalltalk-76]? While the name Smalltalk-76 does indic...
I agree and this is something I evangelize for a long time and even in my book: languages have very much stagnated, there's no "revolution" in decades. What we are doing today is just building on top of existing things, just copy-cat stuff. Where are the Computer Science Bachelors? But, easy. This is not supposed to start a flame-war and no, Java or C# are hardly "revolutionary". Maybe when we shift paradigms for, say, quantum computing, we will need completely different algorithms and ways of doing programming.
It's simple, and again, Alan Kay said it best. He basically said we're in the pop age of programming where programming itself is spreading faster than education, hence the complete lack of progress in 30 years.
It's still happening today, bad/new programmers are being created at ever expanding rates far faster than bad/new programmers gaining enough experience and education to become good programmers. It's the tragedy of the commons.
Ramon,
Interesting thought... but of course if there are just as many good programmers today as there were 30 years ago, shouldn't there still be progress?
Unless somehow the fact that good programmers are now in the minority somehow hampers efforts to revolutionize software.
I think that starting with OOP you're able to build up your own domain language adhering to the rules of your favorite programming language.
Why didn't natural or written language evolve to something with which we can express our ideas better than we do now? Because there is abstraction. With abstraction you can build domain languages. Why do you need more?
Not enough programmers have studied "traditional" computer science. Many are self-learnt, and many courses today don't cover programming paradigms in much detail. Concepts from the declarative and functional programming paradigms, for example, are little used and known despite being extremely effective for certain kinds of tasks. Everyone should learn a functional programming language (e.g. ML or Miranda), LISP and/or Prolog in additional to "everyday" Java/C++! Even if you only code in Java or C++, programmers can greatly benefit from applying concepts from and paradigms to write more efficient code. Unfortunately, this can also mean that your code is so "smart" that others that have not been exposes to other progamming paradigms can have a hard time figuring our how it works.