Some analogous features of programming and manufacturing:
Most manufacturing organizations BOTH design and assemble 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 book TheMachineThatChangedTheWorld provides a good "big-picture" view of manufacturing.
(For manufacturing, you can substitute construction, craft-work, etc.)
The purpose of programming is to teach a computer to be able to do something. This ability can be packaged (as a "program" or "application") and used by other people or computers.
The purpose of manufacturing is to make some physical thing that is useful (or at least pretty or ugly). This ability is inherently packaged (as the physical thing), and can be used by other people or in other things.
In both programming and manufacturing, what the customer really wants/needs is the raison d'ĂȘtre of the process.
"Design" implies:
Programming has UnitTests.
Manufacturing has inspection of piece parts / components.
Increasingly, manufacturing attempts to prevent mistakes from being made instead of inspecting after-the-fact, which is somewhat analogous to test-driven-programming. See also WilliamEdwardsDeming's FourteenPoints
Programming has AcceptanceTests.
Manufacturing has inspection of the finished product.
Programmers usually try to make their programs behave predictably.
Manufacturers usually try to reduce variation between parts and assemblies.
Programmers use methodologies (such as ExtremeProgramming) to improve how they program.
Manufacturers use methodologies to improve how they design and make products.
Methodologists and consultants explain how to apply programming methodologies.
Manufacturing engineers, industrial engineers, and consultants explain how to apply better ways of designing and making things.
Programmers use metrics to measure the quality of their code:
After you make a car, bridge, or TV, it is still expensive to make another one just like it. The MarginalCost-per-unit may decrease as you make more of them.
After you make a program, the cost of making another one just like it is very close to zero. It costs the same to make the millionth copy as it does to make the second copy. Per copy, packaging and distribution costs decline as volume increases.
The design of the product is as difficult in manufacturing as in software. The difference in the two is the cost of reproducing follow on copies of the original and the reliability of the copy process.
But in manufacturing, the agents of reproduction - people, machines - are proportionately much more expensive than in computing.
Actually that depends a great deal upon what is being manufactured and the quantities. Individual manufacturing of PCs is less expensive in terms of people and machines than large scale reproduction of CDs for software distribution.
Sure, but CDs aren't software. CDs are physical products that sometimes contain software.
Discussion moved to AnalogyBetweenProgrammingAndManufacturingDiscussion
A lot of programming is more akin to ManufacturingResearchAndDevelopment? - the system being made is particular to one or a few customers, and components have to be designed and tested just for them, with some CodeReuse but also many objects and packages being designed from scratch. For example the new GE Jet engine is first designed and simulated in a CAD system like Catia (analogy for software would be RationalRose) put through a regimen of testing including flooding it with water and ice, and design modified according to results before manufacturing starts. Only after this is the manufacturing system started to mass produce them (relatively speaking customers would be Boeing and Airbus, for a few hundred craft). That system would go through it's own design process using CAD and controlled using CAM (Programming analogy would VersionControl software like CVS). QualityControl is done for components and assemblies during and after this process. Further commissioning takes place when delivered to the customer.
See FactorySystem, PurposeOfProgramming, LeanProgramming, AnalogyBetweenProgrammingAndTeaching, DevelopmentTeamModels, ProgrammingAintManufacturing