View Sidebar

Archive for March, 2010

The Shameful Legacy of 20th Century Software

The Shameful Legacy of 20th Century Software

Last week I got to spend an evening reinstalling my wife’s laptop because she picked up some malware.  She received an email from a friend with a link to a YouTube video that prompted her to install a new codec.

Except the codec wasn’t really a codec.

The link wasn’t really to YouTube.

The email wasn’t really from her friend.

Here we are in 2010, 65 years after the advent of "program instructions as data" (von Neumann architecture) and the brilliant innovations that propelled computing forward now haunt us.  The power and complexity of computing is amplified by the connectivity of the Internet, creating an ecosystem ripe for exploitation through clever social engineering combined with some technical trickery.

And it’s not fair.  It’s not fair to the users who suffer, who lose data, whose systems are held hostage.  It’s not fair and the blame for calamities cannot be laid at the feet of careless or naive users.  Daily computing tasks should not require constant vigilance, let alone deep technical knowledge.

Many of us schooled in the last century hold on to notions of software that are simply unsafe for many of our users.  We insist on building software that must run in environments that are not inherently safe.  But there are trends afoot: the closed ecosystem of the iPhone and the iPad, the coming Windows Phone 7 closed ecosystem, and the increasing ubiquity of Internet applications.  Slowly but surely we are moving toward paradigms in which the average user will have much less to worry about because software is vetted and sandboxed.

As a developer I don’t want to be sandboxed in every situation.  I want to be able to make educated decisions about software and run it on my devices, but the default should be safe and secure.  It’s shameful that things are still so treacherous.

March 17, 2010Comments are DisabledRead More
The Dirty Secret of Computer Science

The Dirty Secret of Computer Science

The term "computer science" is a laughable misnomer.  Outside of universities and operating system development, there isn’t a lot of computer science involved in the daily grind of computer programming.  There’s some, of course, but not enough that I would call myself a computer scientist.  Not by a long shot.

I’ve long thought that Donald Knuth had it right when he titled his books The Art of Computer Programming.

Creating software bears some resemblance to art as in the work of an artist.  It bears an even stronger resemblance to art as in the work of an artisan.  Software artisans use the tools and techniques of modern software development to create the wide variety of software that entertains us and runs our businesses.

Eric Sink had it right when he put Software Craftsman on his business card.

Sadly some of the most enthusiastic artisans in our field are disregarded out of hand as geeks and nerds when in fact they have creative and curious minds more commonly associated with artists like poets and sculptors.

I love the way Kate describes the art of software:

The number one response by my aunts/uncles/friends parents etc was “you’re programming? But you were always so creative as a child…” – people need to be told that this is a very creative field. I make business solutions out of ones and zeroes. I change people’s working lives, the entire 8 hours they spend at the office every working day, forever – using nothing but the skin on my fingertips.

Kate Gregory

I worry that software development as a discipline is stunted by its false reputation of being science-y when in fact it appeals to people who are creative and innovative.  I’ve noticed that a disproportionate number of my colleagues in software development are musicians and/or fans or even creators of comic books, science fiction, fantasy fiction, and role-playing games.  Those types of pastimes are qualitatively different than watching reality TV or playing sports. *

The dirty secret of comp sci is that most us who trained as "computer scientists" do precious little that could ever be considered true computer science and certainly not science at all by many definitions of science.  We are artisans abiding by the platforms and boundaries defined by computer science to create truly amazing and useful things.  We are the glassmakers, sculptors, and blacksmiths of our time.


Recommended reading: Knuth: Computer Programming as an Art

* Relax, I’m generalizing. Lots of programmers watch reality TV (though I judge them for that) and/or play sports.  Lots of programmers are not musicians (like, say, me). The set of all RPG players (A) overlaps the set of all computer programmers (B).  B is not a subset of A.

March 10, 20103 commentsRead More
Your Moral Obligation to Future Coder

Your Moral Obligation to Future Coder

Think back to some nontrivial piece of code you wrote.  Now mentally crumple it up into a ball, douse it with gasoline, and light that sucker on fire.  That is what some future coder is going to want to do to your code.

(Take a moment to let it sink in that Future Coder might very well be Future You.)

OK, take a deep breath and exhale slowly.  Future Coder can’t hurt you unless your code is still in use after someone invents time travel.  And if Future Coder comes back to stop you from writing that code, Future Coder won’t have a job fixing your code in the future… (ah, the paradoxes of time travel).

Code has a past and a future.  When you inherit code or parachute into a project, you must embrace the legacy of the code.  Before you mentally skewer the coders who came before you, remember that you probably lack insight into the context in which previous coding decisions were made.  It is, of course, quite possible that the programmer before you was a complete idiot.  More likely, though, that programmer was working under some constraints that drove him/her toward the solution you now curse.

Although it is conceivable that you are the last ever maintainer of said code, you will likely pass on the responsibility to someone else eventually.  You have a moral obligation to your fellow developers to leave behind something maintainable.  Consistency and predictability in your code is a major part of maintainability.  That means if 30 data entry forms use strongly typed DataSet objects but you prefer NHibernate, you write the 31st data entry form using a strongly typed DataSet.  It is irresponsible to create Frankencode systems.  Your personal whims do not trump your responsibility to your fellow developer.

Maintenance developers do not get enough credit.  It is frustrating and often thankless work trying to wrap your brain around systems that have been tweaked by countless programmers to adapt to changing business needs.

The next time you curse someone else’s code, remember that somewhere out there another developer is cursing something you once coded.

<endRant />

March 3, 20101 commentRead More