How I got to Now

How I got to now

The following was originally written as a "CV as prose" exercise and currently serves as a long-form explanation of my programming experience as of late Autumn of 2018.

TL;DR

I programed a lot, focused on teaching, and surrounded myself with people far smarter than me.


Panic Pop

In 2012, I built an app that helped people get through a panic attack.

At the time, I was struggling with attacks. When in the throws of one, I'd play a little game on my phone that would serve as a distraction until the adrenaline fizzled out.

In an attempt to monetize the app, the creators loaded the thing with un-skippable ads that popped up in the middle of gameplay. With that update, the game became unusable for panic-fighting and I started to think about making my own. By this time, I had been "programming" for about a year. Mostly this meant on-and-off attempts to follow a tutorial on thenewboston youtube channel or the invent with python books.

My game would need to suck you in as much as possible. The plan was to emulate a panic attack itself; what's more engaging than another competing panic attack? As long as the game was running, the player would be forced to keep their attention on the game.

So I made it about bubbles.

Mostly I made it about bubbles because it was really easy to draw a circle in LibGDX. When you opened the game there would be one bubble. That bubble would rapidly shrink until you tapped it. If it shrunk into nothingness before you tapped it, you'd lose.

But if you tapped it, it would spawn either one or two more bubbles. If it spawned two, then the amount of bubbles on the screen would rapidly grow until you couldn't handle it anymore.

If this were any other game, the goal would be survival, but for a game about stopping a panic attack, the goal is engagement. It needed to be just hard enough that it would require your full attention, but not too hard that it would end too quickly.

The goal wasn't score, it was abnegation.

The likelihood of two circles spawning needed to vary so it never got too hard, but also so that it would gradually divide the experience into "rest periods" and "active periods." This involved a fair amount of math from the Calculus I was in at the time.

Panic Pop was the first thing to ever make me realize that I liked math and sciences.

I ended up building the game while in a cluster of every-day panic attacks. It was my first experience using programming as a method of avoiding and dealing with panic attacks. If you're extremely engrossed in a project, especially a project you feel is important, the silly fears your brain whispers are more easily ignored.

The manipulation of focus has been a wicked boon for my mental health.

When the game released, it was a small hit. Within the first week it had 17k downloads and couple articles written about it on various Android app blogs. But more importantly, it was effective. Similar sufferers reached out to me and told me about how the game had helped them. They urged me continue development.

I did not continue.

I was a little burnt out; I'd rushed the game out and neglected most of my other studies. But when college applications came around, I put Computer Science as my declared major.

At Gonzaga

When I got to Gonzaga, my advisor noticed I was already a little ahead of the program and put me in the second CS class.

Having recently recovered from the worst mental health crisis of my life, it felt validating to be good at something. It also meant that there were plenty of folks that needed help and plenty of opportunities to help them.

In my first CS class, I sat in the front row next to another upstart freshman. As the professor was going through the syllabus, he mentioned that by department policy, homework should be done alone and without help.

"Helping others with their homework would constitute academic dishonesty."

The freshman next to me whispered in agreement and mentioned that he'd heard horror stories of folks getting expelled for helping others.

After the class ended, I walked over to the department chair's office and signed up to be a CS 121 tutor. I'd never taken a CS class, but if you were in the CS 122, no one asked any questions.

I spent the next semester being paid 10 dollars an hour to help people with their CS homework.

Moder

The freshman I sat next to in that first class became one of my best friends. He also turned out to be an incredible programmer.

At the time he was living with a computer engineering and business student, Kyle. We all took one look at each other and immediately decided this was a startup waiting to happen.

And so it was: Kyle would handle the incorporation, bank details, and branding; Ethan would write a web server in the Erlang-based language, "Elixir" and I would make the Android app.

Our first project would be Moder: a fashion sharing app that let you show off your daily outfit.

Were we into fashion at the time? No.

Were we the primary audience for this app? No.

Was there a market for this app? Probably not.

But none of that mattered, because we were 3 dudes in a dorm room making the next Snapstagrams.

Kyle figured out how to get us a bank account, a company ("Moder LLC"), and even got us free legal work done by the school. Every university secretly wants to be the next MIT or Stanford. Ethan blazed through building out the API and even had documentation for it as well! And I... struggled to figure out how HTTP worked. I did make us a logo and built out the main screens though. Heh. Maybe I'd be a designer.

Ethan took one look at the pitiful code I had figured out how to write and rewrote the whole thing in an evening. That stung.

But on a fateful night, with our RA there to witness, we launched our very first product: Moder, the fashion photo sharing app.

It was downloaded by 14 people who dropped the app after a week.

Appdetex

As the summer after our Freshman year rolled around, I realized that I could probably get a programming gig. I typed out a resume, fresh with the cringey title of "co-founder" stamped on the top, and passed it out to every software company I could find in Boise.

Only one contacted me back. The called me on a weekday and asked if I could come in for an interview by the end of the day. I said yes, went across the street to the mens clothing store, bought the cheapest fancy shirt I could and headed to their office.

At the interview they asked me a brain teaser question about balancing weights and then asked me if I knew Javascript. I said yes and then I got the job for 20 dollars an hour.

I did not know Javascript.

I'd like to say that I misheard them and thought they said "Java" but there's a non-zero chance that I just really wanted a job. At this point, I don't really remember.

But I started in a week. And in a week, I would learn Javascript.

By the time I had started, I could tell you all about jQuery, what a "callback" was and how to make an AJAX request.

On my first day they gave me a ticket for a bug and introduced me to one of their five thousand line javascript files. That was by far the biggest road block I'd hit in my coding career at that point.

Nothing quite prepares a brand new programmer for the wall that is legacy code.

But summer is as good of time as ever to learn how to use grep and slowly but surely I was able to make real progress on tasks. By the end of the summer, I had finally understood how HTTP works and they asked to hire me part time in the school year.

Chow Chow

After our resounding defeat from the year before, Moder LLC immediately pivoted to playing video games and trying to get some homework done. We also ended up living together.

Each of us maintained our own side projects and, for a few months, I was tutoring in the CS lab again.

But eventually, we found a pressing problem we could solve: lunch.

In our university cafeteria, it was difficult to tell what actually was being served at any given time. The food rotated and... varied in quality.

So we took our photo sharing app that we'd done before and figured we'd build a Yelp for college cafeterias. It would let people post pictures of the food, rate and share their comments. We'd make a million dollars with no path to profitability, be famous, and Kyle might retire and climb mountains or something.

This time, we actually had people use our app. When we launched, it was used by roughly 25% of the cafeteria's customer base and we quickly got the cafeteria-staff equivalent of cease-and-desist.

The Sodexo employees told us we were "plagiarizing" and questioned how we had inside knowledge.

At the time, we had no idea what they were talking about. But a month later, Sodexo released a nearly identical app to our own which they heavily advertised and our traffic dropped flat.

Contracting

Chow Chow was enough to land us in the local paper and a few folks reached out to us asking if we could build them an app.

A few of them could actually pay and Moder LLC quickly became a contracting business. At 50 to 60 dollars an hour, we were the cheapest around and it gave us the only cash we'd ever make from the business.

In total, we built about 10 different projects for various clients. Out of habit, we ended up building all our web servers in Elixir, which may not have been the greatest choice for code we'd eventually need to hand off to someone.

Applying for internships

I went back and worked at Appdetex for the summer after my Sophomore year so by the time junior year rolled around, I was really looking for something new.

The downside about going to a small school like Gonzaga is no one ever comes to the career fair. That year only a single company came offering paid internships for CS majors and they were paying 13 an hour for an IT support role.

When your school doesn't have a solid connection to the industry, the best shot you've got is to shotgun your resume to as many places as you can.

So I did that. I compiled a list of around 50 companies that were hiring interns and fired away.

The first company that got back to me was Riot Games, the folks that make League of Legends. They hire full stack web developers and I was pretty excited.

When I got the email, I told my girlfriend at the time, who told her brother, who made me promise I would get him some Thresh swag.

The email contained a HackerRank link for a challenge that they send off to potential candidates. I opened it up, read the question, saw the timer, and immediately froze in place.

As 30 minutes went by, I barely typed a single key.

I learned pretty quickly that I wasn't very good at interviews. I bombed a couple more interviews this way; a few with a person on a phone, desperately trying to give hints to an interviewee who really wasn't getting it.

Realizing that this was going to be a particular problem, I gave my school work the stink eye and doubled down on hacker rank practice. If panic attacks had taught me anything, the best way to get through fear is to expose yourself to it, over and over again. I bumped my 50 company spreadsheet to 200 and applied to every place that might have a technical interview that I could practice on.

I bombed a lot of interviews. But when I didn't freeze up, I actually did pretty well. It turns out that ~5 years of programming and ~2 years of computer science course work does help when trying to do timed programming challenges.

Near the end of the year, I got an email from Amazon with a challenge. By this time I'd gone through maybe 15 different "live" interviews and a whole lot of timed practice.

Their interview was challenging, but not the most difficult I'd seen. I passed. The summer after my Junior year, I took an internship for 43 an hour plus housing on the Kindle org at Amazon.

GU Makers and Developers

During my interview practice, some CS friends started talking about various things that the school could offer, but didn't. Most of these things we'd learned on our own: mobile dev, web servers, computer security, etc.

With the help of many, many folks, I started a club, cheekily named GU MAD or Gonzaga University Makers and Developers. It became a gathering place for undergrad tech lectures, group projects, mentorship, hackathons and free pizza.

If the school didn't teach it, we did.

Want to learn to make web servers? We taught that. Want to learn to pass interviews? We taught that. Apps? Taught it. Source control? Taught it. Want to learn about the polytope model's application to compiler optimization? Sure, we taught that too.

After I left, it was taken over by a fantastic underclassman who organized club trips to DEFCON, security Capture the Flag competitions, and speakers from fantastic companies and organizations.

Of all the things I built in college, GU MAD is the one I'm most proud of.

Projects, Open Source, Volunteer

I worked on a grab bag of self-teaching-projects sprinkled throughout the last 5 years. Some projects I worked on, like Chow Chow, were built to make money or solve some fundamental problem. Others I worked on because I wanted to learn something. Eventually I found some projects where I could do both.

The following is a top-of-mind list of things I've built or contributed to in the past. Most are dead, but most were never meant to have a lifespan of more than a few months anywhoo.

  • Docs and code contribution to VX, a 5k start React + D3 library
  • A real-time HTML renderer for ITS students to learn HTML/CSS
  • An iOS exposure therapy app
  • A bash-replacement scripting language with a Golang runtime
  • A "language" that requires tests in the function headers
  • A ton of bad games and a pretty good arcade game
  • An electron developer framework
  • A JS library for creating IDLE games
  • A tool for recoloring and exporting SVG icons
  • A go file testing library
  • Multiple experimental static blog generator for MDX
  • An interactive command line todo app
  • An interactive command line mail app
  • 3 different command line tools that block websites at the DNS hostfile level
  • A Golang island generator
  • ... And just a whole...lot of stuff

In the past 5 years, there was barely ever a day that I didn't find myself in some coffee shop or cozy spot on campus tinkering away on something.

A lot of advice people give to new programmers is to program a lot. I don't think that's honest advice though.

If you only build stuff to learn, then you'll never find the motivation to program a lot.

If you only build stuff for a mission, then you'll waste a lot of time building one particular thing far beyond the point where you're learning.

If I was successful in programming it was because I started projects with a mission beyond learning, but I moved on when I wasn't learning.