When people ask me how many programming languages I know, I am usually hesitant and say something like "Many." and then tell them the projects I have worked on and the languages they are written in. My CV lists eight languages that I am familiar with. But at what point can you say you
know a programming language?
If somebody says they know C, how much can you trust this statement? C has so many pelicularities and as soon as you start to dig into something a little deeper, things get complicated very fast (link1, link2, link3, link4, link5).
If somebody says they know Java, for me, this raises more questions than it answers. Have they built a desktop GUI, developed mobile apps? Have they worked with threads, developed web applications, distributed applications? Have they used reflection or aspect-oriented programming? These are all things that can be done in Java.
knowing a language mean
I can read code that others have written in that language. If I am nasty, and put a little time and effort into it, I am sure you can't read the code I produce or get a totally wrong impression of what it does (link). Does
I know how to get my programs past the compiler?. If this is the case, I'd say you can learn any language on a lazy sunday afternoon and put it in your CV.
You might say that years of experience matters the most. But what does years of experience mean exacty? If you say you have "2 years" of Python experience, did you use Python literally 730 days in a row? Or did you use it once every week, when you needed a quick script, to delete some files? Or did you build a website (2 years ago) using a Python framework where you copied most of the code from the tutorials?
When can you say you know a language? Or are we asking the wrong question?