December 22, 2019
In order to properly talk about how I learned to code, we need to start a lot earlier than the year before I got my job. As tends to happen, the story is never as clear cut as it seems.
I read a lot of “How I Learned to Code and Got My First Dev Job” posts while I was studying in preparation for my first job. They always forgot to mention something important until the end.
“Oh, I ended up transferring into engineering at the company I was already working at.” “I started working for a friend from high school that I reached out to on LinkedIn out of the blue.” “I graduated with a bioengineering degree before transferring into computer science.”
So, let’s make some realities about my life very clear before we start:
I am a queer, disabled woman who dropped out of high school in the 9th grade. My previous career was in email copywriting, and I had been out of work for 2+ years due to health issues before I started learning to code. I got my first job through a local Slack group, and had zero connection to any of the companies I’ve worked for.
However, those facts don’t stop me from having certain privileges that made learning to code and getting my first job trivially easy compared to some folks. How did I get my first dev job within 7 months of learning to code?
I was born in 1997. This meant I was using a computer by the time I was 3, in 2000. We had computer literacy courses as early as my preschool. This mostly meant playing games, but still. I grew up around computers, and we had dial-up internet basically as long as we had a computer. Yes, I used the Netscape browser.
Like a lot of kids, my sister and I played a lot of Neopets. I learned to touch type by the time I was 7. This isn’t that unusual for kids of my generation.
We got out of dial-up in around 2005, and that’s when the floodgates really opened. I started playing MMOs (Club Penguin, RuneScape, and most vividly, MapleStory) and got really addicted to hanging out with the friends I made online. I was 8 when this happened.
I was into amateur blogging that I would never stick to in general, and always dreamed of having my own personal website. Seriously, that was a dream of mine. I used to plan my future around what my personal site and blog would say about me. What WordPress theme it would have, what copy I’d put on the front page, what I’d blog about this week? I don’t remember when I started to read blogs, but by this point, I had fallen down the rabbit hole of “make money online blogs,” so clearly, I was pretty familiar. Yes, I was like 10 and already reading about “how to make money online.” I really needed those gaming memberships, man.
When I was 10, I was also an early adopter of various Google products. I was fairly sure that when I grew up, I wanted to be a Software Engineer at Google (lol). This was right around when Chrome was brand new, Google Earth was in beta, and Maps was just getting better than MapQuest. I thought I’d major in Computer Science in college, and just considered myself to be quite techy already since I played games and was on the computer all the time. (Don’t take this too seriously, I also wanted to be a cardiologist.)
I got on MySpace when I was 11 (2008), and although this is a lot of people’s entry points into code, I think I had as much of an understanding of code as …most folks in my generation. Sometimes, I copied and pasted HTML. I knew it was there. I didn’t really care beyond that.
Middle school (2009) brought 2 major changes: I needed to quit gaming or I’d lose control of my life, and I got into Tumblr.
I finally found a solution to quitting gaming: I found this cool, free, underground operating system called Ubuntu. There weren’t a lot of games on it, it was endlessly customizable, and there were people who just sat around and waited for you to ask them for help for free. I loved Linux and IRC and that whole world. Ubuntu was one of the most beautiful things I’d ever seen when I was 12, and the plethora of free software (including free games!) was just really shocking for me at that age.
I never learned to code on it, but I got very familiar with the command line. I learned how to pirate things. I don’t know what I did. I tried a lot of flavors of Ubuntu and read a lot about Linux, but I got good at like… SysAdmin 101 more than programming.
I also started to find free hosts and would host very amateur WordPress sites that I didn’t know what to do with. (This was again more administration work than any coding.) This was more about writing than code. Everything in this era of my life was seriously, “I’m going to be a writer.” The “Google seems so cool” phase was really only in 2007.
I got on Tumblr in 2010. I think a lot of girls of my generation who ended up becoming programmers (or writers!) are Tumblr girls. I used to spend way too many hours on Tumblr, had an anonymous poetry blog that had a few hundred followers, and had a Bollywood blog.
Sometime during middle school, I also had a weeklong phase where I joined a programming forum, asked what language to learn, and decided to learn C because I thought learning the fundamental language was the best way to learn programming. I went on YouTube and searched for one tutorial, got lost before it even began, and decided to screw it.
TL;DR: I’m a product of my generation. I learned how to use Linux and learned basic HTML/CSS from Tumblr and other varied sources by the time I was 13.
Let’s fast forward a bit. I dropped out of school and started reading blogs & journalism like hell. It was no longer “make money online” blogs and I no longer had a gaming addiction. I had a Kindle, was in bedrest for 24 hours a day, and we didn’t really have any laptops or tablets for browsing around on the internet?
I had a $100 desktop, a monitor from 2005, and a very stiff chair that I thought was great when I bought it. Computer time was a significant hurdle, and probably not worth it.
I got really into minimalism and self-development. (This is relevant, trust me.) I thought it would fix all my ails with GTD and mindfulness. (Who doesn’t have a phase like this?) This manifested in a specific focus on productivity and learning. I know a lot about this stuff.
I started to read more about tech when the Aaron Swartz died and the PRISM stuff became more public. I still always considered myself to be fairly techy, and the decentralized web and anti-tracking really aligned with my penchant for piracy and Linux. I started reading HackerNews (I apparently joined when I was 15) and got into TOR, encryption stuff like GPG, and extremely light hacking.
When all this happened, I really felt technical. I felt like I was part of a revolution in the fight for the real internet I grew up in vs. the internet that the monopolies had brought upon us. I didn’t want to major in CS in college. I actually considered myself a math person first, and I was fairly sure I would go to college and major in Statistics at this time. I think I wanted to become an Actuary or a Data Scientist (which I know is code now, but math code felt different than code-code).
I kinda sorta tried to learn to code around this time. I had Sublime Code downloaded. I tried Codecademy a million different times. It was just an aimless exercise, though. There was no goal at the end, so I took away nothing from this. I just wanted to learn to code because I was already involved in Linux and the decentralized web.
I was 16 and I finally got a domain name. I remember it cost $3. I bullshitted an explanation to my dad about how it would help me study more and my dream since I was a kid finally came true. I used my sister’s .edu email address to get a year of free hosting as part of a promotion.
This again felt like a gateway to writing more than programming. I joined GitHub around this time to contribute something very small to a WordPress theme that my friend was making so I could use it on my own site.
Ev sold books about Node and HTML/CSS. I emailed him one day and made my case for a free copy of the HTML/CSS book. He gave it to me. (This worked more often than you would think? People love ambitious kids.)
This was about 9 months after I had started blogging. I needed free hosting soon, and WordPress felt constricting. I admired websites like Gwern, RMS (I won’t link it, y’all know it), and Scaruffi. I wanted to be a prolific personal writer and activist with an ugly website and profound words. Those websites were definitely not built on WordPress.
I also had learned how to write in emacs sometime around this time. I was using mutt as my email client and started to explore harder forms of Linux like Arch.
So, in my new embrace of digital minimalism and a sense of activism, I was going to build my website on GitHub Pages since it had free hosting. This took weeks and I didn’t understand you could build grids outside of a CSS framework, but I learned to use Jekyll, Liquid, Markdown, and fairly intermediate HTML and CSS. What came out of that was fairly minimalist in design, but felt pretty advanced.
I really enjoyed the process of building this, and now that I was nearing 17, I was thinking about my career again. I thought I’d pursue web development. Bootcamps had started to make some traction (this was 2014), and I knew I wasn’t going to be able to go to college, so I considered that I’d learn to code for a year, then attend a bootcamp when I turned 18, and I’d get a job.
I think things might have been different if I had gotten a Treehouse subscription, but it didn’t matter anyway. Something that I had started to realize is that programmers are sexists. HackerNews was my main entry point into the world of programming, and I felt extremely left out. I knew I was technical, but I really didn’t like programming communities, and no one cultivated the obvious talent I had considering my interest in Linux and tech. I didn’t know anyone in tech who was like me… at all. I only knew abled, college-attending white men who all loved their computers more than real life.
I was reading a lot about the sexual harassment cases at startups around this time (remember when GitHub was a startup and TPW and his wife were terrible people and he still got another startup that no one cares about? Good times.) and I just… I didn’t want to be in tech. I still don’t.
I was doing great in my career as a writer. While I was still underage, I was having clients send money to my sister’s PayPal account since I couldn’t legally receive money. (I don’t think they knew I was 16/17.)
My writing career didn’t last very long because my second disability hit and I suffered major cognitive loss this time. For 2 of the 3 years, I didn’t think I’d ever be functional again. When I finally recovered from the disability, I couldn’t read children’s books, let alone learn a whole new skillset for a whole new career.
When I had considered that maybe I would be functional again, I knew exactly what I wanted out of a career: something I could get into without any degree that had health insurance. There were two clear options: IT and programming.
I don’t remember why I decided to go with programming in the end. I remember I debated it for a long time. It just might have been the gender breakdown, honestly. I knew tech was sexist, but IT seemed particularly sexist.
The programming community had changed a lot from 2014 to 2018. I joined a wonderful Slack called CodeBuddies which is the #1 reason I have survived in tech. People were helpful, nice, and there were a bunch of diverse folks! I could be myself and a programmer like all of my new friends.
FreeCodeCamp had also burst onto the scene as a way better version of Codecademy. I never got too deeply into learning via the platform, but I followed the map to guide my own path to job-readiness.
I was a lot different, and the world of programming was a lot different. I had a few distinct advantages:
Bootcamps were definitely in the mainstream by 2018. I only know one other American who learned to code around the same time as me and is self-taught (Tae’lur Alexis).
There were two main reasons why I didn’t attend a bootcamp:
I knew I was disabled, and I knew there would be days (or even weeks!) when I couldn’t code. I thought it would take me longer than bootcamp folks to get my first job because of this choice, but I knew I wanted to do this on my own terms. (It’s worth noting that in the end I got a job faster than most bootcamp folks I know and have heard of.)
Secondly, I knew why I would’ve attended a bootcamp 5 years ago. The resources just weren’t there unless you learned to code from books. Most video courses only covered the basics back then. Udemy was brand new, FreeCodeCamp didn’t exist, GitHub wasn’t awash with awesome lists. It really felt like a way into locked off knowledge in those days.
In 2018, changing careers into coding had become mainstream. There were more resources than anyone knew what to do with. People could choose resources based on their learning styles. That seemed way more luxurious than a constricted bootcamp not letting you slow down and understand things.
So, I knew I was going to be self-taught. How did I go about that?
I knew I needed a roadmap. I read and tried a million, none of them really worked (so I won’t link them), but they all had commonalities about what I had to learn, just different ideas of how I should learn them. Again, there were so many free or cheap resources in 2018, the only excuse for not being able to learn to code is something in yourself.
It’s hard to explain the day-to-day reality of this learning process. The skill of learning and listening to myself while learning was something I had learned the hard way years ago.
I knew to break things up into chunks, because if my todo list just said, “Read this book,” I wouldn’t know the stopping point, so I’d never read it. I knew to reflect on what I had learned that day so that I could keep it in my brain. I knew to stop and make projects every so often so that I wouldn’t fall into the tutorial trap. I knew to ask for feedback (from Codebuddies) on my projects so that professionals could tell me where I was lacking.
Because of years of build-up in skills adjacent to coding, learning to code was relatively easy for me.
Of course, I struggled with it like everyone else. But, I never doubted that I couldn’t learn something in particular. I would chastise myself for moving too slowly, or struggling with a specific problem in a project. But, it was never something fundamental that I couldn’t overcome in a few days.
In fact, the extremely step-by-step nature of coding was one of the easiest things I’ve ever learned. There’s abundant information about foundational skills you need before learning something in particular, there’s constant feedback loops, and it’s extremely explicit. Compare that with learning copywriting, which doesn’t give you glaring error messages when you are failing completely. There are no logs in writing.
Remember, I had lost a lot of cognitive ability over the past few years. I could still barely read books without my eyes wandering. But, I could read code. I could watch videos about coding. Learning to code just needed discipline, not raw intelligence.
(Note: This isn’t to say that professional programming gets very abstract very fast and requires a lot of cognition. It’s just that the core act of becoming a literate programmer, before you’re solving real-world problems of scale and teams and timezones doesn’t require you to be particularly intelligent, just diligent.)
As a marketer, I knew I needed to stand out amongst the droves of bootcamp and CS grads. I knew I had to lean into my strength, writing and self-documentation. So, I decided that I would blog about what I was learning every single day.
I knew I wasn’t going to be able to make projects every day, and that in particular, my projects weren’t going to be impressive. But, I knew that no one could deny the commitment of writing detailed notes (only for myself) about what I was learning every single day.
I focused a lot on my portfolio as well. Here’s the evolution over time:
If you’re looking for the exact resources I used to learn to code, I published monthly recaps reflecting on my progress, monthly goals, and the resources I was going through that month:
By May and June, I had a lot of life going on, and I didn't want to talk about how much time my interviewing was taking up publicly, so the blog posts get more sparse.
If that’s too long for you, I made a small repo listing resources I used to learn things. This really misses a lot of context, though.
These are the first projects I ever did. They were hard at the time, and I wouldn't be where I am today without them. I think folks are too ambitious with their first code — just because they build a todo list in a course, they think they can go that far on their own. I focused on getting a lot of small wins, slowly building my way up to full apps.
I don’t know if I recommend that path to everyone, since again, I feel I’ve forgotten it all by now. It worked out for me, though.
I specialized to get my first job, and am now generalizing now that I’m in a safer place to explore. I’d rather be good at a few things than mediocre at a lot of things.
I had a perfect setup to really become a self-taught success story (which I consider myself to be):
By the time that I had gotten my first job, I think I spent about $100 on resources. Compare that to a $10-20k bootcamp.
I also spent around $400 upgrading my hardware that year. I got a new $100 refurbished PC from eBay and a new $100 wide monitor since the only monitor we had was the one from 2005. I also bought a $200 Chromebook because I was worried about being a developer with only a desktop.
Seriously, that’s it. I spent $500 learning to code, including all the hardware I bought that year.
I think it’s important to note that I did this all myself. I found CodeBuddies myself, I made sure I was a regular member who asked good questions and participated beyond asking for help. I built my blog and portfolio myself, no one was sitting next to me telling me how to do all this. Of course, I had a lot of support from the folks at CodeBuddies and the folks that had blogged and everything before me, but the direction was from me. Hopefully that makes sense.
In fact, my family didn’t believe I could do it myself and wanted me to go to a bootcamp with an ISA.
I also did all this fresh off of a terrible disability, on relatively cheap hardware, and with extremely spotty wifi that would often be down for hours a day.
Learning to code is a merit-based activity, even if the tech industry itself isn’t. One of the reasons that I haven’t shared this story yet is because I don’t want this message to get misconstrued.
I had financial privilege to grow up with a computer and be able to devote myself fully into learning to code when the time came. I had a buildup of skills that made this time just the buildup of a decade of inevitability. But, I also had the most harrowing story of anyone I know. I don’t know anyone who had more looming external obstacles in their way. Both my advantages and disadvantages can be held in balance.
I got my first interview in April of 2018, 4 months after I had started learning to code. It was for a secret apprenticeship program that a company someone I knew. I knew this person from general programming networking online, this was not someone I knew outside of programmer communities.
Sidenote: I only started learning back-end programming well, and specifically Node.js, at my current job, nearly 2 years after I started programming. My last job didn’t have a back-end. I really only knew the basics up until now.
The process was fairly friendly, and I was a finalist. I hated that I had to speak about my marketing past because it made me feel bring up things that happened long before my last disability, but I knew that I’d be able to take marketing off my resume eventually and pretend I was never a marketer.
This was the exact process:
I got to the finals, although I don’t think they were too impressed with my take-home. I don’t think I was supposed to use the amount of libraries I did. But, I wouldn’t have known how to implement what they were asking for without libraries at the time. Even now, it’d be a hacky solution. But, I did well enough to get through, so whatever.
I lost out to someone with more back-end experience than me. Today, I looked up who actually got the role, and it was someone who had previously had software engineering internships, so of course I wasn’t going to get this job.
But, they did like me, and I got to the finals before I even felt ready to apply for a role, so it was a huge confidence booster. I also felt that I had lost because I wasn’t local. It’s important to note that everyone liked my blog and brought it up.
Within weeks of my rejection, I had moved to Rochester, NY. I knew there was still a few months until I was ready to get a job, but I wanted to make local connections first so that when I asked for a favor, people knew and trusted me.
Why Rochester? My best friend lives there. We both knew I wasn’t going to get a job in LA. I wanted to move somewhere I knew someone (this would be my first time being alone after recovering from my disability, so this really was more of a personal decision), and she said that there was this technical university called RIT there, so there must be jobs.
She was right. I landed there, and I was employed within 2 weeks. (I just double checked this — I moved to Rochester on June 9th, and I know I started at my job on June 25th, the day after my 21st birthday. Wow.)
I spent a bit of time settling in, but I told my family that I was going to Rochester to look for a job. That meant my grandmother was calling me every few days and asking about how it was going. I joined the local Slack groups and meetups. I kept an eye on the job postings, but I didn’t take it too seriously. I really wasn’t ready.
I had some qualms about the company, but that’s irrelevant to the scope of this post because we all knew that I would take the first offer I would get. The final interview was an onsite where I spoke with the CEO and COO, and then sat down with their lead developer as he walked through the codebase. He had seen my portfolio and was also impressed by the blog and the projects. Walking through the codebase with him was more about testing how quickly I understood things, the sorts of questions I asked, and my communication style.
I got a verbal offer on my way out, and a formal written offer within a few days. By the time I met Kristen in person the next week, she had already been responsible for one of the greatest wins of my life. She was also extremely valuable in my decision to quit that job the next year, but that’s a different story.
So yes, I got my first developer job within 7 months of learning to code, and on my second interview. I don’t know what to say about this. Part of it is luck, part of it was making very deliberate choices.
Yes, I was technically advanced and could code like a lot of other folks, on a faster timeline than most self-taught folks because of years of learning how to learn. But, I also made very deliberate choices in regards to my branding and networking. I moved myself across the country because I knew that LA would be too competitive.
That’s about it! Lateral strides come through a mix of deliberate choices and luck. You set yourself up for luck, and I had set myself in the best possible way that I could given the myriad of factors I couldn’t control.
Since there’s so many factors we can’t control, I strive to be the absolute best in the factors I can control.
I had one of the most harrowing stories I know coming into learning to code, but I also had a viral Medium-friendly title by the end. I’ve never spoken about this in full before because I hate the way people could misconstrue both of those truths. Hopefully the fact that I have written 5000 words explaining how this is so so much more than a catchy title has helped clear up room for misinterpretation.
I’ll leave you with a podcast I recorded with CodeBuddies about my journey into tech: How a Self-Taught Developer Landed a Software Engineering Job in 6 Months.
Thanks for reading! I’m choosing to only keep this on my own blog and not cross-posting it anywhere. So, if you’d like to share, please just link back to this post.
If you liked this post, get updates about new posts by signing up to my infrequent newsletter.