05 August 2011

Pleasant Software Development

During software development, I've often been tempted to say "you're doing it the wrong way." In a few cases, especially earlier in my career, I even gave in to temptation and said it. I may have even used a word considerably stronger than "wrong." I've certainly been tempted to.

I sometimes give in to a third-person form of this temptation by saying privately, "so-and-so is doing it the wrong way." I sometimes try to show a little self-awareness by saying, "I try not to frame things in terms of right and wrong, but in this case I can't resist saying that so-and-so is doing it the wrong way."

There are two problems with the idea of "the wrong way." One is that, to my continuing surprise, reasonable people vary widely with respect to what they think is wrong. The other is that even in those few cases where all reasonable people agree there is a wrong way, it is not productive to phrase it that way.

For the moment I'm only interested in the more common case, where there really is not a right and wrong, but it sure feels like there is. For that case, I've developed a bit of a mantra to calm myself down:
I can't say that this is wrong, but it sure is unpleasant.
This seems simple, or even obvious, but it had not occurred to me that I could validate my own feelings while still avoiding false and judgmental claims about what is wrong.

The reason I use the word "judgmental" is that the notion of "wrong" I'm trying to avoid has a moral dimension as well as a technical one. I care so deeply about these issues that I not only confuse truth with beauty, I also confuse technical and moral truths. Or, put another way, I confuse all three of the following things: what is right, what is righteous, and what is pleasant. I probably have something to learn from the Romantic poets, who I think struggled with such issues.

By reclassifying most things from wrong to unpleasant, I don't mean to to minimize their importance. Far from it. In fact, when you realize that you and your coworkers have a difference of taste, not a disagreement about what is right, that usually means it is time to walk away. Be civil, e.g. say goodbye, but walk away. You're not going to change someone's taste. At the risk of being over-dramatic, I think the Serenity Prayer is relevant here:
God, grant me the serenity to accept the things I cannot change,
Courage to change the things I can,
And wisdom to know the difference.
What do I mean by "walk away"? Maybe just end the conversation. But maybe it is time to look for another group at your company whose tastes are more like yours. And maybe, just maybe, it is time to move to a new company altogether.

Now for a final note on a big question: why are there so few facts about software development that most things come down to a question of taste? My gut reaction is that there are more facts out there to be learned, but it is very hard to study these questions. I mean no offense to those who study such questions, but I have to say I pay little attention to their results because I am inherently skeptical of them. They are doing that kind of work that is both really important and really hard.

It is perhaps telling that The Mythical Man Month is still one of the most important books about software development. I think the reason is both that it is a great book and that we haven't learned a lot since it was published in 1975.

Something I read claimed that computer science was still in its infancy and had not yet found its Newton. My initial reaction was "no, it has; Turing is its Newton." But then I got to thinking... Turing's greatest result is a negative one, about what computers can't do! Can that be analogous to Newton?

It is a fun debate to have, but to get back on topic, what I wanted to say was if computer science is in its infancy, then software engineering is positively embryonic.

I initially bristled when The New York Times told me that editorial policy prevented me from being listed as a software engineer in my wedding announcement, because editorial policy is that there is no such thing as software engineering. But then I got to thinking... Maybe those editors are really on to something. If usually all I can say is "It's not wrong, it's just unpleasant," am I an engineer?

1 comment:

  1. Are you a software engineer? I would say so.

    I like to think of programming as the building of machines (engines) made of abstractions rather than physical objects(in the sense of something you can hold in your hand like a gear, a push rod or cam).

    The construction of such machines may be evaluated based on certain objectives qualities (does it do what it's supposed to? does it perform well in terms of consumption of resources) and some less quantifiable properties (is it readable? maintainable?) and some very subjective qualities (does it appeal to the aesthetics of the observer.

    This latter would fit into your "pleasant" category.

    But as to right or wrong, well I guess we're borrowing a concept from the moral world which may not apply well.

    I was recently caught red handed using that term about an alternative software strategy. Its a long story which regarded the integration of programs in themselves. Well.. a story best related with suitable beverages in hand...