<story><title>Uncle Bob and Silver Bullets</title><url>https://www.hillelwayne.com/post/uncle-bob/</url></story><parent_chain><item><author>falcolas</author><text>No tool will ever successfully enforce discipline. If anything, it makes people more lax.&lt;p&gt;&amp;quot;I don&amp;#x27;t have to reason about whether this can be null, the type system takes care of that for me.&amp;quot; &amp;quot;I don&amp;#x27;t have to worry about leaking memory, valgrind will let me know.&amp;quot;&lt;p&gt;&amp;quot;I don&amp;#x27;t have to pay attention to the road, Tesla&amp;#x27;s autopilot takes care of it for me.&amp;quot;&lt;p&gt;All the tools do is enforce a loop of compile -&amp;gt; make compiler happy -&amp;gt; compile.</text></item><item><author>tom_mellior</author><text>&amp;gt; First, do no harm, then use like Light Table, Model Driven Engineering, and TLA+.&lt;p&gt;Looking at some of Uncle Bob&amp;#x27;s other posts linked from this article, I don&amp;#x27;t think that&amp;#x27;s what he&amp;#x27;s saying. He (Uncle Bob) goes on and on about discipline, but at the same time dismisses anything that might actually force programmers to be disciplined, like type systems that force you to check references for null before dereferencing them.&lt;p&gt;For example, in &lt;a href=&quot;http:&amp;#x2F;&amp;#x2F;blog.cleancoder.com&amp;#x2F;uncle-bob&amp;#x2F;2017&amp;#x2F;01&amp;#x2F;11&amp;#x2F;TheDarkPath.html&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;blog.cleancoder.com&amp;#x2F;uncle-bob&amp;#x2F;2017&amp;#x2F;01&amp;#x2F;11&amp;#x2F;TheDarkPath....&lt;/a&gt; he asks: &amp;quot;It is very risky to have nulls rampaging around the system out of control. The question is: Whose job is it to manage the nulls. The language? Or the programmer?&amp;quot; and goes on to answer: &amp;quot;Defects are the fault of programmers. It is programmers who create defects – not languages.&amp;quot; Then he goes ranting about programmers who don&amp;#x27;t test their code, and if only they tested, such type systems would not be needed.&lt;p&gt;Again: He dismisses the one thing that &lt;i&gt;actually&lt;/i&gt; forces programmers to be disciplined and instead just &lt;i&gt;wishes&lt;/i&gt; (against all evidence) that they were disciplined. To me, he seems to be saying &amp;quot;First, do no harm, then use tests, then nothing.&amp;quot;</text></item><item><author>Terretta</author><text>Here is the post this post is in response to:&lt;p&gt;&lt;a href=&quot;http:&amp;#x2F;&amp;#x2F;blog.cleancoder.com&amp;#x2F;uncle-bob&amp;#x2F;2017&amp;#x2F;10&amp;#x2F;04&amp;#x2F;CodeIsNotTheAnswer.html&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;blog.cleancoder.com&amp;#x2F;uncle-bob&amp;#x2F;2017&amp;#x2F;10&amp;#x2F;04&amp;#x2F;CodeIsNotThe...&lt;/a&gt;&lt;p&gt;I don’t interpret the original piece as saying any of these tools and techniques are not useful.&lt;p&gt;I interpret it as saying average developer mindset needs to shape up.&lt;p&gt;I tend to agree.  I work with guys who believe in formal reasoning tools (we collaborated with Amazon’s ARG for example[1]), and use all these tools.  These guys are almost compelled to write these tools and evangelize using the tools in an effort to help, because the developers around them don’t carefully reason about their code and it makes the guys who care crazy.&lt;p&gt;So you have two camps.  People who believe correctness is important, and people who think continuous deployment is an answer to bugs.  The first group is trying to help the second group through tools that can become part of the SDLC.&lt;p&gt;I read “Uncle Bob” as suggesting that’s not enough, it’s not the root cause — the second group needs to care.&lt;p&gt;I see nothing in his post that suggests the tools shouldn’t be used. (“I think that good software tools make it easier to write good software.“) But if the crowds in his talks aren’t using unit tests, are they really going to be using TLA+?&lt;p&gt;First, do no harm, then use like Light Table, Model Driven Engineering, and TLA+.&lt;p&gt;I take that as his point, and it seems painfully valid.&lt;p&gt;1. &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.slideshare.net&amp;#x2F;mobile&amp;#x2F;AmazonWebServices&amp;#x2F;aws-reinvent-2016-automated-formal-reasoning-about-aws-systems-sec401&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;www.slideshare.net&amp;#x2F;mobile&amp;#x2F;AmazonWebServices&amp;#x2F;aws-rein...&lt;/a&gt;</text></item></parent_chain><comment><author>adamlett</author><text>&lt;i&gt;No tool will ever successfully enforce discipline. If anything, it makes people more lax.&lt;/i&gt;&lt;p&gt;But the end goal is not disciplined programmers! It is better, safer and more timely software.&lt;p&gt;Your argument applies just as well to safety equipment in cars and on heavy equipment, and you may be right that the reduced risk of being killed or maimed makes people more lax. But you can’t argue with the results: Far fewer people do in fact get killed or maimed!</text></comment>
<story><title>Uncle Bob and Silver Bullets</title><url>https://www.hillelwayne.com/post/uncle-bob/</url></story><parent_chain><item><author>falcolas</author><text>No tool will ever successfully enforce discipline. If anything, it makes people more lax.&lt;p&gt;&amp;quot;I don&amp;#x27;t have to reason about whether this can be null, the type system takes care of that for me.&amp;quot; &amp;quot;I don&amp;#x27;t have to worry about leaking memory, valgrind will let me know.&amp;quot;&lt;p&gt;&amp;quot;I don&amp;#x27;t have to pay attention to the road, Tesla&amp;#x27;s autopilot takes care of it for me.&amp;quot;&lt;p&gt;All the tools do is enforce a loop of compile -&amp;gt; make compiler happy -&amp;gt; compile.</text></item><item><author>tom_mellior</author><text>&amp;gt; First, do no harm, then use like Light Table, Model Driven Engineering, and TLA+.&lt;p&gt;Looking at some of Uncle Bob&amp;#x27;s other posts linked from this article, I don&amp;#x27;t think that&amp;#x27;s what he&amp;#x27;s saying. He (Uncle Bob) goes on and on about discipline, but at the same time dismisses anything that might actually force programmers to be disciplined, like type systems that force you to check references for null before dereferencing them.&lt;p&gt;For example, in &lt;a href=&quot;http:&amp;#x2F;&amp;#x2F;blog.cleancoder.com&amp;#x2F;uncle-bob&amp;#x2F;2017&amp;#x2F;01&amp;#x2F;11&amp;#x2F;TheDarkPath.html&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;blog.cleancoder.com&amp;#x2F;uncle-bob&amp;#x2F;2017&amp;#x2F;01&amp;#x2F;11&amp;#x2F;TheDarkPath....&lt;/a&gt; he asks: &amp;quot;It is very risky to have nulls rampaging around the system out of control. The question is: Whose job is it to manage the nulls. The language? Or the programmer?&amp;quot; and goes on to answer: &amp;quot;Defects are the fault of programmers. It is programmers who create defects – not languages.&amp;quot; Then he goes ranting about programmers who don&amp;#x27;t test their code, and if only they tested, such type systems would not be needed.&lt;p&gt;Again: He dismisses the one thing that &lt;i&gt;actually&lt;/i&gt; forces programmers to be disciplined and instead just &lt;i&gt;wishes&lt;/i&gt; (against all evidence) that they were disciplined. To me, he seems to be saying &amp;quot;First, do no harm, then use tests, then nothing.&amp;quot;</text></item><item><author>Terretta</author><text>Here is the post this post is in response to:&lt;p&gt;&lt;a href=&quot;http:&amp;#x2F;&amp;#x2F;blog.cleancoder.com&amp;#x2F;uncle-bob&amp;#x2F;2017&amp;#x2F;10&amp;#x2F;04&amp;#x2F;CodeIsNotTheAnswer.html&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;blog.cleancoder.com&amp;#x2F;uncle-bob&amp;#x2F;2017&amp;#x2F;10&amp;#x2F;04&amp;#x2F;CodeIsNotThe...&lt;/a&gt;&lt;p&gt;I don’t interpret the original piece as saying any of these tools and techniques are not useful.&lt;p&gt;I interpret it as saying average developer mindset needs to shape up.&lt;p&gt;I tend to agree.  I work with guys who believe in formal reasoning tools (we collaborated with Amazon’s ARG for example[1]), and use all these tools.  These guys are almost compelled to write these tools and evangelize using the tools in an effort to help, because the developers around them don’t carefully reason about their code and it makes the guys who care crazy.&lt;p&gt;So you have two camps.  People who believe correctness is important, and people who think continuous deployment is an answer to bugs.  The first group is trying to help the second group through tools that can become part of the SDLC.&lt;p&gt;I read “Uncle Bob” as suggesting that’s not enough, it’s not the root cause — the second group needs to care.&lt;p&gt;I see nothing in his post that suggests the tools shouldn’t be used. (“I think that good software tools make it easier to write good software.“) But if the crowds in his talks aren’t using unit tests, are they really going to be using TLA+?&lt;p&gt;First, do no harm, then use like Light Table, Model Driven Engineering, and TLA+.&lt;p&gt;I take that as his point, and it seems painfully valid.&lt;p&gt;1. &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.slideshare.net&amp;#x2F;mobile&amp;#x2F;AmazonWebServices&amp;#x2F;aws-reinvent-2016-automated-formal-reasoning-about-aws-systems-sec401&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;www.slideshare.net&amp;#x2F;mobile&amp;#x2F;AmazonWebServices&amp;#x2F;aws-rein...&lt;/a&gt;</text></item></parent_chain><comment><author>cloverich</author><text>This overgeneralizes. When I started using strict null checking (in Typescript) I found it had an unexpected impact: I started writing code differently. Slowly, I also began _thinking_ about it differently. Ultimately you can&amp;#x27;t _make_ someone care if they don&amp;#x27;t want to. But if they already do care, some of these tools will make them better.</text></comment>