Sometimes people would ask me what I do for a living. My typical response would be "Software Engineer" or "Software Developer". Invariably the questioning party would give me a blank look and then say "Ooh, you are a computer programmer".
Yes I am a computer programmer. But lately I have been working as an architect. Now when I give "Software Architect" as my job title, I just get the blank look.
Architects are people that design sky-scrapers, what does this have to do with software? "Well, I am primarily concerned with the high-level design of software applications", I might say.
"Ooh, you are a computer programmer" comes the predictable response.
Yes I am a computer programmer, but now I am much more, I have become a metaphor, a figure of speech.
Actually I harbor no ill feelings towards the trusty metaphor. It seems like the more colorful and metaphorical the metaphor, the better. In celebration of my friend the metaphor, I think I will post the occasional blog that catalogues some of the metaphors that have served me well.
Metaphor 1: If I am an architect, other computer programmers may be cabinet makers.
Cabinet makers are among the most crafty of the tradesman and thier skill is evident. One may make the claim that the cabinet maker is at the pinnacle of the building trade. But an extremely talented cabinet maker may not be equipped to design a building. Some software developers delight us with thier wizardry as they extract data streams from serial ports, handily twiddle bits through the ether(net) and such. But when they scale up there endeavours it becomes a mess - spaghetti wizardry. Unstructured, insane but yet genius.
I shall now metaphorically refer to these developers as cabinet makers. As an architect, it is my job to scope out where the cabinets need to go. I like to dabble with the occasional cabinet, but as an architect I am increasing focusing my efforts to the big picture.
Metaphor 2: Software is a machine.
Many times you hear about how the software industry is immature because of quality issues. Mechanical systems off-loaded complexity to electronics and electronics off-loaded complexity to software. When we find another place to dump this complexity, then the software industry will become mature. The point is that software is a very efficient way to create a very complex machine. This machine could be created in hardware, imagine Babbage with a CNC Mill/Lathe! If software statements where represented using moving, mechanical parts, a software app would approach the complexity of an aircraft carrier.
So a software app is a very complex machine that is comprised of multiple moving parts.
Lets plan accordingly.