| They have almost nothing in common, and it's accidental when they do. For instance: - Designing software in minute detail beforehand is generally neither necessary nor possible. - It is impossible for someone to be a capable software "architect" unless they are an experienced software "builder". - It is impossible for someone to be a capable software "builder" unless they are also capable of designing it. - Software can be reused once built, and this matters while building it. - Software is rarely "finished", but continues to grow over time. - Software can be used by an unbounded number of users at the same time. - Software can be reproduced infinitely. - Software can be forked and incrementally changed. - Anyone can design and build their own software, given some talent and a computer. - The business motivations for software development are fluid, and often change rapidly over the course of a single project. I could go on and on. As with many (most?) metaphors, it offers some superficial familiarity, but is ultimately harmful to your understanding. Software is software. Understand it by reading about software and writing software. |
edit: to be more specific about the top three; the first rests on the word "minute" which can be as large or small as you want, depending on what you're trying to prove. The second may be true now, but that's largely because we lack a specific language of high-level software abstraction, so the only way to learn it is to build a lot of things (the general point of the original passage, btw.) The third is just wrong - plenty of people are useful for building parts of software who would have no ability to design a large application. I suspect that those people are a majority of the industry.