"Code Review not only improves the code, it improves the developer."
That’s what a client said recently when I told him how few people raised their hand when I was speaking at TriAgile and asked how many had ever pair programmed or regularly have their code reviewed. Less than 5 hands went up out of a room of about 100 people, most of whom had identified themselves as developers and claiming they were doing agile software development. Sadly, there aren't many out there that really desire to be software craftsman, they just want a job as a programmer.
My talk was entitled, “Software Craftsmanship: Agile is Not Enough." One of my main points in the talk is that “Agile Software Development” is all about feedback and software developers need to make sure they are getting feedback, preferably from experts, on the code that goes into the products that they are building. Having a Scrum meeting every two weeks with a Certified Scrum Master only means they are doing Scrums, not that they are building good software.
Feedback, and knowing what to do with it to be continually improving, is the presupposition of Agile Software Development and Software Craftsmanship.
You need feedback to improve:
* Understanding of requirements
* Project planning
* User experience
* ... and much more
So, what does this have to do with programming bootcamps?
Well, I am not completely sure, because I do not run a bootcamp. I run RoleModel Software Craftsmanship Academy. In fact, in 2011, I announced the Craftsmanship Academy. It was the first of it's kind, and I was hoping others would duplicate it. I met with Neal Sales-Griffin and Mike McGee, the founders of the only well-known "Programming Bootcamp" at the time, Code Academy, now The Starter League, to discuss the differences of what I was doing and what they were doing. They recognized that what I was doing was well-beyond what they did, and we wondered together if people who graduated from their program would be good candidates for mine.
But that was then, and this is now. Many "bootcamps" don't seem to want to make the distinction, and those looking to go into the field don't necessarily know enough to ask.
Before going any further, I want to say that I am very excited about the number of "programming bootcamps" or "hacker schools" that have sprung up over the last few years. Having been a leader in Software Craftsmanship for many years, and a pioneer in Software Development Apprenticeship, I had pointed out on many occasions how the universities were doing such a poor job of preparing people to be software developers and that it needed to be learned in a more immersive setting. Although I have never attended any of them, and have met only a few who have, I am confident that the vast majority of them are better preparing the majority of their participants for software development than the vast majority of universities.
But, they are not what I envisioned, and I feel they are far short of what most people need to become software craftsmen. From what I understand of most of the best coding bootcamps, they provide some pre-work for people with little or no programming experience, participants get in a class with others and work through a project (typically a web application) wth a single technology stack (often Ruby on Rails), they are led by a talented instructor (perhaps one instructor per 12 students), they have access to the "classroom" pretty much whenever they want and encourage each other, working together as they like with little distractions from immersing themselves on developing software, and they may have a mentor they get to work with every so often, and may get one-on-one time (office hours) with the instructor
All these things are things missing from a college education and extremely helpful in learning to be a software developer. We do a lot of them in the immersion phase of our Academy, but we do a few things differently. First of all, we make sure that everyone who comes has already had some form of introduction to programming and knows the basics: conditional branching, loops, variable assignments, etc. Last year I put together an interactive test that I screened each applicant with face to face to see not only what they already knew, but how they handled stuff being thrown at them. They were allowed to ask questions about the questions. I got to see how they interacted; how they thought. Would they give up when presented a problem they didn't know off the top of their head or would they try to figure it out? (This is something professional software developers have to do every day). This was very helpful in determining whether they were ready for the Academy.
We take no more than 6, won't take anyone we don't think is ready, and have very strict evaluation criteria at two weeks, four weeks, and twelve weeks to determine whether the participant can continue. (The goal is that all do, but no one is given a free ride if they just do not appear to have what it takes to become a software craftsman).
In the immersion phase, we go through a variety of technologies, giving them projects to work on in each. But they are told that they need to follow "best practices" which they are constantly taught. This includes test-driven design and short feedback loops on their code. Every few hours, the question is asked by me, "Who would like to offer up a sacrifice of code?" We put someone's code up on the screen, and I offer a large amount of constructive criticism, which they are expected to act on. Not only does the individual offering the sacrifice learn a lot, but so does everyone else watching and listening. You'd be amazed how good their code gets in a few weeks, as well as the habits they form.
Once they are done the immersion phase (which takes 3.5 intense months), those ready to move on become apprentices, being assigned to one of our Craftsman who will oversee their further development by giving them assignments, watching what they do, pair programming, and many other things. They do Situated Learning for many more months. If they stay on at RoleModel, this will go on for years because our culture demands collaboration and two sets of eyes on all production code. Each apprenticeship/residency is different depending on a lot of things, but one thing remains the same, they have an active, very real, and very experienced mentor for quite a while. The difference versus someone who learned to program through traditional routes and/or just picked stuff up on the streets is remarkable. Several of RoleModel's clients say they would love to have us train all of their developers because of the difference they see. The problem is, they want the results, but don't want to make the investment it takes to get there.
This, in a nutshell, is the most significant difference between learning to be a Software Craftsman and going to a "programming bootcamp." There are only a few of these programs around and they each have the personality of the company that puts them together. Each of us would argue that ours is the best, but we'd be united in pointing out that what we do is significantly different and much deeper than a "programming bootcamp."
Most craftsman are busy crafting software and don't ever take on apprentices. Currently, we only offer new entry into our Academy about every 1.5 years and limit the number of openings. There are only a handful of places that do something similar. I wish there were more, and your situation might mean that, even if you really want to be a software craftsman, you might have to settle for just a bootcamp, for now.
Everyone does not necessarily want to become a software craftsman. If you just want to "learn to code", most of the bootcamps are a great way to do it. But, if you want to really become a software craftsman, bootcamp is not enough. If someone wants to become a software craftsman, they need to be around and be mentored by real software craftsman... someone passionate about their craft, and willing to invest in others that are also passionate about their craft.
Remember, it takes a lot of refining to become or produce a software craftsman. Look for feedback as much as you can and offer constructive criticism to those who are not as far along the journey when ever possible. Be passionate, relentless in your pursuit of feedback, tender-hearted and thick-skinned.
About the Author
Ken Auer is the founder and master craftsman of RoleModel Software. He is the author of Extreme Programming Applied and a variety of early software patterns works. Ken learned Smalltalk and Objective-C in the mid-80s and was introduced as “the father of Software Craftsmanship” as the opening keynote speaker at the first Software Craftsmanship North America conference. Though he occasionally speaks in various venues, he is most at home in his custom designed facility outside of Holly Springs, NC (designed and built using Christopher Alexander’s architectural design patterns). There he focuses on working with his agile, high-performance, multi-disciplinary team to turn others’ innovative ideas into well-crafted software and raising up generations of software craftsmen through the Software Craftsmanship Academy and RoleModel Software. You can occasionally find him on twitter (@kauerrolemodel), or read about his quest for an integrated life at http://kenauer.com.