Become A Better Developer By Indexing Your Brain

This is the fourth post in the teaching and learning series. The teaching and learning series includes the following posts:

  1. All Developers Should Know How They Learn Best
  2. The Secret Of Being A Great Mentor
  3. The Secret Of Being A Great Apprentice
  4. Become A Better Developer By Indexing Your Brain (this post)
  5. Learn More – Faster By Using The World-Wide Community
  6. What Playing Cards Can Teach Us About Ramping-Up And Transferring Knowledge

BrainI believe that one of the most important tools or attributes you have as a developer is your memory. I am already hearing people trotting out the old, ‘I don’t need to remember anything, I’ll just Google it‘ argument :). It is a decent argument, but I can poke several holes in it without having to think too hard. Aside from the fact that there are still some places out there that will not allow Internet access for security reasons (that’s right you gotta work with no web access – bummer), you will always need to know what you actually want to Google for. Google can’t read your mind (yet :)), you need to remember the concepts your search centers around as well as related information. Hell, you need to remember that whatever you’re searching for exists in the first place. Regardless, you can’t Google everything. You don’t want to keep searching for the basics, or you risk slowing the pace of your work down to a crawl. You can’t Google domain knowledge, it is simply not there to be found, you need to learn it. Not to mention the fact that having a great memory can be damn impressive, try reciting Pi to 1000 places at a party and watch the ladies swoon :).

Seriously though, having a good memory is important. It is valuable in interviews – being able to recall and talk about concepts you haven’t worked with for a while. It is valuable in your day-to-day work – being able to remember what classes do what and which script is executed when. It is an important interpersonal skill – being able to remember names of colleagues, customers etc. There is no doubt, having a great memory will make you a better developer. So, how do you turn your sieve into a steel trap?

Training Your Memory

You’re probably expecting me to say that there is an easy way and a hard way, unfortunately there is only the hard way. Like everything else in life, practice makes perfect and memory is no exception. You need to train your memory to increase capacity, recall time etc. First thing first, you need to memorize crap. Seriously, the first step is that simple, memorize whatever strikes your fancy, poetry, music, code, trivia (even Pi to a thousand places) just make sure you keep doing it. Over time this will make your memory better and better, but it will take a while, fortunately there are some techniques you can use to fake a great memory in the meantime.

Using Mnemonics

Mnemonics are basically memory aids that can help you recall information by association. There are many different ones, some are specific to particular information such as memorizing numbers while others can be generalized to all kinds of information. Here are some common ones:

  • Visualization – associating concepts we want to memorize with parts of a vivid image that we already remember well (such as the layout of your room, or the face of a loved one)
  • Rhyming – making up a rhyme around the concept, thing you want to memorize can help as we are a lot better at remembering rhymes than we are at memorizing random data
  • Chunking – forming data you’re trying to memorize into larger pieces of data that is easier to remember (e.g. forming letters into words, forming words into sentences, forming binary numbers into decimal etc.)
  • The number shape system – associating raw data that is harder to remember with shapes that are easier, in this case associating numbers with shapes so that you have to remember a sequence of shapes (which is easier for our brain to process) instead of a sequence of numbers

Much has been written about all of the above, it is not voodoo science, they really work. The reasons they work are twofold. Firstly, simply by virtue of trying to use a mnemonic technique on a piece of data, you focus on it for a period of time which gives your brain more opportunity to do whatever it does. Secondly, mnemonic techniques are all about associations, you associate your information with various cues; either visual, verbal, musical, conceptual etc. This gives your brain more entry points into the data you’re trying to recall later. How does this help? It is incredibly useful when you use a recall technique called priming. We all do it unconsciously but you can also use it in a targeted fashion.

You’re priming your brain when you’re trying to remember a piece of information and you try to recall anything that you can possibly associate with the data – sounds, smells, concepts etc. It is like building a virtual mind map around the concept you’re trying to recall. The more different associations you have formed with the data the more chance your brain has of finding the information you’re looking for. Simple. I could keep going and going about this stuff and I probably will at a later date :), but for now I’ll leave it here.

In the meantime, if you want to know more about specific mnemonic techniques as well as your mind and memory in general I recommend you pick up a copy of Mind Performance Hacks, which puts together a bunch of these techniques into a cookbook format. However if you don’t feel like reading a book and doing a lot of practice here is a ‘trick’ that I use, which draws from many of these concepts and can give your memory a noticeable boost without too much hard work (if you remember to use it :)).

Your Brain Is A Search Engine

I think of my brain as a search engine. Like any search engine, your brain contains a bunch of data and it also contains an index that allows you to recall this data. You’re constantly bombarded by new information (the web, blogs, books, tv etc.) so adding more data is not an issue, being able to efficiently recall this data is the challenge (your index is more important than your data). According to what I said above, your brain’s index is formed by associating data with a bunch of stuff, you can help out by consciously trying to form these associations. Every time you hear/learn a piece of information you want to be able to recall later (like a name), focus on it for 2-3 seconds and associate it with stuff around you, colors, music, smells, shapes, feelings etc. You want to give your brain a chance to form as many different types of associations as it can. After that just let it go and don’t worry too much about it. In essence you’re trying to piggyback important and hard-to-recall information on sensations and concepts that are less important and easier to recall. That’s all there is to it.

It may not seem like much, but if you do this consistently you will find you can recall things a lot more frequently and easily. You may not be able to impress anyone with a Pi recital, but you will find that after a while people will start telling you that you have a ‘good memory‘. So there you go I was wrong, there is an easy way, I guess I forgot :). Seriously though, it is a helpful technique but it is not a substitute for real memory training. Infact in one of those ironic twists that the universe is famous for, the better your memory is already, the easier this technique will be to use. Do you have a favorite memory technique that you use in your day-to-day life? If so please share it with everyone, as always, the more we share, the more opportunity we have to learn and the better off everyone will be in the long run.

For more tips and opinions on software development, process and people subscribe to today.

Image by brain_blogger

  • Slightly off-topic comment, but it’s amazing how we software developers associate our brains to sofware/algorithmic concepts: indexing, searching, etc. When in fact the brain first produced those algorithms. In some cases of course, the brain analysed other activities – basic sorting algorithms come to mind – they took a lot of ideas on logical ways of sorting physical things, etc. It’s a chicken and egg thing in some ways though, for the abstraction we produce works both ways. Very weird, very fascinating. I remember a while back having books scattered all over (okay, so this is still the case) at my place, then my mom visited and “cleaned it up”. The physical arrangement was not tuned for outsiders, it was optimised – quite unconsciously – for my brain. A hashtable – completely unordered, but it worked, and it worked fast!

    • So true, I have also noticed this. These days I tend to more and more often associate things from the physical world with software concepts. The funny thing is, I can’t for the life of me remember what I used to do before I was a software developer. As far as I can remember I always associated stuff with search engines, hash tables and merge sorts :)

  • Biologically speaking, I am not sure much of this is possible after a certain age. The nervous system is most flexible during early childhood. In adulthood, you can arrest some brain decline and use some tactical means to gain some percentage point improvements in memory, but not on any orders of magnitude. In other words, most of what you are suggesting should be done during early childhood by parents.

    • I definitely agree that this will have tremendous benefit during early childhood. However, I also firmly believe that it is possibly to do this at any age. For example up until recently the prevalent wisdom has been that you can’t form new brain cells after a certain age, but recent studies have shown that to be untrue (I am not precisely sure where I read that one, I believe it was ‘The Brain That Changes Itself‘). This tells me that while things may not be quite as easy when you’re older, but they are not impossible where the brain is concerned.

      I also have a great personal example in my grandfather, who has been a scientist all his life and still devotes the majority of his time to scientific pursuits. He is well into his 70s but I would stack his memory up against any high school student.

  • Good point re: pre-software-dev days… I can’t remember either, all I know was I was highly inefficient.. probably a lot more sociable though :P.

    • Hehe, that’s ok, developers tend to hang out with other developers so everyone speaks the same language. It is only when we mix with normal people that things get interesting. I remember more than one funny conversation on public transport and the perplexed look on people’s faces :).

  • A few years ago I wanted to be able to remember some numbers. I looked at the
    phonetic alphabet system buy I was never that great in phonics. In talking to someone
    who had studied linguistics extensively suggested that I parse a dictionary to determine
    the 10 first letters in words that contained the most words in the alphabet. Well that
    was no too big a problem but I needed a simple way to remember what letters represented
    the numbers 1 thur 9 as well a 0. I came up with the two words BACON RUMPS which works out like this.

    So to remember the number 113 use the words “Big Bad Cat” or any other combination
    of words one can come up with and remember easily. The 16 letters of the alphabet that
    are not used in this system can be used as fill words to make the sentence more meaningful.
    The main reason I chose this system is because the two key words BACON RUMPS are
    easy to remember. I showed this system to some other people who use the two words
    BACON LUMPS because they claim those words are easier for them to remember.

    • Thanks for sharing that, I reckon that’s a great trick, similar to the Major System or Dominic System, but simpler and easier to remember. Also a great example of association, words are much easier to remember than numbers, so we associate each number with a word to help ourselves out.

  • gene t

    Good post. I think software development entails internalizing rules of the language’s grammer implicitly (code just looks right) and explicity (where you know which operators are left-associative, or whatever) and after a while they meet in the middle.

    Also the 2 Oreilly mind hacks are really good

  • >>Aside from the fact that there are still some places out there that will not allow Internet access for security reasons.
    This is a current technological limitation, not a conceptual limitation. If I know where and how to find something when needed, then theres no need to memorize the same.

    • True, this is why it was the least of my argument. It is nevertheless an issue if you work in such environment. You can’t be waiting until the next day to look up everything, you will either need to know it or you will struggle to get anything done.

  • Before I become a software developer, I had an excellent memory. It stayed with me for a few years, when I could recall the line number of some important code I wrote.

    But in the last few years, I have noticed my memory get totally messed up. I can almost trace it to the time when information overload started. I feel like I need to take in a lot of information, and as a result I shove in more than what my memory is capable of handling. Perhaps like a finite cache. If you put in more, something is going to get garbage collected.

    So perhaps along with the above tricks, maybe we should also understand our limitations. Should we try to expand them? By all means… maybe the memory tricks will help. I definitely plan to try them out.

    • Being able to take in and process a lot of information is another thing that you can become better at with practice. The trick here is to not just take the information as it comes but to actually try and sort it all out and apply some structure to it in your own head. The more you do this the better you will become at it.

      • Thanks, that seems to be a good suggestion. Will try it out.

  • Pingback: HackLinks 30-09-2009 « Karim Ali()

  • Pingback: Destillat KW40-2009 | - GNU/Linux, Open Source, Softwareentwicklung, Selbstmanagement, Vim ...()

  • Pingback: Destillat #35 – Wetware und Methodik | - Open Source, Wet-, Web-, Software()

  • Pingback: “I will learn it when I need it”! | .Net()

  • Pingback: 程序员的谎谬之言还是至理名言? | 酷壳 -

  • Pingback: 高兴的一天 « Flyer's Blog()

  • Pingback: 程序员的谎谬之言还是至理名言? @ Hello! MY LOVE!()

  • Pingback: 程序员的谎谬之言还是至理名言? | Krains'blog|程序人生|励志经典()

  • Pingback: 程序员的谎谬之言还是至理名言? | multiprocess()