ArticleS. MicahMartin.
SoftwareApprenticeship [add child]

Software Apprenticeship

David Hoover asked me a few questions about my experiences as a software apprentice. I was happy to answer his questions and pleased to hear that he's writing a book on the topic.

What is Software Apprenticeship?

Software apprenticeship is path for learning to become a quality software engineer. A software apprentice learns to write code by working with people people who already know how to write code and are good at it.

It's also an attitude. People who practice the software craft are on a journey of continual learning. There is no piece of paper that deems a craftsman worthy. A craftsman qualifies himself by demonstrating his skills.

I'd argue that any great software developer has been through an apprenticeship stage at one point or another.

How did I hear about Software Apprenticeship?

I saw my father reading a book titled Software Craftsmanship by Pete McBreen. This was shortly after I finished an unsatisfying 5 years in college. I was also knee deep in my apprenticeship, though I didn't call it that at the time. I read the book and fell in love with the idea that software is a craft. For several years of my life I practiced martial arts and the model for growth in Jujitsu is very similar to that of software craftsmanship. So the concepts were not new to me but seeing software in this light clarified a few things...

No wonder I was so unsettled with my college education... That's not how you're supposed to learn software. Of the dozens of classes I took in earning my Computer Science degree, only 3 classes involved writing code. Crazy huh? And even though I could write programs after I graduated, I didn't know the first thing about writing real software. A lot of good college did me! It was working with the great people at Object Mentor, especially my father, that truly taught me to code.

Not long after I read Pete's book, Ken Aurer invited me to a Software Apprenticeship summit. There, several pioneers in the software craftsmanship movement got together to share experiences. I learned a great deal but what I took away from that summit was the comfort that there were lots of people who believed in the craftsmanship model. It was only a matter of time before the rest of the industry caught on.

Where am I in my journey?

For those new to the craftsmanship model there are three stages: apprentice, journeyman, and master craftsman. I'm well on my journey as a journeyman. I work on a variety of software projects, I teach, I consult, and I learn more about software everyday. And to take this entry full circle, I help other budding software apprentices get started on their journey by leading Object Mentor's apprenticeship program every summer.

 Wed, 22 Jun 2005 21:53:29, David Chelimsky, hands on
I had the good fortune to attend a graduation at which Deborah Meier spoke. Ms. Meier is an innovator and educator who founded a grade school at which kids of varying ages/grades work in the same classroom. She described the inspiration for this, talking about how schools USED to be when we (in the US) were a more agrarian society. There were two comments she made that seem relevant in the context of this discussion. One was that you would never choose to take a tennis class in which students sat around talking about tennis and then, one special day, the teacher brought in an actual tennis ball and passed it around so everyone could hold it and see what it felt like.

The other was the fact that in days of school gone by there were many experts and a few novices. The 7 year olds helped the 6 year olds. The 8 year olds helped the 7 and the 6 year olds. Etc, etc. Many experts and few novices - not one expert responsible for 30 novices. This made me think of the blacksmith analogy that permeates the Craftsmanship book.
 Wed, 22 Jun 2005 01:53:36, KelleyHarris[?], ?Finding mentors for mid-career people?
Great article Micah. Any suggestions for mid-career people looking to find mentors, full-time, part-time, or remote? Seems like there is room for a service connecting people. There is also room for a service providing object mentoring post OM courses.

>There is no piece of paper that deems a craftsman worthy.
>A craftsman qualifies himself by demonstrating his skills.
As people look for new jobs, what would be some good ways of demonstrating skills, at the resume & interview stage?

Any suggestions on open-source projects with great OO TDD code?
 Mon, 20 Jun 2005 08:51:34, George Jensen, My Story
I guess my story would be different from Micah's in that, Higher Ed
was good for a few seasons, but by no means did I expect to begin
learning a craft there. If the above statement were a microcosm for
Liberal Arts experience, we might assume it a bankrupt philosophy.
This is the impression Micah might give off. After spending a week
with Uncle Bob with Java immersion (2002), I can say I was one of
those "Masters Level" students who knew nothing of good programming
practices. I studied History in undergrad, and Information Science in
Post-grad; but I continue to be pulled by the curious efforts Uncle
Bob uses to hown the craft of programming, and his old-factory style
of learning programming as a "craftmanship".

I ask daily:
With all the altruistic spirits of academia stuffed down our modern
minds, why is it so refreshing to hear the obscure rant of Uncle Bob
(and others) toting this old-factory campaign about "craftmanship" as
a life goal?
 Fri, 17 Jun 2005 10:02:01, Uncle Bob, Things have indeed changed.
Keith, Things have indeed changed; at least in some sectors. A couple of years ago I brought in an intern who was in a CS masters program. This inidividual simply could not write code, nor had they been taught to write code. I was flabbergasted. I've poked around a bit since and have found that, at least at some schools, it is possible to acquire a BSCS, and even an MSCS, without ever having to write a line of code. Incredible!
 Thu, 16 Jun 2005 11:22:16, Patrick Morrison, Things were different, but not necessarily better
I must've gone to college around the same time Keith Ray did, as I can't think of a CS course I took that didn't involve at least some programming. But, with one exception (Principles of Software Engineering), every single course required the student to work alone... this is the antithesis of the craftsmanship model, and I'm sure it stunted my growth as a practicioner.
 Thu, 16 Jun 2005 09:50:09, keith ray, things have changed
When I went to college and got a computer science degree, just about every computer science class required writing code. The only one that didn't was the one where we designed a CPU. Those who were in computer engineering rather than computer science had a sequel to that course: they had to implement their cpu design.

We programmed in FORTRAN, Pascal, C, 68000 assembler, and COBOL, and the "survey of computer languages" course had us writing short programs in APL, LISP, SNOBOL, and other some other languages.