At the beginning of the year, I noticed several people announcing which programming language they are going to learn this year. They follow a recommendation by Dave Thomas and Andy Hunt to learn a new programming language every year. I’ve been programming for over twenty years now, and in that time have programmed in a lot of programming languages. At first, I couldn’t come up with anything. I saw many people start trying ruby or smalltalk. Been there, haven’t completely done that. So, like many other people I’m getting (re-)acquainted with Smalltalk by programming in squeak smalltalk.
After some thought and blog-reading, I came up with two possible things to explore. I’m not so much interested in particular languages, maybe more in exploring different programming paradigms. Following discussions on e.g. the squeak mailing list on the future of CPU’s, it is obvious something is bound to change. CPU’s can hardly be made more complex than they are now (for they will be very unreliable) and can’t go much faster with regard to clock speed (barring other technologies such as light-switching). Two avenues that seem worthwile to explore are massively parallel CPU’s – CPU’s with multiple cores, and digital signal processing with FPGA’s (Field Programmable Gate Arrays).
Most popular programming languages don’t support parallellism well. I attended a tutorial on Java threads – it is so easy to create non-obvious, hardt to trace defects with them, that it is better to use them as little as possible. Patrick logan is writing about programming in Erlang:
I want to understand how to think in terms of processes being about as cheap to create as objects are in other languages.
Bill Clementson has a report about disruptive programming languages, reporting from a workshop he attended:
…the opportunity for concurrent programming to be a distruptive technology is in that many applications are either explicitly or implicitly concurrent or distributed but are poorly catered for by concurrency features (OS threads, language threads, RPC) in use today. If a language provided superior concurrency capabilities, it could displace more popular languages in specific application areas. Once the “innovator” language assumes prominence in the “niche” area, it would expand further in usage and popularity and potentially displace the more popular languages in other areas as well.
The report has an interesting comparison of reliability of the Apache webserver versus one written in Erlang. The Erlang webserver is able to handle far more concurrent connections.