Yesterday, a friend of mine told me he thought he was a slow learner. This surprised me because I have seen his growth over the past 6 months and know this is not true. I remembered having my learning techniques scribbled down in an old journal, so I decided to take fresh look at them. However, I was surprised to find that I am also a slow learner!

As a software developer, I am always learning something new. If I’m not learning, I’m dying a little on the inside and soon my career will also stagnate. Sometimes I even fall prey to sexy techniques to increase your learning speed only to find that they don’t ever work as well as advertised. These learning techniques, can be useful, and may work well for you. But I have found that accelerated learning techniques are more like cramming for an exam than build a vast cavern of knowledge inside your head.

True learning is like building your 401k. You make small, regular deposits over a long period of time until compound interest takes over and your money starts making money for you - a lot of it! In the same way, you learn one subject, then another, and soon you start making connections and observations of your own. You find knowledge of one subject makes the next subject easier (or at least possible) to learn.

For example, learning the next trendy NoSQL database takes less effort than when you first learned SQL databases. You already know how to use a database - you connect to it, issue a query, and receive a result. You don’t have to re-learn the basics. You are free to focus on what’s new, what’s different, what’s novel about a NoSQL database.

Anyways, story time is over. I mentioned that I have my own learning techniques, so here they are. Remember, my goal is to build a 401k of knowledge, not cram for tomorrow’s exam.

1. Slow down!

Focus. Read and re-read. Think about what you read from different angles. Find three blog posts on the same subject that all contradict each other. Reading not your thing? Watch presentations from conferences. Dive into an open source repository on GitHub repository. Actually, clone the repo and open it up in your editor. Don’t just click around on the website. Does something surprise or confuse you? Is something difficult for you? Does something challenge your fundamental assumptions about how things work?

Stop! Put the book down! Pause the video! Think about it. Go ask a colleague for her opinion. Don’t know experts on the subject? Find one on the internet and ask her. Ask a question on a blog, on Stack Overflow, on a GitHub issue, on Twitter. Somebody will know, and if they don’t, it’s up to you to figure it out!

Learning is full of stops and starts and wrong turns. If you knew the right path already, you wouldn’t need to learn. Relax. Slow down. Give yourself permission to enjoy the journey. You never know when you might learn something new!

2. Take a break

Learning is overwhelming. Usually, learning leads to more questions, not to more answers. It’s not that you don’t find answers, it’s that there are in fact more questions than answers. Your brain can only absorb so much in one sitting before becoming tired. Learn what you feel like when your brain gets tired. Are you bored? Irritable? Do you wish you were out with your buddies or at home with your wife? Fatigue is setting in.

Go home. Go out. Go for a walk, bike, swim, jog, romp in the woods, whatever. Have some fun. Stop thinking for awhile. Take a nap. Give your brain a break. Give it a chance to absorb what you just learned. Give your subconscious mind the time and space it needs to form new connections.

In college, whenever the professor assigned a challenging homework assignment, I would memorize the questions, read the relevant information in the textbook, and then go on with my day. Without fail, the answer would find me while I was in the gym or eating lunch.

3. Remember

What good is learning if you forget what you know? Be sure to come back to what you learned, especially when it’s still new to you. While driving home from work, or brushing your teeth, or in any spare moment, take time to summarize the key reasons why a fat model is preferable to a skinny controller. Or try to recall and explain the 4 values of the agile manifesto. Don’t neglect subjects you already know well either. You may be a SQL wizard, but have you ever used PostgreSQL window functions?

4. Apply

Unless you use your knowledge, you are still likely to forget. If you don’t need it, your brain may decide for you that something is not worth remembering. So it’s up to you to force your brain to remember. Be creative. Build a prototype application that uses that shiny new NoSQL database. Use a fancy design pattern in a side project - you can always go back and rip it out if it’s overkill. Set up your own rails server from scratch - even if you normally deploy to Heroku - just to learn how. As a side effect, applying your new knowledge often results in tangible efforts you can discuss in a job interview, write about on your blog, or just brag about to your friends.

5. Share

Sharing is a form of application, but it’s so important that I need to repeat it. Don’t learn in a vacuum. Learn in the open. Publish your findings on your blog. If it was new to you, I bet it’s new to someone else, too. Put your code on GitHub for all to see - even if your code stinks. Answer questions about that new JavaScript framework you’ve been toying with on Stack Overflow. Give a lunch and learn presentation in the office. Or at least bring it up on a coffee break. Sharing is essential because you will get invaluable feedback, and you may even help the next guy that comes along.

6. Repeat

This is the most important step. It is also the hardest because learning is hard and life is busy. Keep learning. Learn something new every day. Don’t worry too much about the results or how much you’ve learned. Instead, focus on the act of learning. Did you intentionally read a technical blog post to deepen your understanding of AWS? Did you install Haskell and write a small program to see why people keep talking about it? Did you watch a presentation from last year’s RubyConf? The key is not to focus on how much you are learning. The key is to focus on whether or not you made the intentional choice to learn something new today.

Have you learned something new today? Please share! Then keep learning.