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.