Learn Programming Models, Not Programming Languages
It’s unlikely that we’ll see an end to the holy war about which programming languages new programmers should learn first.
Pragmatically speaking, it’s probably Python or JavaScript. Both languages have community support, rich library ecosystems, and are easily available on browser-based editors like Replit. You can fire up an environment and start running code in minutes. This is by far a much better learning environment than having to toy with import statements and compiling issues.
But after you can read in input, write loops, and do something interesting, what next?
My advice: learn programming models, not programming languages.
I’m afraid it’s a bit naive to be stuck to one tool or ecosystem. Especially if you’re a student. As a student, it’s okay to have mediocre results. Your primary goal is to learn things, not deliver amazing results.
As I’m further along my career as a developer and engineer, I’ve found the most useful things I’ve learned from my courses were not the ins-and-outs of Python or C. It was the mental models the languages helped me build up. And I think a failure of lots of blogs/coursework/videos is that they fail to emphasize what exactly those models are.
We live in a wonderfully rich environment where programming languages have borrowed the good ideas from their ancestors and now support multiple paradigms. It also means that the lines between these paradigms are blurred. And if we don’t stress what these paradigms are and where and how they evolved, students will struggle to build up this understanding themselves.
So, in no comprehensive fashion, here is a list of programming models that I think beginner and novice programmers need to be aware of:
- Imperative Programming
- Hardware Description Languages (VHDL, Verilog)
- Memory Management
- Functional Programming
- Object-Oriented Programming
- Concurrency/Parallelism
There is a lot that can be said about every model here. And I’m far from being an expert on any one of these topics.
Instead, I hope you Google around and take a look at the linked references and resources. They’ll do a much better job of explaining the concepts.
I assure you, you’ll be a much better programmer by learning multiple paradigms. I wish you more than luck in your journey.