Where is your favorite place in terms of programming? What application do you like to work on most? Where do you feel at home the most? For me it’s a program that I’ve been working on during my job for the past three years, although I started building the codebase for it four years ago when I first came to Japan and Asahi Kasei. I took over a program from someone else, and it’s been growing ever since, evolving into a several applications that are client-server based with a database back-end. It’s become a framework. Sometimes I get reassigned to different tasks and progress is slow, but there were also times where I actually had a team of people work on it together, and progress was fast. Essentially there’s no stopping it any more. Some of the tasks performed in my company can simply be accomplished better if people use the program I developed, and I’m very proud of that. The framework has become my masterpiece.
No matter what my current task , I always think about improving ‘my little baby’, and sometimes I try a bit too hard to make it the solution for everything. If my boss asks me to make him a coffee, I’ll expand my framework with a makeCoffee() function. Well, that’s taking it a bit far, but in the world of speech recognition there is only a certain variety of tasks, and over the years it’s become easier to expand the existing framework than to develop something entirely new. But part of the reason is that I’m very familiar with my own code. It’s the place I feel at home. When I have some free time at work, I look over my code and refactor it, write unit tests or fix that annoying bug that’s been on the bug tracker for the last two weeks. My ‘relaxed-state’ as a programmer is when I am working on this program. It’s just comfortable there. I feel happy working on it.
This can be seen both as an advantage and as a disadvantage. A ‘neutral’ programmer, having no prior experience with the framework that I’ve developed could accomplish a certain task in, say, two hours, by writing his own tool form scratch. If he had to use the existing framework, in the worst case (and in reality it’s always the worst case) he’d have to spend another 1-2 hours getting accustomed to the IDEs, programming language and framework before he could spend only one hour to use the framework to accomplish the same task. Both programs might work exactly the same, but in our company there’s a very clear rule: “your software will only be used for as long as someone supports it”. This has previously been an issue when software developed by interns basically got forgotten or disappeared due to lack of maintenance. When thinking on the long term, it’s always proved to be better to use and expand an existing framework rather than creating your own quick-and-dirty tool.
I think it’s largely because of a programmer’s pride that this kind of frameworks develop. Whenever people come to me to tell me of a problem in my tool, I do feel this as a kind of personal attack on my skills as a developer. I feel the need to fix it immediately and release a new version as soon as possible, just to get one step closer to perfection. Hubris indeed. But thanks to this feeling software is evolving, and thanks to a programmer’s pride the software does not only look clean from the outside (towards the user), but also from the inside. It’s the difference between a poorly maintained garden and a well-maintained one. Even if they grow the same things you can still notice the difference in attitude of the maintainer.
When thinking of examples of this I came up with my recent assignment of creating an iPhone application. While Apple takes very good care that their applications (and those in the app store too) are of excellent standards when it comes to end-user experience, the same cannot be said about the developers’ experience. This is all IMHO of course, but I simply don’t feel the joy of developing in Objective-C. Everything about it, the IDE, the language, the coding conventions, seem to encourage ugly designs. I don’t feel happy coding in XCode in Objective-C. I miss a lot of things that Java has, too much things to name here. As a proud programmer I make sure that my iPhone application works perfectly, and that there are no bugs. I will test my app extensively until I am completely satisfied with the way it works. But then I switch back to Java and think about that exciting new feature that I want to add, or a cool new way to refactor the code to make it more clean. I’m just not quite feeling the love.
My favorite place is Eclipse, writing in Java, working on the framework that I helped develop for the past four years. It’s one of the things in my life that I am most proud of. In some way I wish that I could continue to work on it after I move on from this job (whenever that will be), but I know that is not to be. After all, when the last maintainer leaves, the software dies.