I recently had a conversation with a friend who is currently job hunting for a programming job. He is a smart guy who holds a PhD in physics, has spent a good number of years in research and – as part of the life of a modern physicist – had to write code as part of his day job already. But he said something that got me thinking: he said that once you master the basic concepts of programming, you can program in just about any language you’re put in front of.
I strongly disagree. I feel that in many ways, Ludwig Wittgenstein’s “The limits of my language mean the limits of my world.” holds even more true for programming languages than it holds for natural languages. Of course, given a good enough introduction to a language and some time, you can write programs in many languages – provided they’re similar enough to what you know already. But to reach a certain level of mastery in any language, to be able to write idiomatic code, you have to immerse yourself quite deeply and practice quite a bit. To my mind, most people take a sizable number of years to reach that level of expertise – and not recognizing that indicates that this level hasn’t been attained yet.
To be a good programmer, you should be able to know your language inside out. Can you give a list of shortcomings of your language that goes beyond “It sucks?” Do you understand where the limits of your language lie, what design decisions were made with what purpose in mind?
And to be an excellent programmer, in how many different languages have you attained that status? In how many different types of languages? If you’re given a specific problem, how do you decide which language is the appropriate tool for the job?