Red Squirrel Reflections
Dave Hoover explores the psychology of software development
Wed, 13 Feb 2008
After my Lorax-like Apprenticeship rant last year, I've had my nose to a few different grindstones, leading Obtiva's Craftsmanship Studio, working on the Apprenticeship Patterns, and attempting to be a good enough husband and father to Staci and the kids. Things are leveling off now as I'm beginning to understand a bit more about what it takes to manage a Craftsmanship Studio and I'm starting to pick up some momentum on the book writing. I'm excited to announce that Ade and I have decided that the Apprenticeship Patterns will be published by O'Reilly as Software Craftsmanship: From Apprentice to Journeyman in their Theory In Practice series. One of the main reasons that we chose O'Reilly is their commitment to the web and their alignment with my vision for the web site and community that I wanted to develop around the book. I'm pleased to say that they have provided an excellent platform (press release) to facilitate exactly the sort of situation I wanted: full content of the patterns available the public, community forums, and a blog.
Most of my blogging attention will be focused on the book, but I will also be posting tidbits of my lower-level day-to-day development work on my Stumblog. If you'd like to continue to follow me via feeds, please subscribe to the book feed and the Stumblog feed.
Wed, 22 Aug 2007
At Agile2007 last week, I snuck into the last 30 minutes of Uncle Bob's talk about Craftsmanship and Professionalism. When Uncle Bob talks about Craftsmanship he is generally talking about nitty-gritty details of the craft, such as specific practices and tools, but he did have one slide on apprenticeship. He ranted a bit about how most universities do not equip graduates with sufficient skills to allow them to deliver quality software from day one. (Not to mention the significant number of people who come into software development from other fields and have never even received the inadequate computer science education that Bob was referring to.) Bob asserted that we need to apprentice these young people, these graduates and newcomers. Bob asserted that the most effective learning situation is one where a small number of apprentices work alongside an even smaller number of journeyman, who are receiving guidance from a master craftsman. It was music to my ears until Bob polled the audience for anyone who was working in that environment.
I proudly raised my hand, but my heart sank as I looked around and realized I was the only one raising my hand.
For the rest of the conference I felt a sense of pride at the revelation that Obtiva's Craftsmanship Studio is such a unique phenomenon. But I also struggled with a sense of sadness and frustration at the lack of apprenticeship opportunities our industry is providing to graduates and newcomers. My biggest point of frustration is with small companies (1-20 people) made up entirely of super-experienced, world-class developers, coaches, and trainers. I understand your compulsion to only hire people with over 5 years of professional experience who have established reputations, but I believe you're hurting the industry by implicitly refusing to take on the responsibility to apprentice a few people along the way.
Where do graduates and newcomers go when they're looking for their first gig? They go where people are hiring entry level people. This is where we lose some of our greatest potential because people who had the potential for greatness lose heart sitting at the bottom of mediocre, bloated, beaurocratic development organizations. Imagine if young Nathaniel Talbott, inexperienced and unqualified to do much of anything interesting, had found an "entry level" position, rather than becoming the first apprentice of RoleModel Software. Sure, someone else would have probably written test/unit. And Nathaniel would probably still have become a good software developer. But I am convinced that Nathaniel's apprenticeship made an impact on our industry, and we're better because of it.
Apprenticeship is more than simply hiring entry level people. Apprenticeship is coupling an apprentice to a journeyman. That doesn't mean they're pair programming all the time, but it does mean that the journeyman is overseeing the apprentice's progress and that the apprentice has an experienced developer in close physical proximity to turn to for guidance.
Furthermore, apprentices are not necessarily entry level people. Our first apprentices generally had a year or two of experience under their belt. Some are in the middle of college degrees. Some had recently graduated. One is re-booting his IT career later in life. Apprentices are people who are willing to take on a junior role that maximizes their learning opportunities as opposed to people who try to climb as quickly as they can into roles that maximize their financial opportunities. In my experience, if the apprentice has talent and the right attitude, their financial success will inevitably follow their learning success.
Please consider creating an apprenticeship at your organization. I believe apprenticeship is our industry's best hope for addressing our talent shortage.
Mon, 21 May 2007
I just caught up on a bunch of the blogging from RailsConf. It sounds like it was an excellent time. But I'm surprised that I didn't hear about anything controversial or earth-shattering. Perhaps Rails is stabilizing? Anyway, while part of me yearned to be there, the end of my week in Wheaton turned out to be an excellent experience in its own right (on a smaller scale).
Victoria and Brian are working their way through Refactoring and we are meeting weekly to discuss what they're learning. One of the first questions from the first few chapters was "What is an Abstract Class?" This important and fundamental question launched us into a contrast of Java's Interfaces, Abstract Classes, and Packages with Ruby's Module. I have always said in our Rails course that Ruby's Modules play double-duty (namespaces + mixin), but this was the first time I had illustrated that point to people who know Ruby better than Java. It was a good discussion and I feel privileged to be able to guide Victoria and Brian along their path toward mastery and seed a culture of learning at Obtiva.
I then shared some of my reflections on reading through the Code Smells with my Ruby hat on. The ones that stuck out most to me where Feature Envy and Incomplete Library Class. What struck me about these is how much more freedom Ruby gives you (than Java) to eradicate these smells from your code-base. Specifically, the Move Method refactoring can, in Ruby, move code all the way into the class where it belongs, regardless of whether you wrote that class or not. For example.
Fri, 02 Mar 2007
BTW, the child Victoria is going to be mentoring is Rose, my oldest daughter. They'll be meeting for the first time next Thursday afternoon. Pretty cool, huh?
Wed, 14 Feb 2007
I've completely neglected my apprenticeship patterns over the last year. Ruby and Rails is partly to blame for this. But the other reason is that I have an opportunity to apply Pete McBreen's ideas for the first time and, to me, that takes priority over almost anything else in my professional life, because opportunities like this don't come around very often.
Mon, 18 Sep 2006Pete Wright's job change spurred /\ndy to blog on passionate development. From Pete:
I just want to write cool software with talented passionate people, and make a difference in the world. I want to push the boundaries again like I did in the 80ís and early 90ís. I want to have fun and come home with a smile and a hug for my wife and kids instead of trudging through the door burdened with stress induced by boredom and corporate ineptitude.From /\ndy:
If you canít feel passionate about your organization, then perhaps itís best to follow Martin Fowlerís advice: change your organization, or change your organization.I couldn't agree more.
Over the past few months, I've experienced what Pete is describing. I'm driving my (short) commute home and I can't stop myself from smiling. I walk through the door ready to take on the chaos that kids of 2, 5, and 7 perpetuate and relieve my weary wife. It's worth it's weight in gold. And I've managed to keep my passion for developing software strong.I'm reminded of a Paul Graham quote that I used in my Nurture Your Passion apprenticeship pattern.
Try to keep the sense of wonder about programming that you had at age 14. If you're worried that your current job is rotting your brain, it probably is.And for those who find themselves stuck in a sea of mediocrity and afraid to stand out, a place where so many of us have watched passion diminish or even die, I'll close out with the words of Marianne Williamson:
Your playing small doesn't serve the world. There's nothing enlightened about shrinking so that other people won't feel insecure around you. We are all meant to shine, as children do. We were born to make manifest the glory of God that is within us. It's not just in some of us; it's in everyone. And as we let our own light shine, we unconsciously give other people permission to do the same. As we're liberated from our own fear, our presence automatically liberates others.
Thu, 24 Aug 2006leading a discussion on a small assortment of the apprenticeship patterns at The Great Lakes Software Excellence Conference on October 26 in Grand Rapids, Michigan. I'm looking forward to road-tripping there with Tyler, who is giving a talk on Practical Pair Programming.
Sat, 25 Feb 2006the apprenticeship patterns half a dozen times over the past 8 months, I'm finally getting comfortable with a specific presentation approach. It's the approach Ade and I used at PLoP 2005, which is basically to minimize monologue and encourage small-group-discussion. As Ade and I have found, by simply handing the group a 1 or 2 page copy of one of the patterns and giving them a few minutes to read, hour-long discussions erupt from a previously silent and introverted group of programmers. And get this, we're not talking about anything technical! (all fluff) In my first couple talks about the patterns last year, I felt compelled to give an overview of nearly every pattern, which resulted in me doing most of the talking (bletch). As the number of patterns grew and I received honest (and helpful) feedback from colleagues like Paul Julius, Obie, and Desi McAdam, I switched to focusing on just one or two of the patterns in any given presentation. A great encouragement to me as a pattern writer has been that by focusing on a single pattern, we invariably end up talking about all of the other patterns that it depends on. These things are interconnected and that is A Good Thing. The "Apprentice to Journeyman" discussion during my "presentation" at the (incredible) ThoughtWorks Away Day last weekend was (imo) great, and, as usual, I came away with a lot of new material. I greatly appreciated the participation of Naresh Jain and Mike Ward.
Mon, 12 Dec 2005the apprenticeship patterns. One of the nice things about writing about this stuff is that examples of the patterns are everywhere in a typical software project lifecycle. I wrote up an example of Expose Your Ignorance for my latest StickyMinds column: The Empty Cup.
Fri, 18 Nov 2005Ade and I stole Wear the White Belt from Zen Guitar and Mastery. The pattern is beginning to capture my understanding of beginner's mind. As always, feedback is encouraged via the comment system.
Thu, 10 Nov 2005Zen Guitar on the train today when I arrived at a small chapter entitled "Mastery":
You have to persist, and out of the sheer frustration of what you've been doing or you haven't been doing you just come out on the other side. Of course, when you come out the other side, you find that there's an even bigger hill to climb than the last one. --Allan Holdsworth
As I read this book, I keep wondering whether I shouldn't just give up on my writing and point people to read Zen Guitar instead. So much of what I want to convey is in there already. But no, rather than giving up, I believe that this book will help me regain my momentum to write From Apprentice to Journeyman.
Sat, 24 Sep 2005Daragh Farell and Ben Hogan presented the latest (and increasingly in need of an update) apprenticeship patterns at SyXPAC in Australia. Daragh is obviously quite the PowerPoint afficianado (particularly compared to me) and put together a nice slideshow. I'm looking forward to watching the video they took of the event. Thanks guys! Simon blogged about the experience the next day. Simon referred to our work as behavioral patterns (as opposed to design patterns). I think that is a useful distinction.
Fri, 16 Sep 2005PLoP. Darth Ravi has been overwhelming us with feedback on Craft Over Art and his thoughts on software craftsmanship. It has been extremely valuable, but brought my productivity to a standstill as I sort through it all. Almost a week after our last focus group, I'm finally blogging it in hopes that it will jumpstart my writing muscles... It was a smaller group on Friday. It turned out to be extremely valuable to have just half a dozen people there the second night, it allowed everyone to provide much more in-depth feedback. I got to watch people digest the patterns first-hand and was excited as I watched a graduate student latch onto the ideas in Expose Your Ignorance. It was great to be able to finally co-present with Ade the ideas we've been writing about remotely for the last few months. I was pleased that the pattern community found our simple pattern format acceptable. On Saturday, Ralph Johnson (part of the GoF), spoke about the second edition of Design Patterns which will include some long-awaited warnings against Singletonitis and other pattern abuse. Code examples will be exclusively in Java (as the trees weep).
Fri, 09 Sep 2005PLoP 2005 to run focus groups on the apprenticeship patterns. Last night was the first one and we had the dozen or so attendees focus on Be The Worst. As usual, there were no shortage of opinions, which is always encouraging to me. We received suggestions to change the name of the pattern to something more positive (The Lion's Tail being our favorite) alongside feedback to keep the name as is. There were discussions of the dangers of being the worst in a company that fires the bottom performers and the impact of being the worst on your confidence. The feedback helped me bring out the relationships and dependencies that this pattern has on other apprenticeship patterns like Unleash Your Enthusiasm, Find Mentors, and Retreat Into Competence, along with patterns from other languages like Expert In Earshot. I need to make these relationships explicit in the pattern. Tonight we're going to have a longer focus group session in order to focus on one ore more collections of patterns. We're wondering whether Expose Your Ignorance and Confront Your Ignorance can be renamed into something more positive and combined into one. We don't think The Long Road and Craft Over Art are patterns and we're wondering how to fit them into a pattern language. After last night's group, I'm no longer nervous. I'm excited for tonight's discussions.
Thu, 08 Sep 2005PLoP 2005 early yesterday morning for pattern bootcamp led by Bob Hanmer and Linda Rising. I left Wheaton at 4:30 AM and arrived in Monticello a little after 7:00 AM (I'll leave my average speed as an exercise to the reader). One of the things I was most looking forward to at PLoP was meeting my co-conspirator, Adewale Oshineye. We worked late into the night on our book, tucked away in one of the dark recesses of the house at Allerton Park. This exposure to the patterns community has been incredible and sometimes overwhelming. I go through periods of excitement when I can see that the apprenticeship patterns are on the right track and there are other times when I get glimpses at how far we have to go if we want these to exhibit the qualities of a pattern language. This afternoon marked the beginning of the conference in earnest as we began the series of writers workshops. I am excited to be in the same track with Ralph Johnson and Brian Foote. Tonight, Ade and I will be running a focus group on the apprentice patterns. As always, I'm nervous.
Mon, 29 Aug 2005the apprenticeship patterns to use in this week's StickyMinds column. It's called Experts, Craftsmen, and Ignorance.
Sat, 20 Aug 2005Walking the Long Road. One of the most consistent bits of negative feedback was on a pattern that I was never very happy with: For Love, Not Money. I've renamed it to Sustainable Motivations and rewrote most of the pattern.
Thu, 28 Jul 2005Walking the Long Road, particuarly from Ken Auer, someone who has been encouraging me and supporting this project since its inception. Ken pointed out a glaring omission: the customer!
We've added a new pattern Craft Over Art that is a first step toward remedying this critical omission. As we revise the rest of the patterns, we'll have tiny imaginary customers sitting on our shoulders, whispering "remember me?"I'll be dropping off the radar until August 8th. I'm headed to Rainy Lake with Staci and Rose and Ricky where there will be no electricity, mobile phones, or plumbing. I love that place.
Tue, 26 Jul 2005PLoP 2005 bootcamp in September in order to sharpen our pattern writing skills and receive guidance from the patterns community. We've also been encouraged to lead a focus group on the apprentice patterns. I'm excited for this opportunity and thankful that ThoughtWorks is supporting this endeavor.
Sat, 23 Jul 2005Walking the Long Road, our first chapter (not the first chapter in the book, but the first one we've written). There is still more to be done on it, but I wanted to get it out to get some eyeballs on it. Any feedback is welcome. Feel free to use the commenting system on the individual pattern pages.
Yesterday I spoke about the patterns, this time at an internal event at ThoughtWorks. I was more nervous about this talk than the one in Atlanta (ThoughtWorkers can be a tough audience). But again, it was a positive experience. People felt free to offer suggestions, share opinions, and point out missing patterns. By the end I was exhausted, but encouraged by the participation and excited by what I'd learned from my colleagues.We have pushed out a number of PERPETUAL LEARNING patterns lately as we shift our focus in that direction. These latest patterns include Breakable Toys, ExposeYourIgnorance, Record What You Learn, and Share What You Learn.
Thu, 14 Jul 2005Agile Atlanta meeting was a lot of fun. I monologued for too long about the background of the patterns and about patterns and pattern languages in general. It wasn't until I simply displayed a list of a bunch of the apprenticeship patterns and briefly described each of them that the meeting took off. And took off it did! We didn't wrap up until after 9:30 and I ended up missing the last flight back to Chicago. (Thanks for the couch, Obie.) Here are the somewhat lame slides that will likely be slashed down to just one slide of the list of patterns for any future presentations.
The discussion was exhilarating. One theme that kept coming up was the differences between experts and master craftsmen. New patterns were brought forth. People related the patterns to their own experiences. Several patterns were critiqued and tested, resulting in the identification of how some patterns could be balanced (Expand Your Bandwidth vs. Filter The Noise). Having a number of software veterans there was a huge benefit.When I finally got back to Chicago the next morning, there was an email from a publisher waiting for me. They're interested in the patterns. I'm encouraged.
Fri, 08 Jul 2005the apprenticeship patterns at Agile Atlanta on Tuesday, July 12th. If you're interested in what we've been writing about and would like to learn more and/or influence the direction we're taking and live in the area, I'd love to meet you there.
Thu, 30 Jun 2005the apprentice patterns:
Wed, 29 Jun 2005Draw Your Own Map, rounding out the The Long Road family of patterns (as they're currently organized). This pattern has a different format and we would appreciate any feedback on that, as well as the pattern itself (comments are enabled on the page).
Fri, 24 Jun 2005The Humble Programmer. I am inspired by Dijkstra's story of the critical moment when he was deciding between theoretical physics and programming as a student at the University of Lieden...
Full of misgivings I knocked on van Wijngaarden's office door, asking him whether I could "speak to him for a moment"; when I left his office a number of hours later, I was another person. For after having listened to my problems patiently, he agreed that up till that moment there was not much of a programming discipline, but then he went on to explain quietly that automatic computers were here to stay, that we were just at the beginning and could not I be one of the persons called to make programming a respectable discipline in the years to come?
Wed, 15 Jun 2005Liz weighed in with her thoughts on Resist the Promotion, suggesting a new pattern Step On Up. I like the idea, and while it could be described as a pattern of software craftsmanship, it's not a pattern for apprentices. But let me defer that issue for now. My assertion might make more sense after I address the concept of apprenticeship. (see below)
Liz: "Dave says that he's aiming his patterns at new programmers, but I've found that a great deal of them are applicable to where I am in my career."When I started writing the apprenticeship patterns, I was explicit with myself about the target audience: novice programmers interested in software craftsmanship. I received feedback early on from my brother (a user experience designer at Microsoft) that some of the patterns could be made more abstract because they were applicable outside of the domain of software craftsmanship. Since then, I've had programmers with more than 15 years of experience tell me that they found the patterns relevant. While this feedback is encouraging, we are going to continue to keep our context grounded in novice programmers.
Liz: "I don't feel as though I've finished my apprenticeship yet, despite having over seven years of industry experience.According to Pete McBreen, "An apprenticeship will last at least five years" (Software Craftsmanship, p. 102). The context of Pete's statement implied that the apprenticeship followed the ideals set out in his book. In other words, apprentices work on a small team of craftsmen, consisting of other apprentices, a few journeymen, and a master. It's safe to say that most of us didn't have the benefit of such an environment during the first five years of our careers, nor for any 5 year stretches of our careers. So it's not surprising that Liz's apprenticeship continues, as does mine.
Liz: "I accept that it's important to understand the technical aspects of the job in depth, and therefore resisting a promotion is important, but I feel it's equally important to recognise the point at which you as a developer can move on to help facilitate the process which turns ideas into reality."True, but one must wait until your apprenticeship is over. Resist the Promotion is written for apprentices because it is during apprenticeship that a craftsman's knowledge is most transient. A journeyman or a master might be able to maintain their craftsmanship for a season when they've found it appropriate to Step On Up, but an apprentice will lose his expertise much more quickly.
Liz: "Apprenticeship has to be a life-long pursuit; a journey towards an unreachable destination, but an important journey nontheless."Liz is confusing apprenticeship with mastery. For the purposes of the apprenticeship patterns, I am basing my understanding of these concepts on Software Craftsmanship by Pete McBreen and Mastery by George Leonard. While an apprenticeship does, in fact, have an ending, the path to mastery does not. Although we haven't yet come up with a clear distinction between apprentice and journeyman, we are operating under the assumption that they are two distinct stages of the software craftsman. In my opinion, what Liz is describing is mastery, not apprenticeship.
Liz: "Dave and Pat, if you read this; I'd be interested to know if this makes any sense to you. From my point of view, you're masters. Do you consider yourselves to have finished your apprenticeships yet?"I don't understand how you could think either Pat or I are masters. You've never worked with us. And no, I have not yet finished my apprenticeship. I've been programming for less than five years. Update: Liz, I definitely was not annoyed with you, no apology necessary. I appreciate you and Pat posting on this topic because it's forcing me to clarify the pattern. It's exactly what I needed and I hope that you'll continue to comment, critique, and suggest alternatives. Pardon the tone of the blog entry, it's probably the outcome of me trying to do too many things at once.
Tue, 14 Jun 2005Pat has provided some feedback on Resist the Promotion. Pat rightly points out...
I think that the really great engineering projects cannot be accomplished with technical talent alone, nor can they be accomplished using managers who are not also technical. There is a vital need for managers who know technology, deeply. This need can only be supplied 'from the ranks' of those who are technical.I completely agree. It seems that Pat has not only taken Resist the Promotion out of context, he has converted it into a context-less principle. As if Ade and I were saying that all programmers were making a mistake to move into management. In an attempt to avoid further confusion, I will address what these apprenticeship patterns are trying to accomplish and who they are written for. These patterns are an attempt to distill concrete, practical advice from the ideals presented in Pete McBreen's Software Craftsmanship, from our own experiences, and from the experiences of the apprentices we are interviewing. Pete's book presents a vision of the field of software development that has inspired many craftsmen, myself included. Yet Pete's book is targeted at an audience that has the power and ability to take on apprentices. I wanted to write something for the apprentices themselves. We believe there is a need for a book that helps aspiring craftsmen navigate an industry that does not embrace the craftsmanship mindset. These patterns are written for new programmers who aspire to become master craftsmen. Tying this back into Pat's feedback, let me state clearly that the pattern is not asserting that there is anything inherently wrong with a programmer accepting a promotion into management. In fact, for those who aspire to become great technical managers, it can make perfect sense to accept the promotion. That said, the implicit context of all of these patterns is that you are an inexperienced programmer who desires to become a master craftsman. The explicit context of Resist the Promotion is that you are being offered a promotion that would have you spending less time programming. In that context, we have found that for apprentices to stay on the path to mastery, it is necessary to resist the promotion in order to continue programming full-time.
Sun, 12 Jun 2005Resist The Promotion, Bernard used his blog to provide feedback, leaving the URL to the blog post as a comment. I prefer this idea over putting the content in the comment form because it exposes the patterns to a wider audience.
Regarding his feedback, it resonates with a conversation I had with former programmer Ross Petit, the ThoughtWorks account principal on my current project. We were discussing Resist The Promotion and Ross pointed out something similar to Bernard. As you progress toward mastery, your vision of the development lifecycle expands. Take for example one of my teammates, Paul Hammant. He operates at multiple levels of the project, all the while remaining intimitely involved with the lowest level code. As Bernard put it:
For sure, those tasks are not programming, but maybe, a master has the ability to keep an eye on all of them, at the same time, and drive them into the right direction to enable the programming task to happen in the best possible context.By the way, I'm not implying that Paul is a "master". How would I know that? I just know he's further along the path that I am walking on.
In response to Bernard's feedback, I should also point out something I have had to point out other collaborators previously. These patterns are specifically for apprentices. Resist The Promotion is not written for journeymen or masters. While some of the apprenticeship patterns might apply to craftsmen at all levels, there are some that are inappropriate outside the context of apprenticeship. Which ones? You tell me.
Sat, 11 Jun 2005For Love Not Money. I'm not satisfied with it, but I wanted to get it out there for feedback.
I'm planning on working on The Long Road next, in hopes of pulling that family of of patterns together for a sample chapter.
Sun, 05 Jun 2005Ade and I slowly gather feedback from craftsmen around the world. I'm having a great time with this.
Steve Baker posted his apprentice story, focusing on Be The Worst.
People have been asking us to share more than just the pattern names, so I whipped up a Ruby script that will publish the patterns we think are ready for public feedback. See what we've put out there on the patterns page. Comments will be coming soon.
Update: I've added comments to each of the pattern pages.