14 ms·
I'd like to disagree with the title of this blog post. I did something like this in 2016, learnt Clojure, OCaml, Haskell, Go and Racket. Took Dan Grossman's ex
by marai2 10y ago
I'd like to disagree with the title of this blog post.
I did something like this in 2016, learnt Clojure, OCaml, Haskell, Go and Racket. Took Dan Grossman's excellent Coursera course on learning language fundamentals and paradigms across Ruby/ML/Racket. Though I can code basic to medium level toy programs in all these languages now I wish I had followed Dave Thomas' (of Pragmatic Programmer fame) advice of concentrating on only one language a year.
My advice would be pick only one language for 2017 and then think and code only in that language for the year (for your learning projects - of course you'll be using other language for your $DAY_JOB).
In 5 years you'll know how to use 5 tools really really well and your brain will be much better aware of which of these tools is the right tool for which kinds of problems.
- kiloreux 10y agoYou obviously did not read the whole blog post. He is talking about the importance of programming paradigms and the ideas behind programming languages that could lead to a more general understanding of new languages :) .
- marai2 10y agoI did read the blog post and what Im saying is that I think the end goal of being able to understand the different paradigms that different languages bring to your understand/repertoire - would be much better served by - not just sampling a whole bunch of languages in 2017 - but by thinking in just one paradigm a year and then going on to the next one the next year.
- lgas 10y agoI think this really depends on what your background is and what your personal expansion of "understand" is. Assuming a cold start (which would never actually be case), with your approach it would take seven years to get through eg. Assembly, C, Java, Haskell, Prolog, Factor and and J. Obviously you would have a better understanding of each paradigm and their strengths, weaknesses and tradeoffs after seven years of study than someone who tries to get through all seven in 2017. But that person will have a much better understanding of all seven paradigms in one year, whereas you will have no basis to compare the single language you've learned in that year to anything else.
- marai2 10y agooh wait - you're right. For the purposes of being able to get a more general understanding of new languages it is better to have somewhat of a (good) grasp on the main paradigms that exist out there. So my earlier comment and advice (which I still maintain) was orthogonal to the blog post.
- zengid 10y agoIts a width vs depth argument. I think If you wanted to start digging deeper in any of the languages you learned in 2016 you could do so faster than having one language to consider. For instance, you've probably noticed that Clojure borrows ideas from other languages (go channels for instance), so learning how Clojure deals with that abstraction will help you compare/contrast it with how Go's abstraction works. The more languages you know (lots of width), the more you can compare to others as you learn (gaining depth), and the faster you can assimilate new ideas as you go. Analogously, its as if while digging into one language you discover a cave-tunnel that connects you back up to another language you are familiar with. This saves you from having to dig all of the tunnels yourself because you can see how deep concepts in one language can be connected across your broad familiarity (width). IMHO, I hate approaching tasks with a rigid mindset, whether its "LEARN EVERYTHING" or "LEARN ONE THING". I think its better to just encourage yourself to investigate something because you're interested in it, and then see where it leads you. For instance, I'm digging into Clojure right now myself, and after watching a Rich Hickey talk about immutability and concurrency, I became curious about how GPU's work, and if they could be used with immutable data structures. Now somehow I've gotten into learning about OpenCL and CUDA and am having my mind blown about the possibilities of using a GPU as a massively parallel processor (concurrency isn't possible on GPU's though). If I were strict, I would've blocked myself from diverging from the Clojure path, and I would not have learned anything about the wonders of the emerging field of Heterogeneous Computing Languages.