{"id":1966,"date":"2017-02-17T13:34:56","date_gmt":"2017-02-17T12:34:56","guid":{"rendered":"https:\/\/www.entropywins.wtf\/blog\/?p=1966"},"modified":"2021-03-20T23:30:21","modified_gmt":"2021-03-20T22:30:21","slug":"why-every-single-argument-of-dan-north-is-wrong","status":"publish","type":"post","link":"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/","title":{"rendered":"Why Every Single Argument of Dan North is Wrong"},"content":{"rendered":"<p>This blog post is a reply to Dan&#8217;s presentation <a href=\"https:\/\/speakerdeck.com\/tastapod\/why-every-element-of-solid-is-wrong\">Why Every Element of SOLID is Wrong<\/a>.<\/p>\n<p>Dan&#8217;s presentation is crammed full with <a href=\"https:\/\/en.wikipedia.org\/wiki\/Straw_man\">straw man<\/a> argumentation in which he misinterprets what the <a href=\"https:\/\/en.wikipedia.org\/wiki\/SOLID_(object-oriented_design)\">SOLID principles<\/a> are about. After refuting each principle he proposes an alternative, typically a well-accepted non-SOLID principle that does not contradict SOLID. If you are not that familiar with the SOLID principles and cannot spot the bullshit in his presentation, this blog post is for you. The same goes if you enjoy <a href=\"https:\/\/www.destroyallsoftware.com\/blog\/2014\/tdd-straw-men-and-rhetoric\">bullshit being pointed out<\/a> and broken down.<\/p>\n<p>What follows are screenshots of select slides with comments on them underneath.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1986\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/slide_3\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_3.jpg\" data-orig-size=\"1024,576\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_3.jpg\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_3.jpg\" class=\"alignnone wp-image-1986\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_3.jpg\" width=\"600\" height=\"338\" \/><\/p>\n<p>Dan starts by asking &#8220;What is a single responsibility anyway?&#8221;. Perhaps he should have figured that out before giving a presentation about how it is wrong.<\/p>\n<p>A short (non-comprehensive) description of the principle: systems change for various different reasons. Perhaps a database expert changes the database schema for performance reasons, perhaps a User Interface person is reorganizing the layout of a web page, perhaps a developer changes business logic. What the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Single_responsibility_principle\">Single Responsibility Principle<\/a> says is that ideally changes for such disparate reasons do not affect the same code. If they did, different people would get in each other&#8217;s way. Possibly worse still, if the concerns are mixed together and you want to change some UI code, suddenly you need to deal with and thus understand, the business logic and database code.<\/p>\n<p>How can we predict what is going to change? Clearly you can&#8217;t, and this is simply not needed to follow the Single Responsibility Principle or to get value out of it.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1985\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/slide_4\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_4.jpg\" data-orig-size=\"1024,576\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_4.jpg\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_4.jpg\" class=\"alignnone wp-image-1985\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_4.jpg\" width=\"600\" height=\"338\" \/><\/p>\n<p>Write simple code&#8230; no shit. One of the best ways to write simple code is to separate concerns. You can be needlessly vague about it and simply state &#8220;write simple code&#8221;. I&#8217;m going to label this Dan North&#8217;s Pointlessly Vague Principle. Congratulations sir.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1984\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/slide_6\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_6.jpg\" data-orig-size=\"1024,576\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_6.jpg\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_6.jpg\" class=\"alignnone wp-image-1984\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_6.jpg\" width=\"600\" height=\"338\" \/><\/p>\n<p>The idea behind the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Open\/closed_principle\">Open Closed Principle<\/a> is not that complicated. To partially quote the first line on the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Open\/closed_principle\">Wikipedia Page<\/a> (my emphasis):<\/p>\n<blockquote><p>&#8230; such an entity can allow its behaviour to be <strong>extended<\/strong> without modifying its source code.<\/p><\/blockquote>\n<p>In other words, when you ADD behavior, you should not have to change existing code. This is very nice, since you can add new functionality without having to rewrite old code. Contrast this to <a href=\"https:\/\/en.wikipedia.org\/wiki\/Shotgun_surgery\">shotgun surgery<\/a>, where to make an addition, you need to modify existing code at various places in the codebase.<\/p>\n<p>In practice, you cannot gain full adherence to this principle, and you will have places where you will need to modify existing code. Full adherence to the principle is not the point. Like with all engineering principles, they are guidelines which live in a complex world of trade offs. Knowing these guidelines is very useful.<\/p>\n<p>Clearly it&#8217;s a bad idea to leave code\u00a0in place that is wrong after a requirement change. That&#8217;s not what this principle is about.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1983\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/slide_7\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_7.jpg\" data-orig-size=\"1024,576\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_7.jpg\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_7.jpg\" class=\"alignnone wp-image-1983\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_7.jpg\" width=\"600\" height=\"338\" \/><\/p>\n<p>Another very informative &#8220;simple code is a good thing&#8221; slide.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1982\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/slide_9\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_9.jpg\" data-orig-size=\"1024,576\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_9.jpg\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_9.jpg\" class=\"alignnone wp-image-1982\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_9.jpg\" width=\"600\" height=\"338\" \/> <img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1981\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/slide_10\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_10.jpg\" data-orig-size=\"1024,576\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_10.jpg\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_10.jpg\" class=\"alignnone wp-image-1981\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_10.jpg\" width=\"600\" height=\"338\" \/><\/p>\n<p>To be honest, I&#8217;m not entirely sure what Dan is getting at with his &#8220;is-a, has-a&#8221; vs &#8220;acts-like-a, can-be-used-as-a&#8221;. It does make me think of the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Interface_segregation_principle\">Interface Segregation Principle<\/a>, which, coincidentally, is the next principle he misinterprets.<\/p>\n<p>The remainder of this slide is about the &#8220;favor compositions about inheritance&#8221; principle. This is really good advice, which has been well-accepted in professional circles for a long time. This principle is about code sharing, which is generally better done via composition than inheritance (the latter creates very strong coupling). In the last big application I wrote I have several 100s of classes and less than a handful inherit concrete code. Inheritance has a use which is completely different from code reuse: sub-typing and polymorphism. I won&#8217;t go into detail about those here, and will just say that this is at the core of what Object Orientation is about, and that even in the application I mentioned, this is used all over, making the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Liskov_substitution_principle\">Liskov Substitution Principle<\/a> very relevant.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1980\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/slide_11\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_11.jpg\" data-orig-size=\"1024,576\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_11.jpg\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_11.jpg\" class=\"alignnone wp-image-1980\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_11.jpg\" width=\"600\" height=\"338\" \/> <img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1979\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/slide_12\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_12.jpg\" data-orig-size=\"1024,576\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_12.jpg\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_12.jpg\" class=\"alignnone wp-image-1979\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_12.jpg\" width=\"600\" height=\"338\" \/><\/p>\n<p>Here Dan is slamming the principle for being too obvious? Really?<\/p>\n<p>&#8220;Design small , role-based classes&#8221;. Here Dan changed &#8220;interfaces&#8221; into &#8220;classes&#8221;. Which results in a line that makes me think of the Single Responsibility Principle. More importantly, there is a misunderstanding about the meaning of the word &#8220;interface&#8221; here. This principle is about the abstract concept of an interface, not the language construct that you find in some programming languages such as Java and PHP. A class forms an interface. This principle applies to <a href=\"https:\/\/en.wikipedia.org\/wiki\/Object-oriented_programming\">OO<\/a> languages that do not have an interface keyword such as Python and even to those that do not have a class keyword such as Lua.<\/p>\n<p>If you follow the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Interface_segregation_principle\">Interface Segregation Principle<\/a> and create interfaces designed for specific clients, it becomes much easier to construct or invoke those clients. You won&#8217;t have to provide additional dependencies that your client does not actually care about. In addition, if you are doing something with those extra dependencies, you know this client will not be affected.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1978\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/slide_14\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_14.jpg\" data-orig-size=\"1024,576\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_14.jpg\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_14.jpg\" class=\"alignnone wp-image-1978\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_14.jpg\" width=\"600\" height=\"338\" \/> <img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1977\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/slide_15\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_15.jpg\" data-orig-size=\"1024,576\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_15.jpg\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_15.jpg\" class=\"alignnone wp-image-1977\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_15.jpg\" width=\"600\" height=\"338\" \/><\/p>\n<p>This is a bit bizarre. The definition Dan provides is good enough, even though it is incomplete, which can be excused by it being a slide. From the slide it&#8217;s clear that the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Dependency_inversion_principle\">Dependency Inversion Principle<\/a> is about dependencies (who would have guessed) and coupling. The next slide is about how <a href=\"https:\/\/www.entropywins.wtf\/blog\/2017\/09\/06\/the-fallacy-of-dry\/\">reuse is overrated<\/a>. As we&#8217;ve already established, this is not what the principle is about.<\/p>\n<p>As to the Dependency Inversion Principle leading to DI frameworks that you then depend on&#8230; this is like saying that if you eat food, you might eat non-nutritious food such as sand, which is not healthy. The fix is not to reject food altogether, it is to not eat food that is non-nutritious. Remember the application I mentioned? It uses <a href=\"https:\/\/en.wikipedia.org\/wiki\/Dependency_injection\">dependency injection<\/a> all the way, without using any framework or magic. In fact, 95% of the code does not bind to the web-framework used due to adherence to the Dependency Inversion Principle. (<a href=\"https:\/\/www.entropywins.wtf\/blog\/2016\/11\/24\/implementing-the-clean-architecture\/\">Read more about this application<\/a>)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1976\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/slide_18\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_18.jpg\" data-orig-size=\"1024,576\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_18.jpg\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_18.jpg\" class=\"alignnone wp-image-1976\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_18.jpg\" width=\"600\" height=\"338\" \/><\/p>\n<p>That attitude explains a lot about the preceding slides.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1987\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/slide_19\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_19.jpg\" data-orig-size=\"1024,576\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_19.jpg\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_19.jpg\" class=\"alignnone wp-image-1987\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_19.jpg\" width=\"600\" height=\"338\" \/><\/p>\n<p>Yeah, please do write simple code. The SOLID principles and many others can help you with this <a href=\"https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/\">difficult task<\/a>. There is a lot of hard-won knowledge in our industry and many problems are well understood. Frivolously rejecting that knowledge with &#8220;I know better&#8221; is an act of supreme arrogance and ignorance.<\/p>\n<p>I do hope this is the category Dan falls into, because the alternative of purposefully misleading people for personal profit (attention via controversy) rustles my jimmies.<\/p>\n<p>If you&#8217;re not familiar with the SOLID principles, I recommend you start by reading their associated <a href=\"https:\/\/en.wikipedia.org\/wiki\/SOLID_(object-oriented_design)\">Wikipedia pages<\/a>. If you are like me, it will take you practice to truly understand the principles and their implications and to find out where they break down or should be superseded. Knowing about them and keeping an open mind is already a good start, which will likely lead you to many other interesting principles and practices.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This blog post is a reply to Dan&#8217;s presentation Why Every Element of SOLID is Wrong. Dan&#8217;s presentation is crammed&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":true,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[7],"tags":[328,363,439,442,447,373,445,446,176,179,444,197,443,316,396],"class_list":["post-1966","post","type-post","status-publish","format-standard","hentry","category-programming","tag-clean-code","tag-code-quality","tag-complexity","tag-coupling","tag-dependency-inversion-principle","tag-design-patterns","tag-interface-segregation-principle","tag-liskov-substitution-principle","tag-object-orientated","tag-oop","tag-open-closed-principle","tag-planet-wikimedia","tag-single-responsibility-principle","tag-software-design","tag-solid"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Why Every Single Argument of Dan North is Wrong - Blog of Jeroen De Dauw<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Why Every Single Argument of Dan North is Wrong - Blog of Jeroen De Dauw\" \/>\n<meta property=\"og:description\" content=\"This blog post is a reply to Dan&#8217;s presentation Why Every Element of SOLID is Wrong. Dan&#8217;s presentation is crammed&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog of Jeroen De Dauw\" \/>\n<meta property=\"article:published_time\" content=\"2017-02-17T12:34:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-03-20T22:30:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_3.jpg\" \/>\n<meta name=\"author\" content=\"Jeroen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/JeroenDeDauw\" \/>\n<meta name=\"twitter:site\" content=\"@JeroenDeDauw\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeroen\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/\"},\"author\":{\"name\":\"Jeroen\",\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"headline\":\"Why Every Single Argument of Dan North is Wrong\",\"datePublished\":\"2017-02-17T12:34:56+00:00\",\"dateModified\":\"2021-03-20T22:30:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/\"},\"wordCount\":1166,\"commentCount\":11,\"publisher\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"image\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_3.jpg\",\"keywords\":[\"Clean Code\",\"Code Quality\",\"Complexity\",\"Coupling\",\"Dependency Inversion Principle\",\"Design patterns\",\"Interface Segregation Principle\",\"Liskov Substitution Principle\",\"Object Orientated\",\"OOP\",\"Open Closed Principle\",\"Planet Wikimedia\",\"Single Responsibility Principle\",\"Software design\",\"SOLID\"],\"articleSection\":[\"Programming\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/\",\"url\":\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/\",\"name\":\"Why Every Single Argument of Dan North is Wrong - Blog of Jeroen De Dauw\",\"isPartOf\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_3.jpg\",\"datePublished\":\"2017-02-17T12:34:56+00:00\",\"dateModified\":\"2021-03-20T22:30:21+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/#primaryimage\",\"url\":\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_3.jpg\",\"contentUrl\":\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_3.jpg\",\"width\":1024,\"height\":576},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.entropywins.wtf\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Why Every Single Argument of Dan North is Wrong\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/#website\",\"url\":\"https:\/\/www.entropywins.wtf\/blog\/\",\"name\":\"Entropy Wins\",\"description\":\"A blog on Software Architecture, Design and Craftsmanship\",\"publisher\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.entropywins.wtf\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7\",\"name\":\"Jeroen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"caption\":\"Jeroen\"},\"logo\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeroendedauw\/\",\"https:\/\/x.com\/https:\/\/twitter.com\/JeroenDeDauw\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Why Every Single Argument of Dan North is Wrong - Blog of Jeroen De Dauw","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/","og_locale":"en_US","og_type":"article","og_title":"Why Every Single Argument of Dan North is Wrong - Blog of Jeroen De Dauw","og_description":"This blog post is a reply to Dan&#8217;s presentation Why Every Element of SOLID is Wrong. Dan&#8217;s presentation is crammed&hellip;","og_url":"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/","og_site_name":"Blog of Jeroen De Dauw","article_published_time":"2017-02-17T12:34:56+00:00","article_modified_time":"2021-03-20T22:30:21+00:00","og_image":[{"url":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_3.jpg","type":"","width":"","height":""}],"author":"Jeroen","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/JeroenDeDauw","twitter_site":"@JeroenDeDauw","twitter_misc":{"Written by":"Jeroen","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/#article","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/"},"author":{"name":"Jeroen","@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"headline":"Why Every Single Argument of Dan North is Wrong","datePublished":"2017-02-17T12:34:56+00:00","dateModified":"2021-03-20T22:30:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/"},"wordCount":1166,"commentCount":11,"publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"image":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/#primaryimage"},"thumbnailUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_3.jpg","keywords":["Clean Code","Code Quality","Complexity","Coupling","Dependency Inversion Principle","Design patterns","Interface Segregation Principle","Liskov Substitution Principle","Object Orientated","OOP","Open Closed Principle","Planet Wikimedia","Single Responsibility Principle","Software design","SOLID"],"articleSection":["Programming"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/","url":"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/","name":"Why Every Single Argument of Dan North is Wrong - Blog of Jeroen De Dauw","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/#primaryimage"},"image":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/#primaryimage"},"thumbnailUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_3.jpg","datePublished":"2017-02-17T12:34:56+00:00","dateModified":"2021-03-20T22:30:21+00:00","breadcrumb":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/#primaryimage","url":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_3.jpg","contentUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/02\/slide_3.jpg","width":1024,"height":576},{"@type":"BreadcrumbList","@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/02\/17\/why-every-single-argument-of-dan-north-is-wrong\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.entropywins.wtf\/blog\/"},{"@type":"ListItem","position":2,"name":"Why Every Single Argument of Dan North is Wrong"}]},{"@type":"WebSite","@id":"https:\/\/www.entropywins.wtf\/blog\/#website","url":"https:\/\/www.entropywins.wtf\/blog\/","name":"Entropy Wins","description":"A blog on Software Architecture, Design and Craftsmanship","publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.entropywins.wtf\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7","name":"Jeroen","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","caption":"Jeroen"},"logo":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/in\/jeroendedauw\/","https:\/\/x.com\/https:\/\/twitter.com\/JeroenDeDauw"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p74TBF-vI","jetpack-related-posts":[{"id":1553,"url":"https:\/\/www.entropywins.wtf\/blog\/2016\/01\/24\/the-liskov-substitution-principle\/","url_meta":{"origin":1966,"position":0},"title":"The Liskov Substitution Principle","author":"Jeroen","date":"2016-01-24","format":false,"excerpt":"I have a number of web-based presentations online on the software craftsmanship topic. You can find these on the software craftsmanship page of my website. I've just written an abstract for a presentation on the so-called Liskov Substitution Principle. This is a presentation I've done a number of times and\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2016\/01\/lsp0.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2016\/01\/lsp0.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2016\/01\/lsp0.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2016\/01\/lsp0.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":2392,"url":"https:\/\/www.entropywins.wtf\/blog\/2018\/10\/30\/readable-functions-do-one-thing\/","url_meta":{"origin":1966,"position":1},"title":"Readable Functions: Do One Thing","author":"Jeroen","date":"2018-10-30","format":false,"excerpt":"Several tricks and heuristics that I apply to write easy to understand functions keep coming up when I look at other people their code. This post outlines the second key principle. The first principle is Minimize State. Following posts will contain specific tips and tricks, often building on these two\u2026","rel":"","context":"In \"Clean Code\"","block_context":{"text":"Clean Code","link":"https:\/\/www.entropywins.wtf\/blog\/tag\/clean-code\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2014,"url":"https:\/\/www.entropywins.wtf\/blog\/2017\/09\/06\/the-fallacy-of-dry\/","url_meta":{"origin":1966,"position":2},"title":"The Fallacy of DRY","author":"Jeroen","date":"2017-09-06","format":false,"excerpt":"DRY, standing for Don't Repeat Yourself, is a well-known design principle in the software development world. It is not uncommon for removal of duplication to take center stage via mantras such as \"Repetition is the root of all evil\". Yet while duplication is often bad, the well intended pursuit of\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/09\/dry.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/09\/dry.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/09\/dry.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/09\/dry.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":2877,"url":"https:\/\/www.entropywins.wtf\/blog\/2022\/09\/21\/advice-for-junior-developers\/","url_meta":{"origin":1966,"position":3},"title":"Advice for junior developers","author":"Jeroen","date":"2022-09-21","format":false,"excerpt":"Over the 15+ years of my development career, I have learned several things that significantly increase my effectiveness. In this post, I share those learnings with you. Structure: Generic Advice -- Important context and motivation for the technical advice Technical Advice -- The main course Recommended Reading -- Links to\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2022\/09\/code.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2022\/09\/code.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2022\/09\/code.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2022\/09\/code.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2022\/09\/code.jpg?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":1133,"url":"https:\/\/www.entropywins.wtf\/blog\/2013\/09\/24\/mediawiki-subpagelist-rewrite\/","url_meta":{"origin":1966,"position":4},"title":"MediaWiki SubPageList rewrite","author":"Jeroen","date":"2013-09-24","format":false,"excerpt":"How I ended up rewriting the MediaWiki SubPageList extension: At the beginning of this year, it was still somewhat controversial in the Wikidata development team that concepts such as the Single Responsibility Principle, Inversion of Control and Interface Segregation are generally a good idea and practical to implement without creating\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1145,"url":"https:\/\/www.entropywins.wtf\/blog\/2013\/11\/15\/presentation-the-s-in-stupid\/","url_meta":{"origin":1966,"position":5},"title":"Presentation: The S in STUPID","author":"Jeroen","date":"2013-11-15","format":false,"excerpt":"In about two weeks, I will be giving a presentation about static code at 0\u00d720, the Gent hackerspace. This is a follow up on the Clean Functions presentation I gave there about\u00a0 a month ago. Like that one, \u201cThe S in STUPID\u201d is all about how to write clean code\u2026","rel":"","context":"In &quot;Software&quot;","block_context":{"text":"Software","link":"https:\/\/www.entropywins.wtf\/blog\/category\/software\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1966","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/comments?post=1966"}],"version-history":[{"count":27,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1966\/revisions"}],"predecessor-version":[{"id":2808,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1966\/revisions\/2808"}],"wp:attachment":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/media?parent=1966"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/categories?post=1966"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/tags?post=1966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}