Do you ever feel like calling yourself a "Professional Googler", might better represent your job? I’d say most developers, feel this way at times. As a young inexperienced programmer we start using Google out of necessity, we just don’t know enough to get our job done. Google becomes the crutch that helps us get where we need to go. The problem is, those who use crutches, move slowly and a lot of us developers seem to be ok living with crutches.
Too much to know
But you say "There’s just too much to know". Yep, you can’t know it all. However there is an optimal amount of things that you should just know, without having to constantly look things up. Unfortunately too many of us have a google everything mindset. We are satisfied knowing we can look it up when needed, but we don’t ask ourselves the question "Should I commit this to memory?".
The best programmers
One thing I’ve noticed about great programmers is that they have excellent memories. When challenged with a problem, great programmers aren’t struggling to remember syntax, algorithms and api’s. Most of those tools are at their fingertips, they instead are solving the problem. In fact great programmers anticipating challenges quicker and ask the necessary questions sooner. In contrast, the average programmer is slowed down because they don’t know their tools, and they spend too much time and energy referencing things that the great programmer just knows.
Now please don’t misunderstand me, Google is great, I’m sure nearly all programmers use it every day and it’s hard to imagine programming without it. I’m just saying many of us use Google too much, and we’d be better off weening ourselves off of google as much as possible.
Insight from industrial engineering
In a prior job I was able to work with an industrial engineer and observe him doing time studies on manufacturing processes. What was interesting to me, was the small, seemingly trivial things that he recognized. He would look to eliminate as little as one foot of separation between linked work-centers, because overtime those small, simple to achieve optimizations made a huge difference. Less work was done, for the same if not better results. Those little optimizations don’t seem like a big deal when looked at in isolation, however if we step back and look at it as one small optimization of many, across large spans of time we recognize their value. Committing key things to memory, seems like one of those small, but necessary optimizations that programmers should make.
What should I memorize
There is an optimal balance that we should strive towards. I think it’s best to consider this question as we learn new principles and technologies, which happens a lot for us. The trick is to use the 80-20 rule as our rule of thumb, essentially 80% of coding will require 20% of the tools. So you need to figure out what the essential knowledge is, so as you’re learning new things constantly ask yourself does this seem like a 20% item. You’ll start to see patterns of usage, and that’s when you start to recognize the essential things that you should probably commit to memory.
How to memorize
Is having great memory just a natural gift that you either have or you don’t? It may seem that way, but it’s not that simple. I believe most people with great memories have minds that look at things in more vivid and interesting ways. Let me explain with an example, one time I misplaced my keys. I spent what seems like hours tearing my house apart looking for them. Later after giving up the search, I found them in the freezer. In hindsight I remembered what happened. My keys were in my hand, when I was putting something in the freezer. I needed both hands, so I set my keys in the freezer, then a moment later I was distracted by one of my kids who fell and started crying. My mind didn’t find the placement of my keys interesting or important, especially in the presence of a crying child. However if I had thought to myself in that moment, I’m leaving my keys with frosty the snowman, I would have had a better evening. Granted it a bit silly, and it’s not a thought I would share out loud, however odds are I would have remembered where my keys were pretty quickly.
To remember things, our minds need to be interested and we need to associate the thing we're trying to remember with some other existing memory. There are proven methods to memorize things quickly. In fact the way that most of us go about memorizing things, usually by reciting verbally (brute force), is actually one of the least effective methods. My point is, if you struggle to remember things you should probably take a step back and learn how our brains work. Find a book on amazon, learn the techniques and practice them.
Eventually we all forget things that we don’t use. However there is a simple technique called spaced repetition, which can help us memorize things permanently. Spaced repetition exploits the spacing effect, an interesting psychological phenomenon that helps us remember things. The gist is: if we recall something we know just before we forget it, the information is retained for longer periods periods of time. For example if you learn something, then you review it a few minutes later. Then you review it the next day, then at extending intervals: 2 days, 5 days, 10 days, 3 weeks etc eventually that knowledge is permanently stored with very occasional reminder.
Tools to help
I use Anki to help me remember things I think are essential. Anki is an open source flashcard like software that uses Spaced Repetition, automatically showing you flash cards at increased intervals. It takes a bit of discipline to use regularly, however it’s just takes a few minutes every day and the results are well worth it.