<story><title>It&apos;s probably time to stop recommending Clean Code (2020)</title><url>https://qntm.org/clean?tw=</url></story><parent_chain><item><author>jugg1es</author><text>Finally! I&amp;#x27;m glad to hear I&amp;#x27;m not the only one.  I&amp;#x27;ve gone against &amp;#x27;Clean Code&amp;#x27; zealots that end up writing painfully warped abstractions in the effort to adhere to what is in this book.  It&amp;#x27;s OK to duplicate code in places where the abstractions are far enough apart that the alternative is worse.  I&amp;#x27;ve had developers use the &amp;#x27;partial&amp;#x27; feature in C# to meet Martin&amp;#x27;s length restrictions to the point where I have to look through 10-15 files to see the full class. 
 The examples in this post are excellent examples of the flaws in Martin&amp;#x27;s absolutism.</text></item></parent_chain><comment><author>SassyGrapefruit</author><text>You were never alone Juggles. We&amp;#x27;ve been here with you the whole time.&lt;p&gt;I have witnessed more people bend over backwards and do the most insane things in the name of avoiding &amp;quot;Uncle Bob&amp;#x27;s&amp;quot; baleful stare.&lt;p&gt;It turns out that following &amp;quot;Uncle Sassy&amp;#x27;s&amp;quot; rules will get you a lot further.&lt;p&gt;1. Understand your problem fully&lt;p&gt;2. Understand your constraints fully&lt;p&gt;3. Understand not just where you are but where you are headed&lt;p&gt;4. Write code that takes the above 3 into account and make sensible decisions. When something feels wrong ... don&amp;#x27;t do it.&lt;p&gt;Quality issues are far more often planning, product management, strategic issues than something as easily remedied as the code itself.</text></comment>
<story><title>It&apos;s probably time to stop recommending Clean Code (2020)</title><url>https://qntm.org/clean?tw=</url></story><parent_chain><item><author>jugg1es</author><text>Finally! I&amp;#x27;m glad to hear I&amp;#x27;m not the only one.  I&amp;#x27;ve gone against &amp;#x27;Clean Code&amp;#x27; zealots that end up writing painfully warped abstractions in the effort to adhere to what is in this book.  It&amp;#x27;s OK to duplicate code in places where the abstractions are far enough apart that the alternative is worse.  I&amp;#x27;ve had developers use the &amp;#x27;partial&amp;#x27; feature in C# to meet Martin&amp;#x27;s length restrictions to the point where I have to look through 10-15 files to see the full class. 
 The examples in this post are excellent examples of the flaws in Martin&amp;#x27;s absolutism.</text></item></parent_chain><comment><author>mumblemumble</author><text>My last company was very into Clean Code, to the point where all new hires were expected to do a book club on it.&lt;p&gt;My personal take away was that there were a few good ideas, all horribly mangled. The most painful one I remember was his treatment of the Law of Demeter, which, as I recall, was so shallow that he didn&amp;#x27;t even really even thoroughly explain what the law was trying to accomplish. (Long story short, bounded contexts don&amp;#x27;t mean much if you&amp;#x27;re allowed to ignore the boundaries.) So most everyone who read the book came to earnestly believe that the Law of Demeter is about period-to-semicolon ratios, and proceeded to convert something like&lt;p&gt;&lt;pre&gt;&lt;code&gt;  val frobnitz = Frobnitz.builder()
      .withPixieDust()
      .withMayonnaise()
      .withTarget(worstTweetEver)
      .build();
&lt;/code&gt;&lt;/pre&gt;
into&lt;p&gt;&lt;pre&gt;&lt;code&gt;  var frobnitzBuilder = Frobnitz.builder();
  frobnitzBuilder = frobnitzBuilder.withPixieDust();
  frobnitzBuilder = frobnitzBuilder.withMayonnaise();
  frobnitzBuilder = frobnitzBuilder.withTarget(worstTweetEver);
  val frobnitz = frobnitzBuilder.build();

&lt;/code&gt;&lt;/pre&gt;
and somehow convince themselves that doing this was producing tangible business value, and congratulate themselves for substantially improving the long-term maintainability of the code.&lt;p&gt;Meanwhile, violations of the &lt;i&gt;actual&lt;/i&gt; Law of Demeter ran rampant. They just had more semicolons.</text></comment>