3 ms·
In college, we started with high level and went low level. While I understand this provides much more instant gratification and can be more intuitive, I think
by ndesaulniers 13y ago
In college, we started with high level and went low level. While I understand this provides much more instant gratification and can be more intuitive, I think I would have preferred to start at low level (though just about every CS professor disagrees with me).
I would have liked to start with x64 assembly, then C, C++, JavaScript, Haskell.
Assembly would show 1:1 what the machine was doing.
C would give you greater appreciation for portability and low level constructs after knowing assembly.
C++ would give you greater appreciation for encapsulation, polymorphism, and inheritance after knowing C.
JavaScript would give you more appreciation for portability, garbage collection, a new object model (prototypical) and dynamic & loose types (loose types can be appreciated more by novice programmers and lead to more bugs then it's worth, though C is not exactly the strongest typed language), and intro to functional programming.
Haskell for something just entirely different (though Lisp might be a good addition here).
I guess it's hard to come up with a good curriculum because each language has it's own unique benefits. All the appreciations I mentioned could ultimately be realized going from higher to lower as well.
Usually your first language is the toughest to learn because you're trying to grok the syntax and CS concepts. Once you have the basics down, learning another language just comes down to expressing the same CS concepts in the new syntax (thus is the notion of Turing completeness).
Ultimately, software is about expression. Certain languages are better for expressing certain CS concepts than others. Pick the right right tool for the job, and don't bash other languages when you haven't sat down with them to take the time to appreciate what they're good at and why they were created. Learning constructs unique to one language will ultimately help you express yourself in every other programming language you ever use.
To answer your question, I'd say learn them all, or as many as you can in a reasonable amount of time. Always push yourself to learn more about your craft, lest you one day find yourself to be left behind in your industry.