How do I learn(ed) programming?

I love learning. There’s hardly any skill in the world which can get you further than your ability (and passion) to learn new things and learn them fast. This holds true for me as a software developer, but I can’t think of a profession or craft which wouldn’t benefit from keeping up with it and taking the time for learning new concepts and ideas.

But learning comes with a great price – it costs time, and once you spent time doing something, you never get it back. Although one can’t argue that time spent learning is time spent well, this also means that you can’t learn everything in the world. This may seem self-evident and even funny to a degree, but the problem is every profession became so specialized nowadays that you can’t even learn everything in a domain, so you have to subspecialize. I face this problem every day, and it’s a very challenging one. Whenever you make a decision you lock the door on thousands of other possibilities.

This is why I constantly search ideas on how to improve my learning, and the very reason I write this blog, and wrote the previous one. I’m a self-taught software developer and I didn’t perform very well in the beginning. Sure, I could do things, but I made my fair share of stupid decisions which could feed the Daily WTF for half a year. Then I started learning for Microsoft certifications. Some would say this is the Bad Way™ and they may be right. The emphasis is on learning, not on acquiring shiny sheets of paper to hang them on the wall. I made a blog, got a learning plan, looked up the details and wrote posts on them. I enjoyed it pretty much, and in the end this process made me a fairly decent .NET developer, I got a pretty good job and enabled me to make a good living from doing what I love. Without a clear vision and constant feedback this wouldn’t have been possible.

The moral of the story is that when you have a clear concept on what to learn, and you take the time, digest the ideas and write them down you boosts your performance in learning. You have to have a clear vision because if you jump from one topic from the other, e.g. one day you learn the basics of agile development and the next day you decide that it’s time for dig into A.I. programming theories you won’t get deep understanding in any of them, especially if on the third day you check out some blogs on dependency injection. Been there, done that, wasted time. The other concept, writing down what you just learned, is even more important (for me it is, your mileage may vary). Writing forces you to understand the topic and you’ll find yourself checking back on areas with white spots, thus reinforcing knowledge. And even better, if you write down something you’ll more likely to remember it (at least, my mind works this way).

Taking these two concepts I came up with a pretty robust learning method. Every month has a topic. For example, when I wanted to understand unit testing better, I proclaimed last October to be Unit Testing month. Every book I read was about unit testing, TDD (or software testing, in general). I didn’t look up materials on let’s say threading or sorting algorithms. Just focused on unit testing, read literature on it and wrote some notes (no blog posts, sorry). Ever since last October I can write decent and appropriate unit tests. Of course you don’t have to work with calendar months, I do neither. I just take a month as a measure of time because in a month you can read four books if you want to, one book a week. You can look up blogs, search for concepts, etc. I don’t really think you can concentrate on a topic for two or three months (remember, we’re talking about your spare time) and actually enjoy it and, most important, resist the temptation to look into something else. The main point is to concentrate on a single topic until you are confident in it and you find satisfaction in it.

I don’t say that this is the best and ultimate learning method; it has its share of drawbacks, too. It’s not very flexible for instance, and you must constantly fight the temptation to jump in to new topics, which could be integrated into this method. I’m pretty sure it will evolve over time, but it was pretty robust for me. I’m by all means not an extraordinary person and what works me can work for a lot of people, even for you.

So to sum things up a little bit, here’s my learning method:

  • Proclaim a month to be the month of the subject you’re interested in.
  • Take your time and write a learning plan. Collect books to read, blogs of authorities on the subject to check out.
  • Resist the temptation to check out other things, you can dedicate a month for them, too, but later.
  • Follow your learning plan faithfully. Of course, you can change it if you find a better resource.
  • After (or even better, during) processing the resources write! Take notes and in the end, write something cohesive from it, a review on Amazon, a blog post, a paper in you put in your drawer. The point is to think about it.

I guess it’s time to eat my own dog food. For me, this month is Exotic Pattern Month. I’ll post my readings and thoughts about it, so you can understand the learning process better (and read about exotic design patterns, if your care). Until then make sure you put the effort and plan your learning. It’s one of the most rewarding things to do.

2 thoughts on “How do I learn(ed) programming?

  1. You are so right about learning! I also learn by writing (take notes, make a summary) … and of course doing
    Nice blog Gergely … or is Konc/Konczura your first name (sorry …. I am dutch! Visited Hungary in 1990, but found the language quite difficult ;-))

    Probably I will read some more of your blogs posts the coming month(s) (studying for MS exam 70-516 this month…;-))

    Keep on writing!
    Greetings from the Netherlands,
    Wilma (Software engineer .Net)

    1. Hi Wilma,

      thank you for your comment, I was sure that I’m not alone
      with this learning-by-writing stuff 🙂

      Good luck for your exam, I think you can find some useful
      resources on the previous blog.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s