A friend of mine asked me what languages he should learn to get re-started/refreshed in programming.
I’ve listed my opinions here, partly so I’ll remember what I recommended in the past, partly so that others can learn too, and partly so that I can learn from others’ opinions.
Here we go:
I recommend Python, because the more fun and interesting companies will respect you for it. There is a lot of demand for Java and C#, but most jobs there are for vanilla office-work programming.
List of good languages:
- Python: probably the most practical language: an easy syntax, rich libraries and support, huge dev community–you can do most real work with it.
- Ruby: the Ruby community is fanatical, and the syntax is probably the most beautiful. It has some features that are nicer than Python, but it is slower, with fewer libraries and support. Still, you can do most of the real work that Python does, just as easily. It’s just that more people use Python.
- C++: We all hate it, but there is so much code in it and systems-level code probably still requires it. So many good organizational features, bare-metal power, libraries for everything. But, the standard libraries are small, the syntax is a mess, and it’s multi-paradigm model is usually confusing. Bugs per second and complexity of bugs are both highest here.
These “second languages” are off the beaten path and if you can get real stuff done with them (beyond class assignments), they should change the way you think about designing, structuring, and writing software. For the better.
- Scheme/Common Lisp: Both are dialects of the original LISP. Scheme is considered more “pure” and clean, but Common Lisp has more libraries and “features” for getting real work done.
- OCaml : ML is the other classic language of programming language theorists (LISP is the first), and OCaml is the modern dialect. Possibly more capable of real work than LISP, it’s main defects are a small library support and lack of real parallelism support.
- Haskell : A great parallel language.
- Erlang : I’m told this is good too. Used by CouchDB and Ericsson telephone switches.
- C: unless you are contributing to GNU or writing embedded systems (like the cool arduino things).
- Objective C: unless you are writing Mac or iPhone apps
- Java: unless you are writing Android apps or want to be a corporate programmer.
I’m told that C# is a good language, and in some ways, it’s what Java should have been. But it’s reach is a bit small, given that it’s Windows-only. Still, the Windows app market is hungry, and it might be a good second language if you’ve got a good idea.
Links to others’ opinions on languages: (updated and appended as appropriate)
Etymon: Worthwhile languages (from 2004)