Becoming a Software Engineer
I've been writing code on and off since 2008 without ever calling myself a programmer. This is the story of why I'm finally going to.
Introduction
I'm a chemistry student and a bartender. The bar I work at closed its doors last week, and nobody can tell me when it reopens. I've had a lot of time to think, and I keep coming back to the same realization: I have been building software for twelve years, badly and without permission, and I have never once called myself a software engineer.
This post is me looking back at every time I almost noticed, and deciding to stop almost noticing.
2008: Faking the internet
We didn't have internet at home. We had a computer, and a browser that opened to an error page.
Somewhere I figured out that if you right-clicked a saved webpage and opened it in Notepad, you could change what it said. So I did. I rewrote the text, swapped the headings, changed the colors with whatever bgcolor and font tags I could find by trial and error, and refreshed until the page looked like something a connected computer would show. It was pointless. Nobody saw it. I spent hours on it.
I didn't know the word HTML. I knew that the file had angle brackets in it, and that if I changed the stuff between them, the page changed. I think about this a lot now, because it's the clearest version of why I like this: you type a thing, and reality updates.
Cornelius: artificial intelligence on paper
A couple years later, 2009, I decided I was going to create the first artificial intelligence. Its name was Cornelius.
Cornelius lived in sheet of printer paper. The design was a tree of questions. Did the user say hello? If yes, say hello back. If they asked a question, does it contain the word "weather"? Every branch ended in another branch or a canned response. I filled dozens of pages. I was convinced that with enough pages it would eventually just... be intelligent.
It was, of course, a very large pile of if/else statements. I didn't have a computer to run them on (lost it during the housing crisis of 08), so I ran them by hand, playing both the user and Cornelius. Looking back, I had independently discovered decision trees, chatbots, and the exact wall that every rule-based AI hits: the world has more cases than you have paper.
I never finished Cornelius, but I still have the paper.
2013: Pickup
By 2013 the problem I wanted to solve had changed. I loved to play basketball and there were times my friends couldn't play. My local park was either empty or had a full court run going, and the only way to find out was to show up.
So I wireframed an app. I called it Pickup. You'd open it, see a map, and pins would show you where people were playing right now, what sport, how many were there, and whether they needed more. You could post your own game. It had profiles. It had a "heading there" button.
I drew every screen in pencil. I had a splash screen. I had a logo. I had absolutely no idea how to build it, and I didn't try. The sheet of paper that this was done on, is in the same box as Cornelius.
2016: Flappy Bird and Swift
Flappy Bird came and went, and then the source code for a hundred clones was everywhere. I downloaded one and started changing things. The gravity. The gap between pipes. The bird sprite, which I replaced with a picture of my principal's face. I didn't understand most of what the code did, but I got good at finding the number that controlled the thing I wanted to change and turning it up until it broke.
This is script kiddyingtinkering with other people's code to make it do something new, without understanding most of it and I'm not embarrassed about it. It's how I learned what a game loop was, what a sprite was, what collision detection was, all by breaking them.
It also made me open the Pickup paper again. I thought: if I learn this properly, I can actually build it. So I bought a Swift book and worked through it. I got as far as a map view with hardcoded pins and a table of fake games. It wasn't Pickup. But it was the first time I'd written something from a blank file instead of someone else's. I gave up when I found out I needed to pay $99 for the apple developer program. I was still a kid. Tangent: isn't it crazy that this is the price for everyone? Your small start up and solo developers must pay the same amount as Instagram, Facebook, and Banking apps.
High school: the AP Computer Science kid who wasn't in AP Computer Science
I never took the class. I was not a good student until I got to college. Didn't really care about school, so I found no reason to take a class in something I kinda already knew. But my friends were in it, and they'd get stuck, and they'd text me.
So I learned Java by reading their assignments and doing them things like a card shuffler, a function that returns your horoscope and some other ones.
I didn't think of this as being a programmer. I thought of it as being helpful. But I had become the person people went to when the code didn't work, and I'd never been formally taught any of it. And frankly it was terrible, I believe that one assignment contained 600 lines of conditionals.
2017: Selan Dice Game
In 2017 I actually shipped something. It was a dice game called Selan Dice Game. Named after my Calculus teacher. He had this game that had 5 white single digit dice and 2 black dice one single digit and one double digit. All six sided. Roll all the dice and you must use different operators to use all white dice only once to equal the black dice. Example being White: 3, 6, 4, 6, 2 and Black: 30, 1 meaning 11. So the solution becomes, 6*6 = 36 / 3 = 12 + 2 = 14 * 4 = 56.
I built the whole thing, start to finish, with no course and no one to ask. I read documentation. I got stuck on things for days that would take me seconds now. I learned what a build error was, what signing was, and what it feels like to hit "publish" and have a thing you made exist somewhere other than your own machine.
My peers loved it, and my teacher utilized the website for the game during class on the projector. I still remember checking how many visitors it got daily. Even though it wasn't many, I was still very happy. I have no idea how but to this day it is still online.
And then I went to college for chemistry.
Chemistry, bartending, and Neat on the Rocks
I went to college with the intention of attending medical school, and I wanted to study my favorite subject, Chemistry. This should've made the MCATs a breeze. Little did I know this decision would bring me to where I am today.
I got into bartending because a bar owner needed an extra hand and hired me with the simple words: "You know Chemistry right? Get back here it's the same shit" my first day I had to ask what was in a Gin and Tonic but eventually he was right. It was the same shit.
Over the years I started building a catalog of cocktails on a spreadsheet to track the macronutrients consumed per cocktail. I gave this spreadsheet to some of my athletes so they can also track their consumption, and someone suggested I can make this into a website.
Neat on the Rocks is a cocktail reference. You look up a drink, you get the recipe, the ratios, what glass, what garnish, and what to try if you liked it. I am building it with React and Node. It will be me finally doing things the right way to learn everything I need to know to get into the industry.
The shift
So here's the realization, written down so I can't walk it back:
- At 2008 I was editing HTML.
- Cornelius was a decision tree.
- Pickup was a product spec.
- The Flappy Bird clones were me learning to read and debug code.
- Swift was me learning to write it.
- AP Comp Sci was me learning to teach it.
- Selan Dice Game was me shipping it.
- Neat on the Rocks is me being asked for more of it.