Hacker News new | ask | show | jobs
by ekr 2953 days ago
There's much more to programming/software engineering/software craftsmanship than just the language. Firstly, the majority of the languages used in the industry really only have superficial differences, they are all implementing the same OOP semantics, with minor differences and are mostly isomorphic to each other up to some syntactic sugar.

To really gain some knowledge out of learning a new language you should ideally cross boundaries to a new paradigm. The most commonly cited example now is Haskell, which is a fairly state-of-the-art language in terms of PLT research, and is a great illustration of the functional paradigm, due to its purity. The consensus among haskellers is that the code is much more concise + higher-level (case in point Xmonad being roughly 1/10th of the equivalent C software packages), much more type-safe and also easier to refactor etc. IMO, after I became productive in Haskell, programming in other languages seemed a bit like writing assembly (there's nothing wrong with assembly, in fact, optimising code down to cpu cycles was a favorite pastime of mine some time ago). Also, the boilerplate is much less significant compared to most other languages. (Case in point, again do the recent research in generics, GHC can automatically derive instances for various type classes. For instance, the most popular JSON package, aeson has the ability to automatically generate ToJson/FromJson classer for your types with no user code).

One downside of Haskell is that it may have a steeper learning curve, to really master it. Most of the reading will be from research papers and functional programming journals, but all this learning really does translate into a skill that pays off.

So my personal advice: if you really want to learn a new language, you should go with a different paradigm, e.g. Haskell if you're new to functional programming. But I would suggest instead just building stuff, and if you notice that your implementations are pushing your current language to its limits, see how other languages fare.

But IMHO, if you want to grow as a software engineer, you should just build stuff, build an operating system, build a compiler, build a database, build a web server, a game engine etc. You will cover far more theory and the learn more skills than just learning a new syntactic sugar.

1 comments

>"The most commonly cited example now is Haskell, which is a fairly state-of-the-art language in terms of PLT research, and is a great illustration of the functional paradigm, due to its purity."

What is PLT? I didn't recognize this acronym and it was too general to Google. Thanks.

programming language theory