I am currently a Technical Lead and Staff Software Engineer at Google, and have previously worked at a small startup, at a mid-sized company, and even for myself creating award-winning software millions of people use everyday. My journey has been unique—I do not have a degree in Computer Science, nor have I ever taken a course or even opened a book on programming. Everything that I've learned, I've learned on my own and for free.
In the Early Days
I suppose I've been a programmer since I was about ten years old. I would tinker on our "family computer" in the early '90s—an i386 running MS-DOS that my father got from work.
I remember opening up the source code for
Gorillas
in QBASIC and breaking changing things enough and seeing
the real affects it would have on the game. I was fascinated.
A few years later we got a 28.8kbps dial-up modem and signed up for Prodigy Internet. The World Wide Web was a gateway to infinite information (and, of course, time wasting). I began looking at websites' source code and quite easily grasping what needed to be done to start building a website of my own. I signed up for Geocities, opened MS Notepad, and created my own corner of the Internet with some classic preteen websites around video game cheats and "The Simpsons" WAV files. I even remember making a multi-paged, JavaScript quiz for the Legend of Zelda. (And let me tell you something: late '90s JavaScript was something else entirely).
Progressing through highschool I was artistic, outgoing, and [occasionally] very funny. When it came to schoolwork, I was both a slacker and an over-achiever at the same time. Did I ever read more than half of an assigned book? No way. But make me present the book report using PowerPoint, and I would invest in creating the most polished--and hilarious--presentation. I would take these qualities to create silly graphics and animations like creating movie posters with my girlfriend & me as the headlining stars, or create animated cartoons with my friends' faces in Flash. (Essentially, creating personal "memes" before that was even a word.) I really enjoyed entertaining people and especially making people laugh.
College
When entering college I spoke to my conselor about my aspirations: computers and comedy. We talked through applicable degrees and came away with a decision which he somewhat excitedly concluded that he had "honestly never seen anyone interested in majoring in both Computer Science & Theater."
Well, he didn't get to see that goal come to fruition. As easily as the engineering coursework came to me, advanced calculus mathematics simply did not and with the high demand of this new (at the time), controlled CompSci major, I missed the cut by .02 GPA points. And so, I switched my major switched to Journalism for really no particular reason at all. (I did hold on to the Theater minor degree).
Despite not being officially in Computer Science, it didn't stop me from continuing to dive into computers, software, websites, and tech in general. And I still liked making people laugh. I created my own fake-news website without even knowing The Onion existed and got more into Flash and telling stories through animation.
Post-College
After graduating, I knew that journalism wasn't going to pan out at all (though I do believe it was a fundamental base). I moved back home after college and would now call myself a "poor freelancer" doing graphic design crowdsourcing and building an occasional static website.
On my own time I was still creating fun and interesting digital artwork and Flash animations. At some point my Flash skills moved over into my freelancing and I would construct complex and whimsical interactions which then started to become more and more complex, turning into full-on Flash ActionScript applications.
I knew that freelancing wasn't going to be a real long-term solution in the current space. I needed more skills. I had a firm understanding of web frontend technologies—like HTML, CSS, & JavaScript—but I didn't have any skills in the backend. So what did I do? I over-engineered the crap out of a personal website.
The personal website I was going to build was really just to have a collection of my both my fun work and my freelance work; a portfolio if you will. It had absolutely zero reason to be anything complicated. But if it wasn't complicated, then I wouldn't really learn anything either! So I stretched my brain to over-build every corner of my own Content Management System. I had built from scratch a full-on bulletin board system with user signups, mail lists, and even admin dashboards. Sure, I learned new languages and the deeper complexities of PHP, MySQL, and Apache— all of which I had never even heard of, let alone write and build. But I also learned so much about building full-stack websites than I ever would have in college. General web security, hashing, password storage, SQL injection, XSS, cookies. I also stretched the capabilities of the front-end... CSS was brand new at the time and AJAX wasn't really a thing yet; heck, there wasn't even jQuery!
And I did all this without taking a class or even opening a book. Everyhing I learned was free on the internet and with a lot of trial and error.
The First Job
While I considered myself far from an expert, I now had the confidence that I could learn and do most anything with computers given the time. I ended up getting a job at a medium-sized e-learning and general technology company. Though the position was not in programming but as an entry-level graphic designer in the marketing department. Most of my day-to-day was in Photoshop or Illustrator, even though most nights I'd still continue to program and learn.
It wasn't long until I was asked to build a marketing websites. That turned into another, and then a dynamic web portal, and another, etc. and before you knew it I had climbed from an entry-level graphic designer to the lead & manager of a small team providing both creative and digital services to the company's many sub divisions. We'd crank out dynamic web portals, and complex flash mini-apps for the e-learning suites, and at the same time create pixel icons or business cards for the sales departments.
After a few years, I decided to start looking around for another job, as my compensation did follow the same upward trajectory as my position. While I learned a lot it was now time to move on, and move cities.
The Start-Up Life
I was in the middle of planning to move to a new city with a friend of mine. I worked with a head-hunter who lined up several interviews not really knowing what to expect; there were a couple software developer roles at startups and a medium-sized business and even a couple graphic design roles at marketing firms.
I ended up getting three job offers out of maybe five interviews in total; both for software development at different sized companies. I accepted the role at a small startup; I think I was employee #9. The offer was about a 75% increase in salary from my current position!
The role was a UI-focused JavaScript engineer and I immediately realized that I needed to brush up on my skills. Most of my new engineering concentration was spent learning the backend tech I thought I would need. While I was very competent in web frontend in general, I never really tried to build a large-scale, single-page, web application before. Javascript closures, variable scope, the "this" keyword, etc. weren't really things you needed when only using JavaScript to add an animation to a page, or do form validation in the early 2000s.
And so, just as before, I excitedly ventured out to learning as much as I could about using JavaScript to build amazing web applications.
For Funsies Side-Gig
At some point around 2009 I was an avid Facebook user and found myself annoyed at interactions with photos in the feed. To solve it for myself I wrote a JavaScript user script that would make it so a photo in your feed enlarge automatically and smoothly when you hovered over it. It was for no one's benefit but my own.
Coincidently, Google Chrome had just announced their browser extensions technology and an upcoming portal. The technology was completely front-end web tech (unlike FireFox at the time) which overlapped directly with my user script. It was literally minutes to create my simple, for-me-only script for Facebook into a bonafide Chrome Extension.
So I did that and I released it when Google's Extension Portal opened and it immediately was loved by an overwhelming number of people. For well over a year after it was some combination of the most popular (by installs) and most highly-rated extension on the portal. (Eventually, ad-blockers took these top spots, before I stopped updating it all together).
The amazing thing with all this was that I did absolutely zero marketing and still had over four million people using the extension every single day!
Tech Giants' Interest
Eventually, I heard from recruiters at both Facebook and Google due to the popularity of the extension. Both processes were unique and intersting. Before those days I had mostly assumed these big tech companies wouldn't be that interested in me solely because I didn't have an actual CS degree. But I found I was generally incorrect about that.
Facebook moved quickly, from a phone screen, to pre-interview puzzle, followed by a flight & hotel out to Palo Alto for an in-person interview, all followed up shortly by an offer. I ended up turning down the position for a few reasons; but ultimately it wasn't as aggressive as I hoped given they had initiated the process.
Google's process was much slower. A couple emails and phone screen went well. But hearing stories of Google's interviews at the time, I let the recruiter know that my expertise is about building amazing user experiences in software, and an in-depth technical interview around mathematics and algorithms wasn't going to go well. The recruiter acknowledged this and eventually offered to change the role to another department outside of software engineering, to which I was luke-warm to.
And then silence. I didn't hear anything for a while nor think much of it until months later someone called. But I was unimpressed with the process so far, and the role outside of engineering, and declined to go much further.
Ultimately, though, I was happy where I was at the startup and didn't see any reason change that yet, let alone relocate across the country.
All Roads Lead to Google, Anyway
So, I remained at the startup for a while continuing to learn and grow. About five years after I had interviewed at Facebook and Google, the startup was looking for an exit plan. We shopped around talking to quite a few larger players and, eventually, with Google.
Google didn't seem interested in the product or tech so much, but was interested in some of the people; the engineers mostly. We interviewed and, while I studied some CS-Degree level math and algorithm prep, it was also not something I was excited to have to do for a job.
Luckily, the interested team was also looking for someone with my expertise. All but one of the interviews went really well and Google ended up offering five of us (four engineers, one product manager) a position in exchange for exit money for the startup's investors. An "acqui-hire" as it's commonly referred to.
So in 2014 I started working at Google and, once again, I found myself in a position where I needed to absorb and learn as much as I could. For instance, on the technical front I had never really worked much in Java. Even JavaScript was different internal to Google. But, I took the opportunity to absorb and grow just as always. I started as an "L4 Software Engineer," moving up to an "L6 Staff Software Engineer" within a few years.
And I'm still here. I lead a team of great engineers across several different specialties and, most importantly, throughout this entire adventure so far, I've never stopped learning.