<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Object Mentor Blog: The Things That Pass For Simple I Can't Understand</title>
    <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>The Things That Pass For Simple I Can't Understand</title>
      <description>&lt;p&gt;(with apologies to Steely Dan for the nearly-lyrical title)&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;ve noticed that &amp;#8220;Do the simplest thing that might possibly work&amp;#8221; gets universal agreement in principle, and great divergence in practice.&lt;/p&gt;


	&lt;p&gt;Is a set of variables related by name prefix simpler than a named class containing the same variables?  In the &amp;#8220;fewest number of the fewest things&amp;#8221; sense, I see a group of variables as a lot more to manage than a class.  I can&amp;#8217;t understand why some people pass the same group of loose variables to a number of methods. Isn&amp;#8217;t a seven-argument method &amp;#8220;complex&amp;#8221;?&lt;/p&gt;


	&lt;p&gt;Is a custom exception &amp;#8220;fancy&amp;#8221; or &amp;#8220;trivial&amp;#8221;?  I&amp;#8217;ve had that discussion recently.  Some feel one way, some the other.  Is it more complex to throw a standard exception type and then try to figure out what it means elsewhere?&lt;/p&gt;


	&lt;p&gt;Is event-handling simpler than polling?  I&amp;#8217;ve heard this one too.  I don&amp;#8217;t know how other people see it.  I think events have more complex plumbing, but that polling has a greater run-time complexity because of failure modes (periodicity issues, race conditions, etc).  I think that it is simpler if you have fewer problems to look out for.&lt;/p&gt;


	&lt;p&gt;If you need a fixed set of java instances, is an enum simple or fancy?  Here you have a newer language feature, but it exists to simplify the management of a fixed set of instances, so it leaves you less to deal with, no?&lt;/p&gt;


	&lt;p&gt;Is &amp;#8220;more primitive&amp;#8221; simpler? How about if you use arrays and integer indices into a string rather than a list of strings? Is that simpler or more complex?  Is the Bowling Game &amp;#8220;simple&amp;#8221; because it uses a primitive array and a separate array counter instead of custom objects?&lt;/p&gt;


	&lt;p&gt;In C++, is it simpler to have a struct that contains two data members or to use the pair&amp;lt;&amp;gt; template?  Is it &amp;#8220;simpler&amp;#8221; that you have to refer to them as &amp;#8220;first&amp;#8221; an &amp;#8220;second&amp;#8221;?  Or is that just more obscure?  I think that &amp;#8220;obvious&amp;#8221; is more simple.&lt;/p&gt;


	&lt;p&gt;I am not sure how other people judge simple.  I think &amp;#8220;simple to use&amp;#8221;, &amp;#8220;less bookkeepping&amp;#8221;, &amp;#8220;harder to mess up&amp;#8221;, &amp;#8220;less setup to call&amp;#8221;, &amp;#8220;fewer parameters&amp;#8221; are simpler.  Other people seem to have contrary thoughts.&lt;/p&gt;


	&lt;p&gt;Clearly simple involves more than &amp;#8220;least thought&amp;#8221; or &amp;#8220;most primitive data components&amp;#8221;.  It should have something to do with the lack of effort in using something and the ease with which things can be used correctly.  Well, clearly to me.   And it should have to do with the least difficulty in reading the resulting code, and the least difficulty in changing it.&lt;/p&gt;


	&lt;p&gt;Unrelated to this, I find some tools that others find simple to be baffling, and some tools that are complex to others seem pretty easy to use to me.  I suppose that&amp;#8217;s a kind of &amp;#8220;personal taste&amp;#8221; but is there a more reliable rule to base &amp;#8220;simple&amp;#8221; on than personal choice? There should be if the rule is for us all to do the simplest thing that works, and to maintain the simplest design we can afford to build.&lt;/p&gt;


	&lt;p&gt;But I have unique viewpoints sometimes, and maybe simple to you isn&amp;#8217;t simple to me.  Personally, some of the things that are simple to you may be all but inscrutable to me.  I guess that happens.&lt;/p&gt;</description>
      <pubDate>Thu, 14 Jun 2007 00:19:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:38d1dd7b-6090-4f9d-aff6-f0ece6016e14</guid>
      <author>tottinger</author>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand</link>
      <category>Tim's Tepid Torrent</category>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by creatine</title>
      <description>&lt;p&gt;Good informative content is written to target the thinking person. This content is brain-challenging yet straightforward. The viewpoints are written with a lot of thought and prep work behind them.&lt;/p&gt;</description>
      <pubDate>Thu, 02 Feb 2012 07:10:52 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:932ec7a7-4135-4661-89ba-4c12b379d3cc</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-201011</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by bodybuilding</title>
      <description>&lt;p&gt;I have only one regret for landing on this article site. That regret is I can&#8217;t write really good content as well as this author.&lt;/p&gt;</description>
      <pubDate>Thu, 02 Feb 2012 06:47:50 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:68195a32-8c44-433f-99d5-7b3c92c5341a</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-200974</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by beats by dre store</title>
      <description>&lt;p&gt;understand the abstractions, you wind up totally lost. Design Patterns are &lt;a href="http://www.drdrebeatsheadphones-australia.com" rel="nofollow"&gt;high quality headphones&lt;/a&gt;
&lt;a href="http://www.drdrebeatsheadphones-australia.com" rel="nofollow"&gt;new design headphones&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 23 Aug 2011 03:29:17 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:6ccc3663-5180-4a1d-97ac-dc35a7db99a3</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-131683</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by Christian louboutin shoes on sale</title>
      <description>&lt;p&gt;Women seeking probably the most excellent models inside the fashionable shoes or boots assortment uncover 2011 louboutin sandals available regarding exactly how pricey this kind with astounding designs are generally.&lt;/p&gt;</description>
      <pubDate>Fri, 10 Jun 2011 21:51:01 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:83fa90c0-6db8-400d-924e-92a94bc82adc</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-109870</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by beats by dr dre headphones</title>
      <description>&lt;p&gt;for people that adore music, i 
suggest the &lt;a href="http://www.drebeatsstudio.com/powerbeats-sport-c-13.html" rel="nofollow"&gt;monster powerbeats sport headphones&lt;/a&gt; to you, &lt;a href="http://www.drebeatsstudio.com/just-beats-studio-purple-p-62.html" rel="nofollow"&gt;Just Beats Studio Purple&lt;/a&gt; has three color, red, whit and black. It is significant efficacy on this &lt;a href="http://www.drebeatsstudio.com/monster-diddybeats-c-7.html" rel="nofollow"&gt;monster diddybeats in-ear headphones&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Wed, 08 Jun 2011 21:24:21 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:2ac109c2-b968-4b69-9a88-1e89de2904fa</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-109201</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by okey oyunu oyna </title>
      <description>&lt;p&gt;good article&lt;/p&gt;


	&lt;p&gt;Okey oynamak hi&#231; bu kadar zevkli olmadi. Online ve 3 boyutlu &lt;a href="http://www.okeyoyunu-oyna.com" rel="nofollow"&gt;okey oyunu oyna&lt;/a&gt; ve turnuvalara sende katil.&lt;/p&gt;</description>
      <pubDate>Mon, 25 Apr 2011 15:23:05 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:6cbdbb47-079c-4b96-bd6a-bfb6ebfd4cd2</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-90561</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by Tenant Screening</title>
      <description>&lt;p&gt;I think maybe there is something akin to &#8220;exposed failure modes&#8221; as the inverse of &#8220;simplicity&#8221;. If Ican pass parameters out-of-order, accidentally pass one integer where I mean another, or mess up the handling of an array by setting an integer value incorrectly, make an object unusable by calling its methods out-of-established-order, or the like, then I&#8217;m not looking at something simple but something treacherous in its exposure of complexity.&lt;/p&gt;</description>
      <pubDate>Tue, 22 Feb 2011 10:54:24 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:0c2c0532-8756-4542-8a98-58971f475062</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-65683</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by Criminal Records</title>
      <description>&lt;p&gt;Some say this only hides the complexity, but I would say that it literally reduces the complexity of the methods using the class (which are many) and adds complexity only to the class definition (of which there is one).&lt;/p&gt;</description>
      <pubDate>Fri, 18 Feb 2011 11:43:50 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:c414bd00-59c0-461c-9bed-1d82a912581a</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-64239</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by shaded pold motor</title>
      <description>&lt;p&gt;This article is very usefull for me! I can see that you are putting a lots of efforts into your blog. I will keep watching in your blog, thanks.&lt;/p&gt;</description>
      <pubDate>Mon, 24 Jan 2011 01:39:51 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:56556d0d-cf09-4d42-ae85-f2e35ccbf353</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-58899</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by Tim</title>
      <description>&lt;p&gt;More on simplicity and complexity:
&lt;a href="http://betterexplained.com/articles/combining-simplicity-and-complexity/" rel="nofollow"&gt;http://betterexplained.com/articles/combining-simplicity-and-complexity/&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 06 Nov 2007 13:20:15 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:2120a2b4-c354-4e5b-8837-2984696646cd</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-927</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by Tim</title>
      <description>&lt;p&gt;One suggestion is &amp;#8220;Structural Simplicity&amp;#8221; (thanks Mike).  I think you are onto something here.&lt;/p&gt;


	&lt;p&gt;Okay, let&amp;#8217;s look at the simplicity improvement if I create a class instead of having a set of loose variables.  We can discuss an address class.  Since I&amp;#8217;m an American (and most of us are barely aware of how things work elsewhere), I&amp;#8217;ll make it a US postal address. The address class has a street address, city, state, and zip code.  The zip code has a funny relationship with city and state, in that only certain combinations are valid.  The city has to be withing the state, and the zip code has to refer to that address combination (zip to city is many-to-many).&lt;/p&gt;


	&lt;p&gt;If I pass around the address as loose variables, the answer is more primitive but not simpler.  Likewise if I place these all in a structure but pass it around in a writeable form, it is no simpler.&lt;/p&gt;


	&lt;p&gt;One problem is that there are a number of operations I can perform on strings that don&amp;#8217;t make a lot of sense on addresses.  Why do I want to substring them? &amp;#8220;Worth&amp;#8221; is a wholly different place than &amp;#8220;Fort Worth&amp;#8221;.   There are a lot of operations I have available to me on a number of variables, and I have to know which ones make sense.  This is a problem of too much variety.  Each user of the structure will have to know which operations make sense on each member.&lt;/p&gt;


	&lt;p&gt;A second problem is invalid combinations.  If I change the state, I will have to change the street address and likely the city. I will certainly have to change the zip code.  There are many ways I can fail to have a valid combination.  This is a problem of having too many exposed failure modes.  Every client of this structure or set of variables will have to know how to validate them against each other.&lt;/p&gt;


	&lt;p&gt;The third problem is that I may be working more than one address at once, perhaps comparing them.  I will have to maintain a clear separation in my head between the fields of the two, and which values are in which place.  This is somewhat alleviated by the structure.  The risk of accidental shuffling is increased by the number of variables I have at hand.&lt;/p&gt;


	&lt;p&gt;The fourth problem is that any act of copying to another structure, to a set of loose variables, to a file, to a document for network transfer, to a database or to any other source will have the same set of operations.  By not managing an entity as a whole, I have duplication of structure and this a multiplication of maintenance points.&lt;/p&gt;


	&lt;p&gt;It is worse, by the way, if I were to make the zip code an integer.  Does the zip + 4 overflow? Is the zip a five-digit or 9-digit zip (I need to know for formatting, and because some receivers may want only 5 digits).  What does it mean to left shift, bitwise-or, add, multiply, or square a zip code?  I have even more noise to sort through with an integer.&lt;/p&gt;


	&lt;p&gt;Loose variables may seem &amp;#8220;simple&amp;#8221; (having only one moving part each) but having loose variables for a single entity multiplies complexities.  I can clearly see that many times a more primitive answer is not a simpler answer, and not even an easier answer.  But still there is primitive obsession in much modern code.&lt;/p&gt;


	&lt;p&gt;If I put my loose variables into a class, I can restrict the set of operations one may choose to those that are meaningful for the class.  I can add methods to the class to extend the meaning in a clear way.  I can build operations at the class/instance level and refactor them together to avoid duplication.  I can add decorators to give short-term features to the objects.  I can make the object responsible for the validity of its own state.  These are things that you can do with a class (&amp;#8220;not the simplest thing&amp;#8221; some say) that you cannot do easily with more primitive forms.&lt;/p&gt;


	&lt;p&gt;These kinds of structural simplicity relieve the burden on the programmer (and each of the functions written) to have to know the valid states and operations of the cluster of data elements.  Some say this only hides the complexity, but I would say that it literally reduces the complexity of the methods using the class (which are many) and adds complexity only to the class definition (of which there is one).&lt;/p&gt;


	&lt;p&gt;That sounds like reducing overall complexity. That sounds more structurally simple, and also results in things being easier to use and harder to misuse.&lt;/p&gt;


I said above:
&lt;blockquote&gt;A simple system would have very few moving parts, and very few exposed failure modes, very few degrees of freedom of movement, and the use of it would be more-or-less obvious to a biased observer&lt;/blockquote&gt;

	&lt;p&gt;I think that this example helps to make the case.  Fewer moving parts (one v. five) for users, less freedom of movement, fewer decisions to be made, and far fewer options to sort through in order to decide what to do next.&lt;/p&gt;


	&lt;p&gt;That&amp;#8217;s simpler. Or structurally simpler.  Or &amp;#8220;more minimal&amp;#8221; maybe.&lt;/p&gt;


	&lt;p&gt;And, finally, for my C++ friends, look at how I can completely demolish the real structural simplicity of my class by returning each of the variables as a non-const reference.&lt;/p&gt;</description>
      <pubDate>Wed, 08 Aug 2007 21:46:36 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:ac935afa-4635-46d3-908e-bf93f904c86d</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-595</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by Torbj&#195;&#182;rn Kalin</title>
      <description>&lt;p&gt;I doubt there is one word to express all you want, especially one that for some people does not at the same time mean the completely opposite (such as &amp;#8220;simple&amp;#8221;, and also &amp;#8220;clean&amp;#8221;, I&amp;#8217;m afraid).&lt;/p&gt;


	&lt;p&gt;Perhaps it would be easier to find a few values to describe your vision. &amp;#8220;Simple&amp;#8221; could be one of them, but perhaps not the one with highest priority due to its disambiguous tendency.&lt;/p&gt;


	&lt;p&gt;I would use &amp;#8220;maintainable&amp;#8221; since maintain the code is what you do most of the time, and &amp;#8220;modifyable&amp;#8221; as the design requirements tend to change.&lt;/p&gt;


	&lt;p&gt;&amp;#8220;Understandable&amp;#8221; is a good candidate (and perhaps it&amp;#8217;s part of &amp;#8220;maintainable&amp;#8221;) but not a top priority. It often takes a few moments to understand OO code due to the abstractions, while functionally decomposed code is more straight forward. Yet I prefer OO code.&lt;/p&gt;


	&lt;p&gt;&amp;#8220;Easy to use&amp;#8221; and &amp;#8220;hard to misuse&amp;#8221; are two more good values.&lt;/p&gt;


	&lt;p&gt;Or define the values by giving counter-examples. &amp;#8220;Easy to write&amp;#8221; is clearly one of those: code will be read many more times than it is written.&lt;/p&gt;</description>
      <pubDate>Sat, 30 Jun 2007 16:26:05 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:da0a57e9-afd6-4af0-84b1-dd0f35f351cc</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-466</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by Tim</title>
      <description>&lt;p&gt;I think that the DTSTTMPW &amp;#8220;simple&amp;#8221; would have been better off named &amp;#8220;easy&amp;#8221; or &amp;#8220;cheesy&amp;#8221; or &amp;#8220;dumbest&amp;#8221;.  I have respect for the word &amp;#8220;simple&amp;#8221; that isn&amp;#8217;t deserved there.&lt;/p&gt;


	&lt;p&gt;I am really interested in &amp;#8220;simple design&amp;#8221; most of all.  I admit that I should not have mentioned DTSTTMPW in this posting.  I repent.&lt;/p&gt;


	&lt;p&gt;But I want a better definition of simple, and could be happy using a different word that means &amp;#8220;simple&amp;#8221; in this context.   &amp;#8220;Clean&amp;#8221; starts to approach the right meaning, but is not precise enough.&lt;/p&gt;


	&lt;p&gt;Recommendations?&lt;/p&gt;</description>
      <pubDate>Fri, 29 Jun 2007 08:51:46 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:21a77a26-0f0a-4cae-91a4-c1389930d2c2</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-465</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by Torbj&#195;&#182;rn Kalin</title>
      <description>&lt;p&gt;I thought DTSTTMPW had to do with the make-your-test-work part of TDD. Here simplicity has nothing to do with values of good design. Instead, simple means as few keystrokes as possible or the shortest implementation time. Duplicate as much as you like. Magic numbers are king in the world of simplicity.&lt;/p&gt;


	&lt;p&gt;Then you put on you refactoring hat. Simple might be a good value to use here too, but it has a completely different meaning. And if that meaning is so hard to define, then is it really a good word to use? Perhaps it should be refactored into something clearer? :)&lt;/p&gt;


	&lt;p&gt;I share Tim&amp;#8217;s experiences regarding problems with the definition of simple. In the name of simplicity, a collegue recently wanted to duplicate a class (copy/paste 500 LOC) instead of using strategy pattern. I agree with my collegue that his solution is indeed simpler in many ways (simple to write, simple to use, simple to understand), and would therefore use other design values (simple to maintain, simple to change/modify) to motivate the strategy solution.&lt;/p&gt;</description>
      <pubDate>Mon, 25 Jun 2007 02:51:32 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:c6ba17d4-d004-43d7-b72d-40aa8470481a</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-453</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by Grok2</title>
      <description>&lt;p&gt;At work, I end up maintaining a lot of code that other people have written&amp;#8230;in the end, to me, simple code is something that is easily understood. And which usually is code that is written in the simplest way possible. But the interesting thing is that the simplest code is usually written by the more experienced programmers&amp;#8230;less experienced programmers tend to be inconsistent and &lt;strong&gt;simplistic&lt;/strong&gt; (as opposed to programming simple-y) in their programming!&lt;/p&gt;</description>
      <pubDate>Tue, 19 Jun 2007 10:59:05 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:8a001d42-012a-438e-962e-714f1873363d</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-447</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by Tim</title>
      <description>&lt;p&gt;PJ: I agree.  Having more collateral effort pushed into a client doesn&amp;#8217;t decrease the complexity, it actually spreads it.  If the function receives seven parameters and then manages them itself, it is in one place only.  If, on the other hand, every caller must collect all the parameters into a structure or class before calling, then all of the callers have this collateral effort (caller-side complexity) to deal with. This is a fact dealing with cardinality: one function v. multiple callers.   It is also clearly an issue of removing duplication.&lt;/p&gt;


	&lt;p&gt;But likewise there is the question of why we have seven parameters on a function.  There are very few reasons for such a thing.  One is primitive obsession, where (for instance) one may be passing coordinates for two objects as sets of loose integer variables instead of having a coordinates class.   Another reason is that the function is doing several things and uses some of the variables to choose which of the others it should look at.  It is also possible that the function is a constructor, and has a lot of dependencies (perhaps too many).  At any rate, having seven parameters makes me suspect &amp;#8220;not simple&amp;#8221;.   Likewise, having too many member variables or too many methods says &amp;#8220;not simple&amp;#8221;.&lt;/p&gt;


	&lt;p&gt;I remember Bjarne Stroustrup saying that in a well-designed system, the average number of parameters per function approaches one.  I think that was in Champaign/Urbana, back in maybe the mid-to-late 90s.  I think he&amp;#8217;s right.&lt;/p&gt;


	&lt;p&gt;Given a choice, though, I do agree with you that complexity belongs in the smallest number of places, and in this case it should be pushed into the function, not pushed out as duplicated work on all the callers.&lt;/p&gt;


Jan: it might have been you.  It&amp;#8217;s a good quote regardless. I like it alongside this one on project risk:
&lt;pre&gt;
       required time
risk = ----------------
       allowed time
&lt;/pre&gt;</description>
      <pubDate>Tue, 19 Jun 2007 08:54:54 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:1c4cb9df-d853-4d1e-829c-932b0b2620bd</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-446</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by PJ</title>
      <description>&lt;p&gt;&amp;gt; Isn&#226;&#8364;&#8482;t a seven-argument method &#226;&#8364;&#339;complex&#226;&#8364;&#157;?&lt;/p&gt;


	&lt;p&gt;Maybe.  Sometimes simple-to-use means complex internally. For instance, one could read your arguments to mean that all parameters should be put in a struct first.  That, however, may be more complex due to the overhead of having to create a struct if one doesn&amp;#8217;t exist.  If the seven arguments come from seven different objects, then the seven-argument-method is indeed the simplest one to use &amp;#8211; anything else will involve the overhead of creating a struct from those seven values.&lt;/p&gt;</description>
      <pubDate>Tue, 19 Jun 2007 08:21:40 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:69bf9c9a-1c30-4186-8a8e-8600e5b17260</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-445</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by Ivan Tikhonov</title>
      <description>&lt;p&gt;You should read Chuck Moore. He is a marginal guy. And his margin is a simplicity. He build his own processors because he does not like bloated hardware. For doing this he built his own OS, CAD, character set and keyboard.&lt;/p&gt;


	&lt;p&gt;OS is 2kb. CAD is 500 lines in his own language for sure.  Charset is 86 characters, ~5.2 bits each. Keyboard has 27 keys.&lt;/p&gt;


	&lt;p&gt;Jef Fox has an article about Moore and his way:
&lt;a href="http://www.ultratechnology.com/forth.htm" rel="nofollow"&gt;http://www.ultratechnology.com/forth.htm&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Also his quotes:
&lt;a href="http://www.ultratechnology.com/moore4th.htm" rel="nofollow"&gt;http://www.ultratechnology.com/moore4th.htm&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 19 Jun 2007 08:06:52 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:89b23074-3054-45d6-86c1-6ed31a10b9f9</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-444</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by Jan Daniel Andersen</title>
      <description>&lt;p&gt;@Tim.
Hehe.. you might have seen that equation on my email signature or perhaps you read my little blog entry (&lt;a href="http://blog.10footego.net/blog/_archives/2007/1/26/2684503.html" rel="nofollow"&gt;http://blog.10footego.net/blog/_archives/2007/1/26/2684503.html&lt;/a&gt;) about my perception of skill :). But then again, maybe you saw it somewhere else. I do feel a little honoured though :).&lt;/p&gt;


	&lt;p&gt;I understand what you&amp;#8217;re aiming for and I can see why my comments above, doesn&amp;#8217;t quite cut it.&lt;/p&gt;</description>
      <pubDate>Tue, 19 Jun 2007 07:44:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:e2405d05-47d7-4510-9aa9-b0a07c6b2916</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-443</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by Tim</title>
      <description>&lt;p&gt;I don&amp;#8217;t deny at all the value of &amp;#8220;understandable&amp;#8221;.   I appreciate that.  I think that&amp;#8217;s &amp;#8220;simple v. hard-to-understand&amp;#8221; and am in favor of it.&lt;/p&gt;


	&lt;p&gt;I am currently interested (for different, related reasons) in &amp;#8220;simple v. complex&amp;#8221; though.  I concede that the DTSTTMPW was really meaning &amp;#8220;easiest to envsion right now&amp;#8221;.&lt;/p&gt;


	&lt;p&gt;I also disagree with patterns being &amp;#8220;simple&amp;#8221;.  Flyweight and visitor and several of the others strike me as being non-simple solutions, but reusable in their context nonetheless.  I think that visitor in particular, though quite useful, is complicated in number of interactions and complexity of interactions.&lt;/p&gt;


	&lt;p&gt;Yes, yes, a complex system can work too. I am not saying that complexity can&amp;#8217;t work.  My goal is not to eliminate anything complex, but to work toward a definition of &amp;#8220;reasonably complex&amp;#8221; v. &amp;#8220;unreasonably complex&amp;#8221;.   As with big O notation, the purpose is more to observe the difference between the required complexity and the actual complexity of the solution.&lt;/p&gt;


	&lt;p&gt;I recently read (I don&amp;#8217;t recall where) that the skill of the developer is:&lt;/p&gt;


&lt;pre&gt;
           complexity of problem
  skill  = ----------------------
           complexity of solution
&lt;/pre&gt;

	&lt;p&gt;This is a good axiom, a nice observation.  But it spurred me to think about things not just &lt;strong&gt;seeming&lt;/strong&gt; simpler (a darned good goal all by itself) but &lt;strong&gt;being&lt;/strong&gt; simpler in fact.  I am now trying to find a way to measure simplicity.&lt;/p&gt;


	&lt;p&gt;I of course know about McCabe&amp;#8217;s cyclomatic complexity (and I believe it&amp;#8217;s right, also).  But in an object system there should be something similar.&lt;/p&gt;


	&lt;p&gt;I think that &amp;#8220;seeming&amp;#8221; simple is relative,  but that there should be an &amp;#8220;actual simplicity&amp;#8221; that is measurable and concrete.&lt;/p&gt;</description>
      <pubDate>Mon, 18 Jun 2007 07:55:34 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:7d89f461-5393-4dfd-815f-ffad25d1d775</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-442</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by Jan Daniel Andersen</title>
      <description>&lt;p&gt;@Mark Wilden.
You are right about &amp;#8220;most understandable&amp;#8221; being the &#226;&#8364;&#339;least common denominator.&#226;&#8364;&#157; But this will only be a problem if you have too much spread in skill within your team, and I would argue that, that is a bad thing.&lt;/p&gt;


	&lt;p&gt;If you HAVE TO have a few team members with skills way lower than the rest, you need a time budget, to bring these up to speed, and this will ofcourse affect the progress.&lt;/p&gt;


	&lt;p&gt;@Tim Ottinger.
I think understanding is key to all the things you mention. I see no reason to keep things simple if it&amp;#8217;s not from an &amp;#8220;understanding&amp;#8221; point of view. It&amp;#8217;s not hard to make a complex system work just as well as a simple system, unless the complexity defies our understanding of it. In essence, the final system, &amp;#8220;doesn&amp;#8217;t care&amp;#8221; whether it is simple or complex. Only when we need to look at it again and need to understand it&amp;#8217;s inner workings, do we see the difference.&lt;/p&gt;


	&lt;p&gt;I think that simple is a relative word, and can only be made concrete in it&amp;#8217;s meaning among people with a common base.&lt;/p&gt;


	&lt;p&gt;BTW: I like your philosophical approach to these thing :-).&lt;/p&gt;</description>
      <pubDate>Mon, 18 Jun 2007 04:42:17 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:d56edd34-b53f-42b8-b388-f99883ce3347</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-440</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by Ben Rady</title>
      <description>&lt;p&gt;Doesn&amp;#8217;t &amp;#8220;simple&amp;#8221; depend on shared experience? What&amp;#8217;s simple to me could be unendingly complex to someone else (for example, a non-programmer).&lt;/p&gt;


	&lt;p&gt;One way this manifests itself is through abstractions. Abstractions often make things much simpler, but if you don&amp;#8217;t understand the abstractions, you wind up totally lost. Design Patterns are a great example of this (Oh, it&amp;#8217;s just a Flyweight!...What&amp;#8217;s a flyweight?)&lt;/p&gt;


	&lt;p&gt;Another way would be the shared understanding of members on a team. While the team can often (but not always) come to an agreement about solution A being simpler than solution B, if you leave the friendly confines of the team, you often (but not always) start playing by a different set of rules.&lt;/p&gt;</description>
      <pubDate>Sun, 17 Jun 2007 22:56:58 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:96ce1203-bc01-4bee-898a-870941ef1159</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-439</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by Tim Ottinger</title>
      <description>&lt;p&gt;There&amp;#8217;s rather a great deal of difference between being a simple thing to imagine (cheesiest) and being simple.  I respect the value of doing &lt;strong&gt;something&lt;/strong&gt; so that you splash come code on the page, but then once it works it needs to have simple design.&lt;/p&gt;


	&lt;p&gt;If I scribbled up the first thing that crossed my mind and didn&amp;#8217;t ever go through the effort of making it simple (expressive, clear, obvious, uncomplicated, etc) then my code base would go south in a big way.&lt;/p&gt;


	&lt;p&gt;So I&amp;#8217;m okay with doing brute-force kinds of things like &amp;#8220;return true&amp;#8221; when TDD-ing, but then there is some standard of &amp;#8220;simple&amp;#8221; that interests me as a target for my refactoring.&lt;/p&gt;


	&lt;p&gt;YAGNI and OAOO and Tell-Dont-Ask are techniques for approaching &amp;#8220;simple&amp;#8221;, and I love that.  I just wonder if there is some way to say what simple is, rather than just &amp;#8220;what comes from YAGNI, OAOO, TDA, and tasteful use of explanatory functions and variables&amp;#8221;.   What is it really?&lt;/p&gt;


	&lt;p&gt;I think it has something to do with least-collateral-effort-to-use, and fewest-inobvious-failure-modes, fewest-parts, simplest-parts, structure-shy-interactions, etc.&lt;/p&gt;


	&lt;p&gt;So I totally respect what John says, and I still want something entirely other.&lt;/p&gt;</description>
      <pubDate>Fri, 15 Jun 2007 10:42:19 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:f0e7b587-b1c9-4da7-936a-c2ffc43783ab</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-436</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by Andrew Macdonald</title>
      <description>&lt;p&gt;Simple is a personal choice&lt;/p&gt;


	&lt;p&gt;It&#226;&#8364;&#8482;s interesting that one of the things that most developers try to strive is simplicity, especially when the essence of simplicity is such a personal sentiment&amp;#8230;&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.cwk-technologies.co.uk/blog/2007/06/15/Simple+Is+A+Personal+Choice.aspx" rel="nofollow"&gt;http://www.cwk-technologies.co.uk/blog/2007/06/15/Simple+Is+A+Personal+Choice.aspx&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 15 Jun 2007 08:49:03 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:1b78337b-9d40-4da9-8273-48d4b329d145</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-435</link>
    </item>
    <item>
      <title>"The Things That Pass For Simple I Can't Understand" by www.EdmundKirwan.com</title>
      <description>&lt;p&gt;Simplicity is complicated.&lt;/p&gt;</description>
      <pubDate>Fri, 15 Jun 2007 05:57:34 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:d0e3b6f2-0525-45d6-826e-c3f18bd68f16</guid>
      <link>http://blog.objectmentor.com/articles/2007/06/14/the-things-that-pass-for-simple-i-cant-understand#comment-434</link>
    </item>
  </channel>
</rss>

