Robert C. Martin (1952- ) has been programming professionally since 1970 but started making his mark as an exceptional software engineering practitioner and consultant once he started developing object-oriented software in the 1980s and later when he was amongst the Agile Manifesto signatories (2001), distilled part of his design experience into the five well-known SOLID principles (2003) and co-developed the acceptance testing framework FitNesse. He is also a much sought after and forceful keynote speaker. This book constitutes Robert C. Martin´s personal reflection on what it means to be a professional software developer -given his extensive experience in the field and his articulateness, any object-oriented agile software engineer or student worth his salt should pay attention to his words.
For Martin being a software professional is a bundle comprising attitude, behaviour, work ethics and habits, mentoring and lifelong, continuous learning. It is about working forty hour weeks for your employer and devoting another twenty hours a week to keeping up with your chosen field, it is about knowing when to say yes and, more importantly, when (and how) to say no to your employer and your clients. It is about making honest estimations of efforts, taking full responsibility for your work, making binding commitments, great craftmanship, teamwork and collaboration, clear communication with your team mates, your colleagues, your employer and your clients. It is about disciplined time management, incessant practice, mastery of the right tools and taking a break when it is needed.
Of course, you may not agree with everything Martin says; in a rare caveat, he does warn the reader that what he presents works for him. For example I do not agree with his sweeping and cavalier dismissal of MDA (Model Driven Architecture) and UML. I suggest that you give some of his suggestions -pair programming, test-driven development (TDD), programming katas, timeboxing, planning poker with Pert-based estimates- a go with an open mind; the experience will be enlightening even if you find the techniques he recommends do not work for you. Martin is more of an evangelist for agile object-oriented development techniques than an objetive evaluator, but I did not find this detracts from the book -but this may be because I happen to agree with the main thrust of his recommendations ;-)
Personally I found the last chapters flagged and the appendix on the tools he favours interesting but a little too brief; for example, his description of the distributed version control system Git will leave readers unfamiliar with it feeling somewhat left out.
If you have not seen “Uncle Bob” Martin´s larger than life persona in action, look up a couple of YouTube videos of his keynote speeches -he is a superb showman of the fire and brimstone variety. Be warned that some readers may find Martin´s explanations too shallow, his forceful style too self-centered and righteous and thus uncongenial .
An added plus for me as a near contemporary of Martin´s was the trip down memory lane when relating his anecdotes on what for younger readers are probably ancient computing history: typewriter and teletype carriage returns and line feeds, punched cards, minicomputers and ties as mandatory business requirements for programmers, just to name a few.
There is plenty of sound advice in this book, but, as always, remember to exercise your critical faculties -wrestling intellectually with Martin is, in my opinion, an excellent way of building the character you need to succeed professionally...