<story><title>The Wrong Aesthetic</title><url>http://sheddingbikes.com/posts/1276445247.html</url></story><parent_chain><item><author>axiom</author><text>I&apos;ve always felt that most good programmers go through 3 stages.&lt;p&gt;Stage 1: Write very simple, naive code, no fancy design patterns, just kind of brute force everything.&lt;p&gt;Stage 2: Discover design pattens, and fancy obscure programming constructs. Use them &lt;i&gt;everywhere&lt;/i&gt; regardless of whether it makes sense or makes the code easier to understand and maintain.&lt;p&gt;Stage 3: Realize the folly of stage 2, and enter a zen like state where one writes deceptively simple, clean code. Rarely, if ever, use any fancy constructs or design patterns (except where it actually makes sense to use them.)&lt;p&gt;For the novice programmer looking at someone else&apos;s code it&apos;s very very easy to confuse stages 1 and 3.</text></item></parent_chain><comment><author>pg</author><text>There is a similar trajectory in what you choose to build.  In stage 1 you write programs that are conspicuously missing features; in stage 2 you write programs that have too many features (and yet may still be missing some important ones); in stage 3 you write programs that do exactly what&apos;s needed.&lt;p&gt;My experience suggests that one good way to speed the transition to stage 3 is to try to make your programs short.  When I was writing &lt;i&gt;On Lisp&lt;/i&gt; I spent a lot of time working on programs that had to be short enough to be reproduced in the book, and this cured me of the tendency to pile on features.&lt;p&gt;Rtm&apos;s example probably helped too.  His source code is as laconic as he is in person.</text></comment>
<story><title>The Wrong Aesthetic</title><url>http://sheddingbikes.com/posts/1276445247.html</url></story><parent_chain><item><author>axiom</author><text>I&apos;ve always felt that most good programmers go through 3 stages.&lt;p&gt;Stage 1: Write very simple, naive code, no fancy design patterns, just kind of brute force everything.&lt;p&gt;Stage 2: Discover design pattens, and fancy obscure programming constructs. Use them &lt;i&gt;everywhere&lt;/i&gt; regardless of whether it makes sense or makes the code easier to understand and maintain.&lt;p&gt;Stage 3: Realize the folly of stage 2, and enter a zen like state where one writes deceptively simple, clean code. Rarely, if ever, use any fancy constructs or design patterns (except where it actually makes sense to use them.)&lt;p&gt;For the novice programmer looking at someone else&apos;s code it&apos;s very very easy to confuse stages 1 and 3.</text></item></parent_chain><comment><author>arethuza</author><text>I think there is a stage between 2 and 3 where people become obsessed with coding standards that say thing like &quot;don&apos;t use the ternary operator because it can be confusing&quot;.</text></comment>