Speaking a language fluently is impressive, and speaking many languages is impressive, but ultimately, it’s not about the words. Talking is about communication. This applies as much to programming as to speaking. Switching to Spanish or Cantonese won’t help if you don’t know how to form and organize meaningful thoughts about a subject, and knowing all the syntax and semantics of C++ won’t help if you don’t know how to write organized, meaningful code. Learn the principles that apply in many languages, and the rest will follow. Don’t just learn a programming language. Learn to program.
Consider: computer science professors lecture about concepts and algorithms, then assign homework in languages they haven’t taught. Recruiters hire candidates who don’t know the languages they’ll use on the job. The very beginning of Atomic Object’s careers page says, “Atomic doesn’t ask that you know a certain language or use a certain process.” It’s not about language. It matters to professors that students grasp important ideas, not just how to write compilable code, and it matters to recruiters that new employees have the right values, technical skills, and experience, not the right list of languages.
Programming languages are still important. Picking the wrong language can make a program run too slowly, take too long to implement, or use too much memory. Some languages are easier to learn than others, some are easier to write in, some have better documentation, some are in higher demand, and some are simply more elegant.
But with all these considerations, why is it possible to get a computer science degree without mastering every nuance of at least one language? Why is it still possible to get a job without knowing more languages than the other candidates? It’s possible because picking up languages is the easy part. All the syntax, rules, and built-in functions are documented in books and online. The hard part is knowing what to do with that information.
Programming languages are built on a common conceptual foundation. Understanding this foundation makes it possible to write good code even in a new language. A programmer who remembers all the keywords and function names in every language but never learned how to organize them is not as valuable as one who can use abstraction and encapsulation, who understands time and memory tradeoffs and asymptotic complexity, and who knows ways to make code readable, robust, and maintainable.
Don’t become an expert in the intricacies of any particular language without also learning the ideas that apply universally. Some languages are widespread, some are trendy, and some even bring higher average salaries, but it’s not about picking up a popular language, or even a well-grounded, long-standing language. It’s about using the core concepts of programming to write good code no matter what the language.
There is always a tradeoff between different priorities, including performance, learning curve, and ease-of-use, so choosing and learning the languages that fit projects will always be crucial. Knowing just one language might work for a while, but there is no single best language, and even if there were, it wouldn’t last. The languages that look best now can become useless in ten years. If all goes well, computers and programming will keep advancing, and newer, better languages will supplant most of what we have now.
This tumult would be disastrous if holding a job depended on being a specialist in the right language. We’d have to guess the right one or start over again and again. Fortunately, programming skills are transferrable between languages. Computer science ideas carry over from one language to the next, and as you learn them, it gets easier to pick up new languages. Learning the broad theories of computing makes it possible to use many languages effectively.
Never feel bad for needing to look up how to iterate over an array or where to put commas and colons. Never let being new to a language make you feel like an incompetent programmer. Never feel limited to the languages you already know. Pursue projects and careers regardless of the languages they use, and always be willing and eager to try new languages. It’s not about the syntax; it’s about the concepts. Don’t just be a C++ programmer, a Lisp programmer, or a Ruby programmer. Be a good programmer.