Discussion on: The Art of Programming

thecodingstoic profile image

I have to respectfully disagree. It isn't the Art of Programming but the Craft of Programming.

Merriam-Webster defines Craft as "an activity that involves making something in a skillful way by using your hands; a job or activity that requires a special skill; objects made by skillful use of the hands." While this definition focuses more on physical objects the definition is still applicable to programming. After all, writing good code is a special skill--technically done with the hands--to make useful and user friendly programs.

Furthermore, the Ethos of the Craftsman, as described by Brett and Kate McKay, can be applied to programming which I summarize and defend below.

  1. Do things Well for the Sake of Doing Them Well -- I am sure that we have all seen--and likely written-- cringe worthy code but I am also sure that we prefer to read and write well crafted and well documented code. Some of this comes down to competence in our craft but a large part of it comes down to us wanting to do a good job.

  2. Plan(But Not Too Much) -- I have my doubts that any of us have had any program, with the possible exception of Hello World, go exactly as we planned that it would but I am also sure that we all have a general idea of what the program will be prior to putting finger to keyboard. Allowing us programmers the same flexibility as those in traditional crafts.

  3. Measure Twice, Cut Once -- This one may seem to be the least applicable given the mutable nature of our craft. However, when working on a big project there are certain choices that can be changed but at significant cost. As such, the wisdom represented by this maxim--carefully consider the choices that you make before committing to them--are applicable.

  4. Work With What You Got -- while we may not have to worry about imperfections in stone or knots in wood we do have bugs in our code. Instead of scraping an entire project because of a bug don't we sit there, sometimes for hours, figuring out what the bug is and how to fix it?

  5. Cultivate Patience -- I think this one is applicable despite the seemingly fast pace of our craft because we may be working on a project for a long time or we need to have the patience to read source code or debug a program.

  6. Let Go of Your Ego -- Code Reviews. Enough said.

  7. Develop Your Practical Wisdom -- as our competence grows we can more intuitively know which approaches will work when solving certain problems; we can intuit issues that using certain approaches will bring and how to avoid them; we can read code and "see" the results.

  8. Mastery Brings Meaning -- mastery of our craft brings more satisfaction and meaning than what the particular craft is. Furthermore, no matter what the craft is that we practice there is no perfect craftsman. As such, there are always new things to learn and master.

  9. Find Your Workshop -- not only do we have our preferred development environments and our own "toolboxes" we also have the same, or similar, social aspects of our craft that guilds represented in yesteryear's.

So, I think I have laid out a good case for programming as a craft. However, I would like to say that just because I think programming should be considered a craft rather than art doesn't mean that we can't create beautiful programs that function as "art built on top of logic".

I want to thank everyone that read this comment and which everyone a good day.