Hanselminutes Podcast 171 - The Return of Uncle Bob
My one-hundred-and-seventy-first podcast is up. Scott and Uncle Bob meet again, this time in Norway and in person. Uncle Bob tries to answer the question Are You Professional. Scott and uncle Bob chat about software craftsmanship.
Links:
- Podcast 145 - SOLID Principles with Uncle Bob - Robert C. Martin
- Podcast 150 - Uncle Bob Martin, this time with feeling
- @unclebobmartin on Twitter
- Uncle Bob's Blog
- Download: MP3 Full Show #171
- Play in your browser
Do also remember the complete archives are always up and they havePDF Transcripts, a little known feature that show up a few weeks after each show.
Telerik is a sponsor for this show!
Building quality software is never easy. It requires skills and imagination. We cannot promise to improve your skills, but when it comes to User Interface, we can provide the building blocks to take your application a step closer to your imagination. Explore the leading UI suites for ASP.NET and Windows Forms. Enjoy the versatility of our new-generation Reporting Tool. Dive into our online community. Visit www.telerik.com.
As I've said before this show comes to you with the audio expertise and stewardship of Carl Franklin. The name comes from Travis Illig, but the goal of the show is simple. Avoid wasting the listener's time. (and make the commute less boring)
Enjoy. Who knows what'll happen in the next show?
About Scott
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.
About Newsletter
I honestly think the 'we are different' thing is overdone in software engineering. You can talk to two lawyers or doctors and their level of competence in the field is just as varied as software engineers.
Your analogy at 10:15 - 10:50 was just solid gold - very well said - did you have that written down in advance or did you come up with it on the fly?? :)
1- Quality code is written by professionals
2- Professionals use TDD
Therefore all quality code is written using TDD.
Not true in my experience, and it seems like Uncle Bob is trying to claim some sort of high ground by saying that those who have found a way to write high-quality code without TDD are not "Professional". Seems overly dogmatic and partisan.
While I grant Bob the credit due from his 40 years of contributions, he comes across to me as someone who is working very hard to leverage that credibility to advance one approach (TDD) into the only approach.
Here's hoping Jeff & Joel are up for round 2.
@Shawn, I think we end up doing something similar to TDD (or BDD depending on your acronym preference) even if we don't formalize the tests as runnable software. Seems like it's all about nailing down what it is the program is supposed to do.
By the time you iterate from Use Cases down to PDL (aka psuedocode) a few times you've got something that looks strikingly like testable goals/behaviors that emerge from and drive the design.
While I think TDD is debatable, developing a product that meets the customers requirements has to be up there on the professionalism meter, and I don't see how you do that without testing. That testing could be manual, automated, etc., but testing is key to quality software.
I agree that testing is an essential component of professional software development. Where I disagree is that TDD is essential to professionalism. While I can't back this up with any source, I would wager that the vast majority of code in the world that is considered high quality was tested, only a small percentage of that code was developed in a project where the test cases were developed before code was written.
@Arnshea: We end up with well tested software as well. We have automated test scripts and manual test cases and load testing scripts etc, but we don't start the design work of a project with writing tests. I completely agree with your point that "it's all about nailing down what it is the program is supposed to do." The goal is software that works, from a user requirements, code quality, system efficiency and support cost perspective.
The idea that we need to be "professionals" kind of takes all the fun out of our chosen profession.
I guess he's not the first geek to go a little crackpot when outside his tech strengths. Noam Chomsky, anyone?
Anyway, here's a few questions I'd like someone to ask him. Maybe in part 4?
1. He's pretty big on craftsmanship lately. For the most part, the lesson of history has been, when craftspersons compete with engineering (i.e., industrial processes and capitalist management), the craftspersons get crushed. ("Outcompeted.") The industrial products are more reliable, they scale better, they don't have single-source dependency risks, etc.--and having scaled, their unit cost is cheaper. The "craftsmen" he mythologizes never got around to looking at their products that way; instead, they sat around, pretty happy with themselves, their traditions, and their traditional notions of "quality" and "reliability" until engineers came along and ate their lunch. The engineers innovated, while the "craftsmen" celebrated the past. Given the lessons of history, therefore, why on earth would we want to emulate craftsmen? Or does the "craftsmanship" vision only work for boutique shops, authors, and consultants?
2. He seems pretty ignorant of history with his "professionalism" speeches, too. Strictly speaking, a profession is something that is licensed by the state: doctor, lawyer, even plumber, and (notably) every sort of engineer except software engineer. A profession usually has generations of lore and experience behind it, and a core association (the AMA, the state bars, etc) that maintains "professional standards" and a code of ethics. Thus, in general, an industry has to be a couple generations old AND coalesced around a consensus set of practices before it can even THINK about becoming a profession. (Indeed, that's why the phrase "world's oldest profession" is actually quite a bit funnier, in a dry way, than most people realize today, now that the modern usage of "professional" has stretched to mean "white collar" and/or "not qualifying for amateur status".) I'm pretty sure that if Uncle Bob thought about it, he wouldn't want the government or anybody else telling him who's qualified to write software, or what his ethics should be. Ergo, either he hasn't thought about it, or he doesn't understand the connotations of the words he uses. Either way, he sounds unconvincing.
3. From what I can gather in his tweets and blogs, he's emphatically against not only health care reform, but regulation of the health sector in most any form. I'd love for you, Scott, to ask him how an unregulated insurance market would serve insulin-dependent diabetics, or anyone else who's acutely or chronically dependent on medical treatment. I'd love for you to look him in the eye and ask him what carrier would cover you, and whether you'd ever be able to work for a company smaller than Microsoft and still have coverage. (Of course, maybe you'd rather not entangle your blog and podcasts with that much off-topic drama. It would be quite professional of you, so to speak, to avoid it. But I have several close relatives with diabetes and other health issues, so I'm pretty tired of Uncle Bob's free ride. If he wants to evangelize ideas that would have awful human consequences, I think people should stand up. Your decision is yours, of course.)
Maybe, the least professional well-paid industry? I mean outside of sales, recruiting and business management (which are basically unregulated).
The APL YouTube link is the following:
http://www.youtube.com/watch?v=a9xAKttWgP4
I really enjoyed the chat about a "more expressive" language. Watching someone program APL was a little extreme, but I could definitely see something useful along the lines of the J language.
Of course, thoughts about J bring me right back to functional programming: F# & LINQ. How quick would it be to write a "Game of Life" with either of these two languages? How "terse" are languages like SQL (LINQ)? What if we replaced SELECT, FROM, WHERE and GROUP BY with special characters?
$ CustId, CustName, OrderTotal => Customer * Order (Order.CustomerId = Customer.CustomerId) ? Customer.CustomerId = 42 & OrderTotal > 25
I've saved a bunch of characters, it's pretty clear what's going on, but I'm not sure this is an improvement any more than having a special keyboard filled with greek characters. In some respects it even feels like a really terse PowerShell script. But I'm not really sure that PowerShell is great framework for writing "professional software".
This is terse, but certainly far from clear: gc Myfile |% {@$_ -join ","} |? {$_.Length -ne 0}
And then you get into a race about how many special characters you can re-purpose. Most of our Line of Business work centers around the classic CRUD operations. Do operations like Save, Select/Read/Get, Delete deserve their own special characters? And at what point do you just end up creating some variant of an DSL that looks like APL?
Honestly, I go back to my original thought about F#. I think that F# is, in many ways, a terser language for many of the functions we commonly do. And I really have to admire the elegance of piping (PowerShell) or currying (F#) for both terseness and clarity. If you look at the APL "Game of Life" example, I could definitely see writing this in F#, given the right libraries.
Maybe the trek towards cleaner languages will lead right through F# and SCALA. I know it will make some LISP people very happy :)
1) I share Uncle Bob's feeling about the need for more "professionalism". Nobody asks the civil engineer to build the bridge twice as fast and save time by not including the steel support beams. Yet managers frequently feel the ability to barter with software engineers over the time to develop code and the engineers (usually) incorrectly respond by taking short cuts when the correct response would have been to remove features.
2) Software engineering HAS had professionalism. Code coverage is not new, developers used to write the tests themselves. Code reviews are not new. Using patterns is not new -- the GoF book (one of programming's all-time biggest sellers) came out 15 years ago and the POSA book was only a little while after and those were used by professionals. The ideas coming out of SEI were very professional. The problem is that software engineering has expanded so greatly in the last 2 decades due to the ease of writing programs (e.g. VB) and the desired interest (internet) that there are people that didn't view programming as an engineering profession. In fact, many of those people dislike the formality of engineering and thought being a "coder" was a good thing. I do give agile credit for creating a desire to be more professional amongst people that would normally eschew such things.
3) Will TDD still be necessary once .Net 4.0's code contracts are released? Isn't the main point of TDD to flush out specifications and that having a written test was just a great side benefit? Wouldn't it be better to write contracts + TAD?
Why exactly should Scott do this? If you disagree with him, you should speak up. Shouldn't we be seperating ones personal/political views from their ability to provide insightful knowledge on our shared 'professions'. To do other wise is quite intolerant, IMHO.
I presume you're responding to my proposed question re health care.
As I already suggested, I don't think there is a "why exactly should" reason. Scott should or should not "do this" for his own reasons. He's a big boy. He'll figure it out, and if he doesn't want to, that's fine too.
As for whether I should speak up, I already have. I have replied to several of Uncle Bob's recent Object Mentor blogs, and rejoined several of his tweets. If he wants to find me, he knows where I am.
Lastly, no, there's no commandment to separate personal/political views from professional ones. Apparently Scott and Uncle Bob agree: they've each already blurred these lines in their public personas. Uncle Bob tweets daily about politics; Scott tweets occasionally about his diabetes and solicits donations to the cause on this very blog. And if I read the tweets right, Scott's already weighing moral dimensions against "professional" concerns when he considered removing a sponsor of the podcast because of politically controversial topics re Turkey.
Thus, I'm not really sure what your point is, but I hope it's not that every strong opinion is "intolerant". There's a world of difference between standing on principle, after reflection and with evidence, versus intolerance. I'd have little respect for anyone who's "tolerant" of domestic violence, ethnic cleansing, or melamine-laced baby formula (to take a few examples completely unrelated to the previous discussion, but which demonstrate the occasional morality of intolerance).
To further illustrate disagreement versus intolerance, I diagree with Uncle Bob but am tolerant of him. I don't think his opinions should be censored, merely debated and probably ridiculed. I think he's (politically) a crackpot, and that his opinions could only be held by someone who's stupid (not applicable here), mean (I'd like to think he's not), or so spectacularly underinformed on matters of economics and public health that they don't understand the human consequences of the policies they endorse in the abstract. This last possibility is why I approached Scott. It doesn't have to be in a podcast or even on the record. I'd just love for Uncle Bob to explain to Scott's face why an unregulated insurance market should be free to deny coverage to people who need chronic care. I think/hope Uncle Bob hasn't thought this through.
1. People in the development community seem to be constantly trying to find the perfect analogy to another seemingly unrelated profession. I realise the intent is to gain insight from other industries/professions that have faced similar problems and evolved standard practices to solve them. My problem with this is I think we cant just copy the solutions in isolation (and fast-forward 100 years of evolution in the field). Also, while using analogies makes people recognise patterns, it doesnt provide any insight into how to better improve the process of Software Development. For example, the over-extended "Doctor" analogy would be just as relevant if we were talking about farming or manufacturing. Every profession has standards and practices. So what?
2. The wedgeing of TDD into the discussion about professionalism was unhelpful to both topics. Its just a (relatively new) development approach. Although it has been widely hailed as the way forward for many types of Software Development, it is still just a technique. Something else will come along (BDD etc). Calling it "the new penicillin?" is just adding to the hype. To me, saying that you are not a professional if you dont use TDD is like saying you are not a professional if you dont use the MVC pattern. Wrong.
Id just like to add that I respect Uncle Bob and really enjoyed the podcast on SOLID. Also Scott, you are doing a great service to the community. Keep it up.
My point is that you seemed to be saying that your take on Uncle Bob's position on professionalism and TDD are tied to your disagreement with his political issues. If that's not the case then I apologize but that's how it came off when I read your post.
No worries. I try to disagree with Uncle Bob on the merits of each idea. I might not have the same patience for him that I'd have for someone who's politics didn't annoy me, but I'm an agile nut, so I agree with him on TDD and SOLID, and he's written some of the best things on code metrics I've read.
I completely agree with what he says (both earlier podcasts), and Joel Spolsky lost so many point because of his stupid attack on Uncle Bob (Joel was sooo wrong then that I could not believe he actually said such things).
Comments are closed.