The self-made developer: bootstrap or bootcamp?

The hard way or pay to play?

Aspiring software developers have more avenues than ever to learn to code without going back to school. From free, self-paced online learning environments to not-so-free, structured, immersive experiences, a number of services have cropped up within the past few years offering to help total newbies become full-fledged coders (or maybe just pick up a new hobby). As someone with an interest in both the coding side and the instructional side of this phenomenon, I’ve spent some time reflecting on how these services compare to my own experience as a developer whose career choice and schooling diverged.

The bootstrap model

Like many people I’ve met in this field, I didn’t plan to become a software developer. I went to journalism school, with the intent to write advertising copy in trade magazines. But as a student, I had a student job taking care of Macintosh labs at the campus computer center. For about three weeks each year, between semesters, I installed software updates and printer drivers. The other 49, I got to hang out with brilliant people doing very early work on something called the Web. It was fascinating, and I wanted in! I learned from them and read the books they recommended. I learned markup and programming, and that markup is not programming. I made my own websites. I learned the basics of relational databases and how to compile an HTTP server and run it on a high port on the university’s research servers, so I could run my own CGI scripts. We didn’t have virtualization back then, you see.

It was a case of being in the right place at the right time. I knew smart people doing cool things, and I had access to expensive, sophisticated resources because of my day job. I knew this Web thing was worth sticking with, but knew that effectively starting over to pursue a computer science or engineering degree would derail me. I figured such a degree would drive me into mainframe programming, deep conversations about computational theory, or any number of distractions that would keep me from working on the Web.

So I didn’t start over. I also didn’t get into copywriting for trade magazines—I finished school but parlayed my experience into a nearly 20-year career now in web development. Along the way, I’ve followed a similar path to keep my tools as honed as possible. Lots of books. Lots of conferences and user groups, online and off. I’ve also checked out some of the resources on the low-cost, low-commitment end of the spectrum when I needed a crash course in a new language. Some are better than others, of course. Fortunately, it’s easy to ditch those that aren’t so great. This by-the-bootstraps mode of learning has worked well for me.

It’s certainly no less possible today for a would-be developer to leave a non-coding career path for the life of a professional programmer. I know people who started out as journalists, filmmakers, and cartographers but now make fine livings in software development. They are as knowledgeable and passionate about the art and craft of our industry as any degree-holding software engineer. In fact, with the resources I listed earlier, one could say it’s even easier. On the other hand, the stack of requirements keeps getting taller. Consider the technologies that make up the Ruby on Rails framework. Now consider those technologies from a beginner’s perspective. Where does a self-directed learner even begin?

The bootcamp model

There’s another route, for those who want a little more direction without going back to school in the traditional sense. In just the past couple of years, a number of full-time, intensive, high-risk, apprenticeship-style programs have cropped up: Dev Bootcamp, gSchool, the Flatiron School, and Hackbright Academy. There are others, and their numbers increase by the semester. They teach the basics of the web programming toolchain in weeks, not months or years. They provide structured learning of sought-after skills like Rails, iOS, and JavaScript. Many offer to connect students with potential employers. These programs also come with a price tag, and require much more of a commitment than their self-paced counterparts to complete.

Last week I spoke with Mark Morris, a junior web developer who graduated from one of these programs earlier this year, about his experience. I met Mark last spring at Ruby Midwest, as he was preparing to start his apprenticeship and change from a career in supply chain management into that of a software developer. While he’d done some coding in the past, he sought the more structured approach of the bootcamp model.

The nine-week sequence Mark completed focuses on Ruby on Rails development, and teaches it in three stages. Students begin with basic Ruby, progressing through Sinatra, jQuery, and markup, on their way to the full Rails stack. There are no lectures—instructors assign projects; students work in pairs to complete them. Help is granted on request, but only after students show evidence that they’ve done some initial legwork of their own to solve the problem (read: Google/Stack Overflow queries).

Aside from this rapid-fire introduction to a relatively broad selection of technical skills, Mark shared that the program’s founders and instructors pride themselves in one particular aspect I suspect many traditional engineering programs continue to overlook. Two routine activities in particular focused on improving students’ people skills—to gain “engineering empathy” and really get to know one’s fellow developer, and oneself. Any lack of technical instruction was countered by this attention to the human side of software development. Having been on the hiring side of the conversation with a number of junior developer candidates, I know one can never get enough practice at improving soft skills.

Is that price tag and commitment worth it? That’s pretty subjective, and will vary from program to program and student to student. Along with the empathy and confidence-building exercises, Mark stressed his appreciation for the networking opportunities he was given through the program, and the friendships he established within his cohort. Some people don’t get much more than that out of four years of traditional schooling.

Apprenticeship programs have taken some criticism of late—some questioning the practice of throwing large numbers of novices at problems better solved by smaller teams of seasoned professionals; others outright questioning whether the programs are scams. Again, it’s probably subjective at best, and link bait at worst. Time will tell—in fact, the program Mark just completed openly admits that it’s an “experiment,” with the experiences and outcomes of each cohort of students influencing those of the next.

Choices, choices

Personally, I’m glad the traditional path to learning exists for people who know at an early age what they want to be when they grow up. I’m also glad that options exist for people like Mark and me, who for whatever reason make the decision to change gears and take a new career path—or who just want to pick up a new hobby. And I’m glad that these options—be they bootstrap or bootcamp—give newcomers some options based on what, how, and when they want to learn.

If I had it all to do over, assuming I stayed in this industry, I don’t think I’d change a thing. (Well, I might have moved on from spaghetti-coded PHP a few years earlier.) But how about you? How did you get to where you are as a programmer, and how do you keep going? Or are you an aspiring programmer—if so, how are you learning about the craft? Whether you went a traditional route or took an approach somewhere on the bootstrap-to-bootcamp spectrum, I’d love to hear your thoughts on how we, as software developers, learn (and continue to learn) to do what we do


Sign up for the O'Reilly Programming Newsletter to get weekly insight from industry insiders.
topic: Programming
  • Jason Perez

    As a married father of 2 working full time I find about 25-30 hours a week to learn Ruby. I’ve been on a tear (bootstrap model for me) since August where I’ve been focused mainly on (referring to the Ruby on Rails Competencies PDF) learning Tests, Ruby Gems, and the Ruby language. I’ve been in IT at various capacities for over 12 years now so some of the other competencies I’m okay with. I spent a good amount of time getting familiar with some of the other areas over the last year(git, text editors,SQL, git, HTML/CSS/javascript).

    Learning Ruby is fun, rewarding, and empowering. But it’s not easy to do it well. It takes a ton of grit. It takes time. I mean I haven’t really looked at Rails in months. I don’t feel ready to make a change in career yet (but that’s my goal). I have standards for what I want to create. Perhaps some of this is impostor syndrome. I’m not sure. But I know that I still care. I want to create awesome things and I want them to be crafted well. I want to design them to the best of my ability. I think these qualities are what help bring awesome things to the world.

    I suppose if you go about learning in either of the two models you’ll do a service to the community and to the craft if you don’t look at the options as a means to get rich quick. It’s an opportunity to do something awesome. It’s the beginning of a life of learning and perfecting. In the pre-industrial days of the smithy, I’m sure there would’ve been quite a few dismembered aspiring smiths if they thought all they needed was 9 week bootcamp to create awesome tools and make happy customers.

    • Aaron Sumner

      I’ve been at this for nearly 20 years and still feel impostor syndrome creep in pretty much every day. You’re right that doing things the right way takes time—and honestly, that’s something I struggle with myself. Sounds like you’re headed in the right direction, though—keep at it and keep us posted as you progress!

  • Katerina Hanson

    I learned Python, through tutorials (I love Learn Python the Hard Way), a couple of books, and lots and lots of trying it myself. I was originally going to automate some of my day-job as a Chemical Engineer, but found programming was actually more rewarding. A little more than a year later, I quit my job, and have a new one as a Python developer, based largely on an open-source project I made.

    • Aaron Sumner

      I love this story, congratulations and thanks for sharing! I agree that it’s important to share your work publicly.

  • Eric Wise

    As co-founder of Software Craftsmanship Guild in Ohio (full stack C# or Java, we’re one of the few that target the enterprise instead of Ruby) I just want to add to your comment on the experimental model that we run things differently than you describe.

    We follow the master-apprentice model so there are lectures and mentors are available the entire time. Lecture provides basic knowledge, followed by cautious experimentation by the students (exercises), after which small projects are worked on. Once understanding is achieved it is demonstrated through mastery projects that are spaced out throughout the program and a capstone that will be demonstrated to others. “Show Me” -> “Do” -> “Show Others”.

    Is it worth the price? Well, most of our apprentices already have degrees in other topics, so we are much more cost and time effective than more schooling. If you were to attend traditional IT certification courses through like New Horizons you would pay triple the price for the same material.

    Our cohort that wrapped up at the end of the year has placed every apprentice except for one in full time roles. That crushes the traditional schooling model.

    Great article though. People should be aware that there are some cash grabs going on which border on scams. Also that some schools, particularly in California are facing issues with education regulators since they have not followed regulations. I’m please to report that Software Craftsmanship Guild is fully compliant with Ohio regulations on top of our great track record and teaching the two languages that are at the top of the heap as far as available jobs.

  • Annie B

    I am an aspiring programmer participating in a unique learning scenario in St. Louis. A local non-profit organization called LaunchCode is trying to fill the programming jobs gap here in town. Apparently there are a ton of jobs but not enough people with the right skillset to fill them. So, they got a ton of local companies with these open jobs to agree to take on novice programmers, pay them $15/hour to train them up with an experienced programmer for a few months, and then (if they can prove themselves) hire them on at a junior programmer’s salary.

    To get people to novice level they are offering in person classes of the Intro to Computer Science class through (Basically taking a MOOC and turning it on it’s head.) We all get together to watch the lectures and then break into groups to work through the problem sets. They opened this opportunity up to the entire city–the first day of class over 1,000 people showed up and had to move it to the Peabody Opera House. I should emphasize that it’s all free — we aren’t paying anything, the classes are held at the local library, and Launchcode is completely volunteer run.

    I am only a few weeks in but I’m pretty amazed at how fast we are all picking this up. The online class is great but is even better because I have a group of people I can turn to for help in person. I’ve only written a few simple programs in C and am finding it really challenging and rewarding! This is the first class like this LaunchCode is offering so it’s still up in the air how this will all pan out… but I am really hopeful that I will be able to transition into a tech position at the end and keep learning.