Notes on Uncle Bob's "Demanding Software Professionalism" Talk
This week I attended Uncle Bob Martin’s “Demanding Software Professionalism” talk at the 8th Light offices. Since I’m brand-spanking-new to software development I realize that I may be young and impressionable, but I thought it was a fantastic talk and he suggests some solid guidelines and practices for bringing professionalism to the field of software development.
I should also mention that before this talk I wasn’t quite sure what to make of Uncle Bob. I think I’d shook his hand in passing at the 8th Light offices, but in reading his blogs and tweets and watching his videos I found him gruff and intense (maybe even a little preachy?). I’m happy to report after hearing him in person that he can be all of those things, but it is because he cares so passionately about software craftsmanship and believes so deeply in what he says (and it’s the “caring” that I hadn’t been able to pick up from just a blog post or a tweet- but was definitely evident hearing him in person). His passion and conviction are admirable and enough of a reason that people should consider hearing what he has to say— even if they don’t agree with him.
So here’s my brief summary of the hour-long talk (and he’s giving it again on February 2nd— I recommend you attend the real deal):
Software Craftsmanship as a profession has not been around very long and there wasn’t even really a need for that many developers until the last 20 years. Since the profession is very young the demographics also tend to skew young and there aren’t really any “old-timers” around to help guide the young developers with the practices and disciplines the way that other professions do (think of every job that has apprentices, interns or assistants: from carpenters, electricians and plumbers to lawyers and doctors).
Software now touches every aspect of our lives (cars, public transportation, appliances, daily commerce, communication, etc…) and it’s imperative that developers as a community demand standards from each other that produces software that is “durable and free of defects in workmanship”(quote taken from the 8th Light website).
Finally (and this is tough to summarize) but the thing about software is that all of the cost is in the planning and design, so the cost structure is totally inverted from any other “craft”. (Uncle Bob tipped his hat to Jack Reeves and his 1992 essay on this topic.) An architect or electrical engineer can outline in minute detail what the plan for your building or circuit board is, and the cost for those plans is just a fraction of what it costs to actually build it. In software, the only “blueprint” that will be as detailed as an engineer’s drawings is the source code, and that costs everything to produce. Shipping once you have the source code costs virtually nothing, and it’s important to remember this inverted cost structure and keep it in balance through the discipline and practice of some key elements: short cycles, measuring at the end of each iteration, automatic testing, continuous integration, TDD, clean code and 3-point estimates.
He also also touched on several other topics such as “heroism vs professionalism” in the software industry and how to convince others of the importance (and value) of TDD.
The talk was really enlightening and it was great to hear Uncle Bob converse with a relatively small room of developers (there were about 25 or 30 of us there). Again, I could definitely see how much he cared about the craft and he also had some rather funny asides about his own experiences as a developer over the years.
I realize that it’s difficult to apply any “hard and fast” rules to a field that is still so young and constantly evolving, but it’s great to know that people are thinking about it. I’d be interested to hear opinions from other developers on disciplines or practices they recommend to bring professionalism to the craft. Please ping me on Twitter if you have any thoughts.