Making Sloppy Progress

Active Learning

becomming a better programmer when osmosis is not enough

Programming did not come naturally to me. In high-school I hung on to the kid nearest to me who seemed to have a good idea of what he was doing and copied his work. I knew I wanted to program (I wanted to make games) - I enjoyed the idea of it - but I didn’t understand what it took to get good at it. In college I made friends with some really talented programmers (many of whom I am still friends with to this day). I leaned on them through those years and started gaining a genuine interest for the skill during those years. Much of it continued to be daunting to me though. I felt like I was constantly behind. Barely grasping “simple” concepts like the difference between an object and a class, and the idea that a String (in Java) was an object and not a primitive (or what that difference even really meant).

I wanted to be a programmer but wasn’t willing to put in the effort to become one. Or maybe a better way of putting it would be to say that I didn’t realize what I needed to do to become a better one. It seemed to me that by going through the classes, I would just magically pick up the knowledge I needed, as if through osmosis. I’m not stupid (I think), but programming is just not simple. It’s not something you can master by sitting idle through a lecture lapping up what bits of information you get from the speaker.

It wasn’t until a few years later that I really learned the lesson about… learning. This game came out called Starcraft II - and I loved it. And like programming, I was really bad at it (at first). I loved how cold it was in how the competitive ladder measured your skill. How you could just watch as your raw skill slowly grew. This wasn’t some RPG where you could just dump time in and find that you magically got better through artificially inflated statistics - you had to actively learn. That was the key, the thing that changed me. In Starcraft, if I wanted to improve I couldn’t mindlessly play games - I had to engage actively in the learning process. I had to ask the hard question - “Why did I lose that match?”

My attitude toward learning shifted drastically. While I always loved programming, my progress was always slow. I started toying around with code more. I started picking up books and rather than just reading the pages, I really forced myself to work through the examples. My skill improved significantly (measured by my performance in interviews). The better I got, the more I loved it.

A couple of years after that I came across the book The Practicing Mind by Thomas M. Sterner. His attitude toward learning can be summed up like this. You can try to learn to golf by going out and playing gold over and over. You will improve, but it will be slower. Instead a much faster (and more enjoyable way) to learn is by picking a particular part of your game that is weak, and focusing on that. Staying in the moment and enjoying the process of learning, rather than getting hung up on the end result. He has a lot of really great points that have honestly shifted how I view life and I can’t recommend the book enough.

Since reading that book I’ve really focused my energy on what is both my passion and my profression - programming. I’ve worked with quite a few programmers now in the past decade. Many of them do the job, turn off their computer, and go home. That is a completely reasonable thing to do. However, many of them are still using old technologies, or have the same old bad habits built over decades of just getting the job done. While I’m not a great programmer, I sure am interested in continuing to get better. So, when the passion is there, I fiddle around with projects at home, I read books, and I listen to podcasts. When I’m not as interested in working on programming in my own time I focus more at work. I ask myself the questions: “Is this the best solution? What is the best practice here?” I keep a few popular programming books close at hand (The Pragmatic Programmer, Clean Code, and Effective Java) for reassurance.

Hopefully these practices will keep my skills from getting stagnant. Hopefully in my short time on this world I might approach something resembling a master. That would be pretty cool.

About Me

I'm a father of three and a software engineer for both hobby and trade. I enjoy tabletop role-playing and board games - especially of the heavily social variety! I also occasionally participate in game jams with friends.

I'm particularly interested in self-improvement in all of those things. I enjoy progressing through a new skill and learning ways of maximizing my time and focus.

Follow Me

The best way to reach me is via email. When I'm in a coding mood I've usually got some kind of personal project going on my github.