Software development is often compared to engineering or construction which has a hidden and debatable assumption that the source code is the product. One camp has declared that source code is the design . Other camps declare that programming as a branch of applied mathematics; see Dijkstra's "uncomfortable truth" quotes. Extreme Programming as a movement may have failed, it at least served as the flashpoint for a new examination of the nature of programming. Instead of arguing about engineering we can brag about how Agile we are or that we are Software Craftsmen.
Programmers are not engineers, nor are they artists. Even when they are compared to craftsmen, the comparison is always with woodworkers or blacksmiths. Programmers are nothing of the sort, programmers are writers. Danny Thorpe discusses how you might tell what sort of literature your app may be.
Danny is on the right track but when it comes to software, there is an elephant in the room that needs to be discussed in the open. Developers do not produce software, they write code. This means that sometimes they need the logic skills of an engineer but just as often they need the communication skills of a poet. Reading and writing, thinking about how to achieve a desired affect through the written word, those are the qualities of a writer. It just so happens that the one of the chosen audiences is a single-minded overly-literal pendantic polyglot idiot-savant, otherwise known as a computer. The other audience is other humans that may or may not have to actually follow the instructions, they do have to understand them well enough to tell if the instructions are correct.
It would be useful to compare programming to other fields and see how the comparison holds up. It is not a coincidence that the games industry has adopted the filmmaking model for the production of games. Good choices would be publishing a book, producing a movie, or creating a recipe.
Programming as publishing
Programmers are the authors. The compiler is the printing press. Publishers are the companies that agree to fund the process in hopes of turning a profit. Self publishing would be like creating training manuals for internal use; no profit is involved but the medium is appropriate for other reasons. The book still needs to be edited, proofread, typeset, marketed, etc. I've covered this ground before but there is still much to contemplate.
Programming as filmmaking
Filmmaking is in interesting comparison because it deals with translating the written word into another medium. Programmers are the writers of the scripts and screenplays. The producer is the stakeholder who desires the software. The director is the project lead. Instead of actors and crew we have the compiler which takes our instructions and executes whatever script of commands we provide; call it a screenplay or call it an application, the actions and actors my be different but it's still a set of commands given to actors to be performed.
Programming as cooking
Programmers create a recipe for a given dish. The recipe is not the final product, the result of following the recipe is. You don't buy a cookbook for the fabulous chocolate cake recipe, you buy it because you want to eat the cake. In this case the compiler would be the tools available to the chef; pots and pans, utensils, and the stove/oven. Having the right tools really helps but even the best oven won't correct a recipe that calls for 2 cups of vinegar for the sugar cookies. Eventually software may survive the patent wars and finally be considered on par with a recipe; instructions to a cook in order to produce the desired product.
Summary
Software is actually a mix of disciplines, all trying to contribute towards a common goal. The game industry may have it right, evidenced by them being to busy producing games and not endlessing debating whether their process is broken or seeking the latest silver bullet. They use directors, producers, art and sound specialists, etc. The compiler is their camera, used to capture the intent of the contributors; the CPU the silver screen for which to project the final product for consumption by the audience.
Thursday, January 21, 2010
Subscribe to:
Posts (Atom)