    <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
     <channel>
        <title>ACCU  :: Minimalist Constructive Criticism</title>
        <link>https://members.accu.org/index.php/journals/414</link>
        <description>Professionalism in Programming</description>
        <dc:language>en-us</dc:language> 
        <dc:creator>Administrator</dc:creator> 
        <admin:generatorAgent rdf:resource="http://www.xaraya.org" /> 
        <admin:errorReportsTo rdf:resource="mailto:webeditor@accu.org" />
       <sy:updatePeriod>hourly</sy:updatePeriod>
       <sy:updateFrequency>1</sy:updateFrequency>
       <docs>http://backend.userland.com/rss</docs>


        <h2>Journal Articles</h2>


<div class="xar-mod-head"><span class="xar-mod-title">Overload Journal #47 - Feb 2002 + Design of applications and programs</span></div>

<table border="0" cellpadding="1" cellspacing="0">
    <tbody>
    <tr>
        <td valign="top">
            Browse in :
       </td>
       <td valign="top">

                                            <a href="https://members.accu.org/index.php/journals/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c76/">Journals</a>

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c78/">Overload</a>

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c198/">47</a>
                    (8)
<br />

                                            <a href="https://members.accu.org/index.php/journals/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c13/">Topics</a>

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c67/">Design</a>
                    (236)
<br />

                                            <a href="https://members.accu.org/index.php/journals/c198-67/">Any of these categories</a>

                    -                        <a href="https://members.accu.org/index.php/journals/c198+67/">All of these categories</a>
<br />
</td>
   </tr>
   </tbody>
</table>




<div class="xar-error">
   <p>
 <strong>Note:</strong> when you create a new publication type,
the articles module will automatically use the templates
<em>user-display-[publicationtype].xt</em>
and <em>user-summary-[publicationtype].xt</em>.
If those templates do not exist when you try to preview or display a new article,
you'll get this warning :-)  Please place your own templates in themes/<em>yourtheme</em>/modules/articles . The templates will get the extension .xt there. </p>
</div>
<div class="xar-norm xar-standard-box-padding">
   <h1><strong>Title:</strong>&nbsp;Minimalist Constructive Criticism</h1>
<p><strong>Author:</strong>&nbsp;</p>
<p>
<strong>Date:</strong> 26 February 2002 16:46:08 +00:00 or Tue, 26 February 2002 16:46:08 +00:00</p>
<p><strong>Summary:</strong>&nbsp;</p>
<p><strong>Body:</strong>&nbsp;<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e18" id="d0e18"></a></h2>
</div>
<p>I enjoyed Allan's article, but couldn't help thinking that it
was about something else. With the exception of the use of three
code fragments, I was left with the feeling that I was reading
about an article I didn't write. I looked back over my article and
saw most of the relevant points analysed, rejected or otherwise
expressed. Perhaps I didn't express them clearly or directly as I
might have done? So, I guess these comments are also a
continuation, response and counter argument!</p>
<p>[0] Just to clarify, the reason that example 2 is presented is
because it is often shallow orthodoxy - fashion without style.</p>
<p>[1] &quot;\n&quot; is an abstraction for CR, LF and CR+LF, depending on
the platform. That is a requirement of the standard, and is the
same in C as it is in C++. The only thing that std::endl offers us
in addition to &quot;\n&quot; is an explicit std::flush for all stream types.
For streams of uniform data this is not a reasonable necessity. And
whether &quot;\n&quot; requires more or less context to understand than
std::endl is more a matter of opinion rather than fact!</p>
<p>[2] Be careful with the use of the word &quot;reuse&quot;... ;-)</p>
<p>[3] On my use of the word &quot;minimalism&quot;, it is at once intended
to be both descriptive and provocative. In use as an ordinary noun
&quot;minimalism&quot; refers to omission of the unnecessary and the
inessential. The idea of reduction to sufficiency, but not to its
elimination, is implicit. Following from this is the inherent
coupling to a context and style of composition. This points to the
understanding of &quot;minimalism&quot; in terms of &quot;minimum&quot;, a mathematical
concept, and in particular the application of that to design, which
is both a political and a technical act - definitely the main topic
of interest.</p>
<p>If one relates &quot;minimalism&quot; to &quot;Minimalism&quot;, this points more to
the provocative side of things, making reference to art rather than
design or science. &quot;Minimalism&quot; has the specific meaning as a term
that describes visual art and music movements. It would, however,
not be correct to equate what I am talking about with descriptions
- and they are only descriptions, not definitions - of the
Minimalist movement (fond as I am of it). Refer, yes; equate,
no.</p>
<p>The label &quot;Minimalism&quot; was coined originally by critics and not
by its practitioners. It therefore suffers the volatility and
subjectivity that such a classification will inevitably experience.
Contrast:</p>
<div class="blockquote">
<blockquote class="blockquote">
<p>&quot;The aim of Minimalism is to allow the viewer to experience the
work more intensely without the distractions of composition, theme
and so on.&quot;</p>
</blockquote>
</div>
<p>with</p>
<div class="blockquote">
<blockquote class="blockquote">
<p>&quot;Minimalism here becomes deeply relativistic, supportive of the
view that 'art' can only acquire value or worth in relation to
external factors, such as its social or institutional meaning.&quot;
(After Modern Art, David Hopkins)</p>
</blockquote>
</div>
<p>and</p>
<div class="blockquote">
<blockquote class="blockquote">
<p>&quot;Minimalism is against the subjective realm and for the
objective realm.&quot; (This is Modern Art, Matthew Collings)</p>
</blockquote>
</div>
<p>Clearly a movement as much divided by critics as it was defined
by them. For some there was the idea that Minimalism made the
experience more intense and whole because of the removal of
context, and for others there was the idea that intensity and
wholeness arose precisely because the art acted as a lens through
which the context could be seen.</p>
<p>So I would have said that although it makes for an interesting
literal comparison, it is perhaps not a wholly valid conceptual
one. The &quot;minimalism&quot; of my article is sympathetic to the
&quot;Minimalism&quot; of art, but is more truly drawn from maths and science
than art, and is deeply bound to context and purpose through
design. And therefore in answer to the question raised: yes, this
really is &quot;minimalism&quot;, but it is only in part &quot;Minimalism&quot;.</p>
<p>[4] In terms of Constructivism, what I am describing also falls
a little short of that art movement as described by</p>
<div class="blockquote">
<blockquote class="blockquote">
<p>&quot;Constructivist art is marked by a commitment to total
abstraction and a wholehearted acceptance of modernity....
Objective forms which were thought to have universal meaning were
preferred over the subjective or the individual. The art is often
very reductive as well, paring the artwork down to its basic
elements.&quot;</p>
</blockquote>
</div>
<p>To specifically relate it back to the code fragments, the use of
STL is not the same as embracing modernity - although I and others
frequently use the term &quot;Modern C++&quot; as a description of the third
age of C++. We must be careful in how we apply this label: there
are many different styles of code that can claim this title, and
some have contradictory aims. Some might be considered elitist and
others not. To lump them all together and brand them the same way
is not always appropriate. Although the spectre is raised, the
question of elitism is never really explored or answered in the
article. It's a good question, but a deep one so I will leave it to
one side as it is slightly off the main track.</p>
<p>Is the STL necessarily modern? Not really. It represents the
adaptation and adoption of functional programming techniques into
C++. Is STL radical? Yes, from the perspective of Classic C++ its
introduction pushes C++ in quite a different direction to a core
Modernist Object creed (interesting mix of movements here...). Some
would say that the direction is not different, that it is either a
course correction or a clarification. But not all that is radical
is modern. It is modern in the sense that &quot;Modern English&quot; is
modern, but not truly modern in the sense of Modernism.</p>
<p>I think my article also makes clear that a total - as opposed to
sufficient - commitment to abstraction is not the answer. However,
there are clearly common points: universal meaning and a reductive
tendency ring bells. If such a comparison is to be made,
Constructivism more accurately describes generative programming in
C++ (see the work of Andrei Alexandrescu, and Krzysztof Czarnecki
and Ulrich Eisenecker's) than it does generic programming.</p>
<p>[5] Interestingly, the issue of universal forms actually points
to the elimination of context as a factor in Constructivism. If the
forms are not universal we have context, if they are universal the
distinction between having context and not becomes at best academic
- &quot;<span class="quote">When everything is a triangulation point,
then nothing is a triangulation point</span>&quot; (Software
Requirements &amp; Specifications, Michael Jackson). Of course, how
this relates to software development is another question!</p>
<p>[6] It is interesting to note that Oberon fails the requirements
of sufficiency and utility. Whilst it is has moments of elegance,
its ability to express abstractions with appropriate compression is
severely restricted. It is as if it has missed the minimum and
punched its way through to the x-axis. As described either in terms
of what I was exploring in my article or in terms of an art
movement, Oberon is not a {m,M}inimalist tool. It increases the
amount of code written and the amount of reading required to
recover meaning. The idea of capturing a model of usage is missing,
and is why the reduction is uninformed from a language user's
perspective.</p>
<p>[7] A telling exercise is to attempt to describe the core of
each C++ code fragment in English. The first example is quite long,
the second example is longer and the third example is the shortest.
I would contend that the last fragment is the one that has a
structure that most closely captures the intent: &quot;<span class=
"quote">copy from the beginning to the end of items out to the
standard output using newline separation</span>&quot;.</p>
<p>[8] The aim of minimalism as described in my article is not to
&quot;<span class="quote">reduce the physical amount of code</span>&quot;.
The reduction of code is not a principle; it is a side effect -
&quot;<span class="quote">Vigorous writing is concise.... This requires
not that the writer makes all sentences short... but that every
word tell</span>&quot; (The Elements of Style, Strunk &amp; White). If
you reduce code for its own sake you have lost your audience. To
further quote from my article, your code &quot;<span class="quote">needs
an audience, and it will be better off for having one in
mind</span>&quot;. So I would say that this is a point of agreement
rather than one of divergence between the articles.</p>
<p>[9] In software, coding is still designing. There is little
distinction except in level of detail and range of formality:
coding is a subset of design. To make a hard and fast distinction
is often artificial, and I would say the cause of much misguided
thinking in software development. The sculpting of a solution is
the process of design, and it makes little sense to have one
recommendation for design and a contradictory one for code: if the
design should be minimalist then that already covers what we should
be doing in code. Of course, we have to choose the right working
definition of minimalism :-)</p>
</div>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
