I'm looking to broaden my development repertoire. Simply, if you had to pick 3-4 languages to learn that offered the most diverse variety in styles and thought processes, what would those languages be?
closed as not constructive by Aaronaught, Walter, Mark Trapp Jul 2 '11 at 8:20
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or specific expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, see the FAQ for guidance.
|
This is a very tough call, but I would pick: a) Haskell : Functional, Strongly Typed, Lazy Evaluation - opens your mind to a lot of things other languages do not. b) Python : An amazing object oriented, scripting language. Easy to "Get things done". Has now become my language of choice for anything that does not require super speed. c) C: Teaches one to think close to the machine. Word align your structs, handle your own function pointers, pass around (void *)'s in your generic libraries, and know what writing platform portable code is all about. d) Lisp: Learn to write code that writes code. Make use of its powerful macro system. Also, learn to program into your problem. The close miss here would be JavaScript. Very dynamic, very functional, very useful, but knowing these four should make learning JavaScript easy - C syntax, Python like coding style, Lisp like lambda-functions-everywhere. I really don't think any of the others (save, maybe Ruby) are even worth knowing, except when you are forced to program in that language. C++ C#, and Java, are almost C, with an object oriented paradigm - learning Python well should teach you this. Prolog is of course very different. But I think knowing Lisp and Haskell should enable you to write your own logic and data driven programs. P.S. These are the four languages I know and use on a regular basis too. I learnt them (learning them) in the order c), b), a), and d). |
|||||||||
|
|
Haskell / C++ / LISP / Perl ... may Gawd help you with this one ... |
|||||||||||||||||
|
|
Some really good answers so far. I'd highly recommend checking out the book "Seven Languages in Seven Weeks" by Bruce Tate from Pragmatic Programmers. He goes through 7 different languages (Ruby, Io, Prolog, Clojure, Erlang, Haskell and Scala). I've been working through it myself and it gives a great intro to each language and gives you a chance to explore different programming paradigms between OO, Prototype, Declarative, Functional and a couple hybrids. |
|||||||||||||
|
|
A hard call, but my personal selection would be:
The choices within the categories are because they offer the most distinctive experience of the styles given within their class. Not because they are best in their class, just furthest in to them for experience purposes. I would also recommend a Lisp/Scheme, and an assembler of some sorts. |
|||||||||||||||||||||
|
hum... I've left out any static, class-based, OOP like Java, C++ or C#... It's an important category; but I'd gladly trade it for any of the mentioned. Well, not exactly, I really hate JavaScript and really like C++; but the hard lessons of the mistakes in the history of JS are really valuable. |
|||||||||||||
|
|
Erlang (or Lisp) |
||||
|
|
|
I would choose Assembly Language, Haskell and Prolog for the reasons already stated and add Eiffel (great OO language) and SQL (if that counts as a programming language). |
||||
|
|
|
I will go reading this book: Seven Languages in Seven Weeks, and then I will see which 3 or 4 languages from those I want to learn better :). |
||||
|
|
|
This is a problem, but I'm going to jump on the OP's comment about broadening experience, and assume that the OP is familiar with mainstream-style programming languages already (with C-style syntax and OO). Also, I'm only going to include languages I've been exposed to (which leaves out the excellent concurrent language suggestions). Common Lisp is a surprisingly useful language. The fact that programs are written in parse-tree format allows a great deal of flexibility. Make sure you learn to use macros, which are nothing like C-style macros. Haskell is good for pure functionality and a strict type system. Prolog is a decent language, and a different paradigm. (Personally, I don't like it, but I certainly didn't waste the time I spent learning it.) Forth is an unusual programming language, fun to play with and instructive in how a language can be built. There are other languages I'd like to list, had I room and experience with them. Smalltalk and Erlang sound like excellent choices, but I've never done anything with either of them. Tcl is unusual, although I hated the way it made my brain feel. Assembler is good for giving a feel as to what a computer is really doing, although I hate x86 for its layered-on complexity and would prefer to use another processor, if only in simulation (the ones I've used were IBM 370, Control Data 6x00 and follow-ons, Z80, Knuth's MIX, 6809, and a little 68000). |
||||
|
|
|
Here's my take, drawn from experience of things that have progressively 'stretched' (if not blown) my mind.
That's not 3-4, sorry :) |
||||
|
|
|
|||||
|
|
I'd vote for:
|
||||
|
|
That's five languages, unfortunately, so I've broken your 3-4 level without even having touched on learning a Lisp or a Forth to get extreme flexibility, homoiconity, etc. from two radically different directions (extreme high-level and extreme low-level respectively). You may want to boost your number a bit there. ;) |
||||
|
|
|
If forced to limit myself to four, I'd go for:
Other options that would be very close to making the top 4 list:
|
||||
|
|
|
Smalltalk: true object oriented. |
||||
|
|
|
C - pretty assembly LISP - lambdas, recursion Ruby - scripting, metaprogramming Haskell - mathematics |
||||
|
|