1) Code and execution environment 2) Compute infrastructure to run (1) on
Serverless, to me, means that (2) is abstracted away from you. You submit (1) to the serverless service (AWS Lambda for example) and the service figures out how to run it. Serverless does not mean there are not any servers. It is just something you do not need to ideally worry about. Abstractions are leaky though, and they can leak in very mysterious ways the higher up the abstraction tree you go.
These days, he may even use a brick robot to automate bricklaying, and still be interested in the mortar used.
Same for software ?
I think another analogy is like building a skyscraper. The construction worker needs to worry about the floor below him and the floor he is working on. Everything below him is an implementation detail from his perspective.
If N is the cutting edge level of abstraction, N+1 is what research is doing, N-1 is where I like to operate at while I wait for N to stabilize.
Take a stack of AWS services for example. AWS comprehend medical is an abstraction built on a bunch of NLP building blocks. AWS health lake is an abstraction on top of AWS comprehend medical. At this point I don't care about the NLP underlying AWS comprehend but I don't want to use AWS health lake until it has a chance to stabilize and another abstraction is built on top of it.
Outside of bare metal programming, pretty much anything done with inline assembly can already have been done with straight-up C. BUT by using inline assembly, the coder has (nearly) direct control over what the compiler spits out.
And the reason I say "nearly," before someone corrects me, is that there are multiple ways to express the same operations in assembly.
For example, ADD AX,BX can be compiled as C303h or D801h... the end result is exactly the same, but the binary code is not at all the same. Incidentally, this is one of a few methods forensic agents heuristically determine what compiler was used for a given malware sample.
It's abstraction all the way down. Even at the Assembly Language level.
• I don’t need to manage the infrastructure for each of the services I depend on • My compute and other services are billed based on usage, not for being switched on • Everything scales up as needed, and just as important, down to zero