When I actually get some free time and surf around the blogosphere I often see people referring to software as "engineering". I've always had a problem with this term because it implies things about software development that simply are not. Let's take a look at Dictionary.com for a moment. re: engineering
the art or science of making practical application of the knowledge of pure sciences, as physics or chemistry, as in the construction of engines, bridges, buildings, mines, ships, and chemical plants.
So here's where the whole software engineering thing falls down for me. Building software is not like building a bridge. It's just not. In physical, "real world" engineering you have the laws of physics, near perfect information on durability, composition, balance, etc. A programmer, as Fred Brooks puts it (The Mythical Man Month) is like a "poet who works only slightly removed from pure thought-stuff". There is a plethora of languages and methods for achieving the same results in software development and none of them are exactly the same. For something to be labeled as an engineering science in my opinion, it needs to have known values and be infinitely repeatable. Software development meets neither of these.
For me, developing software is part art and part engineering. Developing a good software solution is a act of creativity, "Art" but also applied science "Engineering." Just as methods for building bridges have evolved over time, so have software design patterns. Finding creative ways to apply them is the artistic side. Just as an talented painter needs to be "inspired" to be truly creative, so do some software developers. There's a big difference in the quality between code that was inspired and code that's just barely good enough to pass. Why do you think there are books with titles like "The Art of Java." Software development is an art but it also requires engineering skill.
No comments:
Post a Comment