In the early days of a thing, abstractions are few, and you have to manage all the incidentals too.
- Want to own a computer in ~1970? You’ll probably need a whole bunch of floorspace, dedicated power feeds, a pipe system for cooling and more
- Want to write some software in ~1985? You’ll probably need to manually manage your own memory
- Want to run your own SaaS company in $year? You’ll probably need to own and manage a series of servers across multiple datacenters.
Time passes and it becomes easier and more accessible to get the end results. The secondary aspects get black-boxed and abstracted away, so you only need to care if you need to care.
- There came pocket-sized computers cheaper than textbooks
- There came languages with garbage collection, better optimising compilers etc.
- There came Infrastructure as a Service, Platforms as a Service, Functions as a Service
Some of those who predate the abstractions and improvements will decry the new ways – “They’re less powerful”, “They’re less flexible”, “The barriers to entry are lower so new users know less and cause problems”.
Some of those who came in afterwards will be dismissive and underestimate the now-hidden complexity – “Nobody needs to care about X any more”, “Y is a silver bullet for every problem”, etc.
Those unfamiliar with the underlying fundamentals will struggle at the edges of the abstraction. They’ll be at a loss when things break and the internals are exposed. They’ll make worse choices among things that seem equivalent but aren’t really underneath.
Those unfamiliar with the new abstractions will reinvent the wheel in a non-compliant fashion. They’ll achieve the same results but slower and in a more idiosyncratic style that gets harder to work on. They’ll miss out on advances going on around them.
This isn’t just about software and computing – look at cooking with home sous-vide kits and electric pressure cookers where you don’t need to keep eyeballing the progress, or the massive technological advances in sports equipment.
What’s best? As with everything, a balance and a mixture.
Use the new shiny abstractions, but make sure you know what’s going on underneath. Know when the fancy tool is right for the job, and when you need to just get in there with a hammer. Understand that at scale or under constraints that the low-level details matter more, and recognise when they come into play and when you’re just pre-optimising.