Craftsmanship Academy

Training the next generation of top software developers.

Academy Schedule Announced for Next Craftsmen

The first class of Academy participants are well on their way and will tell you how much they learned in a future blog post.

We learned some things, too. We started with 5 participants for the first class. One found that they weren’t cut out for the program and left early based on mutual agreement. (We learned about better screening and preparation of the participant). Two others were already working with RoleModel in other capacities, and are continuing in those capacities. (We learned that some of what we covered is the best orientation for new people joining us). The final two were are target audience and exceeded our expectations. (We learned how to adjust the program for the future).

Christian DiLorenzo and John Calvin Young are continuing their academy participation while working as apprentices at RoleModel right now. They are doing a combination of directed projects with regular review, serving in various unique capacities, and getting ready for the project immersion phase. John is focusing on DevOps and Web Development. Christian is focusing on iOS development and Design.

Based on reflection from our experience, we’re announcing our schedule and pricing for the next two offerings of the Academy.

If you have been to our website before, you’ll notice some updates to the pricing structure, as well as the models, without changing the basics of what is being taught/learned. The intensity and interaction of the first six weeks of Skills Immersion will be extremely high, and it is just-short-of-required that all other activities (part-time jobs, other classes, etc.) cease during this time. The second six weeks (or longer) of Skills Immersion will be more self-paced with much less interaction from instructors and mentors. There will be six short group sessions over the following six weeks that can be attended live or remotely. In addition, the participant can schedule six two-hour one-on-one sessions with instructors and/or mentors while working through assignments given to them at the end of the first session. (They will also have just-in-time access to help if they are really stuck).

These assignments must be completed and sufficient skill demonstrated to apply for a 12-week apprenticeship on a project with RoleModel Software (Project Immersion). Potential apprentices must be accepted by the project technical lead (recommendations of the Academy instructor/mentor will certainly carry significant weight). Depending on a variety of factors, the apprentice to the project may earn $8-12/hr for work deemed valuable and billable to clients. Start dates for Apprenticeship are somewhat flexible. Dates below are merely suggested expected start dates for planning purposes. A variety of circumstances could alter actual start dates for this phase of the program.

Spring Entry

This is an earlier entry point and smaller class size than our Summer Session.
It is targeting those who are either ready to dive in with both feet before the summer, or those who are on a self-directed and flexible Academic Schedule such as CollegePlus! and would like to focus on six weeks of immersion to really get started, but slow down the rest of the process in order to interleave completion with other studies.

February 25, 2013 - April 5, 2013 (Max class size: 6)
Skills Immersion - Part 1 - Craftsmanship in the Small (6 weeks resident, cost: $5,000 plus room/board if not commuting)

April 15, 2013 - May 24, 2013 (Can be longer if deferring Apprenticeship)
Skills Immersion - Part 2 - Craftsmanship that Scales (6 weeks resident or remote, cost: $2,000 plus room/board if not commuting)

June 3, 2013 - August 30, 2013 (Must successfully complete Skills Immersion - Part 2 Requirements and be accepted by Project Technical Lead… later entry points into Apprenticeship phase are possible)
Apprenticeship: Project Immersion - Craftsmanship for Others (11 weeks resident over 13 calendar weeks, cost: $0 plus room/board if not commuting, potential earnings: $8-12/hr for work deemed billable to clients)

September 3, 2013 - August 29, 2014
Paid Internship at an Agile Craftsmanship-Minded Company (1 year resident, potential earnings: $24,000-36,000)

September 8, 2014 - September 12, 2014
Journeyman Certification test (5 day resident, cost: $500)

Summer Entry

This is an entry point for those who are finishing a season of study through a traditional school calendar in May/June and looking at the Academy to help launch them into a career. It could also work for those who are still finishing their Academic Schooling (high school or college) and would like to focus on six weeks of immersion to really get started, but slow down the rest of the process in order to interleave completion with other studies.

July 8, 2013 - August 16, 2013 (Max class size: 10)
Skills Immersion - Part 1 - Craftsmanship in the Small (6 weeks resident, cost: $4,500 plus room/board if not commuting)

August 19, 2013 - September 27, 2013 (Can be longer if deferring Apprenticeship)
Skills Immersion - Part 2 - Craftsmanship that Scales (6 weeks resident or remote, cost: $2,000 plus room/board if not commuting)

September 30, 2013 - January 3, 2014 (Must successfully complete Skills Immersion - Part 2 Requirements and be accepted by Project Technical Lead… later entry points into Apprenticeship phase are possible)
Apprenticeship: Project Immersion - Craftsmanship for Others (11 weeks resident over 13 calendar weeks, cost: $0 plus room/board if not commuting, potential earnings: $8-12/hr for work deemed billable to clients)

January 6, 2014 - January 2, 2015
Paid Internship at an Agile Craftsmanship-Minded Company (1 year resident, potential earnings: $24,000-36,000)

January 12, 2015 - January 16, 2015
Journeyman Certification test (5 day resident, cost: $500)

Future Day-to-Week-Long Immersions

Through the first official Academy, and the process leading up to it, we found out a few things that are causing us to think about a few other offerings:

  • One day intense intros to iOS for non-iOS Software Developers
  • Two day intense intros to JavaScript for real Software Development (it’s not just for tweaking the DOM)
  • One week bootcamps for active developers who want to learn a new technology as well as some craftsmanship techniques
  • One week bootcamps for high schoolers who think they might want to program someday

Stay tuned to this space for how we may roll these out over the next year or so.

Training the Next Craftsmen

So my cousin’s son discovered my name in a great article by Obie Fernandez (warning some frank, off-color language… do not read if that bothers you) entitled 10 Reasons Pair Programming is Not for the Masses.

This was shortly after a client struggling with some of his own developers pointed out What Makes Bad Programmers Different? which was a follow-up to What Makes Great Programmers Different?.

I go places and read and have experienced the reality that people who consider themselves good programmers (and some actually are) don’t have much tolerance for those that don’t measure up to their standards. When you ask most of them how they learned to be good programmers, you will typically find one of two answers:

  • I just picked it up along the way through self-study, or
  • I had a great mentor (or mentors) who really taught me a lot

In my experience, the best have had both and the ones who just picked it up are rarely as good as they think they are.

After the first few weeks of the Craftsmanship Academy, I am watching really bright guys who have picked up a lot on their own learn a ton. They are breaking bad habits that they’ve picked up on their own (or getting their hands figuratively slapped when they don’t). These are things that aren’t taught in most classes and aren’t picked up on your own.

They are encouraged to do a lot of self-study. You can find stuff on the internet to help you do some technical feat you want to accomplish or overcome a problem that is not intuitively obvious. But there is so much stuff on the internet and no healthy curriculum through it that shows you how to develop good habits, recognize the philosophy of the person who is providing the info, or building any cohesive approach to the craft.

I am thrilled at what is happening with the future craftsman we are training. As Daniel Steinberg observed while he was here for a few days as we tackled applying these principles to iOS development, “the sky is the limit for these guys… what a great start they are getting.”

CollegePlus! Partnership & Scholarship

Over a decade ago, I had the extreme pleasure of meeting Woody Robertson.

At the time, Woody was in charge of coordinating the Apprenticeship Track at the Advanced Training Institute’s annual conference. He had sought me out to have me speak into the lives of a bunch of youthful homeschoolers trying to seek the Lord’s direction in life and exploring the possibilities of Information Technology. I remember speaking to him about how this was a great track to get a bunch of young people exposed to the world of software development but it was far short of what apprenticeship was about. I also remember how impressed I was with the maturity, insight, and teachability of this young man.

We talked then about how colleges weren’t the best place to prepare young people for a career in software development, and how there were many reasons that it was generally not a great place to spend four years of life. We spoke about our disappointment that there were not many good alternatives. I pointed out that, the way RoleModel Software was set up at the time, I could only take on one apprentice at a time, and I was unsure how to improve that. I shared that men couldn’t just bemoan this fact, but needed to rise up and pioneer ways to provide, not just alternatives, but superior alternatives.

Around the same time, I had an apprentice named Matthew Bass. Matthew was another impressive young man and one of the pioneers trying to figure out similar things. He earned his Bachelor’s degree without leaving home while working on his own entrepreneurial ventures, seeking to serve in various capacities, and gain wisdom from those who had gone before him.

A few years later, I found out that Woody had teamed up with Brad Voeller (another impressive young man with whom I was acquainted) and Ryan Yamane to found CollegePlus!. They leveraged their unique talents and collective experience in navigating the waters of the accelerated learning techniques they used to get their Bachelor Degrees in between 6 years and 18 months. Over the last several years, I’ve kept in touch with these individuals and observed the fruit of CollegePlus! in several young friends of mine. Not only is CollegePlus! a great program, but I’ve come to further appreciate the vision that the founders have, their integrity, their ability to execute, and their attitude toward lifelong learning. This was exhibited a few years ago when they had grown and were seeking someone to head up their internal IT organization. They sought me out and, though I couldn’t provide a direct candidate, I was impressed with their desire to not only find someone well qualified for the job, but also someone who shared their vision.

God provided Kevin Bridges as their IT Director, who quickly followed up with me to seek some assistance in helping them move along. When I challenged him on some of the technology choices they were making, he was also quite teachable. Kevin has done an incredible job in taking a few seeds I scattered, planting and watering them to the point that they have now have an IT shop that is quite impressive and practices what CollegePlus! preaches.

I could go on about CollegePlus! and how true they are to their Mission Statement, but instead, I’m just going to make an announcement.

CollegePlus! and the Craftsmanship Academy are partnering.

CollegePlus! enrollees who have completed at least their Intro to Computer Science requirements are eligible for a 50% scholarship to the Craftsmanship Academy. Additionally, they will be guided toward material that will help them earn additional credits toward their degree. This partnership of CollegePlus! and the Craftsmanship Academy is, in many ways, the fruition of those conversations Woody and I had over a decade ago.

We are thrilled to provide a path that combines the training in both theory and best practices to launch young people to a fruitful life of integrity in serving and providing great value for those they will serve in the future.

Timing Is Everything

Yes, we’ve been silent for several months. We’ve had many inquiries about the Academy and have been asking a lot of questions ourselves.

From the time we announced the Academy in October, we received a lot of feedback from many who were very interested in the concept, but weren’t in a position to buy the product as packaged. In fact, the concept was very well-accepted by our target audience. The timing was not. One of the biggest issues was that our schedule did not line up well with commitments to others’ academic years. We’ve spent a lot of time pondering internally how we can keep the concept, but make it more “user-friendly.”

So, based on that feedback we are pleased to announce our new schedule with some exciting adjustments that will enable us address the needs of many would-be applicants who have expressed their strong desire to participate, but could not do so until now.

We have modularized and repackaged the Academy to better adapt to the calendar of our target audience, with multiple tracks for those in different situations. We’ve explicitly broken our immersion training into three distinct sessions, and provided multiple options for the second session. As a bonus, we’ve also added personal mentors for each participant, in addition to the very deep relationship that will be had with the lead instructor. Though it is our strong desire to see people through the entire program, we’ve also made it easier for participants to bite off smaller chunks of the program. Lastly, we’ve adjusted the financial package to make it a bit more approachable to some.

Accelerated Track

The accelerated track is consistent with our initial offering, but with a new start date.

July 9, 2012 - August 17, 2012
Skills Immersion - Part 1 - Craftsmanship in the Small (6 weeks resident, cost: $4,000)

September 4, 2012 - October 12, 2012
Skills Immersion - Part 2 - Craftsmanship that Scales (6 weeks resident, cost: $4,500)

October 29, 2012 - January 25, 2013
Project Immersion - Craftsmanship for Others (10 weeks resident over 13 calendar weeks, cost: $5,000)

February 4, 2013 - January 31, 2014
Paid Internship at an Agile Craftsmanship-Minded Company (1 year resident, paid: $24,000-36,000)

February 4, 2014 - February 7, 2014
Journeyman Certification test (4 day resident, cost: $500)

Coordinated Track

The coordinated track allows individuals to participate and benefit from the Academy while finishing other academic endeavors:

July 9, 2012 - August 17, 2012
Skills Immersion - Part 1 - Craftsmanship in the Small (6 weeks resident, cost: $4,000)

September 11, 2012 - May 3, 2013
Skills Immersion - Part 2 - Craftsmanship that Scales (30 weeks distance learning, cost: $4,500)

June 17, 2013 - August 23, 2013
Project Immersion - Craftsmanship for Others (10 weeks resident, cost: $5,000)

Option 1:

September 3, 2013 - August 29, 2014
Paid Internship at an Agile Craftsmanship-Minded Company (1 year resident, paid: $24,000-36,000)

September 2, 2014 - September 5, 2014
Certified Journeyman Certification test (4 day resident, cost: $500)

Option 2:

September 3, 2013 - May 30, 2014
Further directed self-study and application development (9-months distance, cost: $2,000)

June 2, 2014 - May 29, 2015
Paid Internship at an Agile Craftsmanship-Minded Company (1 year resident, paid: $24,000-36,000)

June 2, 2015 - June 5, 2015
Journeyman Certification test (4 day resident, cost: $500)

More Candidate Applicants

In the process of talking to potential applicants earlier in the year, we found a variety of really talented people who wouldn’t have been able to apply with our last schedule. For example:

  • A rising homeschool junior who has been programming for several years in a variety of languages, has designed and implemented some very professional websites, has incredible maturity, and is finishing up a very demanding academic program.
  • A soon to be graduate of CollegePlus who has gotten a bachelors degree online in Computer Science but realizes he wants to be a software developer and is not prepared for it.
  • A standout programmer in a Junior college who has some classes to finish up.

We are looking forward to the premiere class of the Craftsmanship Academy with folks like these, and many others.

Where Do Academy Projects Come From?

Matt Heusser recently interviewed me to ask about the academy. One of the questions he asked was “What will the students learn in the six month training portion? What will student life be like?” Without repeating how I answered it there, I’d like to add a bit more.

I have received many questions about what working on real-world projects during the second 12-week session means.

Having worked with many apprentice-level people in the past, I know that their first real-world project is a great awakening. As Corey Haines stated in his keynote address at Software Craftsmanship North America, (paraphrased) “Programming is not that hard. Software Development is hard.” The first 12-weeks will get the apprentices ready by giving them some fairly well-paced projects that I can somewhat predict how they will go and what they will learn. But that’s not the way most projects I’ve ever been on in the real world go. Though I’m getting more and more comfortable with projects after close to thirty years, and get surprised by their turns less and less, there is still a lot of unpredictability.

I’ve found that, the first “real project” an apprentice gets on is often a huge shock to them. They don’t run like the textbook says… or at least not like their interpretation of what the textbook says. And, quite frankly, most apprentices don’t have a clue how to handle it. They need instruction on how to extract what a client really wants, how to prioritize, when to ask for help, when not to ask for help, how to figure out the missing pieces, when it is OK to experiment (and how), and …

As I designed the Academy based on all of the other apprenticeship experiences I had, I really thought a “real-world project” needed to be part of it. They needed to see how I handled a new project that was thrown at me, not just one I have already done, giving them pre-digested instructions. When I thought about where to get these sorts of projects, just like I benefited from the world of Farriers for parts of the structure, I benefited from looking at other types of schools for hands-on projects.

Dental and Cosmetology Schools

Some people go to dental schools to get dental work done or cosmetology schools to get nails or hair done. The expectation is that the procedure may not be efficient or at the highest standard of quality as it might be if they paid a professional full price, but

  1. The customer doesn’t pay full price
  2. The customer doesn’t tend to go there for work where risk is incredibly high if something goes wrong or where specialized, advanced skills are required without assurance that a highly-skilled professional is actively doing all the work himself.
  3. The price you pay really covers the overhead of the school, and what you are paying for is the sign-off by the licensed professional that a professional level job was done.

All of this is a win-win-win.

The customer wins because they save money

Whether going this route allows them to afford something that would otherwise be difficult to purchase, or just use the savings for other purposes, they made the choice to go this way.

I don’t have much hair so, for several years, I went to a hair styling academy that was conveniently located close to where I was working. A student would give me a haircut, and an instructor would check it out before I left. Sometimes the student was a little slow and methodical (usually the newest students). Sometimes the student seemed pretty confident and moved fairly quickly. Sometimes the instructor would say, “good haircut” after running their fingers through my hair. Other times the instructor would do some touch up and instruct the student as they did.

I got pretty decent haircuts, and used the savings for other things.

The student wins because they get to practice their craft on real live examples

As Jared Richardson points out, “How many books do you have to read about riding a bike before you can ride a bike proficiently?” We all know the answer is “none.” You need to have the prerequisites (basic balance and ability to move legs and arms appropriately), some instruction in the basics, and then practice. It is best to make your initial attempts in a safe place with some safety equipment and oversight from a person who can prevent costly consequences for incompetence. If you have an experienced coach, they can help you recognize what you are doing wrong, correct your mistakes, and slowly introduce the techniques that only masters would know as well as the context(s) in which the technique(s) apply.

The students at the hair salon and the dental schools are getting experience with an experienced coach on their way to becoming competent enough to practice by themselves or with a larger professional team.

The school wins because they can recover some of the cost of running the school

Most people don’t consider what it takes to run a school. There are marketing and recruiting costs. There is the overhead of the buildings and equipment. There is the time of the instructors, both while they are teaching and the hours of prep work before and during a course.

People wonder why most “private schools” are generally more expensive than “public schools”.
Often, they aren’t, it is just a matter of where the funding comes from. When funds come from a government subsidy, private donations, or other ways that a school can get cash flowing in, they can lower the tuition of their students while still covering their costs and/or making a reasonable profit.

Most colleges don’t just get income from tuition, but money comes in to fund research and other activities by the “professors”. In the best case, that work helps the professors learn more deeply so they have more to share with the students, and allows the students to do some work alongside the professors.

The Academy’s Win-Win-Win

We are seeking candidate projects for the second 12-week session that meet the win-win-win criteria of being good for everybody.

RoleModel Software often has potential clients that have a bigger vision than budget.
Perhaps they have a project that would cost $50,000 if the professionals at RoleModel took it on, but they only have $25,000 they can spend. If we feel the project is something that can fit into the timeframe for an Academy project, we might take it on.

Instead of paying full-price and getting the fastest turn around, we offer them an alternative that can get them where they want to go for less money. We will bill the instructor’s time at a deep discount (40% of normal rates) knowing that he will be working on the project at a slower rate as he teaches apprentices, and that some of the work will be done by the instructor via the apprentices’ hands. If there are areas that others at RoleModel need to be brought in on either because the skills needed (e.g. UX design work) are not the primary instructor’s strong suit, or he is being spread too thin, that work will also be at a significant discount.

The academy wins because the expenses of the academy are offset by the client’s paying to have the project completed as an academy project. It also gives us a real-world project with a real-world client which is more challenging than one we just make up. We get to teach apprentices how to help clients work through trade-offs, the benefits of delighting them, the cost of disappointing them, the challenges of communication and expectation management, and so much more. Our instruction wouldn’t be as good if we only gave them the theory of what might happen in a real-world scenario.

The apprentices win by seeing an entire project from concept to deployment. They will experience the difference between programming and software development and realize there are a variety of skills needed that go beyond learning a language. They also benefit from the lower cost of the academy to them. When we first laid out the model of the academy, we were considering tuition of $20-25K, rather than $16K.

We already have a couple of candidate projects, but are always looking for more. As we know in our business, candidate projects don’t always turn into real ones. We’ll be looking at which of the candidate projects will become the real ones at the beginning of June. Just like we’re being selective about our intern sponsors, our instructors, and our apprentices, we want to be selective about the projects used in the academy.

If you have a project you would like to save some money on that could benefit from the expertise of RoleModel, and think it might be able to be done in the 12 weeks between August 13 and November 2 using this model, please contact us.

The Professionals Know What the Universities Won’t Tell You

I just got back from the Software Craftsmanship North America conference in Chicago. I knew that the industry was ready for a new model of training, but I was a bit overwhelmed by just how ready. I can honestly say that they were actually beyond ready… they were hungry.

At the welcome reception, one craftsman or journeyman after another greeted me (whether they knew me or not) and congratulated me on the opening of the Craftsmanship Academy. They all stated in one way or another that the universities weren’t preparing people for the realities of software development and didn’t seem to care. Many asked how I was going to approach their education and nodded approvingly when I told them what and why I was going to do. I probably told the story about teaching data structures in context, a half dozen times to people whose collective response seemed to be saying “I always suspected how much easier it could be to teach theory in the context of practice.”

Corey Haines gave a great keynote at the opening of the conference. He started out saying that he was a little bit worried about the future of software development. He was concerned that we might be “doing it again.” Doing what? Making the mistakes the industry did in the late 90s… Hiring anyone who had a particular language on their resume, and producing a lot of disappointing results.

One of the reasons was that the universities weren’t preparing its graduates for the realities of software development.

Corey said that though learning a language is not trivial, it is also not that hard. (This was echoed by Zed Shaw and others later at the conference). Software development, especially the kind that provides real value for business, is hard. No one in the industry who actually does software development for a living would tell you that the majority of their job consists of typing code into files that will eventually compile. There is so much more to software development. Corey feels for the many unfortunate business people who don’t know enough to tell the difference, so they often hire people who know a language but don’t know how to develop software, and they waste a lot of money because they don’t get the value they need.

Corey also pointed out that he had a lot of hope. He listed RoleModel Software’s Craftsmanship Academy as one of the reasons for his hope. He was not only pleased with our offering, but also pleased that the community attending this conference and beyond was intent on training up the next generation.

Shortly after Corey’s talk, Chris Parsons from the UK gave a talk entitled, “Universities: Who Needs Them?” He challenged the value of teaching theory without much practice and ignoring all the things that actually makes for success in software development. He challenged the audience to begin figuring out how to get entry level folks from high schools before they spent too much money learning a lot of theory out of context. One thing he said that a university might be good for is teaching theory after they had more practice under there belt, but that it would be better to get “just in time” theory that could be pulled as it is needed in smaller chunks. He, too, mentioned our Craftsmanship Academy by name as a much better solution.

Though I must admit all the free publicity was great, that really wasn’t the point. It seemed that about half the sessions at the conference at least mentioned the fact that some sort of apprenticeship model was absolutely necessary for training up software craftsmen and, either explicitly or implicitly stated, the universities were not even beginning to prepare its graduates for real world software development. There was a very well-attended panel on software apprenticeship, the theme of which pointed out that taking on apprentices was hard but necessary work, and openly shared the lessons learned from trying. Interestingly, this panel, hosted by Michael “Doc” Norton wasn’t led by those who were just experts on the theory, but who had actually had practical experience with apprentices. Though they acknowledged that the theory taught at universities had some value, it was easier to fill in the theory in the context of practice than to teach those who were taught the theory how to effectively do the practice.

There was a lot of excitement about our program because it made it much easier for those wanting to take on apprentices/interns to find qualified people. As of the moment I write this, I have two qualified software craftsmanship shops who already signed up to pay for the privilege of interviewing the program’s graduates, and a bunch of others who told me they were planning to apply when they got back to their office.

I talked to people in several shops who told me how hard they have been looking for sources outside of college graduates. Some used local tech colleges to search for people who were on top of the class and hired them in the summer, trying out summer students and hoping that one would stick. Others would just look for young people who had done some programming and spent a long time interviewing them. Though they found better success with these methods than hiring university grads, they just swallowed hard about all the things they had to teach these entry level folks that they had not picked up elsewhere. No one even mentioned recruiting from any of the several week certificate programs. Though I did not discuss it at length, I believe that they recognized that many “certificate programs” just taught enough to pass some test and get a certificate, They don’t teach very deeply and often prey on people who were just looking for an easy way to get a job and did not realize how thin a slice of training they were getting and how limited their opportunity might be afterward.

The industry is crying out for better and deeper training, but it seems like the offerings are quick-hit certificate programs or four (or more) years of your life and a bunch of money getting a lot of theory, much of which is not very practical or appropriately framed, with gaping holes.

I was recently pointed to the article What They Don’t Teach Law Students: Lawyering in the New York Times. It seems that software development isn’t the only field with this problem.

We need more programs taught by people who are good in their field and really care about teaching. It is a hard balance to strike. Those who are good at their craft want to practice it and get better at it. Even if they love to teach, they have to limit their time at it so they don’t become academic and lose their edge. I was asked about starting a school for years but couldn’t come up with a model that I thought could work until I finally heard about the farrier model of teaching craftsmanship and Chris Gregory’s approach at Heartland Horseshoeing School. Chris only keeps his school open for part of the year. He uses the rest of the year to keep on top of his trade in a variety of ways. That’s what we’re doing.

Though we are encouraging others to do the same, it is still a hard thing to set up. In the meantime, I’d encourage parents and young people and anyone looking to switch careers to heed what the best professionals already know. Universities teach theory (and some certainly do it better than others). Those who are best at their practice are looking for those who are prepared to practice. Theory is only a piece of that and needs to be placed in context.

Look for alternatives. Create alternatives. You will stand out from the crowd.

By the way, people who care about being good at the practice of their craft are rarely out of work. There are up times and down times, for sure. The folks in the software craftsmanship movement are hiring, but only the kind of people who, like them, care about the practice of their craft.

Where Should Data Structures Be Taught?

At the welcome reception of Software Craftsmanship North America, I was bombarded with folks wanting to know more about the academy. These folks all agree that the universities are failing to produce relevant software developers and believe this is a much better way. They were asking a lot about what and how we would teach. I explained that we would teach software development from a Lean Craftsmanship perspective. We would also teach Computer Science and soft skills in the context of software development, as it should be. Here is a true story of what I mean.

In the mid 90s, I was working on a very large Smalltalk project at Nortel. One evening when I was about to leave, a young man who had just joined the project several weeks earlier after graduating college with a BS in Computer Science caught my attention. “Ken, can I show you what I’ve been working on?” Though I wanted to go home, I knew taking a few minutes to encourage this new guy was the right thing to do. “Sure,” I said.

He proceeded to show me how he had implemented a binary tree in Smalltalk and had converted a piece of the application to use it because he had noticed that they have been using a linear search to find certain objects.

As he showed me the code, I exercised self control before speaking… well, as much as I could muster. The code did not follow any of the conventional protocol of the well-established Smalltalk Collections. In order to make use of it, he changed a huge amount of code in the existing system when he could/should have merely changed a couple of references to class names (and isolated that further with some careful refactoring) had he employed the standard collection protocols to exploit the concept of polymorphism. But polymorphism wasn’t taught in his Computer Science courses. So, I gently pointed out to him that it would be better to follow the traditional protocol.

Since the young man wasn’t on my sub-team, I asked him whether the other more senior people on his team had seen the code he was writing. I was fearful that these “senior” people either didn’t know what the young man was doing or, worse yet, that the more senior people didn’t have very good practices either. He said, “not yet.”

I asked him whether they had assigned him this task, and he told me that they just told him to look over the code (for about 4 weeks without supervision/explanation?!?) and, when he did, he noticed the “sin” of a linear search being used (as it was implemented in the standard Smalltalk OrderedCollection class). I asked, “Was there a particular performance problem in this area of the application?”.

He responded, “It was doing a linear search and a binary search is much faster.”

I said, “I know that, but was there a particular performance problem?”

He again responded, “They were doing a linear search!” speaking with a bit of annoyance that the respected Smalltalk guru didn’t seem to understand the horrors of linear searching.

I said, “How many objects were in the particular collections that you replaced with the binary tree? A few thousand? Tens of thousands?”

He said, “No. I think it was typically about 15 or 20. But the size doesn’t really matter because a binary search is always better.”

I asked, “do you know how fast a computer can do a linear search through 15 or 20 objects?”

He stared at me, not knowing what to say.

I decided to turn this one back to the team leaders who let the kid waste 4 weeks of the company’s money. “Why don’t you talk to Lee tomorrow and see what he says. However, I think that if you want to keep the binary tree, you should make it more like the protocol of the other Smallatlk Collections, but I’m not sure you’ll need it.”

I went home shaking my head about how he had been taught the data structure theory well, but out of context of so many other important concepts of software development. He had been given the knowledge but no wisdom to guide him as to how, when, and why to use it.

Fast forward 5-ish years.

Nathaniel Talbott, RoleModel’s first apprentice, is working with me on another project with Organon Teknika, whose team we are trying to teach how to apply Java and Extreme Programming. The project was fairly large and, though we rotated who paired with whom at least once/day, there were parts of the system I hadn’t had my hands in for a while. During a stand-up meeting - where everyone at least checks in on what others are up to so a NOOB doesn’t end up thrashing on his own for several weeks providing no value to the project - someone brought up that as we were adding more data, part of the system was taking a very long time to respond. Several others said they had noticed the same thing. I said that I had some guesses as to the source of the problem and I could go over my theories with whomever was interested after the stand-up.

Just about the entire development group decided to follow me to the white board. Most of the development team had Computer Science degrees or some other form of college training besides Nathaniel. So, I started scribbling on the whiteboard and describing the data structure behind the scenes and how I suspected it was growing and copying elements from the old buffer to the new buffer. I pointed out that because the collection started out small, and was being added to one at a time in a linear fashion, I suspected that the result was a proliferation of creating new buffers and copying the elements to the new buffers from the old buffers. I also shared a couple of other theories I had about this particular section of code that would make it worse. Included in my theory was the idea that this was a sorted collection and the sort criteria was being applied in a fashion that added a relatively inefficient linear search. I then proceeded to point out some solutions to the problems that would avoid so much unnecessary processing. In the midst of the discussion, I mentioned that most collections in Java were simple collections of buffers, but you could use linked lists, or hashed collections at times. Nathaniel, who had been working with us for about a year said, “I’ve heard the term hash before, but I don’t really know what it means.” I then explained the concept, having just explained linked lists to him and the team a few minutes earlier.

This entire discussion took about 45 minutes. Most of the others in the room learned a lot, too. Though some of them had heard a lot of the theory I presented while they were in college, it was years earlier and out of context so they hadn’t recognized the applicability of these concepts that had been tucked in the back of their minds. Now that I had just brought it back to the forefront, they were ready to apply it for the first time. I confirmed that they all understood what to look for and how to fix it if they found it. They all acknowledged their understanding, were dismissed, and went back to their desks… all but one.

Jeff Canna, one of the more experienced developers on the team, just sat at the end of the table shaking his head.

I asked, “what’s the matter, Jeff, did I say something wrong?”

“No,” he responded. “I was just marveling that you just taught an entire semester of data structures in less than an hour and the kid absorbed it all.”

I objected, “I didn’t teach the entire data structures course…” I then paused to reflect on whether my reactionary statement was accurate. I then realized, “Well, I guess the parts I left out were the exercises we were taught in the class that were out of context. He’s been using the data structures for more than a year very effectively and learning how to write good clean code using them without knowing the theory behind the structures and algorithms supporting them. I guess this was the first time he really needed to know… just in time learning.”

At that moment, I was reminded of the earlier newbie who had been taught all of the theory first.

I was thankful that I hadn’t paid a lot of money for a college grad with a Computer Science degree, but had invested in an apprentice who was a less expensive and more productive developer at the ripe age of 19, and who already had a year of experience with object-oriented and extreme programming practices as well as learning how to work well with a team.

Object-oriented programming, design patterns, extreme programming, and other agile practices are not taught at any depth, if mentioned at all, in just about any college in the country. Almost no colleges offer “Working With A Software Team 101”. One person at the reception said that a college professor he knew said that test-driven-development shouldn’t be taught at the university because it is just a passing fad. At least that professor has heard of it. I know others that haven’t. But at least they all teach data structures.

Where should data structures be taught? In college, or in context?

SciMed Solutions: The First of Many Internship Providers

Ever since we announced the Craftsmanship Academy, we have had leaders in several craftsmanship-minded companies inquire about hiring the graduates as interns. Yesterday, we posted the criteria and application for those companies interested in providing internships. Today, we have our first applicant.

SciMed Solutions is based in downtown Durham, NC, and has been developing software solutions for the medical, scientific, and academic communities. Due to their excellent record of delivering solid software solutions, they continue to grow in all of those areas. Their clients have made a difference in the world in many fields, including vaccine discovery, cancer treatment, energy-efficient building construction, and social change.

As a small company involved in so many fields, SciMed employees are continually learning, and this philosophy influences not only their projects but also their process. SciMed performs agile development primarily using Ruby on Rails, but the specifics of their approach spans many philosophies, including Extreme Programming and Scrum. As a learning organization, their practices are constantly evolving to include new theories, technologies, and standards, and every employee has a voice in how the company adapts.

Although they’ve been doing this for many years, I took special note of them when Rick DeNatale joined their team. In addition to having a long track record of being an excellent software craftsman, Rick is an excellent mentor. More recently, SciMed Solutions hired Michael Stalker, whom I was trying to recruit to come to RoleModel Software, and I realized that SciMed must be a special place. (I’m sure we’ll compete for the same employees again because we both value much of the same type of people, use some of the same technologies, and are based in the same general geographic area. For the record, I believe Michael would be working at RoleModel if SciMed wasn’t so much closer to his home).

A few weeks later, I met Mason Matthews, president of SciMed when we were on a panel together. Mason is not like many company presidents. He is very humble and down to earth. When he sought my counsel to seek advice on the challenges of growing his company without losing the key qualities that he valued, I was very impressed… not because he sought my particular counsel, but because a president of a successful company like SciMed would make the time to seek counsel in how to make his company even more special from the inside out. Many presidents are absorbed in seeking ways to look great in public. It was clear from talking to him that he is much more interested in having the company he leads actually be great.

Mason isn’t a professional executive who thinks he can run any company because of his brilliance in business. Mason grew into a president. He ended up in his position because he took every position he ever had and wanted to be the best he could be. The owner of the company recognized that and brought him up the ranks, eventually entrusting him to run the company.

SciMed is all about learning and growing, not from just a revenue perspective, but from a craftsmanship perspective.

We couldn’t have asked for a better company to kick off our list of internship providers. We are keeping the bar high. I know other applications for internship sponsors are in the works and will be announced shortly. SciMed is just a sample of the great companies dedicated to Software Craftsmanship that are looking for a better model of training to prepare their future software craftsmen. Mason and the folks at SciMed, thanks for your confidence that you have found it here. We will strive to exceed your expectations.

What Kind of Software School Is This?

Martin Fowler pointed out that there are different SchoolsOfSoftwareDevelopment.

So what kind of school is the Craftsmanship Academy?

We would call it a school of Lean Craftsmanship. Take the principles of the Agile Manifesto, make sure you practice them with people committed to the values laid out in the Software Craftsmanship Manifesto, and recognize that the best way to know that you are building software of value is to get feedback from real customers as proposed by the Lean Startup movement.

There is the kind of software craftsman who is a Solo Virtuoso. We admire and respect such individuals, but we believe that we are created as social beings, and that we have much to learn from each other. Isolationism can feeds one’s ego. Working with a great team can feed one’s ability, while keeping the individual humble as his mistakes and shortcomings are not hidden. Those that see his shortcomings can help him overcome them. Agile Software Development includes practices that help people work together effectively, and make constant course adjustments.

However, you can do a lot of “best practices” of agile software development, and still not be very good at creating software. A bunch of people with good tools can’t build a beautiful piece of furniture just by cooperating and agreeing to what they think might be the best approach to building it. Somewhere along the line, they have to learn the techniques for working with the materials they have in an effective way. The Software Craftsmanship Manifesto acknowledged that the principles of Agile Software Development were not enough.

One can learn these techniques and apply them to build things only for themselves. If he does, only he gets the benefit. Unless he can eat what he builds, in the end, even he does not really benefit. People are ultimately paid for providing something of value to others. The Lean Startup approach to customer development in step with product development attempts to make sure that happens. It does not completely succeed because every venture has some inherent risk including some that can only be found by moving forward, but it does put the emphasis on talking to customers as if they mattered.

At RoleModel Software, we declare that we are focused on software craftsmanship with an emphasis on serving customers over being part of the “mutual admiration society.” We strongly believe that true software craftsman ship. Software is primarily built to be used, not admired. (I.e. although we respect and admire those who are good at their craft and are not satisfied until every line of code is beautiful, we believe that we need to provide value to our customers through our work, and have an attitude of service to them rather than an attitude of elitism due to our power to master the computer and impress our peers).

  • A Craftsman is going to invest in his tools
  • Someone who wants to be part of a team invests in the team and what the team/business is doing
  • The customer is the most important part of the team

These values are reflected by RoleModel’s Core Team who are focused on software craftsmanship in the context of making RoleModel and its customers more effective, profitable, and forward-looking:

  • Continuously striving to improve our craft
  • Continuously striving to serve our customers
  • Continuously striving to meet commitments to each other
  • … in context of “a healthy Christ-honoring life”

What was that last bullet item? Did he really say that in a public forum? Yes, he did.

If it is really important to you to live in a world where God is kept out, and no one around you acts as if there could be someone bigger than you or any person, you may not like our academy.

He has told you, O man, what is good;
And what does the LORD require of you
But to do justice, to love kindness,
And to walk humbly with your God?
(Micah 6:8, New American Standard Bible)

When Jesus walked the earth and was asked, “What commandment is the foremost of all?” Jesus answered, “The foremost is, ‘HEAR, O ISRAEL! THE LORD OUR GOD IS ONE LORD; AND YOU SHALL LOVE THE LORD YOUR GOD WITH ALL YOUR HEART, AND WITH ALL YOUR SOUL, AND WITH ALL YOUR MIND, AND WITH ALL YOUR STRENGTH.’ The second is this, ‘YOU SHALL LOVE YOUR NEIGHBOR AS YOURSELF.’ There is no other commandment greater than these.” (Mark 12:28-31, New American Standard Bible).

You don’t have to believe that to come to the academy, but we believe it. You don’t have to sign any statement of faith, but you do have to agree to our code of conduct. The training is about how to become a great software craftsman, but you’ll hear what motivates us to do our work heartily. I’m not sure why anyone would have a problem with us striving to love our neighbor as ourselves, even if you have a different object of your faith. We believe we are created in the image of God, which is what gives us the ability to create. He gave us that ability to reflect His glory. We aren’t always true to His purpose, but we strive to be, and believe this is the standard that He has set, whether or not we consciously achieve it.

By His grace, we will teach you how to eventually create great works of software that serve others well. But there is a greater work.

This is the work of God, that you believe in Him whom He has sent.
(John 6:29, New American Standard Bible)

Again, you don’t have to believe that now to come to the Craftsmanship Academy. You don’t have to believe that in order to graduate. There are greater consequences to what you believe than that.

Are You Too Old to Code?

I’m sure this post is timely.

On Friday night, I had dinner with the family of a dear brother who has been in construction for years and has been thinking about making a change to the software field. He has built his own web sites on multiple occasions and when he was younger “spent too much time on the computer”. He’s always loved it but it has always been a distraction to what he thought he needed to do to make a living.

He took my advice and looked at the Learn To Program book and has been breezing through it as I suspected he would. I’ve seen him work and know that he is tenacious. I know he can concentrate for hours at a time and do incredibly fine work (his specialty in the construction field is trim work, and he’s done a lot of it in very high end homes with very elaborate trim). He has run a business and strives for customer satisfaction. He already has the mindset of a craftsman in many ways. If he decides to dive in completely to the software field, I’m confident he could be an excellent Software Craftsman.

Early this morning, I ran across this blog post, It’s Not Too Late to Learn How to Code.

Later this morning, Mitch Amiano, an independent software developer who has done some work with RoleModel, dropped me a note,

Are you looking for anyone in the 30s age range?

There was a guy at the RDU BarCamp this year, [name deleted], who is looking to get into a more technical field. He seemed a little self-effacing but from what little I know about his past history he doesn’t shy away from hard work or long hours.

He currently works in a position that will be changing in the next 10 months. He is their “tech guru”, but (according to him) that was because of how little the others know about technology. I would imagine he would be somewhere at a beginning apprentice level from a software standpoint.

I was very fortunate that I had my first taste of programming when I was 17 and liked it. I went to college at a good engineering school and had co-op jobs starting my sophomore year that confirmed that I was both good at it and loved it. After a second co-op job, I had seen enough to know that I wanted to work with smaller teams doing innovative work rather than at larger companies doing work that many people did to support the infrastructure at the large companies.

However, I remember listening to some of my peers at college in their senior years saying, “You know. Now that I’ve started getting a feel for what a {fill-in-the-blank} engineer does, I really don’t like it. But after paying for 4 years of school, I don’t think I have much of a choice but to grin and bear it for a few years, and hope that I make enough money and find an opportunity to do something I’d really enjoy. I’m certainly not going to tell my dad that I want to go back to school for another few years to try out something else.”

It takes a lot of courage to make a job change and go back for training to do something you only think you might love. Perhaps there is a stigma that making a career change, or going back to school, points to some sort of failure. Perhaps it is just the financial risk that would keep you from doing it. The price of a four-year degree is not just the money, but the time… four years of your life before you really get to try it! (Or, it could be even more if you are doing it at night and on weekends). We’ve tried to make it easier than that with our immersion approach, but we are certainly not going to imply that the cost in time or money is insignificant. It is not an easy decision to invest in a change of careers.

On the other hand, although it is far from a scientific study, I would venture to say that the majority of people I have met who have

  • really committed to changing their careers,
  • sought counsel from those in other fields who knew them and knew their character qualities and personal bents until they found a field that they were excited about and had their natural abilities confirmed, and
  • were realistic about how much time and work it would take to do so and tackled it,

have been very successful.

I recently extended a job offer to have someone join us on the RoleModel Software core team. He had only been programming a few years after getting a couple degrees in mathematics, gaining a couple of years teaching experience, and earning a seminary degree, before getting his first job working with software and design in his late 20s. He cared about doing his work well, and learned a lot in those few years, and is well worth hiring.

Some of the best software craftsmen I’ve ever worked with didn’t have any sort of degree related to computers. Many of them started programming in their mid-20s or later. I’ve met some who started much later. Every single one of them learned things when they weren’t programming that made them better software craftsmen. In fact, I would assert that most software craftsmanship is about making the computer do things to make life better for someone who is not a programmer. A programmer who doesn’t have empathy for those they serve is rarely a software craftsman. Though he may call himself a craftsman, he is merely a geek. Someone who has lived a life away from a computer may have actually picked up some very useful skills that other geeks never pick up. These skills help the former become a software craftsman while the latter never leaves an isolated life of geekdom.

Software craftsmanship is not about the “mutual admiration society” of geeks. If a programmer only programs in ways that can only be appreciated by other programmers, there is a problem. We all know of so-called “art” that only impresses the so-called “artist.” Michelangelo never had to point out that his work was a piece of art to anybody. Some would give anything to have watched him work. Others would rather watch grass grow. All would appreciate the final result.

Software Craftsmen ship. They ship software to others who need it. Those who need it appreciate it when it actually meets their needs and feels like it was designed and built for them. I was recently interviewing some of a client’s end-users as we explore how to build their next generation system. When I asked one of them where his pain points were, he said, “The system feels like it was designed by a programmer.”

If you have ever been the beneficiary of software that you loved, and the victim of software that you have hated, and have a feel for what makes the difference, you have an asset that many geeks don’t. If you have ever done something out of the norm to satisfy a customer on their terms, rather than redefine the customer’s problem to something you thought was more interesting, you have an asset that many geeks don’t.

If you can concentrate long enough to figure out a problem, wrestle it to the ground, and fix it, you have an important quality that can help you become a software craftsman. If details matter to you, but you don’t let details that don’t matter yet keep you from recognizing the bigger problem (and the next problem) you are trying to solve, you have another quality that it takes to be a software craftsman. If you are more than 24 years old, you don’t have the quality that it takes to become 18, but I hope you will have the courage to overcome the presuppositions of others if you want to become a software craftsman.

  • Do you have the ability to reflect on what you’ve done, learn from it, and make appropriate adjustments before you take the next step?
  • Did you do well at word problems in Algebra or excel in other areas in which problem solving using abstraction was necessary?
  • Have you already done some programming, and enjoyed it?
  • Does the idea of building software that other people value, use, and love get you excited?

Whether you are 18 or 45, we’d love to have you apply and let us determine if you have what it takes to join the others striving to be software craftsmen at the academy.