Jan Veen

Review on Apprenticeship Patterns

The last two weeks I spent some self-education time on reading "Apprenticeship Patterns" by Dave H. Hoover and Adewale Oshineye. It was recommended to me by a colleague at work who held an employee's introduction course on Software Engineering, stating he would have rather read it earlier in his career as what the book calls a Software Craftsman.

Apprenticeship Patterns is a collection of common situations or problems apprentices to programming encounter during their studies and is the synthesis of many interviews the authors had with various software craftspeople. For each situation there is a detailed solution on how to use the problem at hand to give both perspective and action hints how to handle it and ultimately grow from it. One of the patterns is "Share What You Learn" which encourages apprentices to not only focus on their studies and "drink from the firehose" but also to hone their ability to communicate ideas and share their knowledge. A concrete action is to set up a blog (ideally self-crafted, using all the knowledge one has so far) and share ones thoughts about the last thing learned recently. This is also the motivation why you can read these lines here at all.

What I really like about the book is the whole concept of Software Craftsmanship which has not been invented by them but from a large community of programmers who try to answer the question of what their skill actually is. If it were art it would not be as useful as it is to humankind and rather focus on prettiness. If it were an engineering discipline you could teach (almost) anybody on how to mechanically apply certain rules and schemas to achieve a high-quality product in the end (which I emphasise it is not). As at the moment the outcome of a project highly depends on the project members and their skills, the authors rely on the medieval concept of craftspeople with their apprentice, journeyman and master ranks stating that the craft and its secrets is collectively owned by the masters and by education and practice they teach it to the lower ranks for the sake of the whole discipline. In this line the book is actually a manual on how to be a successful apprentice, starting from advising apprentices about the choice of their first programming language, successful learning patterns and most importantly tips how to engage with fellow programmers for mutual benefit.

Having described that I had to think about on which rank I have at the moment. After the studies at university you are hardly a good programmer just by following the curriculum. But of course I did some side projects during my studies to get deeper into interesting topics. But still I would only call me an apprentice, for several reasons.

  • I have spent way too less time in this area to have an overview and also a historic context on the various technologies out there.

  • My experience both in terms of code reading and writing but also at working in a larger team of software craftspeople is very limited.

  • A journeyman has knowledge in a lot of different areas and is able to pick the right tool for the right job. Without really knowing many tools you cannot possibly be a journeyman.

Now that I realised where I stand on the path of Software Craftsmanship I have extracted quite a list of actions from the book which I want to take to do the next steps in advancing my skills:

  • Read my favourite language's specification. This will probably take some time and I still have to decide between Java and Rust (which has only a draft specification, but there is the compiler, right?).

  • Read RFC 707 about state-of-the-art RPC in 1979 and compare it to RFC 2616 (HTTP 1.1).

  • Attend a local community's meetings. Ok this is a bit tough during a pandemic but at least I should sign up for some mailing lists.

  • Read a book, note some interesting points and questions while reading and after having finished contact the author about these points.

Now this is only a selection of these the tasks but stay tuned! It is recommended to write blog posts about anything interesting learned during apprenticeship so I will gladly share it all in this blog.