The German historian Oswald Spengler considered our age the age of abstraction. Nowhere is this more apparent than in programming, where abstraction isn’t just a conceptual convenience but an absolute necessity. Programmers like to talk about their tools (rather abstractly) as a “stack.” At the top of the stack—the surface most of us encounter first—are simple markup languages, HTML being the best known. At the bottom are the “bare metal” languages of the machine. Thus there is a hierarchy, and the further down in the stack you go, the less abstract—and, in a way, more difficult—programming gets.
It’s not really metal down there, of course. It’s sand—impossibly thin layers of silicon dioxide that conduct electrical impulses in ordered patterns we experience as a screen showing us a rectangle with text on it, flickering images, and so on. Still, you can see how Spengler, though he died before the era of digital computing, was on to something. None of us are keeping 1s and 0s etched in sand in our head, and yet we all manipulate them every day using friendly, high-level abstractions.
The danger of living in this Spenglerian moment is that it’s easy to mistake such abstractions for the world as it really is. This, I think, is why programmers often dive deeper into the stack as they progress through their careers. We think that maybe when we reach bare metal our world will finally be real.
I started, like most, at the top of the stack. HTML. 1995. Geocities. Angelfire. Blink tags. Marquee. I’ll admit it: I loved me some marquee tag, which scrolled text across the screen. I loved marquee so much I ran straight out of HTML and into the welcoming arms of Flash. Blame the Matrix website. Coolest animation ever.
Flash was not really programming. Or, it didn’t start that way. It was an animation app. You drew shapes on a stage, dragged them around, and set keyframes like animated film. A UI abstraction descended from Looney Toons. But then someone shoehorned a scripting language in there, and next thing you know I was writing quadratic easing equations to control the shapes. (Turns out my high school trig teacher was right—I really was going to use this stuff one day.)
I was drawn to the elegance and simplicity of writing code in a text file rather than clicking and dragging things around. This felt like the way it should be: Write code; things happen. But with Flash there was a very limited amount of things that could happen. I wanted to go lower in the stack. I wanted fewer abstractions.
Back then, my escape from the world of programming was a day job running a restaurant kitchen. There’s nothing abstract about the Friday night rush. Oddly enough, that was where I was when I figured out how to get closer to the machine.
It was 2004 when my best dishwasher, Aaron, a young man who enjoyed solving unsolved math theorems in his spare time (yes, it was a lot like working with Good Will Hunting), told me, “If you want to go deeper in the stack, learn Python.” He was smarter than me, so I wrote it down. Learn Python.
Read the full article here







