My Self-taught Developer Journey: Part 1

2020-05-02

After about a year and a half after starting on this journey of teaching myself programming, I finally landed a job as a junior developer. It’s a fantastic opportunity: a great team, interesting work, and exposure to great technologies -- specifically, Ruby on Rails.

How did I get here? Well, I don’t have a computer science degree, nor did I attend a bootcamp. I’m 100% ‘self’ taught (which is kind of a misnomer because many people helped me tremendously along the way!).

I wanted to write about my experience in the hopes that it might help (or even inspire) other folks who are considering, or are currently on, this self-taught route. With the rise of bootcamps, self-taught developers seem to be a rare breed nowadays; most of the people I spoke to for career advice weren’t able to name any colleagues or friends who had made a career switch into dev through this self taught route. Most importantly, I want to let people know that it can be done!

This definitely isn’t a ‘how-to’ article where I tell you what you need to do step-by-step; rather, this is a series of observations and insights I’ve gathered after reflecting on what went right - and what went wrong - over the course of my self-taught journey.

Without further ado, let’s get into it!

Background - The Journey Begins

When I finally decided to pursue software development in earnest, I promised to give myself enough time to really try it out for size to see if it was the right fit before fully committing. I didn’t want my preconceptions of what it meant to be a ‘software developer’, or any of the marketing thrown at me by bootcamps, to flavor my decision making. I wanted to really make sure that I enjoyed building software and that it would be a good fit for me as a profession.

So give yourself some time and breathing room to just figure it out. Go through some basic tutorials, engage with the community, and most importantly build something. My thinking is that you definitely need to encounter some obstacles and see how you react before you can be sure that you’re ready to make the leap. Because however you make the transition, it will require a serious commitment, and you definitely don’t want to feel like you rushed into a big decision. Only you can decide when you’re ready.

Why I didn’t go to a bootcamp

Over the course of my journey, I wrestled with whether I should go the bootcamp route.

Spoiler alert -- I ultimately did not attend a software bootcamp. Now, as I mentioned in the beginning, I don’t intend this post to be a ‘how-to’ article where I tell you exactly what to do. I don’t want to discourage anyone from attending a bootcamp, or talk smack about any specific bootcamp. Many of the devs I asked for advice throughout my journey went to a bootcamp and had a great experience. Clearly, there’s no one-size-fits-all path into software development. But I definitely do have advice from all the time I spent investigating bootcamps.

Talk directly to alumni

This might be the most important takeaway. If you’re thinking about joining a bootcamp, find a few people who went there recently (i.e. graduated within the last 1-2 years max) and ask about their experience. Look on LinkedIn, or ask around the local tech community (meet-ups were especially helpful for me). And don’t just rely on alumni that the bootcamps set you up with directly, as that might result in selection bias. They have identified these individuals based on their “success” so their advice may not be as helpful as others.

In my opinion, this is the best way to get the inside scoop on a bootcamp you might be considering. All of those online bootcamp review sites, random blog postings, or random reddit threads, were not as helpful to me personally as speaking to someone 1:1

Remember, bootcamps may vary from campus to campus, and they can change significantly over a course of just a few years. So you want specific, timely info when you’re making a decision, and that means talking to someone who recently went to the same campus you’re considering.

Watch out for the shady ones…

Ok, I kind of lied when I said I wouldn’t talk smack about any specific bootcamp. I won’t name them but...there are plenty of shady operators out there that will do whatever it takes to separate you from your money.

What are some indicators that a bootcamp might be shady?

  • Making outrageous promises about what you will learn, like for example learning “3 stacks in 14 weeks”.

  • Over-emphasizing earning potential or career outcomes in their marketing.

  • Having multiple investigative articles written about unethical or misleading practices or bad student outcomes.

Again, I’m not necessarily trying to discourage anyone from going to a bootcamp. I just want to make sure you’re evaluating these pitches with the right amount of skepticism.

Ok, so now that I’ve gotten that off my chest...

At the end of the day, this self-study approach worked out for me. But the main tradeoff between self-study and a bootcamp ultimately was time vs. money. I might have entered the field faster if I had just bit the bullet and joined a bootcamp at the beginning of my journey. Note that I didn’t say it would’ve been easier if I had joined a bootcamp. Even if you graduate from a bootcamp, you will have to put in a ton of work (be it personal projects, coding assessments, networking, etc.) to finally land that first job. It’s still going to be tough (but not impossible!) whichever route you decide to go.

Alright, so I didn’t go to a bootcamp. How did I teach myself programming, then?

Foundations/Context - Computer Science

I’m someone that is always seeking to understand the bigger picture. I don’t just want to know what I need to do, but why I need to do it.

As I started off on my learning quest, I realized that I really had no idea how computers fundamentally worked. I knew it had something to do with 1’s and 0’s, but that was about it.

I was lucky enough to come across the CrashCourse Computer Science series on YouTube, early on on my journey, and if there is one thing you take away from this post, it’s to check out this playlist. Over a series of 40 10-11 minute videos (perfect for short commutes or lunches), this presents an overview of the history and core concepts of Computer Science that is both informative, entertaining, and accessible to newbies. I credit this series for giving me a ton of incredibly useful info early on, which sped up the ability I was able to pick up new concepts and technologies. In addition, the enthusiasm of the wonderful Carrie Anne Philbin really got me pumped to dive headfirst into the field of computer science.

As a bonus recommendation, CS50 is Harvard’s intro to Computer Science course that is available free on YouTube. I haven’t watched an entire semester of the core program in full, but from what I’ve seen it would be a great intro to Comp Sci for a beginner.

Having this foundational knowledge is incredibly helpful in connecting the dots between everything you’re learning. It’s also a good gauge for whether software development is the right fit for you. If you find all of that stuff boring, it might be a good indicator that it’s not a good fit.

What first language to choose?

One of the first things I did when starting out is research what language is best to learn first.

One of the common things I read is that the choice of first language isn’t super important. And now on the other side of things, I can concur that the specific language you learn first isn’t very important. The most important thing is that you learn the fundamental concepts of programming, which are universal (well, kind of) among languages.

Really, when you’re starting out, you want the language to ‘stay out of the way’ so that you can focus on learning these concepts and how to approach problems like a developer.

Python (which was my first language) is increasingly used as a teaching language for new developers, and for good reason. It’s syntax is so clean and simple that it’s easy to quickly learn so that you can actually dive into learning about functions, control structures, conditionals, and object oriented programming without thinking too much about syntax specifics.

Another important consideration of what language to first learn is the discouragement factor. There are plenty of stories of folks who were taught Java in college, gave up on computer science, then tried Ruby or Python and fell in love with it. When you’re first starting out, it is incredibly easy to get discouraged or frustrated. First impressions are important, so if your first impression of programming is of frustration, you’re more likely to give up too early! This is another reason why Python is so popular as a teaching language.

Intro to Programming

I began my learning journey in earnest with the free Intro to Computer Science from Udacity. And I can, without a doubt, make the claim that this course changed my life.

Wow, quite a dramatic claim for a free online computer science course, no? Well, I sincerely believe that it’s true. This course set me up for success in many different ways. While I would recommend this course any day, there are so many resources out there that ultimately you should make your own decision based on your own needs. But I want to highlight some characteristics about this course that you should keep in mind when making this decision:

  • Focus on the Fundamentals. The course was taught in Python, but it wasn’t a ‘Python’ course per se. The emphasis was on computer science fundamentals. There were many more advanced features of the Python language that weren’t covered in the course. It was laser focused on teaching the core concepts of programming in an accessible way.

  • Problem Solving. The course spent a lot of time discussing how to approach problem solving as a developer. This was incredibly helpful, as I had tried out a different ‘Learn Python’ course and was quickly discouraged when I wasn’t able to complete the assessments. There is a way to think through and solve problems through programming that is universal and not language dependent, and I still utilize the lessons I learned in this area.

  • Practice. The course had a lot of practice problems that progressed in difficulty at a nice rate -- not too hard, but not too easy. These practice problems really helped me retain this knowledge and kept me motivated throughout the course.

  • Context. Sprinkled throughout the course were nice little tidbits of contextual computer science info, like how a processor works, how a program is executed, what exactly is an information protocol like HTTP, etc. etc. This helped demystify for me how computers and the internet fundamentally worked, which was incredibly helpful.

  • Excitement! Dave Evans, the professor who teaches the course, clearly has a love for computing. His enthusiasm is infectious, and it helped me through the many challenging parts of the course.

A lot of aspiring programmers want to dive right into the sexy new technologies, but I think it’s better to really start from the beginning and build some foundations in computer science basics.

Foundations/Context - Web Development

At the same time I was doing the Udemy Intro to CS Course, I was exploring the Mozilla Foundation MDN Web Docs. This is, without exaggeration, one of the greatest resources for web development out there. Not only does this contain some of the most detailed, helpful reference material on web dev technologies out there, but Mozilla puts out some great content for people looking to get into the field of Web Development.

Specifically, these publications really provide a ‘big picture’ perspective on how the web works and the role of each of the key web technologies (HTML, CSS, and JavaScript). The publications are meant for beginners as well!

At this point I had decided Web Development was the route I wanted to go, so finding this amazing free resource was like Christmas morning.

Two things I would highly recommend are Getting Started with the Web and Server-side website programming.

To Be Continued...

If you want to read about the rest of my story, follow me to Part 2