Eh. It may have worked correctly in this particular case, but it also would have been a poor lesson in grokking big unfamiliar codebases. In my experience, hail-mary grepping for words of interest is a pretty poor strategy: if it turns up anything at all, it is usually something totally unrelated, while the code you wanted to find uses some synonym you didn't think of. Even when you are lucky enough to hit the code you're looking for, you don't have enough context to understand it.
Tracing a related input from ingestion to the point of interest is a very good strategy: it's reliable, and you pick up important context on the way.
Oh come on, "hail-mary grepping for words of interest" is my first strategy when navigating a new code base, and in 90% cases it led me to right places. If the code you wanted to find uses a synonym, you expand your search. So for example, if "shotgun" doesn't bring anything relevant, search for "weapon" to find a weapon list and learn how the shotgun is called. Running recursive greps on the codebase is a quick and effective way of finding things you need.
I do agree with the strategy in itself, what I'm arguing is that this wasn't the right one in this particular instance. External to internal or vice-versa are both valid, you just need to pick the right one or both.
In a field like programming, where the need to understand various arbitrary things at a high level is so common and important, 'grok' seems like an ideal addition to the vocabulary.
"Grok" in is original use is something more like a deep and complete understanding. Here is Heinlein's explanation from "Stranger in a Strange Land":
"Grok means to understand so thoroughly that the observer becomes a part of the observed—to merge, blend, intermarry, lose identity in group experience. It means almost everything that we mean by religion, philosophy, and science—and it means as little to us (because of our Earthling assumptions) as color means to a blind man."
In the linked-to essay, the writer ends with an incomplete understanding of the Doom code base, and therefore has not grokked it.
When Nacraile comments, "it also would have been a poor lesson in grokking big unfamiliar codebases", this appears to use "grok" as the equivalent with "come to grips with", meaning "to begin to deal with someone or something difficult or challenging in a sensible way." That also appears to be the way you use it.
But 'grok' is supposed to mean something more like understand various arbitrary things at a low and intimate level, not at a high level.
but ofcourse, the different levels of understanding are vitally important when working on code- in my experience heinlein's original definition is still preserved behind the scenes, but for practical use it seems to be used to describe the process of approaching that level of grok, with the superlative 'fully grok' I think generally being used to describe something like 'a fully ample level of understanding', which is still rarely reached for complex systems
My experience has been that "grok" as used by coders is synonymous to "understand", with the caveat that it's used to indicate in-group membership in the hacker community.
It is rarely used in the original, Heinlein sense.
I did find an example that is in line with the original Heinlein meaning; "How to Grok Web Standards" at http://alistapart.com/article/grokwebstandards uses it in the Heinlein way. My thesis is that 'grok' is often used to indicate in-group hacker membership. You'll notice that unlike the previous three, this explains the term 'grok'. This means it's not being used to indicate in-group membership.
I agree with everything you've said, and intensely dislike almost all uses of 'grok', as well as 'cromulent' and 'embiggen'. But one thing you don't mention in your comments, and that I have trouble putting my finger on, is exactly how the use of an exclusionary in-group term causes harm. What is the harm, and how is it caused? Unlike the original shibboleth, anyone can properly pronounce 'grok' if they want to prove their allegiance. What makes you resist?
I didn't mention harm. Like many ingroup/outgroup terms, it can be used to strengthen group membership and it can be used to raise a barrier between insiders and outsiders.
> When Kanye West spoke with students at my alma mater on Sunday evening, he said “I really do believe that the world can be saved through design, and everything needs to actually be ‘architected.’” In the social media frenzy that followed, a recurring response that I saw on architecture-centric sites was to snicker at West’s use of the word “architect” as a verb. For many, this was symbolic of West’s ignorance and hubris as he presumed to talk about something without knowing anything.
As that article points out, as well as the pointers I gave in my own side of the conversation, architects do say "to architect", and have done for many decades.
We of course have many terms that make it possible to distinguish between a good programmer and a non-programmer. A short list includes "closure", "garbage collection", and "mock object". These are specialist terms that convey a meaning not captured by standard English terms. While barriers to the field, they are essential barriers because the underlying concepts are meaningful.
But "grok", while it is supposed to have a meaning somehow different or deeper than "fully understand", is not actually used that way and is not an essential specialist term for the field.
This makes grok (and other words like 'frob') a meaningless barrier to entry. As I mostly work to get non-programmers (in my case, chemists) to do more programming, this makes it a barrier I dislike.
I like this style of use: "[I know how the function is defined,] But I don't grok that -- I don't have any intuition for the type signature or the desired result." (from http://stackoverflow.com/questions/13317242/what-are-paramor...). Using the word to make a distinction between formally understanding something and having a deeper intuition for it.
I agree, it's one of the nicest examples I've seen. However, "But I don't grok that" is almost synonymous with "But I don't fully understand that", is it not?
How do you think it's being used here? That is, how is it being used here differently than "come to grips with", "apprehend", "understand", or "comprehend"?
Another dimension is its use as a shibboleth. In this case, the origins from a science fiction novel that was popular in the counter-culture of the 1960s and made its way into the hacker culture of the 1970s and 1980s. Its use indicates membership in this group, even if the meaning duplicates words in common practice. Similarly, your use of cromulent indicates your alignment with a TV series.
If you mean to include that dimension as well, then you are right; using 'grok' embiggens the distinction between ingroup and outgroup in a way that those words do not.
'Grok' usually has a stronger meaning than the words/phrases you mentioned. It means to comprehend something deeply, gain intuitive and thorough understanding.
Agreed. I gave a similar definition in a parallel thread. My question is, is it being used in that sense here by Nacraile. My followup question is, is that's how it's usually used? I get the stronger sense that it indicates that one is a hacker, than that it's being used for an otherwise missing concept.
I find people usually use it to mean the point where they could modify the code and expect it to probably work. I might not really understand all the details, but I know it well enough to become part of it. Which really fits the origional definition far more than understand.
The original definition is "to understand so thoroughly that the observer becomes a part of the observed—to merge, blend, intermarry, lose identity in group experience. It means almost everything that we mean by religion, philosophy, and science—and it means as little to us (because of our Earthling assumptions) as color means to a blind man."
Your description here is nothing like the original meaning.
To use more flowery language. You merge your thoughts with those who came before allowing for synthesis, extention, or improvement. Nothing in the book suggests grocking is total understanding just the point where there ready to act. So, being able to follow the thought process of the coder(s) who came before instead of just reading the logic is a deeper understanding. Sum=54; Foreach(int x in Dalist) sum += x;
The logic is easy to follow. But WTF is 54. Until I understand why 54 is there I don't grock the code even if I understand what it does. Again I might not agree with the coder but I need to understand what they where thinking before I can change anything.
I find it interesting that you choose to extol textual aesthetics with a sentence that finishes without punctuation. It just goes to show how subjective these matters are.