<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: Code Reads #3: Edsger Dijkstra&#8217;s &#8220;The Humble Programmer&#8221;</title>
	<atom:link href="http://www.wordyard.com/2006/10/18/dijkstra-humble/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.wordyard.com/2006/10/18/dijkstra-humble/</link>
	<description>Technology, politics, culture</description>
	<pubDate>Mon, 01 Dec 2008 23:33:26 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>By: sanele</title>
		<link>http://www.wordyard.com/2006/10/18/dijkstra-humble/#comment-2704</link>
		<dc:creator>sanele</dc:creator>
		<pubDate>Sun, 13 Apr 2008 09:27:32 +0000</pubDate>
		<guid isPermaLink="false">http://www.wordyard.com/?p=1147#comment-2704</guid>
		<description>i want to appriciate you for your excellent job that you did</description>
		<content:encoded><![CDATA[<p>i want to appriciate you for your excellent job that you did</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kyle Dyer</title>
		<link>http://www.wordyard.com/2006/10/18/dijkstra-humble/#comment-308</link>
		<dc:creator>Kyle Dyer</dc:creator>
		<pubDate>Fri, 05 Jan 2007 15:25:44 +0000</pubDate>
		<guid isPermaLink="false">http://www.wordyard.com/?p=1147#comment-308</guid>
		<description>"one of the most important aspects of any computing tool is its influence on the thinking habits of those that try to use it"

Remineds me of a line from Paul Graham’s essay, Hackers and Painters:

"A programming language is for thinking of programs, not for expressing programs you've already thought of"

Thinking is done in a language and the design of the language has influence on the thinking.</description>
		<content:encoded><![CDATA[<p>&#8220;one of the most important aspects of any computing tool is its influence on the thinking habits of those that try to use it&#8221;</p>
<p>Remineds me of a line from Paul Graham’s essay, Hackers and Painters:</p>
<p>&#8220;A programming language is for thinking of programs, not for expressing programs you&#8217;ve already thought of&#8221;</p>
<p>Thinking is done in a language and the design of the language has influence on the thinking.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Curt Sampson</title>
		<link>http://www.wordyard.com/2006/10/18/dijkstra-humble/#comment-307</link>
		<dc:creator>Curt Sampson</dc:creator>
		<pubDate>Tue, 07 Nov 2006 08:25:51 +0000</pubDate>
		<guid isPermaLink="false">http://www.wordyard.com/?p=1147#comment-307</guid>
		<description>I'm sure that by "losely typed" languages you mean dynamically typed languages (languages where variables are untyped, and type-correctness is enforced at runtime). Scripting languages, unlike C, are very strongly typed; it's pretty much impossible to perform an operation on data that's not valid for the data type.

But I think you have wrong the reason people are making this move. It's not because people don't like strong typing as much as they don't like the pain-in-the-you-know-what declarative typing that languages like Java use. Type inference makes a world of difference.</description>
		<content:encoded><![CDATA[<p>I&#8217;m sure that by &#8220;losely typed&#8221; languages you mean dynamically typed languages (languages where variables are untyped, and type-correctness is enforced at runtime). Scripting languages, unlike C, are very strongly typed; it&#8217;s pretty much impossible to perform an operation on data that&#8217;s not valid for the data type.</p>
<p>But I think you have wrong the reason people are making this move. It&#8217;s not because people don&#8217;t like strong typing as much as they don&#8217;t like the pain-in-the-you-know-what declarative typing that languages like Java use. Type inference makes a world of difference.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Boris</title>
		<link>http://www.wordyard.com/2006/10/18/dijkstra-humble/#comment-306</link>
		<dc:creator>Boris</dc:creator>
		<pubDate>Sat, 28 Oct 2006 23:23:05 +0000</pubDate>
		<guid isPermaLink="false">http://www.wordyard.com/?p=1147#comment-306</guid>
		<description>Joel

Firstly, one point of agreement is that ensuring verifiability is crucial goal of every project. However the only technique i know which works is multi level automated testing. Dijkstra in the article does not address any of this technique. Another technique that I expect to gain the momentuim is independent usability reviews. But this is only my speculation.


There's a great article of perl creator Lary Wall http://www.oreilly.com/catalog/opensources/book/larry.html

Let me quote from it:-
...This is important, and a little hard to understand. English is useful because it's a mess. Since English is a mess, it maps well onto the problem space, which is also a mess, which we call reality. Similarly, Perl was designed to be a mess (though in the nicest of possible ways)...

You see, Perl, was designed on purpose as a "mess" (nicest mess though). That's why it is so useful. Do you think Dijkstra would approve this "mess" approach in design of the languiage? I have an impression that not. And that is my main point of criticism.

The point is not that every problem that we trying to solve in programs is so somplicated that we should abandon any hope to improve the quality of the code. But the variance of problems themselves that software engeneering is applied to  is so big that any attepmt of finding universal approach to this is doomed to fail.

The strategy lies not in "limiting" techinques - like the one's Dijkstra suggests, but on opposite inserting more "nice mess" as in Perl or even C++.  See how "loosely typed" languages are getting momentum. The world is going in quite opposite direction than Dijkstra predicted.</description>
		<content:encoded><![CDATA[<p>Joel</p>
<p>Firstly, one point of agreement is that ensuring verifiability is crucial goal of every project. However the only technique i know which works is multi level automated testing. Dijkstra in the article does not address any of this technique. Another technique that I expect to gain the momentuim is independent usability reviews. But this is only my speculation.</p>
<p>There&#8217;s a great article of perl creator Lary Wall <a href="http://www.oreilly.com/catalog/opensources/book/larry.html" rel="nofollow">http://www.oreilly.com/catalog/opensources/book/larry.html</a></p>
<p>Let me quote from it:-<br />
&#8230;This is important, and a little hard to understand. English is useful because it&#8217;s a mess. Since English is a mess, it maps well onto the problem space, which is also a mess, which we call reality. Similarly, Perl was designed to be a mess (though in the nicest of possible ways)&#8230;</p>
<p>You see, Perl, was designed on purpose as a &#8220;mess&#8221; (nicest mess though). That&#8217;s why it is so useful. Do you think Dijkstra would approve this &#8220;mess&#8221; approach in design of the languiage? I have an impression that not. And that is my main point of criticism.</p>
<p>The point is not that every problem that we trying to solve in programs is so somplicated that we should abandon any hope to improve the quality of the code. But the variance of problems themselves that software engeneering is applied to  is so big that any attepmt of finding universal approach to this is doomed to fail.</p>
<p>The strategy lies not in &#8220;limiting&#8221; techinques - like the one&#8217;s Dijkstra suggests, but on opposite inserting more &#8220;nice mess&#8221; as in Perl or even C++.  See how &#8220;loosely typed&#8221; languages are getting momentum. The world is going in quite opposite direction than Dijkstra predicted.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Curt Sampson</title>
		<link>http://www.wordyard.com/2006/10/18/dijkstra-humble/#comment-305</link>
		<dc:creator>Curt Sampson</dc:creator>
		<pubDate>Thu, 26 Oct 2006 05:12:48 +0000</pubDate>
		<guid isPermaLink="false">http://www.wordyard.com/?p=1147#comment-305</guid>
		<description>To call Algol 60 a "failure" because no large production systems use it would be--even if this claim were true--akin to calling the Wright Flyer a failure because it didn't carry cargo.</description>
		<content:encoded><![CDATA[<p>To call Algol 60 a &#8220;failure&#8221; because no large production systems use it would be&#8211;even if this claim were true&#8211;akin to calling the Wright Flyer a failure because it didn&#8217;t carry cargo.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: IanRae</title>
		<link>http://www.wordyard.com/2006/10/18/dijkstra-humble/#comment-304</link>
		<dc:creator>IanRae</dc:creator>
		<pubDate>Wed, 25 Oct 2006 14:03:30 +0000</pubDate>
		<guid isPermaLink="false">http://www.wordyard.com/?p=1147#comment-304</guid>
		<description>"as the number of tests approaches infinity, the probability of correctness approaches 1."

I agree.  Tests are not proof but they are a close substitute.  I saw some statistics from large software projects showing that testing even one execution path through a function found 55% of the defects in that function.  Testing two execution paths found 65% of the defects.  It takes surprisingly few test cases (say a dozen good tests) to reach 95%.  These are averages of course, but they point to the power of TDD.</description>
		<content:encoded><![CDATA[<p>&#8220;as the number of tests approaches infinity, the probability of correctness approaches 1.&#8221;</p>
<p>I agree.  Tests are not proof but they are a close substitute.  I saw some statistics from large software projects showing that testing even one execution path through a function found 55% of the defects in that function.  Testing two execution paths found 65% of the defects.  It takes surprisingly few test cases (say a dozen good tests) to reach 95%.  These are averages of course, but they point to the power of TDD.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Joel Neely</title>
		<link>http://www.wordyard.com/2006/10/18/dijkstra-humble/#comment-303</link>
		<dc:creator>Joel Neely</dc:creator>
		<pubDate>Tue, 24 Oct 2006 12:37:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.wordyard.com/?p=1147#comment-303</guid>
		<description>Boris,

I'm reminded of the famous remark attributed to Sir Tony Hoare, "I don't know what the programming language of the year 2000 will look like, but I know it will be called Fortran." I used FORTRAN in the 60s. And I am totally confidant that if we could time-transport to 2006 a FORTRAN programmer and an ALGOL programmer of the mid-60s, the ALGOL programmer would be *far* more at home with FORTRAN 2003 than the FORTRAN programmer. Finally, there is much evidence that the relative frequency of use between FORTRAN and ALGOL (in the US!) had more to do with IBM and politics than technical considerations.

One of the papers that helped me understand the POV of Dijkstra, and other significant European computing scientists, is "On the fact that the Atlantic Ocean has two sides". (EWD 611)

I didn't mean at all to deny formal, mathematical methods as an important part of what Dijkstra taught and wrote. Rather, what I had hoped to emphasize is that our field is now coming [back] to some of the core concerns that motivated his work, such as verifiability as a core design concept.

Few (if any) of Dijkstra's writings can be used as quick recipes (and I suspect he would have been horrified at an attempt to do so ;-). I personally found his book, _A_Discipline_of_Programming_ (1976), simultaneously challenging to read and rewarding to contemplate and apply. If I had to suggest concrete applications of his ideas, the first one that comes to mind is, "Never write a line of code without first asking yourself how you'll verify that it is correct." If I could master that one and avoid the creation of unnecessary complexity, then that would be enough for me.</description>
		<content:encoded><![CDATA[<p>Boris,</p>
<p>I&#8217;m reminded of the famous remark attributed to Sir Tony Hoare, &#8220;I don&#8217;t know what the programming language of the year 2000 will look like, but I know it will be called Fortran.&#8221; I used FORTRAN in the 60s. And I am totally confidant that if we could time-transport to 2006 a FORTRAN programmer and an ALGOL programmer of the mid-60s, the ALGOL programmer would be *far* more at home with FORTRAN 2003 than the FORTRAN programmer. Finally, there is much evidence that the relative frequency of use between FORTRAN and ALGOL (in the US!) had more to do with IBM and politics than technical considerations.</p>
<p>One of the papers that helped me understand the POV of Dijkstra, and other significant European computing scientists, is &#8220;On the fact that the Atlantic Ocean has two sides&#8221;. (EWD 611)</p>
<p>I didn&#8217;t mean at all to deny formal, mathematical methods as an important part of what Dijkstra taught and wrote. Rather, what I had hoped to emphasize is that our field is now coming [back] to some of the core concerns that motivated his work, such as verifiability as a core design concept.</p>
<p>Few (if any) of Dijkstra&#8217;s writings can be used as quick recipes (and I suspect he would have been horrified at an attempt to do so ;-). I personally found his book, _A_Discipline_of_Programming_ (1976), simultaneously challenging to read and rewarding to contemplate and apply. If I had to suggest concrete applications of his ideas, the first one that comes to mind is, &#8220;Never write a line of code without first asking yourself how you&#8217;ll verify that it is correct.&#8221; If I could master that one and avoid the creation of unnecessary complexity, then that would be enough for me.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Benn</title>
		<link>http://www.wordyard.com/2006/10/18/dijkstra-humble/#comment-302</link>
		<dc:creator>David Benn</dc:creator>
		<pubDate>Tue, 24 Oct 2006 05:34:39 +0000</pubDate>
		<guid isPermaLink="false">http://www.wordyard.com/?p=1147#comment-302</guid>
		<description>I find this comment from Dijkstra's article to be particularly relevant as a working programmer.

"The competent programmer is fully aware of the strictly limited size of his own skull; therefor he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague."

It reminds me of Richard Gabriel's "Habitability":

"Habitability is the characteristic of source code that enables
programmers, coders, bug-fixers, and people coming to the code
later in its life to understand its construction and intentions and
to change it comfortably and confidently".

(from http://www.dreamsongs.com/Files/PatternsOfSoftware.pdf)

"Clever tricks" are likely to reduce habitability. This is not to say that they are never warranted, just (in production code) not as ends in themselves. To improve type safety or efficiency in some critical piece of code, quite possibly.

I also appreciated the sentiment of this comment from Dijkstra's summary:

"We shall do a much better programming job, provided that we approach the task with a full appreciation of its tremendous difficulty, provided that we stick to modest and elegant programming languages, provided that we respect the intrinsic limitations of the human mind and approach the task as Very Humble Programmers."

More easily said than done of course, and what constitutes a "modest and elegant programming language" is a minefield, but one worth carefully exploring.</description>
		<content:encoded><![CDATA[<p>I find this comment from Dijkstra&#8217;s article to be particularly relevant as a working programmer.</p>
<p>&#8220;The competent programmer is fully aware of the strictly limited size of his own skull; therefor he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague.&#8221;</p>
<p>It reminds me of Richard Gabriel&#8217;s &#8220;Habitability&#8221;:</p>
<p>&#8220;Habitability is the characteristic of source code that enables<br />
programmers, coders, bug-fixers, and people coming to the code<br />
later in its life to understand its construction and intentions and<br />
to change it comfortably and confidently&#8221;.</p>
<p>(from <a href="http://www.dreamsongs.com/Files/PatternsOfSoftware.pdf" rel="nofollow">http://www.dreamsongs.com/Files/PatternsOfSoftware.pdf</a>)</p>
<p>&#8220;Clever tricks&#8221; are likely to reduce habitability. This is not to say that they are never warranted, just (in production code) not as ends in themselves. To improve type safety or efficiency in some critical piece of code, quite possibly.</p>
<p>I also appreciated the sentiment of this comment from Dijkstra&#8217;s summary:</p>
<p>&#8220;We shall do a much better programming job, provided that we approach the task with a full appreciation of its tremendous difficulty, provided that we stick to modest and elegant programming languages, provided that we respect the intrinsic limitations of the human mind and approach the task as Very Humble Programmers.&#8221;</p>
<p>More easily said than done of course, and what constitutes a &#8220;modest and elegant programming language&#8221; is a minefield, but one worth carefully exploring.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Boris</title>
		<link>http://www.wordyard.com/2006/10/18/dijkstra-humble/#comment-301</link>
		<dc:creator>Boris</dc:creator>
		<pubDate>Mon, 23 Oct 2006 12:01:11 +0000</pubDate>
		<guid isPermaLink="false">http://www.wordyard.com/?p=1147#comment-301</guid>
		<description>Joel,

As to Algol I still see it in one raw with other artifacts of computer history that we learned more from their failures then from their real achievments. It was important stage of learning curve but I would not call them achievements by themsleves. Algol, Multix, CORBA etc all failed partially due to rigorous design process which totally neglected "real life" requirements and addressing it as "implementation issues". By the way FORTRAN  was invented before ALGOL and is still in more extensive use. DC-9 flew a lot, ALGOL never really got airborne.

It not easy arguing with you as you don't give any concrete anchor examples as how to implement Dijkstra vision of "intellectually manageable software". You rejected mathematical proof as what Dijkstra meant and you didn't give any example of methodology that would get us close to what Dijkstra would approve.

Actually this is another problem with Dijkstra article. What are concrete steps we must take to improve the current state of affairs.

"...restrict ourselves to the subset of the intellectually manageable programs..." - Too vague advice to be of any usefulness.

"...vital abstraction patterns..." - I answered that before.

Argument three - sounds to me as test-driven (in this case I totally support it) but I am quite not sure that Dijkstra meant it.

"...use better languages/tools.."! -  Tottally agree.  But when Dijkstra tries to be a little more concrete with his "baroque" concept, he looses me.  "baroque languages" (php, perl, python, ruby) are the ones that are winning over disciplined ones (java).

"...The wider applicability of nicely factored solutions..."- C'mon who will argue, but how? How you decide which abstraction is better then other.  Actually overabstraction is more problematic anmongst young programmer then under-abstraction. But this is theme for another article.

Reading it over and over I couldn't find any really useful advice of how to imrove my work starting toady. Can you help me?</description>
		<content:encoded><![CDATA[<p>Joel,</p>
<p>As to Algol I still see it in one raw with other artifacts of computer history that we learned more from their failures then from their real achievments. It was important stage of learning curve but I would not call them achievements by themsleves. Algol, Multix, CORBA etc all failed partially due to rigorous design process which totally neglected &#8220;real life&#8221; requirements and addressing it as &#8220;implementation issues&#8221;. By the way FORTRAN  was invented before ALGOL and is still in more extensive use. DC-9 flew a lot, ALGOL never really got airborne.</p>
<p>It not easy arguing with you as you don&#8217;t give any concrete anchor examples as how to implement Dijkstra vision of &#8220;intellectually manageable software&#8221;. You rejected mathematical proof as what Dijkstra meant and you didn&#8217;t give any example of methodology that would get us close to what Dijkstra would approve.</p>
<p>Actually this is another problem with Dijkstra article. What are concrete steps we must take to improve the current state of affairs.</p>
<p>&#8220;&#8230;restrict ourselves to the subset of the intellectually manageable programs&#8230;&#8221; - Too vague advice to be of any usefulness.</p>
<p>&#8220;&#8230;vital abstraction patterns&#8230;&#8221; - I answered that before.</p>
<p>Argument three - sounds to me as test-driven (in this case I totally support it) but I am quite not sure that Dijkstra meant it.</p>
<p>&#8220;&#8230;use better languages/tools..&#8221;! -  Tottally agree.  But when Dijkstra tries to be a little more concrete with his &#8220;baroque&#8221; concept, he looses me.  &#8220;baroque languages&#8221; (php, perl, python, ruby) are the ones that are winning over disciplined ones (java).</p>
<p>&#8220;&#8230;The wider applicability of nicely factored solutions&#8230;&#8221;- C&#8217;mon who will argue, but how? How you decide which abstraction is better then other.  Actually overabstraction is more problematic anmongst young programmer then under-abstraction. But this is theme for another article.</p>
<p>Reading it over and over I couldn&#8217;t find any really useful advice of how to imrove my work starting toady. Can you help me?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Joel Neely</title>
		<link>http://www.wordyard.com/2006/10/18/dijkstra-humble/#comment-300</link>
		<dc:creator>Joel Neely</dc:creator>
		<pubDate>Sun, 22 Oct 2006 21:55:07 +0000</pubDate>
		<guid isPermaLink="false">http://www.wordyard.com/?p=1147#comment-300</guid>
		<description>(So much for my proofreading skills! The second sentence should have begun "I'm sympathetic..." My apologies for the error.)</description>
		<content:encoded><![CDATA[<p>(So much for my proofreading skills! The second sentence should have begun &#8220;I&#8217;m sympathetic&#8230;&#8221; My apologies for the error.)</p>
]]></content:encoded>
	</item>
</channel>
</rss>
