Sunday, December 26, 2010

My thoughts on "Apprenticeship patterns" by David Hoover

I've just finished reading a great book about software engineering and personal improvement. Actually, this book is the reason to start my blog. After reading it, I realised that is important to have my own place to summarize and share knowledge. In my opinion it helps in several ways: first, by making a summary I hope to capture the essence of all readings that I walk through. Second, this blog will be of great help for future references. And third, my intend is to share and eventually recommend some books to other people. By starting this blog, I actually implement some of the patterns I just read about - "Reading List", "Share what you learn" and "Kindred spirits".

Now about the book... It is all about the long road that every professional should take if he is keen in improving himself and passionate about his work. If your are not familiar what apprenticeship is about, this is a hierarchy that every professional had to go through in the process of mastering a given craft in the Medieval ages. The first step where everyone starts from is being apprentice. This is the lowest level and every apprentice should improve his skills for several years before going to the second level - Journeyman. After another long period of time, when the journeyman is recognized by all the masters of his craft, he would eventually become a craftsman. In this book the craft is programming and apprentices, journeymen and craftsmen are all we - software engineers.

What is important here is that every professional at certain point in time meets common situations and problems that are well-known and the authors have found some resolutions for this issues - called patterns. I'll try to make a summary of those patterns that I've already experienced or I think that will be applicable in a given time in the future.

The first group of patterns that I find to be very common and people experience all the time are about the time when we start some new job, work in new environment with new colleagues, etc. What is important about handling these situations is to be prepared for a new challenges and knowledge. You should empty your cup, before filling it again with more water. Exposing your ignorance to your colleagues and preparing yourself for gaining additional experience is a crucial to get most of the situation. This is especially through for developers that are on their first job. By trying to make a good impression of well educated and prepared professional, they often tend to neglect that their major weakness is the lack of experience in real-life situation. And this is something that all senior colleagues can help you about.   

Another good point that authors make in their books - it is important to keep in touch with people that are recognized as good professionals. Either by attending conferences or by following their blogs - find a people that define and reveal the trends in our industry is key to keep you on the track. In addition, attending local usergroups and meeting people that work with the same technologies you do, but are outside your current working environment will give you a new perspective of what is hot and cool in software development and maybe getting useful advices about your current issues and problems you cannot solve. Answering various questions in forums or Q&A sites will help you to gain confidence and to summarize some wisdom. To go even further, reading other people's source code or practising pair programming will give you time to think how you would do different tasks and what are the challenges.

What I've already experiences a couple of times - when you realise that you've exhausted your current job position and you barely learn new things - do not hesitate to look for new opportunities. In some way - becoming a craftsman is the opposed of being an expert. Experts have worked and specialized in a particular aspect of their profession and experience lots of difficulties when have to switch to new place and professional area. Changing companies, jobs and technologies helps you broaden your professional horizon. In general, there is no use of working in a team where you are the top performer and the most skillful professional. What will drive you forward is trying to catch up with what others already know. This can be also achieved by doing little dummy projects in your free time using some new technologies.

Well, these are the points that I made for myself by reading this book. Of course, there is a whole bunch of examples, tips and tricks that you can read about. These are all things that we feel natural and intuitive, but is nice to be read all in one place to get the whole picture. If you are already interested you can find the book in Amazon (Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman) or by ISBN: 978-0596518387. 

I would be glad to read your thought, too. Happy reading!