> Those things can be as complex as an ICU engine.
From a complexity perspective an ICU isn’t nearly as complex as even something as simple is a script scraping a webpages for links and queuing them up for further crawling. I’m not sure if “complex” is the word you are going for but even the TCP state machine has significantly more complexity than an ICU and that’s just a fragment of what it takes to transmit some data.
The composability and abstractions we have in this industry allows you to quickly dwarf any regular mechanical system. There is a reason this is a whole new era beyond the industrial revolution.
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?
Well that’s just because we understand internal combustion engines well enough that we can abstract away a lot of the details. Software engineering is nice because by design it is at a level of abstraction that we can grok it. We’re basically manipulating structural concepts of pure thought. But never forget that reality has a surprising amount of detail. When we interact with the physical world, we rely on abstractions at our peril.
I don't think you can compare both. It's abstractions all the way down, for both. Modern ICE are made from metals compounds that were unknown a few years ago and are the reason they are efficient. Just as you can send bytes over a wire without TCP, you can build an ICE from pure iron. But both then have just very low fault tolerances and break rather quickly.
From a complexity perspective an ICU isn’t nearly as complex as even something as simple is a script scraping a webpages for links and queuing them up for further crawling. I’m not sure if “complex” is the word you are going for but even the TCP state machine has significantly more complexity than an ICU and that’s just a fragment of what it takes to transmit some data.
The composability and abstractions we have in this industry allows you to quickly dwarf any regular mechanical system. There is a reason this is a whole new era beyond the industrial revolution.