I’m Not The World’s Greatest Programmer – And That’s Okay.

Great-Programmers

For those of you who don’t know, I am very young for someone in my field. I performed a 4 year dash through University as soon as I finished high school. I had my Bachelors Degree in Computing Science when I was only 22 years old. During my last semester at University I got a job at a web development company and I worked for them part-time while I finished. Since then I’ve been working full-time for the same company. While I was enrolled in University, I let myself believe that I was a good programmer destined for great things. I graduated with distinction, I was on the Dean’s list, I had the top mark in most of my classes, and I had programmed a few large projects. I thought all of this would land me a sweet job where I would make something that would be worthy of a personal Wikipedia page. I’ll get more into why I think I let myself think this way later.

After my first year of full-time work, I came to the realization that I was not the Richard Stallman I believed myself to be. In fact, now I would argue that I’m not even a good programmer other than in web technologies (since I’ve been using them for 40+ hours a week for the past year) and Java (since that’s what I do most of my hobby programming in). I’ve realized that have general knowledge in lots of programming languages and the knowledge of concepts from University but lack experience making actual applications. Just because I learned about C at University of Alberta and did some small programming assignments in C doesn’t mean that I’m going to write the next Operating System and call it a career.

Before we get into how I reformed myself, its probably a good idea to look at what I think got me to thinking I was so amazing in the first place. It’s an easy trap to fall into, and my hope is that maybe some University students can prevent the same from happening to them by reading the following.

Aspirations of Greatness

One the major reasons why my self confidence was so inflated was the fact that I was surrounded by non-technical people for the majority of my life. When I was younger, I didn’t know how to program – but I was knowledgeable about how to run and upkeep a computer, so all my friends and family thought I was just the smartest kid. The same thing translated when I started going to University – if you know how to program anything then the non-technical people around you are going to think you are genius. It’s just a given. I worked at a computer shop, and the clients thought I was a genius just because I went to University for Computing Science. For someone who has trouble setting up their email on Outlook, someone who can program probably seems like a wizard.

When I was in University, we talked a lot about Facebook. After all, the social network had hit it big just a few years before and it amazed us how a small group of programmers were able to make a billion dollar business with just their skill. It was a very inspirational story for us young Comp-Sci majors, bit I think constantly talking about only the successful startups and famous programmers might have warped our minds a little bit. Its not often that we brought up the average programmer who makes a more-than-comfortable living and goes on a nice vacation ever year with his/her awesome family. I think his/her story is just as amazing, but it doesn’t really function well as an academic case study so its often left out.

If any students are reading this right now, I’m not telling you not to have aspirations – but rather to make them more realistic. If you were programming since you were a teenager and wrote your own C compiler for ARM processors because your parents bought you a Pi to mess around with, then you may indeed make a startup and become successful very quickly. After all, you have all the experience you need under your belt. However, if you are like me and did no programming before University, it may be a good idea to get a job somewhere to improve your skills before you start dreaming big. It is also important to note that software and web development are great industries with amazing salaries. If you get a good job you are going to have a comfortable life. You don’t need to make a startup and become a billionaire to do that.

I would like to point out that I take full responsibility for my imagination and ego getting the best of me. I’m sure that not ever student gets as wild in the head as I did, but its not hard to imagine yourself being wildly successful. It is a really nice thought after all. Who doesn’t dream about striking it big and then going golfing every day? Maybe people who don’t golf, but the rest of us know whats up.

As mentioned above, my first year of work snapped me right out of my delusion, which was the best thing that could have happened to me. There were even a few specific moments which really hit the point home for me, and in the end it was definitely for the best.

A Cold Splash of Water – RIGHT TO THE FACE!

My first realization that I wasn’t as skilled as I thought was when I first started working in the “real world” as a web developer. In University, I was never taught PHP (some of you may know the reason PHP isn’t taught often in school), but when I started as a web developer I thought that I could pick it up no problem. After all, I had conquered the final-boss of programming languages: C. PHP would be a breeze, and in no time I’d be making my own social networks and e-commerce sites. These notions were quickly replaced by the realization that I had no idea what the hell I was doing. PHP itself is not that different from other languages, but how its used most certainly is. Web servers, embedded PHP, template files, WordPress… these things were all brand new to me and they confused the hell out of me.

This really jolted me into realizing I wasn’t the big shot I thought I was. My first real job and I was confused and my first couple weeks were spent learning the most basic of basics. This made me realize that I wasn’t about to make some huge site. I had to concentrate just to finish the basic sites for our clients. I think this really put my mind where it needed to be. Rather than thinking about my own crazy ventures, I concentrated on learning more and making sure I could produce quality products.

The second big realization came when I had to go back to the first site I made. The client had contacted me and I had to make some basic changes to the site, nothing to hard I figured. At this point I was actually pretty familar with WordPress and PHP, so I figured I could breeze through it and maybe make some nice improvements while I was there. Once I sat down and got started, I realized that the all changes were incredibly difficult to implement. The original code was so bad that when I made any change, something seemingly unrelated would break. Functions were scattered all over, I didn’t even use a child theme, stuff was tightly coupled, I used globals like they were going out of style… it was just a disaster.

This really made me realize two things. Firstly, I really was not the best programmer. Many questions entered my mind while looking at this code; “What the fuck is this?!”, “Did I actually write this big bag of shit?!”, and “Was I drunk?!” If I was a character in a TV show I would have punched right through my monitor, because it would have been the only way to express to the viewer how truly maddening the code was. I was freaking right out. What if all of the sites I did were like this? What if adding any small feature was going to be the biggest pain in the ass? To be sure I checked on one of the sites I did more recently. I wanted to make sure that if I had to make changes in the future, it wouldn’t be as terrible as that first site was. I was so relieved to find that it wouldn’t. The code for the newer site was actually pretty good, I could add features with no problem and nothing would break. While making changes to the first site was frustrating (I pretty much remade the site), I realized that I had improved leaps and bounds over the past couple of months. In that short time I had made huge improvements and my code was actually meeting WordPress standards.

An Epiphany

This is where my big epiphany comes in, my mighty moment of clarity. I realized that I had a lot of room to improve and learn more. I had come to the realization that I was not the best programmer, but I also realized that I could become a damn good one if I applied myself to learning more. From that point on, I resolved myself to get better at programming. I started learning about PHPUnit for testing. I started to look up WordPress Coding Standards and making sure my code met them. I started reading technical books to improve my knowledge.

At this point I let go of my ego and realized that I had to work hard to reach the goals I set for myself. It takes a lot of knowledge, experience, and a little bit of luck to make that big break in this industry, and I could certainly improve the first two with some work. This may seem like a really stupid epiphany, that hard work produces results, but honestly that is what I found. For some reason I had given myself an invalid sense of entitlement that I simply didn’t deserve.

I had taken a blow to my ego, but in the end I am definitely better for it. I learned that good code will come in time with experience and as long as you are always striving to improve what you are doing. If you keep trying to make something better, then when you eventually stumble upon your billion dollar idea, you will actually have the knowledge to implement it.

Conclusion

With my recent resolve to improve myself as a computing professional, I’ve begun to read more books on development and programming. One of the most highly recommended books you can find in the world of software development is Code Complete by Steve McConnell. This book is simply amazing and everyone should read it, whether you are a web developer (like me), a software developer, or even a manager involved in the development industry. The book has a quote in it that perfectly summarizes what I’ve learned about myself and about being a programmer in general:

“It’s no sin to be a beginner or an intermediate. It’s no sin to be a competent programmer instead of a leader. The sin is in how long you remain a beginner or an intermediate after you know what you have to do to improve.” – Steve McConnell (Code Complete – 2nd Edition)

As always thank you for reading and please share it around as much as you can! Let me know what you thought of this post in the comments below. I know this was more personal than some of my other posts so I would really like to know what you thought. If you want to tell me something but don’t want it to be public, just email me at alex@dobsondev.com. I am more than happy to communicate via email!