When do you know a language?
One of my teacher used to say that we don’t know Matlab because we don’t know that there is a
guide command which does what it does. Yesterday, I’ve created my Haskellers profile and I saw that there are a lot of topics in Haskell about which I know almost nothing. This made me write this post, trying to get the answer to the following question: «How much should you know about one language to be certain that you can say you know the language?».
There are a lot of levels of knowing a language. The basic one is to know only the syntax. Yet, I don’t know if knowing one language’s syntax and special constructs and being able to decipher the basic examples written in that language count as knowing it. I might say that I know Brainfuck or Piet very well, although I’ve never written a single piece of code in these languages by myself (though I did it with some tools and genetic programming).
Next, one can say that one language is known if you know about some of the obscuring constructs it has. Knowing about C’s
volatile may help you on one task or the other but this surely depend on what type of task you are working on. However, from this level onwards, each person may say that he knows a language, if he understand more than 50% of the code snippets written in that language.
The next level is represented by the ability to juggle with all the libraries a language has. For example, I know a guy who knows almost every Python module. Not to the very last detail but his knowledge is enough to know when one module is better than the other at the same task.
Lastly, there are only two people that I know of (and only on the internet) who know not only every library a language uses but also any other related tool. For Haskell, this include Cabal, darcs and Hackage internals, though the list is not limited to them.
Now, the question remains. Rephrased it sounds like this: «How much must one know from one programming language to be able to put that language in a CV?»
PS: just remembered a quote from Perlis, in Epigrams on Programming: «A language that doesn’t affect the way you think about programming, is not worth knowing». According to it, this means that one can say he knows a language when his thinking about programming is changed?
PPS: written with another testing version of HaCoTeB.