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
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.
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