For several years now, I’ve had a computer science study programme aimed at learning all the major fields of computer science to approximately the level of a first year graduate student in the field. As part of this project, I’ve decided that 2007 will be the year of programming languages. During the year I intend to learn six (mostly) conceptually interesting languages(*), spanning as wide a range of programming models as I can manage. I’ve also picked a book from which to learn each language. If anyone can suggest any more interesting languages or better books, I’d be very open to suggestions.
The six languages (and six books) I’ve chosen are:
Ruby | |
---|---|
I want to learn Ruby for purely pragmatic reasons as it seems to have built up a lot of support amongst people producing innovative web applications, which is just the sort of thing that I do. I intend to use Programming Ruby: The Pragmatic Programmer’s Guide by Thomas, Fowler and Hunt, mostly because I really enjoyed reading Thomas and Hunt’s The Pragmatic Programmer. An alternative is Python but for reasons that I can’t articulate that seems like a less appealing prospect. | |
Smalltalk | |
Smalltalk is perhaps the purest and most elegant of the object-oriented languages, and I’ve also heard a lot of intriguing things about its development environment. I used to think that I was pretty good at object-oriented design but recently I’ve realised that I’m only really an amateur. It’s a programming paradigm that I really want to master. The book I’ve chosen, Liu’s Smalltalk, Objects and Design, sounds like it has a strong emphasis on design. | |
Haskell | |
I’ve always wanted to learn functional programming properly but I’ve only ever written toy programs in ML back in my Cambridge days. Purely functional languages are going to become increasingly important as we move deeper into the era of multicore computers. Haskell is apparently the nicest functional language and once again I’ve chosen a book that uses the language as a medium for teaching the deep principles of the programming paradigm: Bird and Wadler’s Introduction to Functional Programming | |
Erlang | |
Another approach to exploiting extremely multicored computers is writing explicitly concurrent programs with large numbers of communicating threads. Erlang is a language with primitives for threading and message passing, and it’s somewhat famously been used in large production systems for telecommunications applications. In this case the book I’ve chosen, Concurrent Programming in Erlang by Armstrong, Virding, Wilkstrom and Williams, is simply the only one I could find on the language. Possible alternative: OCCAM. | |
Prolog | |
I’ve never learned logic programming either. In this field, Prolog seems to be the most popular candidate language. I remember not making much sense of this during my Diploma, but Programming Language Pragmatics has helped a lot. Bratko’s Prolog Programming for Artificial Intelligence looks like one of the best books on the language. I’m not sure if there are any more modern logic languages that might be more worth learning. I’ll have to try to find out. | |
LISP | |
Finally, LISP, an ancient language that has recently come back into fashion (amongst ideologues at least). LISP has the reputation of being a language that causes almost religious epiphanies and flashes of enlightenment in programmers who learn it, which sounds rather fun. To balance the fact that it’s the most abstract language in my list, I’ve chosen a book explicitly focused on applications: Seibel’s Practical Common LISP |
(*) Conceptually challenging computer languages, clearly. If I were choosing natural languages to master I’d probably pick Akkadian, Egyptian, Greek, Latin, Arabic and Persian in my first round.
|
|
Perl is even less appealing than Python: I don't really see that it has many (any?) advantages over PHP, which I've used extensively. It's also not very conceptually different to any number of other imperative/procedural languages that I already know (or once knew and have since forgotten...). I'll certainly take a look at your site. Thanks for the link. |
|
Given the presence of Smalltalk and Haskell in the list, LISP seems almost redundant. How about something truly different like LabVIEW? It's actually pretty nice and very well suited to programming parallel threads. |
I'm not sure about SmallTalk, but then it's probably my memories of Java rubbing off on it..
What about Perl? Perl 6 will be taking off next year ..I think.
Finally, I've been working through Seibel after using David Cooper's Basic Lisp Techniques, I've been keeping notes (for a future course/installation (?)) called LFL (Lisp as a Foreign Language) or TLFL).. notes are the equivalent of a screen of emacs (or actually a screen-dump of emacs)..
You can find it @ http://antiparanoid.blogspot.com/2006/11/why-biscuits.html
I reckon that anyone who knows one programming language can often work out what's going on w/ a new language just from studying the steps of an earlier learner (minus all the spoken or written explanation)..
Give it a look
K