Loading...

I Want To Code When I Grow Up : Developing a Developer

In the morning, when I come in to work, I usually have a procedure for landing into the day's development. It consists of a variety of things, including reading email, reading the contents of my Google Reader, sometimes a stop at Programming @ Reddit and DZone. After that, I do my Getting Things Done planning for the day, and I attack the day. Depending on what my lunch is like, I may also revisit some of my reading, but sometimes I'm in a groove, and space lunch completely.

Today I found myself reflecting on the last few years, and how far I've come as a developer. A few years ago, I was still trying to grok the first few pages of "Instant Java Server Pages" thinking I needed to understand a web language to create something a bit more dynamic. Now, in less than three hours, I can create an entire CMS software (like the one powering this site) without much of a struggle. I work in a variety of languages, and pride myself on the ability to pick up and use a new language when I find the need to. I was also surprised at how little of these skills I learned in school, and how many of them I learned by actual experience. So I slowly analyzed what it was the brought me here, and began to set some more goals on where I'd like to be in the future. Below are some observations I've made.

Have Passion - I absolutely love writing code. I write code all day at work, and 6 out of 7 days, I come home and write at least a little bit of code. On Saturdays, when my wife is at work, and it's just the puppy and I, I'll spend four or five hours just writing code. When I can't code, I think of ways to improve my existing code, or ideas that would be cool to implement in the future. I can tell the difference between someone who codes because it's their job, and someone who just loves to code. Guess which one is the better developer.

Be A Sponge - I cannot stress this enough. For me, school was a waste of time. Maybe if I went back to get my Master's degree or something, I might find a little encouragement in the college education system. When I landed my first software engineering job, I immediately realized that the people around me could teach me more than any college professor could. I wanted to learn, and working closely with those who would teach me meant that I could soak in everything they said. I also quickly learned to differentiate between opinion and fact, but even the opinions of fellow developers allow me some insight into their coding styles, their development styles, and their work styles. Soak up everything, good or bad, and build yourself with it.

Tweak Your Surroundings - If you're not comfortable in your surroundings, you won't thrive as a developer. I would go as far as to say you won't thrive as anything. For instance, at work, we all use SuSE 10.0, or SuSE 10.2 for development. Now, I have no qualms against SuSE, but I didn't find that it was my kind of Linux distribution. I'm not a KDE user at all, and I found that when I customized my environment, it broke YaST, so I could no longer install packages through the SuSE environment. After having a pretty rough day struggling, I spent a weekend building a Ubuntu Feisty system on a USB hard drive, which I now boot from at work. Sure, I worked the weekend to make sure I wasn't spending my company's time being finicky, but I have seen my development abilities double since I did it. Things like dual monitors, a good window fan, and just the right amount of lighting also attribute to my development ability. Find what works and go with it.

Open Up - I have this theory that if everyone worked at a fast food restaurant at some point in their lives, we'd all be kinder to those who make their living asking about our preference of Super Sizing. I think this also applies to Open Source. I think every developer should at least have one open source project that they work on with regular intervals. Air out your dirty laundry so that everyone can see. Trust me, you're not the best C++ developer in the world (and neither am I), so you're bound to learn something (see above about being a sponge). Have the guts to open up a personal project of yours that may have value in the community. You'll grow from it, you'll become confident in the code you write, and you'll laugh at the code you aren't proud of, instead of fooling yourself into thinking it is the best way.

Share - The open source movement (as well as the Free Software movement) claim that human knowledge is to be shared. We have this powerful network of information called teh Internets, and boy do we use it! The first place I go when I'm trying to figure out a problem is Google. The solution is usually found in a blog post. This is the sole reason I have a blog in the first place. I feel that my knowledge is licensed under the GPL, and I need to contribute back to the community. Maybe as I squeeze out my mental sponge, there will be another sponge waiting to soak up the knowledge.

Read - When you can't code, read about coding. Read blogs. Read books. Read magazines. Read. My wife teases me because I have a stack of technical books at the side of the bed. I don't read them cover to cover usually. I think I've only done one technical book cover to cover, and I did that just to say I did. Rather, I read books until I know enough to do some coding on my own. Somehow the books never make it back to the bookshelf, but every fews nights, I'll pull another one off the bookshelf and bring it to bed. I read a few pages before I go to sleep. Read a book about Design Patterns, then read one that is Anti-Design Pattern. Read a Python book, then read a Ruby book. I've been swapping between Rootkits: Subverting the Windows Kernel and The Linux Kernel Primer: A Top Down Approach for x86 and PowerPC Architectures recently. This allows me to see how the Windows kernel contrasts with the Linux kernel. It has been eye opening to the different design philosophies for me. Read all you can, and then read some more.

Expand - Decide right now that by the end of the year, you'd like to know at least one new programming language. Stretch yourself here. Don't decide that you're gonna learn C++ if you're a C developer. Learn SmallTalk. Learn Java. Learn the Linden Scripting Language from Second Life. I find myself going to Google Video and typing in Tech Talk, browsing for an interesting video, and watching it, or loading it to my iPod to watch later. A coworker of mine, who is a very good developer, was asking about a approach methodology for a problem. At the time, I was the most inexperienced developer in the room, but I suggested something similar to what I had used while working with the Qt GUI framework, which he liked, and implemented. If I hadn't been working with Qt, or the open source software that I was working on, I wouldn't have been in the position to suggest the idea in the first place. If you find coding mundane, you'd better mix it up a bit.

There definitely are those people who have a knack for software development. Others don't. But good developers are indeed made, not born. There are "muscles" that you have to exercise, and stretches you need to do. With the right training though, anyone can become a good developer.