“No three-month course can teach you how to code,” insists a recent Quartz op-ed, bemoaning code camp graduates who will someday be asked to implement a binary search algorithm and be unprepared for the job.
I read this over lunch at Dev Bootcamp in Chicago, an immersive, short-term coding school where I teach. I asked students sitting near me if they could write a binary search algorithm on demand. One said, “Done it. Took me an hour and half,” with evident satisfaction. Another, less confident: “Binary search made me cry a little. But I worked it out.”
I teach binary search—a technique to efficiently find an item in a long list of items—on day three of our program. I like it because it inevitably produces off-by-one errors, a vexing bug that new software engineers should be testing for. For example, a first attempt might return the right answer when searching a collection containing 10 or 100 items, but break when the collection contains an odd number of items. Coders will see similar errors when they write a Sudoku solver, their weekend project in week one.
In my coding class, binary search is not a fatal stumbling block of immersive, short-term code education—it’s a Wednesday morning.
It’s true: no three-month course will turn you into a rock star developer. But when I teach, my goal is to create a “world-class beginner” who knows enough to get a junior position or paid apprenticeship and begins a long road of learning through work. There’s such a shortage of technical talent that coders get paid to learn on the job. Coders get hired not because they know everything, but because they have proven their ability to learn and their desire to keep learning.
A common criticism of immersive education is that “real programmers” teach themselves this stuff for free. It’s true, some people self-teach effectively, and prefer to work in isolation, while others work well in teams, and respond well to collaboration.
I’m self-taught, but the word is misleading. A better way to describe my background is privileged. I never studied computer science, but I was fortunate enough to grow up in a family of engineers, and have early employers who gave me time to explore. I had access to mentors and never had to question—as a white, straight, young, educated male—whether I belonged in this industry.
Many would-be developers don’t get the same opportunities. There are wonderful online resources to teach yourself (and I encourage my students use them), but access and role modeling matter.
Programming is often thought of a lone ranger exercise, but in today’s software organizations it’s more of a team sport.
Developers put a lot of faith in the four-year computer science degree, assuming a CS grad will make a good junior software engineer. Unfortunately, that may not be true. Some students come to Dev Bootcamp after receiving a bachelor’s degree in CS to get the skills they don’t teach in college.
Most breakdowns of Web development competency look like this: a massive list of hard skills. But that’s not what hiring managers are most concerned about when they interview junior developers. Instead, they try to find out if the candidate can work on a team, communicate ideas effectively, practices good version control etiquette and can pair program. Being able to ask for help and acknowledge failure are also considered important soft skills. Most software projects fail because of human reasons, not technical ones.
These are the skills my fellow instructors and I look for and practice with our students every day at Dev Bootcamp. Nearly all of the coursework is completed in pairs—one student typing, one student guiding and reviewing. This mimics how many professional software teams are organized in an increasingly collaborative industry.
I believe an engineering school should include as much focused practice with empathy and communication as it does with the programming language of the moment. Some four-year CS programs teach this, but it is the exception. And with student debt at traditional universities exploding more than 500% in the last decade I think there could be a better way to train software engineers.
No good developer is ever done learning to code. Not after three months. Not after 10 years.
We are all still learning.