Information Technology Dark Side

Struggles of a Self-Taught Coder

Information Technology Dark Side header image 2

Software Development is an Art, and a Craft, and a Science, and a Profession

September 10th, 2008 · 3 Comments

This is a followup from my earlier post, Software Development: Art, Craft, or Science. I initially sent it out to the attendees of the Workshop on Technical Debt, since it was discussed there. I thought I’d post it here as well.

Anyone can behave with professionalism, regardless of whether they are engaged in a profession or a craft or whether there are agreed upon standards for what they are doing. Professionalism is an attribute of a person, not an activity.

Professionalism, to me, means much more than keeping your promises. Among many things, it means:

* Continuously learning more about software development
* Always trying to make the best work product I can
* Working to advance knowledge about software development practices that don’t suck
* Being calm, nice, firm, clear, etc especially when it’s hardest
* Etc.

These are personal attributes that can be customized to any chosen activity, from driving a garbage truck to running a major corporation. The precise meaning of professionalism varies from person to person and they often conflict. For example, a “professionalism” I frequently encounter and don’t agree with is “it’s just business – it’s not personal.” For me, anything I’m going to spend 1/3 of my life doing had better be personal.

Though you wouldn’t guess it from my recent blog post describing software development as a trade, I’m beginning to think we are getting a little too hung up on semantics. Profession has a pretty broad meaning, according to Webster: a: calling requiring specialized knowledge and often long and intensive academic preparation b: a principal calling, vocation, or employment c: the whole body of persons engaged in a calling

I’m not sure why the software development profession (webster’s “C” definition) is so intent on defining what software development is in a mutually exclusive way. After some reflection, here is the argument I would make to nearly any “Software development is a __________” statement.

* Software development is a profession because much of the world requires you to have a degree if you want to do it.
* Software development is an science because it requires the ability to model problems abstractly.
* Software development is a craft because it requires great mental dexterity.
* Software development is an art because sheer creative genius is often the key to building good software.
* Software development is a trade because anyone can do it.
* Software development is a profession because you can study it for years and still not be a master of it.
* Software development is an art because understanding it doesn’t mean you can do it well (sort of like painting, drawing, writing, etc).

The point is, I can find arguments for software development to be any one of these things. What I can’t find, are arguments against any one of these, like:

* Software development is NOT a profession because ________.
* Software development is NOT an art because _________.
* Software development is NOT a science because __________.
* And so on.

Though I may not have felt this way a week ago, and I may not feel this way a week from now, here is what I now believe:
Software development is a profession. And an art. And a science. And a craft. And a trade. And probably some other things as well.

I think what you believe software development is is more of a reflection of the aspect of SD that you are good at than a reflection of the nature of software development. If you are intensely creative, you may see SD as an art. If you are brainy and analytical, it may be a science to you. If you are pragmatic and just want to ship software that doesn’t suck, perhaps it is a trade.

This is one of the fundamentally cool things about software development. Because it is based on entirely abstract constructs, you can “polymorph” it to be whatever you want it to be. I think that each of these definitions of SD is useful to different people – it helps them understand what makes “good” software and what doesn’t.

Sorry for rambling.

If you enjoyed this post, make sure you subscribe to my RSS feed!
Stumble it!

Tags: Uncategorized

3 responses so far ↓

  • 1 Michael Kelly // Sep 11, 2008 at 8:55 am

    Well said…

  • 2 Custom Software // Oct 10, 2009 at 4:40 pm

    Software Development is defiantly a calling. I think you have taken it to the next level! Good read and look forward to lots more…

  • 3 Software Development Services // Sep 14, 2011 at 1:58 am

    Nice blog and written in very attractive language as well. If a project has not achieved system architecture, including its rationale, the project should not proceed to full-scale system development. Specifying the architecture as a deliverable enables its use throughout the development and maintenance process.

Leave a Comment