Noob to Ninja in 8 months

13 min read Original article ↗

How I went from having zero programming experience to being a professional software developer in less than a year

Scot Lawrie

Two years ago, I was fresh out of Northwestern University with an Economics degree in hand, stubbornly resisting the pressure to take a corporate job in consulting or finance like the rest of my graduating class. These jobs have a lot of upside: they pay well, they set you up for the future, and they make you feel like you aren’t a fuck up. I like all of those things. But they also require you to work long hours on things you’re not necessarily interested in, competing against equally as hardworking and smart co-workers for promotions, so that you can spend the rest of your career doing the exact same uninteresting things (albeit for a bigger paycheck).

Call me lazy, call me entitled, but it just didn’t appeal to me. I wanted to do something I liked and I wanted to make a difference in the world. On the other hand, I didn’t think going on a touchy-feely trip around the world to “discover myself” was the best way to achieve these goals, either.

Really, I didn’t know much, but I did know this:

  1. If you’re doing the same thing as everyone around you, you’re probably not following the path of least resistance. Doing something because the “successful” people around you are doing it might feel safe, but if you take a step back and look at the big picture, you might see a better, smarter path to achieve success than competing with all of, you know, everyone. [1]
  2. Doing something you like is really, really important. YOLO, for real. Besides, if you do something you like, you’ll be good at it, and that will help you reach your goals.

Of course, I didn’t really have a clue what the path of least resistance to success was, but I did know that starting a business and creating a product was one way to do it. Besides having a life long passion for entrepreneurship, I knew that building a business might help me have at least some impact on the world, and there was potential for a big financial upside.

I started a business in college which ultimately failed, partially because I didn’t care much about the product itself, but also because I hated selling. Selling feels like asking other people for favors.

Well, I thought, if I want to build a business one day, but I don’t want to be limited to the business side, I better learn to do something.

And so, without an iota of programming experience, and my livelihood at stake, I set off on a journey to teach myself to code. I’m far from an expert, and I’m even farther from my intended destination, but regardless, here is my story.

My first leg of the journey was to lay the groundwork for an indefinite period of unemployment with the little money I had, a chunk of winnings from my days as a semi-professional online poker player during college. My big brother agreed to let me move into his apartment and sleep on his couch for $250/month. I was able to subsist strictly off of PB&J sandwiches and Trader Joe’s burritos, limiting my expected monthly expenses to just $600. (F)unemployment groundwork laid.

But you can’t expect to sit around on your brother’s couch all day, neither employed nor interested in employment, and not face a few questions from friends and family.

“I’m teaching myself computer programming,” I’d tell them. When you’re in high school or in college, “teaching yourself” anything is a perfectly fine endeavor. When you’re fresh out of college and jobless, it just sounds like an excuse to mess around for a little bit longer before joining the “real world”. I knew that there were probably a handful of people who saw it that way, which only motivated me to actually do it. Failing would’ve made me a failure and a liar.

My next step was figuring out where to start. (Note: These were the days when coding schools like Dev Bootcamp and Code Academy were just starting to hatch—I had no idea they existed [2]). One of the toughest challenges, throughout the entire process, was not knowing what I should learn. There is so much information out there that figuring out what is important and why you should learn it is just as hard as actually learning it.

Unfortunately, I didn’t have any friends who were programmers, so I had to sift through a lot of junk on the internet. Quora was a particularly great resource for me because I could read it anywhere (on my phone) and people tend to spare the low-level details in favor of the higher-level stuff when discussing technical things, something that I was desperate for.

I still wasn’t exactly sure where to start, so I just dove in. I don’t want to talk too much about the courses I took as much as my methodology while taking them, but I will briefly touch on them. I found a w3schools HTML/CSS tutorial and I built a personal website on behalf of my girlfriend [3] about her obsession with cats. [4]

Of course, the site was poorly designed and poorly coded. Anytime I wanted to change the look of the navbar, I’d have to edit 45 different HTML files and save the changes individually. But, as would become a theme, I was proud of it. I wanted to show everyone.

At every step of a learning curve, you are at the peak of this curve, and you think everything you do is amazing—regardless of whether or not it is. As time passes and you move further up the curve, you look at your past work and realize how naive you were. And yet, you still think that the work you’re doing now is amazing. I think being excited about your work, and more importantly, your improvement, keeps you hungry for more.

After my foray into HTML, I took a free course through MIT’s OpenCourseware that introduced me to computer science, and specifically, Python. Next, I took another free course through Harvard’s OpenCourseware called Building Dynamic Websites that may have been the best course I’ve ever taken in my life. David Malan, the professor, explains concepts as if he knows exactly what it’s like to not understand them (although it’s clear he understands them very well).

I followed that up with another course by Malan about mobile development, which introduced me to objective-C, server-side frameworks, and OOP. All in all, these three courses took me about 3 months to complete. I did every assignment and project to its full completion, and I can’t stress enough the importance of doing so. Spending 8 hours creating a mock-shopping cart in PHP, that you’ll delete as soon as you’re finished, may not be how you envisioned your software development career going—but you’ll learn a ton grinding away on these types of projects.

Like I said, I’m not here to talk about the actual courses I took, but I would like to preach a bit about why I think I was ultimately successful in learning the skills necessary to break into the industry and start creating. Hopefully these will help others also looking to bootstrap a career in software development.

  1. I got super obsessed with it. I can’t even really take credit for this, but programming and me… we just clicked. Coding gives you an excuse to spend your whole day solving really fun, challenging puzzles. For the first 6 months or so, I was holed up in my brother’s loft, putting in 10-14 hour days, every day. If there was a concept I came across that I wasn’t familiar with, I’d study it until I understood the basics, and then I’d build something with it so that I understood beyond the basics. It was fun. If you get obsessed with it, you’ll learn fast.
  2. I built a lot of things. Within 8 months I had built over 25 websites and apps, ranging from a Grouper clone (my very first PHP app) to an iPhone app that let you scan QR codes on ads and purchase the item. I built static sites, PHP sites, Rails Apps, iOS apps, JavaScript apps, apps with frameworks, apps without frameworks, you name it. I’m not saying any of the apps were any good, but I squeezed a lot of productivity into those few months.
  3. I spent my downtime thinking about code, too. When I wasn’t watching a lecture or building something, I was devouring tech articles, Quora answers, and anything else I could read on my phone. When I met other technical people, I’d learn as much information from them as I could. A lot of the solutions to projects I was working on came in the shower, or while lying in bed. Letting my mind wander away from the actual implementation of code helped me discover new concepts, design patterns, and tools to move me forward.
  4. I dove in, before I understood. One of the first apps that I built was a SEPTA Bus Locator that my girlfriend could use to see when buses were near. It was supposed to be a mashup of the Google Maps API and the Septa OpenData API. The problem was, I didn’t even know what an API was. So I learned as much in “theory” about APIs as I could by googling, stared at the Google Maps API documentation for awhile, and then I just dove in. I was literally googling a new question every other minute, but after awhile, an app started to come together. I remember spending 4 hours debugging something that was caused because I didn’t realize that omitting “var” before a variable definition in JavaScript would make the variable global. The point is, you’re not really going to understand things until you do them, so just dive in and you’ll figure it out.

Press enter or click to view image in full size

In the middle, hackin’ away with some pals.

Four or five months in, I started building people sites for money—first a Facebook friend, then friends of that friend, then friends of friends of friends. If you happen to be in the midst of the educated, upper-middle class, young adult demographic, you’ll find that everyone wants a website, or has a killer-app idea, but no one actually knows how to build it themselves. Once people knew that “Scot can code”, I had projects being sent my way every other week.

At first, I barely charged anything because I didn’t trust myself to be able to build a site up to a paying customer’s demands. After a few paid projects, though, I felt comfortable enough to charge a couple thousand bucks for pretty simple stuff—even a WordPress site. I was cranking out two or three mobile sites a week for nearby restaurants. This was the point where I stopped worrying about living off of $600/month. My net-worth was actually going up, not down!

Seven months in, a recruiter called me out of the blue [5] and told me a company was looking for someone with my skills. I met up with the recruiter that day for a screening and could barely believe that she was taking me seriously. I was totally honest about my skills and what I had done, but I felt like a complete impostor claiming proficiency in skills that 6 months prior I wouldn’t have even known the names for.

Regardless, the company decided to interview me. Having no idea what to expect for my first formal tech interview, their lead programmer gave me a technical evaluation that in hindsight, was dead-easy, and which I barely passed. They told me that my technical skills were “middle of the road” [6], but that they liked my business “savviness” and my eagerness to learn. A bounce or two my way, and they ultimately made me an offer much better than I would have received had I gone the consulting route.

I wasn’t celebrating yet, though. If I had had to bet, I would’ve wagered on getting fired within the first week once they realized that they had hired a guy who, 8 months ago, couldn’t have told you what a “server” was. My first week was, indeed, pretty scary—there were a lot of things I had to learn quickly. Fortunately, I had a human resource sitting right next to me (the lead dev) that I could get answers from immediately instead of having to scour google for everything. My learning accelerated because of this and I was able to get through the first week, and then the next week, and then the next, and before I knew it, I had completed my first project a full month ahead of time.

Over a year has passed since then and I still work at the same company, where my duties consist of building out products and ideas that my crazy (but awesome) boss comes up with. I’ve continued to build and learn and grow as much as I can. I’ve shipped four or five fairly large projects during my tenure and have gotten a few raises in return. My latest project is called LeadLocker, lead management software designed specifically for the oral healthcare industry which I created from top to bottom on my own. It’s in a private beta right now but we’ve already got a few really big name clients using it.

As far as “affecting change on the world and buying a yacht” goes, I still have that to achieve. But I’m confident that my chances in doing so today are greater than they ever have been.

To see some of my work, including some of the examples mentioned here, check out my website, and feel free to tweet or email me with any comments, suggestions, or questions. I’d love to hear from you.

Update: I no longer work at the company mentioned in this article. I now work at 50onRed as a software engineer.

[1] Adam Smith’s “invisible hand” would dictate that if job-seekers are self-interested, rational, and trying to maximize net utility, they would pursue a job or career exactly as much as it should be pursued. In my opinion, job-seekers aren’t rational, because societal and financial factors influence them to pursue careers that are safe and familiar.

[2] The jury is still out on these, in my opinion. The ones that have scaled don’t have as much value as the ones that have stayed small and focused on educating instead profiting. Starting students off with high-level abstractions like Rails doesn’t provide them with an understanding of crucial underlying details, but having human mentors there to answer questions is a huge advantage.

[3] Without her permission.

[4] This obsession may or may not exist.

[5] At this point, I had changed my title and skills on LinkedIn to reflect my past 7 months’ studies and work.

[6] Euphemism for “you’re a noob and you don’t know shit”.