

Ask HN: Why should I learn a new programming language? - chrisshroba

I&#x27;m a college student and am familiar with all the basics: Python, Java, C&#x2F;C++, HTML&#x2F;CSS, JavaScript, PHP, some Database systems.  I&#x27;m currently teaching myself Go and Clojure currently: Go because I think its concurrency model is intriguing and Clojure because I&#x27;ve heard about it being used in industry, it&#x27;s functional which seems fun, and it runs in the JVM which means I can use my Java knowledge to help me.  But sometimes I ask myself what the point is for learning these languages.  For awhile, any of my personal projects will probably be small enough that performance will be roughly equivalent no matter what language I use.  I love backend web dev, and I guess I&#x27;m just struggling to see when I should use Java over Python over Go over Clojure over some completely different language like Erlang or Scala.<p>Basically, I know I want to learn more languages and skills, but they don&#x27;t always seem practical or relevant to me personally.  What are your opinions?  Thanks so much for any feedback!
======
raspasov
I am going to semi-quote Rich Hickey (the creator of Clojure): You can do
everything in any language, it's about what the language makes idiomatic.

So from a very utilitarian perspective, language doesn't matter. However,
that's like saying "I can use a square peg for a round hole, just give me a
sledge hammer".

Clojure, for example, makes concurrency an idiomatic part of the language. In
Java, C# or most other mutable OOP languages, that's very much not the case.
However, if you seek the utmost concurrency performance on the JVM (and you
know how to do it correctly), Java might be a good option for you.

So it really depends on what your problem domain is. From my experience,
application backend web dev is a perfect fit for Clojure with current hardware
since you're most likely utilizing multiple threads in one process. Erlang is
also a good language to explore, especially OTP and the way it handles
distributed concurrency (the "let it fail" model).

------
jdeisenberg
1) You never know what you'll need at a later date. When in CS, I learned
about base 64 encoding and filed it in the "clever but not useful" category
until ten years later when it was just the thing I needed for a program I was
writing.

2) Learning something new and unfamiliar will at the very least expand your
horizons, which rarely hurts.

~~~
dalke
The OP wants to learn "more languages and skills". Of all the many things
which are new and unfamiliar, why another programming language, instead of
acquiring some other skill?

Personally, I'm with nostrademons. I learned a bit of Prolog and APL, but
learning how to write parsers and use tools like ANTLR and PLY has been more
useful.

------
nostrademons
For someone in your position, don't. Learn a new _problem domain_ \- geo,
information retrieval, webapps, compilers, any number of other verticals. And
then really go in-depth with it and write programs. That will teach you a lot
more about how and why to use programming languages than learning another
programming language.

~~~
chrisshroba
Thanks so much for the comment! Can you suggest some other interesting problem
domains to start researching? I think lately I've been so fascinated by web
programming that I've stopped learning other areas, but I realize I should
diversify my domains of knowledge. Thanks!

~~~
charliefg
One thing I find wonderful about any of the free operating systems (not sure
if you're running one) is the entire stack is there to explore on every level.
One thing I find enjoyable if I'm looking for something to do is target a
subsystem of Linux and drill down.

