3 ms·
Ask HN: Why should I learn a new programming language?
I'm a college student and am familiar with all the basics: Python, Java, C/C++, HTML/CSS, JavaScript, PHP, some Database systems. I'm currently teaching myself Go and Clojure currently: Go because I think its concurrency model is intriguing and Clojure because I've heard about it being used in industry, it'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'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.
Basically, I know I want to learn more languages and skills, but they don't always seem practical or relevant to me personally. What are your opinions? Thanks so much for any feedback!
- jdeisenberg 12y ago1) 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 12y agoThe 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 12y agoFor 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 12y agoThanks 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!
- nostrademons 12y agoRecommendation algorithms. Computer graphics. High-performance servers.
- charliefg 12y agoOne 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.
- raspasov 12y agoI 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).