Comment by d110af5ccf

5 years ago

Quantifying complexity really depends on the level of abstraction though.

Scraping a static webpage is simple when examined at the level of abstraction involving Python and ready made packages. An ICE is similarly simple when examined from the perspective of basic mechanics, as in the article under discussion.

As you note, scraping that static webpage is no longer simple when you include as part of your assessment the TCP state machine, kernel interface, NIC firmware, and similar layers that had previously been abstracted away. Neither is the ICE though once metallurgy, machining, oil chemistry, and the physics of combustion are included.

Granted, pursued to the logical extreme software eventually drags in everything the ICE did and more due to the physical hardware. But then modern engines are controlled by computers ...

The complexity in the engine isn't in the mechanical concepts that make it tick, it's in the implementation details. Stepping back quite some time in technology, but staying with engines:

The platonic carburetor is a dead simple device: a Venturi, a jet, and a butterfly valve. Real life carburetors are fiendishly complex: multiple jets, an accelerator pump, a choke. And god help you if you have multiple carbs on a single engine and need to sync them.

Everything that goes into making an engine work is similar: cooling it correctly and evenly, allowing for operation while parts expand and contract at different rates as the engine reaches operating temperature, lubricating everything, preventing vibrations that'll make the car feel unrefined or maybe tear the engine apart, valve timing (fixed in most engines at some compromise between performance and drivability), ignition timing (variable in most engines), sealing things that need to be sealed across a huge range of operating temperatures and in the presence of differing rates of thermal expansion (head gaskets, among others) oh, and making it work for a quarter million miles or more with fairly minimal maintenance. And manufacturing them at enormous scale, and holding the tolerances that make all of the above possible across the lifespan of the production line.

And all of that is before we even discuss pollution controls.

Nicely put! I think most "real" engineers dismissal of software engineering is because we can for the most part ignore physics. This somehow seems like cheating and not mathematical enough to be "real" engineering. I've even heard the claim that discrete mathematics, graph theory, and theoretical computer science is not "real" mathematics. It should be clear that a developing complex software system like Unix, Kubernetes, Redis is engineering, but somehow others from different engineering disciplines cannot see that. After bringing so many great inventions and innovations into this world, how can we once and for all make the case that software engineering is real engineering and get the respect that this field deserves?