The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise. – Edsger W. Dijkstra
The entire history of software engineering is that of the rise in levels of abstraction. – Grady Booch
We live in a world dominated by a virtual machine (the JVM) and a virtual platform (AWS). These are concrete abstractions, despite the apparent contradiction in terms.
Virtualization, however, is just one form of abstraction. We'll talk about the evolution of programming languages, networking, hardware, systems orchestration... and while abstraction will undoubtedly be extolled as a good thing™ we'll discuss the sea monsters that dwell hidden behind the curtain, to mix some abstract metaphors. What is a leaky abstraction and what can you do about it?
This is, indeed, an abstract discussion; practical applications of this talk are left as an exercise for the attendee.
c++ now has lambda functions: plug in the body of a function instead of calling a function. Great for "{return false;}" sort of things, but horrible for stuff any bigger. Not easy to unit test and therefore prove precise.
virtual machines, like JVM, take care of resource management such as memory allocations. This lets the developer "focus on the problem". But what if the memory allocation management is the source of your problem, i.e. the garbage collection cycle is killing your response time?