I think the measures about knowing what's in the manual apply only if you spend time using the language every day, or if it's the only language you use, or if you've written a lot of code. For me what's important is have you learned how to think in the language? This outcome is hard to measure; read Paul Graham's essay on Beating The Averages. Do you think in Blub? For the old people on the forum, can you write FORTRAN in any language?
A good proxy for measing whether you can thinkin the language is do you understand what the best programmers are writing? Does it seem natural?
Ray Bradbury once advised aspiring writers of fiction to write 1000 words a day six days a week, and after they've written a million words they might start to know something about their craft. This is good advice. And operationally, I find something similar works for programming languages. Across a half dozen languages that I currently know well or once knew well, it's been pretty consistent for me that
- After writing 100 lines I am continually looking things up in the manual and don't really know what I am doing.
- After writing 1,000 lines I use the manual occasionally and am starting to learn how to think in the language.
- After writing 10,000 lines I am about as good as I'm going to get without making special efforts.
- After writing 25,000 lines I probably will not need the manual again.
It's also true that
- To learn to write 100 lines I had to read 100 to 1,000 lines that someone else wrote.
- For the first 1,000 lines I write it is good for me to read 2,000 lines someone else wrote. For the next 1,000 lines it is good for me to read 1,000 lines someone else wrote.
- After I've written 5,000 lines I learn the most by reading code written by world experts or by people who designed the language and understand what is there. I no longer have much to learn by reading just any program.
On the other hand, I have less consistent experience over when I stop needing the manual. It's particularly difficult for me when two languages are very similar; I will never stop needing the ksh manual to tell me what is different from sh or bash, and I will never stop needing the Haskell manual to tell me what is different from Standard ML (though the need grows less with each additional 1,000 lines of Haskell that I write). I also find it interesting that while I have written over 35,000 lines of Lua code, and I will never need the manual again for a language question, I have to look up libraries and API functions almost every time I write something longer than 500 lines. (I've written a lot of short Lua programs and a couple of long ones.)