May 02 2009

On my programming skills

Category: Uncategorizedzvolkov @ 8:45 pm

Amazing! I do software for about 15 years now and I still have no idea what I’m doing :)

Seriously, I still struggle with the basics:

  • overengineering vs. YAGNI
  • cutting corners in order to meet the deadline vs. pushing back on the business
  • risky innovations vs. tedious good old stuff
  • enjoying the freedom of working alone vs. the power of the team

But the worst of all is code complexity. My code tends to get evil. It even bites myself after a few weeks. I put tremendous effort in keeping it simple, readable, maintainable, elegant, beautiful, cohesive, loosely coupled, based on nice straightforward abstractions. But all this effort goes down the drain!

Don’t get me wrong, my code is pretty good by most people’s standards. I mean it’s flexible, more or less unit-testable, and does what it needs to do. However, it is far from simple.

Every change requires substantial refactoring. If another person opened my code with the intent of adding a feature he would HAVE to do something stupid. There’s no way he’d be able to do it RIGHT, even if he was a GENIUS, even if he was my own CLONE unfamiliar with the codebase. Why, why for God’s sake does this happen? Isn’t there some methodology, some technology, some meditation technique, anything at all?

Perhaps I should always write a level or two below what is now my current state-of-the-art level… Leave the innovation to home and hobby projects! But then I would have too much code duplication…

It’s not just controlling the innovation though. It’s being able to come up with new simple abstractions (to replace old abstractions that no longer work) again and again, even at the end of the project’s lifetime, when it seems that the conceptualization should not change already.