4 ms·
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, ha
by Nacraile 11y ago
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.
- jrcii 11y agoIt's not your fault but I wish the word "grok" would disappear.
- qnaal 11y agoIn 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.
- dalke 11y ago"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.
- qnaal 11y ago> 'high level' means less than 'low level' dammit 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
- dalke 11y agoMy 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. For example, http://imranontech.com/2007/01/24/using-fizzbuzz-to-find-developers-who-grok-coding/ http://imranontech.com/2007/01/24/using-fizzbuzz-to-find-dev... is titled "Using FizzBuzz to Find Developers who Grok Coding", but at best FizzBuzz can tell if someone had a basic understanding of coding. At https://netbeans.org/bugzilla/show_bug.cgi?id=32241 https://netbeans.org/bugzilla/show_bug.cgi?id=32241 you can read "Code completion does not grok implicit constructors". Here too it's used synonymously with 'understand'. Ditto with "The one where I grok jQuery" at http://www.chenhuijing.com/blog/the-one-where-i-grok-jquery/ http://www.chenhuijing.com/blog/the-one-where-i-grok-jquery/ . 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 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.
- nkurz 11y agoI 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?
- Shish2k 11y agoWhy? It seems a perfectly cromulent word for a concept which has no other succinct description
- dalke 11y agoHow 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.
- TeMPOraL 11y ago'Grok' usually has a stronger meaning than the words/phrases you mentioned. It means to comprehend something deeply, gain intuitive and thorough understanding.
- dalke 11y agoAgreed. 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.
- Retric 11y agoI 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.
- speps 11y agoI 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.
- TTPrograms 11y agoI've started really liking tools that generate dependency graphs for code bases. Terrific to reference when digging though.
- TeMPOraL 11y agoOh 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.
- aji 11y agoTo be fair, `ag shotgun` would take less than a minute to run and skim the output of. If nothing obvious turns up, you try other things.