Ah, that&#x27;s not quite what I meant by grokking a programming language. The &quot;designer&#x27;s intent&quot; bit is important. When you grok a <i>language</i>, that doesn&#x27;t (just) mean you now understand how to <i>use</i> the language; it means you now understand how to <i>extend</i> the language, or <i>update</i> the language, in a way the original designers would have done themselves if they had continued working on it.<p>To grok C and Unix, is to put yourself into a mindset where you would naturally come up with Go and Plan 9; and where e.g. C++ would seem, in comparison, ridiculous.<p>Grokking a thing doesn&#x27;t mean you have to <i>agree</i> with the mindset of its designers; it just means you have to be capable of <i>wielding</i> that mindset, because it&#x27;s the optimal mindset for understanding the thing itself.<p>The interesting thing about grokking a system is that you no longer <i>need</i> to attempt to &quot;understand&quot; the system piece-wise, because you can now <i>guess</i> what the designer would have provided for the problem you&#x27;re trying to solve, and then just blindly &quot;reach for it&quot; without having to know it exists. There are quite a few times I guessed the existence of a Unix utility without having to be told about it, simply because it &#x27;fit&#x27; the Unix philosophy to have a program with that function exist.<p>Instead of the lego analogy, I might go with IKEA: build enough of their furniture, and you don&#x27;t have to read the manuals to put together new pieces any more. When you survey the particular parts you got out of the box, you can guess pretty accurately what the manual is going to say.