'The Ladder Of Abstraction'
Nikita Tonsky:
The software crisis is systemic and generational. Say, the first generation works on thing X. After X is done and becomes popular, time passes and the next generation of programmers comes and works on Y, based on X. They do not need to know, exactly, how X is built, why it was built that way, or how to write an alternative X from scratch. They are not lesser people or lazier, they just have no real need to write X2 since X already exists and allows them to solve more pressing tasks.
The biggest a-ha moment of the talk was that if you are working on Y and Y is based on X, that does not imply automatically that you would know X also. Even if the people who build X are still around, knowledge does not spread automatically and, without actual necessity, it will go away with the people who originally possessed it.
This is counter-intuitive: most people would think that if we’ve built, for example, a space ship or a complex airplane in the past, we could build it again at any time. But no, if we weren’t building a particular plane uninterruptedly, then after just 50 years it is already easier to develop a new one from scratch rather than trying to revive old processes and documentation. Knowledge does not automatically transfer to the next generation.
In programming, we are developing abstractions at an alarming rate. When enough of those are stacked, it becomes impossible to figure out or control what’s going on down the stack. This is where my contribution begins: I believe I have found some pretty vivid examples of how the ladder of abstractions has started to fall and nobody can do anything about it now because we all are used to work only at the very tip of it.
The short videos of UI glitches in various apps are mind-boggling. And I’m pretty sure I’ve seen similar oddities on my own devices recently as a result of I(Pad)OS 13.
Back when I was did software development, I dealt with a certain level of abstraction. That was acceptable. Because the alternative was to program directly to the Windows APIs. Or directly to the hardware back in the days of DOS. But now? I know Apple are pushing Swift for software development nowadays. Microsoft have gone through so many APIs that I’ve lost count of where they’re at now. Google are pushing Go and Kotlin, Mozilla is betting big on Rust. The languages I knew back in the 1990s and 2000s are at best considered uncool. Web development is now JavaScript all the way down. Except even that is uncool now, frameworks are the new think.
I don’t know what the answer is. All I know is that I’m glad I still have some of the analytical problem-solving skills I developed back in the day. I’ll be needing it to navigate around this new world of software WTF.
If you'd like to comment, send me an email.