I’ll never forget the spark that got me into programming. Before I get there though, this story needs some background.
I got into programming somewhat accidentally after trying to actively run away from it. Back when I was 16, I signed up for a programming course at school. I went into that class with a lot of enthusiasm. At that point in my life, I was burning the latest Ubuntu and Linux Mint releases on blank CDs and installing them on an old Dell tower we had sitting around. This fascinated me endlessly, but I never really understood what was going on. It wasn’t any different than installing a fresh copy of Windows, but I could feel the potential of it all. I was eager to learn what was going on inside my computer.
Unfortunately, the only thing I got out of that course was a paralyzing fear of programming. I couldn’t figure out what an array was. I programmed a knock-off version of Pac-Man with if-statements based on X and Y coordinates. Not particularly inspiring.
When it came time to apply to university, I took a tour of what would be my eventual alma mater and met with the professors for the program I was interested in. I vividly remember asking one of the professors,
“Is there any programming involved? If there is, I don’t want to apply.”
Bless my professor at the time, because he lied through his teeth and told me there was little programming in the entire four years. First semester rolls around and I walk into Computer Programming 1003, an introduction to programming in C.
It was sometime around my third year of university that I came across the spark I mentioned at the beginning of this story. On the front page of Hacker News was an article about how to recompile PHP with the author's own custom syntax feature. I don’t think I can properly convey how much of an epiphany this was to me. At this point, I knew how to write in a few languages but I never considered how they came to be. They were something special, weren’t they? They had to have been ordained by the great operating system deities at Microsoft and Apple. This article showed me the truth: all these languages are programs like I was writing in school. There was genuinely nothing special about them. There is nothing special about any code running anywhere.
This story captures what I have found to be the best way to improve my skills and my understanding of the world. Don’t run away from the things you don’t understand. If you throw yourself into them, you’ll flounder for a while, but eventually those strange words will start to look familiar to you, and you’ll piece together what they are, how they work, and you’ll catch yourself teaching others about those concepts that were once insurmountable to you.
With time, everything becomes demystified.
Learning new things
Any time I come across a subject that sounds interesting to me, I reach for this trick. When I wanted to understand how Google Docs worked, I dug deep on research papers containing equations with opaque notation, open source programs in languages I didn’t know, conference talks, and blog articles.
I did the same when I was fascinated by libraries that added static typing to dynamic languages, and when I wanted to understand how databases worked. I learned both Clojure and OCaml because I couldn’t read the syntax but wanted to understand blog articles about them. I even used this technique with economics, picking up the dense and academic Capital in the Twenty-First Century as my first piece of reading on the subject.
I read, and watch, and listen, knowing full well that I don’t yet understand what I’m ingesting. The superpower is to continue through that discomfort, until you come out on the other side:
- Othello, an operational transform library, a la Google Docs, written in Clojure
- Ice Cream, a type inference engine for Ruby, written in OCaml
- Cobtree, a novel data structure intended as a database storage layer
Perhaps one day I’ll even attempt recompiling PHP with a new feature of my own :)