I always thought of myself as a pretty hot-shot programmer. I had been programming since I was a kid. It wasn’t hard to find my first programming job. Quickly, I recognized that I had much more programming experience than some of my older coworkers. Comfortable with my skills, I took it easy… I took it easy for a long time.
Then, I met a new guy, call him Aaron. Aaron was obviously much better than me in most areas. He was younger than me, too. He made me realize I hadn’t really improved much in the past years. I was an ad-hoc hacker, and a mediocre one at that.
This alerted me to consciously try to improve myself, and especially the quality of code I write.
Aaron led me to learn a lot of things. He taught me how most of the code I write will have to be maintained and extended for at least several years, so I should write the code with that in mind. I should write automatic tests for my code. Aaron was always talking about how I should never stop at the first working version, but refactor and refine until the code is elegant. I discovered that the languages and tools I was using had a lot of room for improvement.
The most important thing I learned from Aaron was to never stop learning.
After a couple of years, Aaron left the company. I felt empty. The past years with him had lifted me to whole new levels of skill, and I realized I was now much better than the rest of the team. They were still writing bad code, and doing the same mistakes as before. I tried to teach them, but they had no interest to learn. In fact, they were annoyed that someone would be so arrogant to tell them what mistakes they were doing.
Luckily, I was able to change to a small motivated team. Everyone there was eager to learn more, and I loved it.
I’m glad I met Aaron. Without him, I’d probably still be working with the old gang, going nowhere, and thinking too much of myself.
This post is based on my answer to a Stack Overflow question.