From the papers Abstract:
"No longer do we have to make costly efforts to find the things we want. We can “Google” the old classmate, find articles online, or look up the actor who was on the tip of our tongue. The results of four studies suggest that when faced with difficult questions, people are primed to think about computers and that when people expect to have future access to information, they have lower rates of recall of the information itself and enhanced recall instead for where to access it."
[1] Google Effects on Memory: Cognitive Consequences of Having Information at Our Fingertips - https://www.science.org/doi/abs/10.1126/science.1207745
[2] https://news.columbia.edu/news/study-finds-memory-works-diff...
The more you do something, or think about something - the more it becomes a "System 1" operation(fast, intuitive). Like typing on a keyboard for example, when you first started using a keyboard you had to think about every letter you want to hit, but now you probably don't even think about it for a millisecond. I guess what I'm trying to say is: Intuitive understanding = Action * Repetition.
Read the book if you haven't, it might be the kind of material you're looking for. I'm not a big fan of psychology and I think it's 90% mumbo jumbo, but this book hit a few nails for me.
Edit: To clarify, shallow is maybe the wrong word. I think the book gets its main point across very well, and it's a good point. But the majority of the book is just further evidence supporting that main point. Which is fine, but I wish it would develop this main point a bit further. The book could be summarized in a short paper and wouldn't lose too much of its value, in my opinion.
https://replicationindex.com/2020/12/30/a-meta-scientific-pe...
This is why I have always been terrified of having to do a standard 'whiteboard' coding interview, and really don't want to ever participate in administering them to others. I know if I was ever tested in this way, I would be unable to remember the basic function names in languages I have used daily for years... and yet I have developed sophisticated software tools in these languages with a large global userbase. I fear that in an interview people would decide I am a fraud, and couldn't have really done what I have done when it appears I actually don't even remember the basics. But my mind just doesn't work that way, I can't remember length vs size either, even if I can design a complex algorithm, and turn it into a good piece of software under the actual conditions of work in the real world.
Honestly if they care that much about rote memorization of syntax, it's a red flag.
I too don't like the idea of these, but in the case where you're solving a problem in front of someone I feel like as long as you explain your thought process you'd be generally fine. If you can't remember whether the method is length() or size() or something else just pick one and explain what you're doing. Intelligent interviewers would likely understand that you're familiar with the concepts and would be able to accept your result or let you compile/execute and fix the issue.
To expand on this a bit - our memories maintain "schemas" of knowledge and whenever we learn something new it gets slotted into our "schema". The better something fits into our schema the easier it is to remember. I think if you googled schemas you'll be able to find more material on this
To be honest, I think we (humans) don't understand this type of understanding very well. Which is somewhat ironic :-)
Edit: But thanks for the suggestion about searching for schema, will definitely take a look!
The knowledge defined in the article is very rational and reductionist in its presentation. I don’t mean that derogatorily, but it does mean it can’t account for all the emergent features of our existence. The reductionist approach can be useful as a set of signposts for locating reliable mechanistic constraints.
I agree completely with your analysis of the article by the way. Beautifully said!
Have you ever gained a solid understanding of a complex topic after a lot of study? When you start to forget the relevant details of the context you’ve created, your understanding fades as well. “Understanding“ is just a complex function of memory to a large degree.
(1) That a deeper understanding of something can make it simpler/easier to remember. One way to look at this is that you remember a model of the world. That complexity of that model determines the quantity of information you need to remember. If you can find a simpler model, your mind needs to store less information to cover everything you need to know.
(2) That a concept and its name are different things. You understand the concept of an array-length-giving function, but you don't remember the name attached to it. It could go the other way: you could know there is a function with a certain name but not remember what it does. Or you could know what it does and what it's named. (This seems at least tangentially related to linguistic relativity (https://en.wikipedia.org/wiki/Linguistic_relativity), a.k.a. the Sapir-Whorf hypothesis. The question is basically to what degree our minds build ideas on words/language and to what degree we form ideas independently of language.)
> See that bird? It’s a brown-throated thrush, but in Germany it’s called a halzenfugel, and in Chinese they call it a chung ling and even if you know all those names for it, you still know nothing about the bird. You only know something about people; what they call the bird. Now that thrush sings, and teaches its young to fly, and flies so many miles away during the summer across the country, and nobody knows how it finds its way.
[1] https://writings.stephenwolfram.com/2019/05/remembering-murr...
The number of names that are misleading or almost willfully obtuse is absurdly high. (I'm actually cheating for folks in my list, as I typically see it just shown as shell sort and bloom filter. Which hides that it is named for someone.)
I also don't mind algorithms named after people, and can understand some of how that gives provenance, at the least. The Knuth-Morris-Pratt algorithm is a good example of that. What makes things difficult is that many of the other sort algorithms were not after people's names. Unless there is a Merge that I am unaware of. :D
I think your example about list.size doesn't contradict this. It's the difference between "familiarity recognition" memory vs "consolidation and retrieval".
You do not bother committing "size()" because it's unnecessary (or because there's a lot of interference from other languages which do the same thing, hence the cost of committing that fact for later retrieval is not worth doing so).
But you have committed the "concept" to memory, and this can be retrieved even without the need for the label.
"Understanding" is only part of the equation. But I do generally feel that "having the basic building blocks readily available helps you build complex understanding on top of them, which then helps you consolidate the complex stuff better" is probably the main direction, rather than "understanding a complex concept helps you better remember the basic building blocks that made it up in the first place".
This is also why anki works so well for learning theoretical subjects (even if it has traditionally been more popular for pure memorization tasks, like language learning)
I started using Anki (A spaced-repetition tool) to improve my long term memory by creating cards for everything I like to remember no matter how trivial it might be, Then the act of reviewing the Anki cards became a chore.
I'm currently trying to solve the problem of reviewing Anki cards by having an always-on review system[1] which lets me review cards when ever I want instead of a rigorous schedule.
Why?
Because it is a single entity(through abstraction). And because it is a single entity and you use it a lot, it gets connected to many other concepts.
And because you've solved problems with it,it has more emotional value.
This means you can more easily retrieve it and it has more "meaning"/context to you.
list.length gets used less often and it just a concrete implementation of the concept so maybe it's just linked to the concept.
And it's also more complex to remember and use because it's made of 10 items.
Copilot is a lifesaver here. I almost never have to google function names anymore because it just fills them in for me, while usually generating exactly the code I wanted around it.
I'm not saying you shouldn't use it, but before you go into technical parts of interviews I would recommend you do some coding without all the bells and whistles tools.
This is basically the Searl argument against AI, right?
Let me give you an example in programming: I sometimes have to google for the names of functions I've already used a hundred times. Sometimes extremely simple functions (just a while ago it was list.size() in Java), only because I can't remember the name of the function, but of course I understand the concept - the length of a list/array. I just can't remember if it's length(), or size() or count(), or whatever.
This deep understanding feels quite different from simple memorization. It feels more like something in my body, similar to muscle memory or like playing a piano piece. It's something I feel I will never forget.
I'd love to learn more about this kind of understanding. For years I've tried to find good reading about it, but much has been disappointing.