I usually find it difficult to motivate myself to learn a new programming language unless I need it for work or a hobby project. So when exercism launched its #12in23 (learn 12 languages in 2023), I decided to give it a shot. Because if I can’t motivate myself, maybe someone else can!
But why bother learning another programming language? Some of the standard responses you’ll find to this question are:
- It exposes you to new ways of thinking.
- Languages look good on a resume.
- It’s good to keep up with what’s new.
While these are valid points, they’re much less convincing when thinking about learning a language I have no immediate use for. I can only keep so much in my brain. If I learn a new programming language but don’t use it, I’ll just forget it, and it will have been a waste of time.
And that’s only considering modern languages. Surely there’s no reason to learn old languages, right?
Improve your problem-solving skills.
Since we are thinking about learning a new programming language for its own sake, then only the first bullet is relevant: it exposes you to new ways of thinking.
There are some interesting theories about the relationship between language and thought in general. Although there’s no definitive conclusion that thought requires language, it’s pretty clear that thought is heavily influenced by language — even the thought within a person’s head. And since language is how thought is conveyed from one person to another (or one person to a computer), then greater fluency in language is beneficial — not just for writing programs, but also for thinking about how to do it.
This is just as applicable to programming languages as it is to spoken languages. Familiarity with a wide array of terminology and concepts will influence how you model and solve problems in your head.
This means that not only is it good to learn a language you apparently have no use for, but old languages are also fair game! And besides, learning an old language gives you a taste of how far we’ve come and how much hasn’t changed at the same time. It may even give you a greater appreciation for the good parts of the language you use day to day.
Pick a language.
So how do you decide what to learn? For maximum effect, start with something way outside your current understanding. If you’ve always used object-oriented languages, try a functional language. If you’ve only ever used high-level languages, try an assembly language — maybe not x86, but programming microcontrollers in assembly is fun!
Or look for a language that excels in a particular area, like concurrency, static typing, etc. Unfortunately, no language is awesome at everything or else we would all just use that.
If you’re feeling masochistic, pick a language with a bad reputation. Figure out for yourself what makes it so awful. Because knowing what not to do can be as valuable as knowing what to do.
Learning a new language should be fun. Removing the requirement that it be immediately useful takes away a lot of the pressure. And don’t feel like you need to master the language to gain anything. Once you have a few languages under your belt, it gets easier to recognize how similar they are, and you can focus on extracting unfamiliar concepts.