I used to think I was awesome. I was a programmer with a plethora of ideas, and the programming know-how to accomplish all of it. But I suffered from a curse; as my projects got larger and more complex, they started to get unwieldy, and I would abandon them. “I solved the interesting parts, you see” I would say, mostly trying to convince myself. I would hack together all sorts of neat tools and cool prototypes, but the ability to make a full app or even just finish one was always just out of reach. I knew that I was an excellent programmer, but I just didn’t have the attention span to finish what I started.
I was a terrible programmer. I was one of the worst, actually. I didn’t understand how to program with objects correctly, I didn’t use frameworks in the right way, and I was constantly terrified of changes I would make to my code. I remember I would tell my boss “I can’t do that” or “it’s impossible without a complete rewrite.” I was single-handedly responsible for many months of essentially “lost” productivity while we “started from scratch” to “do it right this time.”
I claim ignorance. As confident and skilled as I thought I was, my first few months at PopCap were equally humbling. I knew next to nothing, and the things I did know were so completely backwards and wrong that I would have been better off not knowing them. Honestly, I don’t know how I even managed to pass the interview process. Obviously someone saw a glimmer of hope in my inexperience and decided to change my life for the better.
Even now I won’t claim to know everything; I’ve learned better over the last two years. As a programmer I was completely broken down, and rebuilt from the ground up. The things I know now are actually useful knowledge, and I can see how they are good, strong building blocks for evolving further as a developer.
I would like to keep the knowledge I have gained. It’s been only a few months since I stopped working in a team that did this, but already I am beginning to forget, and I never want to lose what I learned. I’ve moved all of my old posts into another category, and I will begin anew here by posting the principles and practices I have learned, along with any examples I might have of actual experience. This is strictly a selfish project, but hopefully others can benefit from the experience I have had, and at least glimpse what my team and I used to call Programmer’s Utopia.