Saturday, January 31, 2009

Lack of Pride in your Work

I recently downloaded a small program from an open source repository. I took a look at the sources and was shocked. With the exception of some commented out code, the IDE generated all the comments. There was not even a header on the files showing that the source code was under an open source license or giving credit to the original author. I have experience working with poorly written and/or poorly commented code. I admit that I have written some code like that. But I also have written some code that is easy to maintain and is well commented. Early in my career I learned from some excellent teachers. I still have some of the papers that Nelson Beebe wrote about writing portable software almost thirty years ago. Brad Davis taught me a lot when I worked at the University of Utah. I still have some code I wrote way back when that still runs. The code I wrote then did not have a lot of comments, but the naming conventions and structure make it easy to read and understand. If I wrote that code today, I would use some different approaches, but then programming has changed a lot over the last twenty to thirty years. I know the quality of my twenty year old code is better than the source code to the small program I downloaded. Part of the idea of open source is pride in your work. How can a developer lack the pride to polish their code before they publish it to an open source repository? If you publish your code you expect others to read your code. Don't you clean up your home before you invite visitors in? You should do the same thing with your code. Clean and polish your code before you publishing it. Take pride in doing a good job. There is a saying, "a job worth doing is worth doing well." One of the things I require of the people that work for me is that they do a good job that they can be proud of. I know a lot of companies rush to get software out the door. This is particularly true in startups. Get it working is the mantra. But that hurts you in the end. You create products that are not maintainable. I establish the processes and procedure to take an immature software organization and create a predictable, sustainable, measurable, and managed team that delivers quality products on time and on budget.