Two summers ago I was working as a research assistant at the UCLA Center for Embedded Networked Sensing. I was a programmer on a few projects and mentored some high school students who were there to learn about computer science and how research works.
Most days that summer, after I was done with work, my friend Mike would pick me up and we’d drive to Santa Monica, meet up with Ely, and get tacos and ceviche from La Playita on Lincoln Boulevard. We’d bring the food back to Mike’s, watch an episode or two of Archer, and then code until we got tired. Mike and Ely were starting a startup and I was their unofficial intern. Mike would always say, “You’re helping us out, but I also want this experience to help you level up as a programmer.” He’d let me build out fairly big chunks of their backend and then he’d review my work and show me how to get better at stuff like API design and testing.
One day that summer, a few hours before Mike was due to pick me up, one of the high schoolers stopped by my desk to see what I was doing. He pointed at my terminal window.
“What is that?”
“It’s MySQL, a relational database system. You can write code that saves rows to tables in the database and then go back and query it for rows that match certain criteria. Right now I’m making something that will give me all of the precipitation measurements from a certain airport in a certain year.”
“Why do you need a separate server for that? I wrote a website in PHP once and it worked fine when I just saved the users to a text file.”
“How did you format the file?”
“Each user was on a different line, with their username and then a space and then their password. That way the line was easy to split up.”
“What would happen if you had a user with a space in their username or password?”
That was a “whoa” moment for me. Somewhere along the line I had actually internalized a little piece of software engineering well enough to be able to teach it to another human being. I had leveled up. I’ve had a handful of similar “whoa” moments throughout my short career. Realizing that I had finally grokked non-OO language paradigms on a basic level was a “whoa” moment, as was getting some kernel-level code to work for the first time. Shipping features for increasingly large projects is always a “whoa” moment. Getting a job offer is, too, though that’s usually accompanied by an audible “Yesssss!”
What bugs the hell out of me is that I don’t know how to consciously make the jump from one level to the next. I only know how to look back and say, “Whoa.”
There are certainly things that help, like learning new stuff, doing a lot of reading and writing, and talking to smart people, but this isn’t something that can be hacked. The O’Reilly book of my dreams has a unicorn on the cover. It just happens when it happens.
From what I can gather, plain old hard work is the only foolproof mechanism for leveling up. As much as I crave a more detailed heuristic, if it’s good enough for Conan it’s good enough for me.