Apprentice. Journeyman. Master. This is the language of the software craftsmanship movement--a movement that, at least in language, bears more resemblance to the building trade school programs than to any academic computer science program.
Yet, those programs are almost exclusively for employees, and most lack any kind of classroom training component.
Where are the actual schools for craftsmen?
Enter Ken Auer, president and founder of RoleModel Software and lead instructor at RoleModel Craftsmanship Academy. RoleModel's program, the first of its kind, will begin in the spring of 2012. Craftsmanship Academy combines a six-month, intense, in-residence education experience with a one-year follow-up internship at any sponsoring employer. After the year is up, the student can take an interactive exam to complete the apprenticeship and become a certified journeyman.
This approach is designed to qualify the candidate to take employment as a software developer at a studio as a staff programmer in eighteen months, less than half that of a bachelor's degree in Computer Science--and during the last twelve months, the intern is earning a living wage.
In this interview, Matt Heusser talks to Ken Auer about the software craftsmanship movement and the academy.
Matt Heusser: Where did you get the idea for Craftsmanship Academy?
Ken Auer: Well, it has been an idea that was about 15 years in the making--or 30, depending on how you count. In 1981, I went to a top engineering school, Rensselaer Polytechnic Institute, to get a BS in computer science. Though I certainly learned something about programming there, I found that the thing that helped me learn the most were the full-time co-op jobs I had at two different places for a semester each. The size of the problems and the fact that I had people around me that had been programming a lot longer than me in the real world was far more valuable to me than the small projects I did in college courses. I also liked getting paid for the work rather than paying the school. When I realized I could graduate a semester early, I jumped at the chance for a lot of reasons.
Through the next twelve years of my professional life, I found that the best way to get better at the practice was to practice and learn from the best reflective practitioners. I learned, and I taught others what I had learned in many contexts. I speak about this a lot more in the history section of the academy website.
By the time I started my own company, RoleModel Software, in 1997, I had learned enough about what college computer science looked like. They were teaching the same stuff that they taught me in 1981-84. Nothing had significantly changed. Object-oriented programming was, at most, touched upon in senior or graduate classes in all but a few colleges. I decided that I couldn't afford to hire a college graduate who was expecting to get paid $45-60K and have to teach them almost from scratch. Then I found a homeschooled graduate who already, as he said, "knew the mechanics of programming," but wanted to learn from someone how to really practice it in developing significant systems. That was Nathaniel Talbott. We were both committed to making it work. I figured that if he was in a better position in four years than he would have been if he went to college, I didn't screw up. The reality was, in about 1.5 years, he was running circles around some of the more experienced developers, and certainly the recent college graduates, at one of my clients.
I began talking to other craftsmen, journeyman, young people, and parents about the value of apprenticeship as an alternative to college. I basically got two reactions: disbelief or "yes, but it doesn't scale... how could you take this model into colleges?" When I explained that colleges are a completely different model, some would say, "Why don't you start a school?" My answer was that if I only worked with apprentices and stopped practicing my craft, I would soon be irrelevant and turn into more of an academic.
Only a few people had caught the vision of having some of their own apprentices, and as I talked to them, they all had the same problem--the first few months of training were intense and expensive and none had a model to handle the early parts of the apprenticeship that they liked. They all just grinned and bore it because they realized the fruit on the other side of the pain.
Then earlier this year, I met Chris Gregory, who runs one of the top farrier schools in the world. He had apprenticed his own son in the established craft in addition to running the school. As we talked and he learned about how I had been apprenticing young people, he asked me the same question. "So, why haven't you started a school?" When I gave him my answer about not wanting to become an academic he said, "of course, that's why my school is only open half the year."
I munched on that over the next few months, and came up with a model based on my previous apprenticeship experiences. I vetted it with others, figured out what I'd need to do before I could devote so much of my time to it without shutting down the rest of my business, and here we are.
Matt Heusser: Who is your potential audience? How much does the program cost?
Ken Auer: Anyone who wants to be good at the craft of software development and has learned the basic mechanics of programming. It could be homeschooled students who have already learned enough of the basics (and have already challenged the traditional schooling model). Or it could be someone like myself who has gone through the regular schooling model through high school or college and realizes there is a better model to learn the craft. I have had inquiries from people who are making a living doing something else (like a network support engineer) and want to switch careers to software development and can't imagine going through several more years of college to do it, but realize they don't know enough yet to be paid as a professional.
The program costs $17,000 gross, but actually generates a net revenue to the participant of $7-30K over 1.5 years. It's $8,000 for each of the first two 12-week immersion sessions, and then an internship that starts paying $2,000/month or more, and could go up before they finish their first year. The final $1,000 is for the interactive certification test to validate that the participant has not only made it through the first two sessions and a one-year internship, but also has become competent at a wide range of abilities necessary to practice the craft well.
Matt Heusser: What will the students learn in the six month training portion? What will student life be like?
Ken Auer: It will not be anything like a traditional school. They are not just going to submit an assignment and get a grade. There will only be 8 students at a maximum and their access to the instructor will be high and interactive.
The first three months will be putting together a progressively harder series of problems/projects that will build on each other. They will be doing test-driven development on the first day. I'm going to write the first test, and they are going to learn to write tests from there. They will be part of a learning environment where every task they are given will not necessarily be graded, but be reflected on and discussed with the other students and the instructor(s). It's like real work, where the goal is to do a job that meets or exceeds expectations, and do what it takes to get there. They are going to work a 7-8 hour day Monday through Friday, broken into 4-5 timeboxes with checkpoints at the end of each. Early on they will all be working on the same problems, but they will eventually grow into a team learning how to collaborate, share divisions of labor, and keep projects moving forward.
They will be expected to do some additional self-learning outside of the class sessions. The amount will change based on the individual. What they have to do to keep up or what they may be interested in doing to get ahead. Some of it will be specifically assigned based on what I think they need to learn, others will be self-assigned given looser goals.
At the beginning of the second 12-week session, they will be split into two teams. Each team will work on a different project from a real client that they will work on with me playing whatever role I need to (bringing in others at RoleModel as needed) in order to help them go from vague goals and requirements to working software. They will see the reality of software development done in a craftsmanship fashion. Textbook projects only exist in textbooks. They'll see what it is really like.
Matt Heusser: How do you think that compares with a traditional university education?
Ken Auer: It doesn't compare, it contrasts. It probably contrasts the most with Computer Science programs versus IT or Software Engineering programs. The general idea of the university setting is that there is a wide set of knowledge one needs to learn, reinforced at times with small projects to cement the knowledge. Our approach is that there are things that need to be built. In order to build things, you need to do things. In order to do things, we need to have some knowledge. We'll provide the knowledge that isn't there in a "just in time" fashion, whether that is theory or "this is the way it is typically done using these tools." You have something to hang the theory on, rather than have a bunch of theory that you may need someday. The theory will be learned faster and more thoroughly. I recently wrote an article, Where Should Data Structures Be Taught?, that illustrates this from real world experience with a recent college grad in the working world versus my first apprentice in the working world.
Matt Heusser: How do you think a RoleModel graduate will compare with a traditional C.S. degree? What is the job market like for your graduates?
Ken Auer: Well, I think they'll have most of the relevant theory in a more solid form. The number of hours they will have spent on theory and practice in software development will be higher. They may miss some operating system and compiler theory, and instead of an Intro to Psychology they will have a lot of experience (and instruction) of how to work with people. Most places that a software developer would prefer to work value the practice more than the degree. Everyone who has either signed up for, or is considering, the opportunity to recruit the graduates as interns has made it clear that they fully intend to hire these folks after the internship is over (or even before) as full members of their team. I just started to publicize that we are looking for sponsors for internships two weeks ago, and I already have at least 5 slots signed up. I am also screening these folks to make sure they are software shops that are serious about the craft of software development. These aren't just people looking to hire cheap labor, but people who really want to invest in these people who have already invested in learning the craft.
Matt Heusser: Let's step back for a minute and think of the future--five, ten, fifteen years out. What is "success"? What will your ideal program be like in ten years? Do you think other schools will spring up to follow your lead?
Ken Auer: I can only teach 8 people a year with the current model, and I really don't have much desire to scale it up under the RoleModel banner. We might split off a couple of other offices if the right circumstances allow it. I don't believe there can ever be a program of this quality with a much higher student-teacher ratio. Lecture halls can scale. Master-Apprenticeship relationships don't. Even Jesus Christ only really "apprenticed" 12 people at a time. If He couldn't/didn't make it scale past that it would be arrogant to think that I can.
On the other hand, I am not the only person qualified to teach this stuff. There are many great software craftsmen out there with the ability to teach. Some are better at their craft than I am and some are better teachers. I'm sure that there are some who are better at both. I think this model will allow them to continue to stay on top of their craft while helping others get a great start. I have already been having conversations with others about reproducing this model and keeping the bar high. Although 6 months and 1.5 years doesn't seem like a lot compared to 4 years of college, there are all sorts of "certifications" our there that run from the silly "Certified Scrum Master," which you become by sitting in on a two-day course (and you don't even have to pass a test), to thin slices of expertise learned in weeks or months, taught by people who don't necessarily know much more (and sometimes less) than the canned curriculum they are teaching. Now, I am certainly not saying that those courses and certifications are without value, or that the model I'm using is "the only true model," but people need to know the difference between apples and oranges.
My desire is to see a certification board that starts with this model (a qualified lead instructor with 10 or more years as an accomplished practitioner, six months of immersion training instilling some agreed upon list of relevant skills, an internship, and measurable outcome), and expands to other models that are clearly less or more advanced. For example, the guys who started the Chicago-based Code Academy have put together a very high quality program that they will be the first to acknowledge is highly valuable and has similar characteristics to what we are doing, but will produce somewhat less than what our model will produce. I think it would be great if other programs like that were certified, so that what they produce is not confused with what the unrelated online Code Academy produces which has a completely different level of value. I'd like to eventually see more advanced immersion programs pop up... perhaps an intense week-long or month-long immersion experience and tests for those who are already certified as journeyman on their way to becoming master craftsman. We should also find ways to make it simple (but not too easy) for existing journeyman and master craftsman to get their certification inexpensively but not trivially.
I'd expect that other academies would use different technologies and techniques but similar immersion models. They will take on the personality of their instructor and, perhaps, the industry or values that the instructor has. Another academy may focus on embedded systems, or functional programming languages. Just like there are engineering schools that have their unique specialties and programs with some understood base, these could, too. But they would still be focused on practice first.
At the recent Software Craftsmanship North America conference, I gave a quick lightning talk about this, and did some math. If every year, 3x more such academies opened up producing 8 graduates each, in 5 years we will have 256 such academies who will have produced 2728 graduates. Some time between now and then, we should find ways to certify folks who became journeymen through more traditional paths so we don't have the false qualification of having to have completed this program to prove your stuff.
If we continue this same growth rate, in 10 years, we'll have over a quarter of a million academies that will have produced more than 2.75 million graduates. I haven't done the research to know how many graduates are out there with degrees in computer science, and I realize these are completely hypothetical numbers, but I think it shows that it is not outrageous to think that in ten years, this kind of immersion program could be a norm, if not the norm. And, those who employ software developers will be much happier about it.
Currently, many college grads are not thrilled about the choices they have after four years of hard work. Most employers are looking for people with experience who can begin producing from day one, even though they realize everyone coming in has more to learn. I think this model is better for both sides of the equation.
Matt Heusser: Thank you for your time today, Ken.
Ken Auer: Thanks for inviting me.