Apprentice as a software developer

The notion of apprenticeship originated in the late middle ages where a master craftsman would be entitled to take on a apprentice as cheap labour, in return for food accommodation and teaching the craft to the young apprentice1. Apprenticeship was typically associated with tangible crafts such as masonry, carpentry, carvers, glass workers and ironmongery.

Although the notion of a apprentice being a form of cheap labour, being paid in food and accommodation, no longer exists,  there is still a pattern of apprenticeship in the modern day. If one looks at trades such as  plumbers, electricians and carpentry to name a few we have young people been taken on and trained in the profession. If we look at the less tangible professions such as accounting, engineering and law they have “apprenticeship” programs whereby graduates are taken on to do articles over a period of  a few years.

So what is wrong with the software development profession? Why has it taken so long for only a handful of software development companies to start seeing the value of offering an apprenticeship programme. And why should big corporates, such as banks, not be offering an apprenticeship program for newly graduated software developers? In South Africa I know of very few organisations that are offering apprenticeships for software developers, apart from where they are trying to meet empowerment quotas.

Looking back over my career, the first three to four years of my working life was really hit or miss. I came out of university and I was expected to program, which I could do. Did I learn much from my more experienced colleagues? Not really. Did anybody push me or challenge me in the way I was thinking? Not at all.

So why am I waxing lyrical about this now? Well, I have just finished reading two books, that I wish had been around when I started my development career. These two books should be in all software developers libraries. And I am sure they will become classics in the software development world.

The first one is Software Craftsmanship. Professionalism Pragmatism Pride. by Sandro Mancuso. There is no rocket science in this book but, Mancuso provides a brilliant description of what it means to be a software developer. From the importance of choosing the most suited tools, to practicing your craft, he really provides some great stories around what it means to be a software craftsman.

The second book is Apprenticeship Patterns: Guidance for Aspiring Software Craftsman by Dave Hooper and Adewale Oshineye. This book provides patterns that can be applied to your apprenticeship and again there is no rocket science here. Just some damned good advice. Almost every pattern in the book I could relate to.

As I said, I wish the books had been around 14 years ago, when I started on my journey to where I am now. The trip might have been a bit more direct, without the meanderings into management for example, and I might have taken becoming a software craftsman more seriously. But I am where I am, and all I can do now is to continue practicing the craft. But hopefully use my learnings to act as a mentor to other developers in the organisation I work in.

I like this quote from Albert Einstein 2:

Education is what remains after one has forgotten what one has learned in school.

And I feel that, as a Journeyman or Master craftsman, we need to be constantly educating ourselves. We need to build a culture of apprenticeship in the software development industry to continue and build on the education of our apprentices. I truly only started deep learning when I entered the workplace and much of what I learned at university I had to relearn over the years as I found a need for it, or realised how I could actually apply what I had learned at university.

If I had a master craftsman that I could have apprenticed under I strongly believe that my first few years as a software would have been a lot more productive and conducive to delivering quality software.

So as craftsmen, if your organisation does not already have an apprenticeship program, we should all be challenging our organisations to embrace apprenticeship and we should be putting up our hands to be mentors to junior developers, thus enabling the implementation of the patterns mentioned in Hooper and Oshineye’s book.

  1. Apprenticeship – available at http://en.wikipedia.org/wiki/Apprenticeship
  2. Albert Einstein quote – available at http://www.brainyquote.com/quotes/quotes/a/alberteins108304.html#YF1R8OgjdjsV2Xxe.99
About these ads

About craigew

I am a technologist at heart and enjoy working with like minded people who show a passion for what they do. Craftsmanship is important to me and each day I am honing my skills as a software developer on a journey to one day becoming a master software craftsman.
This entry was posted in Leadership, Software development and tagged , , , , , , . Bookmark the permalink.

4 Responses to Apprentice as a software developer

  1. Tom says:

    How true. I can really relate to what you are saying, having had a similar start in my career, as have most software engineers that I know.

    However, my company has realized that apprenticeship is a valuable concept in software engineering. We now have a one year tutoring programme you need pass when you want to take the career step to software architect. This programme includes a “masterpiece” at the end, much like it was common in apprenticeships (yes, it’s actually called “masterpiece” ;)). The participants are usually 5 to 8 years into their career, so it’s a little late…but better late than never. Perhaps the concept will some day be extended to include the “freshmen”… .

    • craigew says:

      I think the “masterpiece” is a great idea, it allows for the continual learning that is so important in software engineering. Where I work, we are in the early stages of setting up some form of mentoring/apprenticeship type journey for our “freshman”. I find it really exciting to be able to give back to individuals who are like minded and show a passion for what they do. It also aligns developers, young and old, in the values that are important to us as software engineers.

  2. Jack T. says:

    “We need to build a culture of apprenticeship in the software development industry to continue and build on the education of our apprentices.”

    I am so happy to see someone forwarding this idea. I have been working in corporate and smaller environments doing business software for 20 years now. In the process of job seeking and being submitted endlessly for positions, I am struck by the ridiculosity (ridiculousness?!) of the alphabet-soup list of platform requirements which can exclude an experienced developer if he is missing even one of them. Hiring people pay no attention to off-the-job experience & learning and expect any candidate to have 5 or 10 years in 5-10 platforms/languages. If these companies would see the logic of the apprentice idea, they would never be short of good people as an experienced guy in one language could have any other language down in a month or less. They would also inspire loyalty for a management that was so logical and helpful as to give them a chance in another platform on the job. This is how I got my start in the early 90’s, and I thank that company owner every day for the prosperity I’ve had because of his forward thinking. He ran his own courseroom for Powerbuilder & Sybase, paying a low starting wage, and if the student-workers couldn’t swim on their own after a month at it, they were out the door. The others got permanent jobs. As an example of what aptitude is worth over degree’d learning, there was one student that had two degrees in math but couldn’t handle Powerbuilder, so he didn’t get hired. I’ve seen this over and over on the job. Luckily at least, a lot of tech managers who know better (and can get around the HR people) know that a degree or cert is no guarantee of competence. In Europe they know about apprenticing, but of course in this country we “know better”. I worked with a Danish guy on one job who said flatly that “when we get out of school over there we know how to run a software company”. Step up to it, American I.T. Thanks for letting me vent, Craig.

  3. Pingback: What Software Craftsmanship means to me | Craig on software development

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s