Discussion moved from AnalogyBetweenProgrammingAndManufacturing:
Many manufactured products now have significant software content, e.g. appliances.
Most manufacturing organizations do BOTH design and assembly of physical products.
Similarly, most programming organizations BOTH write code and compile it.
Therefore, this analogy compares the full life cycles of programs and manufactured goods, including both "design" and "compiling" / "assembly".
The analogy applies, but only if you equate creating software with the design process; the actual manufacturing process is completely automatic. See also TheSourceCodeIsTheDesign.
(Please feel free to refactor, delete, and/or change the meaning of the following thoughts. As originally written, their author thought they were jumbled, confused, and likely to have errors. Also, please don't let this editing note change (if or) how you would edit the rest of the material on this page.)
Some thoughts about this comment:
I don't think you can compare programming and Manufacturing at all in the AutomaticManufacturing? sense. Think about it, programming is not automatic. Mostly, manufacturing is. The end product is known, the process that lead to it is defined, the tools/machines are in place, it just needs a flick of the wrist to start manufacturing.
What programmer is going to write a piece of code and then repeat that process in mass volume? Or recreate the code by copying it? Senseless, it's not programming.
If you look at manufacturing a single piece of furniture like a CraftsMan? would, then the above issue of designing and getting feedback during manufacturing would take on meaning.
I agree stronger to the GardeningAnalogy? presented in ThePragmaticProgrammer, page 184.
This appears to be a rather naive view of manufacturing.
In manufacturing, the end product is only partially known; it is up to the users to determine what further refinements are necessary. Individual pieces can always be improved resulting in improvement to the end result. Underlying components change due to changes by suppliers and changes of suppliers. Manufacturing engineers are constantly trying to make the manufacturing process more responsive to change, make it more agile.
The analogy between programming and manufacturing is not inappropriate because of inherent differences in the two, it is inappropriate because few programmers understand manufacturing, hence the analogy does not provide insight to the target audience.
Although there is certainly a strong design element in manufacturing there is a single clear point of differentiation between software development and manufacturing. In manufacturing the whole point of design is to get to the point where things can be repeatedly produced in some quantity, even if only one. In software development the design IS the while point. There is nothing else. In software, it's DesignAllTheWayDown - there is no element of production, no repeated mechanical operation to produce "things". Everything, from the crudest sketches to the lowest level line of code, is a design.
Many, if not most, of the comments on this page are still missing a very fundamental point: TheProgramIsNotTheProduct?. For one thing, unless you work for a software company selling shrink-wrapped software products you aren't ever selling the program. Conventional wisdom says most programmers actually work for internal IT, so it's safe to say most programs are never sold.
So what is the right analogy? TheProgramIsTheAssemblyLine?! So measuring bugs in the program is wrong. Comparing compiling to manufacturing is wrong. What you should be measuring is the output produced by the program. Is your program a website? Measure the number of pages it can produce per unit time, without error. Is it an editor? Measure the number of pages it can spell-check per unit time, and with what accuracy.
When measuring the output of a manufacturing process, you literally don't care what the design looks like, so long as it consistently produces the same output. This is not to say the design doesn't matter. A bad design may be prone to unexpected failure. It may be harder to maintain or have a shorter service life. It may lock you into a service contract with the manufacturer. And coincidentally [ahem] all these factors apply to software.
So yes, programming can be compared to manufacturing. As long as you remember that TheProgramIsNotTheProduct?, TheProgramIsTheAssemblyLine?.