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.
The difficulty with any new programming language is the sharp learning curve, all that drudgery and bashing your forehead into the keyboard. There was no Codecademy or Stack Overflow in those days. We bought books from the likes of O’Reilly and No Starch Press. I bought Learning Python and skimmed the first few chapters, but I had no project to motivate me. Without something that obsesses you, you’ll never learn to program.
I also didn’t have much time. Running a restaurant kitchen is an all-consuming, life-sucking thing to do. After another year I burned out. I scraped together what money I had, bought a plane ticket, and headed off to lose myself in Asia. Hey, it worked for the Beatles. Sort of.
One day, I decided I needed some more music by the great jazz guitarist Django Reinhardt. I went down to the internet café below my guest house in Bangkok to search for it. The problem was that the keyboard, naturally enough, was Thai. I could change the layout in Windows settings, but the symbols on the keys were still Thai. I figured “Django” was a distinctive enough name that that was all I needed. (This was before the Tarantino movie existed.) I typed it in and, sure enough, Reinhardt was right there in the first couple of results.
But what caught my eye was a website for something called Django, “the web framework for perfectionists with deadlines.” I didn’t have any deadlines, but perfectionist? I can’t tell you how many times I messed with tabs and spaces to make sure my handwritten HTML was properly indented when you viewed the source. Was there, possibly, a web framework for people like me? Tell me more.
Django, it turned out, was a Python framework. If this were a movie, there would have been a badly animated sequence here where Aaron’s face cut through a cloud of Southeast Asian traveler haze, saying, Learn Python. Learn Python. Six months later, back in Los Angeles, a friend asked me to build a website for a bike charity, Wheels4Life. I agreed to do it, on the condition that I use Django. I had a project.
That website turned out well. It led to another. And another. Eventually I had a small business building Django-based websites. It took a couple of years, but I wrapped my head around Python and got to the point where, given a problem, I could work out a way to solve it.
But here’s what surprised me: I never went any deeper. Never wanted to. Python falls about midway down the stack, but it’s unique in its ability to move in either direction. You can work at the highest levels of abstraction and spit out HTML websites (Django’s specialty), but you can also get closer to the machine through an API that lets you import C modules. Working in Python, I could build anything I ever wanted to build. At a certain point, I realized I wasn’t even thinking about the stack anymore. I was just thinking about the possibilities.
I went to the first Django conference, ostensibly covering it for WIRED, but I was also there to meet the founders and learn from the community. What I found was a welcoming group of fellow nerds and programmers all working together to solve problems and build cool stuff. It was all very concrete. Tangible. Even as it arose from abstractions.
To say that we live in an age of abstraction can be pejorative. The word implies an excessive distance from the bedrock truth of things, and we tend to view that—often rightly—with suspicion. But it seems to me, now, that the quest to de-abstract everything, to get to the bottom of the stack, is an urge born of bygone times. The bare metal can be wherever you find yourself, your language of choice, your community. That’s where you build your world.
Source : Wired