<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">

<channel>
	<title>Bertrand Meyer's technology+ blog</title>
	
	<link>http://bertrandmeyer.com</link>
	<description>Software engineering, programming methodology, languages, verification, general technology, publication culture, and more</description>
	<lastBuildDate>Sun, 19 May 2013 19:12:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/BertrandMeyersTechnologyBlog" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="bertrandmeyerstechnologyblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Reading notes: misclassified bugs</title>
		<link>http://bertrandmeyer.com/2013/05/19/reading-notes-misclassified-bugs/</link>
		<comments>http://bertrandmeyer.com/2013/05/19/reading-notes-misclassified-bugs/#comments</comments>
		<pubDate>Sun, 19 May 2013 19:12:43 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[Empirical Software Engineering]]></category>
		<category><![CDATA[Publications]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software verification]]></category>
		<category><![CDATA[Bugs]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3546</guid>
		<description><![CDATA[&#160; (Please note the general disclaimer [1].) How Misclassification Impacts Bug Prediction [2], an article to be presented on Thursday at ICSE, is the archetype of today&#8217;s successful empirical software engineering research, deriving significant results from the mining of publicly available software project repositories — in this case Tomcat5 and three others from Apache, as well [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>(Please note the general disclaimer [1].)</p>
<p><em>How Misclassification Impacts Bug Prediction</em> [2], an article to be presented on Thursday at ICSE, is the archetype of today&#8217;s successful empirical software engineering research, deriving significant results from the mining of publicly available software project repositories — in this case Tomcat5 and three others from Apache, as well as Rhino from Mozilla. The results are in some sense meta-results, because many studies have already mined the bug records of such repositories to draw general lessons about bugs in software development; what Herzig, Just and Zeller now tell us is that the mined data is highly questionable: many problems classified as bugs are not bugs.</p>
<p>The most striking results (announced in a style a bit stentorian to my taste, but indeed striking) are that: every third bug report does not describe a bug, but a request for a new feature, an improvement, better documentation or tests, code cleanup or refactoring; and that out of five program files marked as defective, two do not in fact contain any bug.</p>
<p>These are both <em>false positive</em> results. The repositories signal very few misclassifications the other way: only a small subset of enhancement and improvement requests (around 5%) should have been classified as bugs, and even fewer faulty files are missed (8%, but in fact less than 1% if one excludes an outlier, tomcat5 with 38%, a discrepancy that the paper does not discuss).</p>
<p>The authors have a field day, in the light of this analysis, of questioning the validity of the many studies in recent years — including some, courageously cited, by Zeller himself and coauthors — that start from bug repositories to derive general lessons about bugs and their properties.</p>
<p>The methodology is interesting if a bit scary. The authors (actually, just the two non-tenured authors, probably just a coincidence) analyzed 7401 issue reports manually; more precisely, one of them analyzed all of them and the second one took a second look at the reports that came out from the first step as misclassified, without knowing what the proposed reclassification was, then the results were merged. At 4 minutes per report the effort took 90 working days. I sympathize, but I wonder what the rules are in Saarland for experiments involving living beings, particularly graduate students.</p>
<p>Precise criteria were used for the reclassification; for example a report describes a bug, in the authors&#8217; view, if it mentions a null pointer exception (I will skip the opportunity of a pitch for Eiffel&#8217;s void safety mechanism), says that the code has to be corrected to fix the semantics, or if there is a &#8220;memory issue&#8221; or infinite loop. These criteria are reasonable if a bit puzzling (why null pointer exceptions and not other crashes such as arithmetic overflows?); but more worryingly there is no justification for them. I wonder  how much of the huge discrepancy found by the authors — a third or reported bugs are not bugs, and 40% of supposedly defective program files are not defective — can be simply explained by different classification criteria applied by the software projects under examination. The authors give no indication that they interacted with the people in charge of these projects. To me this is the major question hovering over this paper and its spectacular results. If you are in the room and get the chance, don&#8217;t hesitate to ask this question on my behalf or yours!</p>
<p>Another obvious question is how much the results depend on the five projects selected. If there ever was room for replicating a study (a practice whose rarity in software engineering we lament, but whose growth prospects are limited by the near-impossibility of convincing selective software engineering venues to publish confirmatory empirical studies), this would be it. In particular it would be good to see some of the results for commercial products.</p>
<p>This (impressive) paper will call everyone&#8217;s attention to the critical problem of data quality in empirical studies. It is very professionally prepared, and could, in addition to its specific contributions, serve as a guide on how to get an empirical software engineering paper accepted at ICSE: take a critical look at an important research area; study it from a viewpoint that has not been considered much so far; perform an extensive study, with reasonable methodological assumptions; derive a couple of striking results, making sure they are both visibly stated and backed by the evidence; and include exactly one boxplot.</p>
<h4>Notes and references</h4>
<p>[1] This article review is part of the &#8220;Reading Notes&#8221; series. General disclaimer <a style="color: #0000ff; text-decoration: underline;" href="http://bertrandmeyer.com/2013/05/17/new-series-reading-notes/">here</a>.</p>
<p>[2] Kim Herzig, Sascha Just and Andreas Zeller: <em>It’s not a Bug, it’s a Feature: How Misclassification Impacts Bug Prediction</em>, in ICSE 2013, available <a href="http://www.st.cs.uni-saarland.de/softevo/bugclassify/paper/icse2013-bugclassify.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>. According to the ICSE program the paper will be presented on May 23 in the Bug Prediction session, 16 to 17:30.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/05/19/reading-notes-misclassified-bugs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reading notes: the design of bug fixes</title>
		<link>http://bertrandmeyer.com/2013/05/18/reading-notes-the-design-of-bug-fixes/</link>
		<comments>http://bertrandmeyer.com/2013/05/18/reading-notes-the-design-of-bug-fixes/#comments</comments>
		<pubDate>Sat, 18 May 2013 19:28:29 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[Empirical Software Engineering]]></category>
		<category><![CDATA[Reading notes]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software verification]]></category>
		<category><![CDATA[Software design]]></category>
		<category><![CDATA[Bugs]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3453</guid>
		<description><![CDATA[&#160; To inaugurate the &#8220;Reading Notes&#8221; series [1] I will take articles from the forthcoming International Conference on Software Engineering. Since I am not going to ICSE this year I am instead spending a little time browsing through the papers, obligingly available on the conference site. I&#8217;ll try whenever possible to describe a paper before [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>To inaugurate the &#8220;Reading Notes&#8221; series [1] I will take articles from the forthcoming International Conference on Software Engineering. Since I am not going to ICSE this year I am instead spending a little time browsing through the papers, obligingly available on the conference site. I&#8217;ll try whenever possible to describe a paper before it is presented at the conference, to alert readers to interesting sessions. I hope in July and August to be able to do the same for some of the papers to be presented at ESEC/FSE [2].</p>
<p>Please note the general disclaimer [1].</p>
<p><em>The Design of Bug Fixes</em> [3] caught my attention partly for selfish reasons, since we are working, through the AutoFix project [3], on automatic bug fixing, but also out of sheer interest and because I have seen previous work by some of the authors. There have been article about bug patterns before, but not so much is known with credible empirical evidence about bug <em>fixes</em> (corrections of faults). When a programmer encounters a fault, what strategies does he use to correct it? Does he always produce the best fix he can, and if so, why not? What is the influence of the project phase on such decisions (e.g. will you fix a bug the same way early in the process and close to shipping)? These are some of the questions addressed by the paper.</p>
<p>The most interesting concrete result is a list of properties of bug fixes, classified along two criteria: <em>nature</em> of a fix (the paper calls it &#8220;design space&#8221;), and <em>reasoning</em> behind the choice of a fix. Here are a few examples of the &#8220;nature&#8221; classification:</p>
<ul>
<li>Data propagation: the bug arises in a component, fix it in another, for example a library class.</li>
<li>More or less accuracy: are we fixing the symptom or the cause?</li>
<li>Behavioral alternatives: rather than directly correcting the reported problem, change the user-experienced behavior (evoking the famous quip that &#8220;it&#8217;s not a bug, it&#8217;s a feature&#8221;). The authors were surprised to see that developers (belying their geek image) seem to devote a lot of effort trying to understand how users actually use the products, but also found that even so developers do not necessarily gain a solid, objective understanding of these usage patterns. It would be interesting to know if the picture is different for traditional locally-installed products and for cloud-based offerings, since in the latter case it is possible to gather more complete, accurate and timely usage data.</li>
</ul>
<p>On the &#8220;reasoning&#8221; side, the issue is why and how programmers decide to adopt a particular approach. For example, bug fixes tend to be more audacious (implying redesign if appropriate) at the beginning of a project, and more conservative as delivery nears and everyone is scared of breaking something. Another object of the study is how deeply developers understand the cause rather than just the symptom; the paper reports that 18% &#8220;<em>did not have time to figure out why the bug occurred</em>&#8220;. Surprising or not, I don&#8217;t know, but scary! Yet another dimension is consistency: there is a tension between providing what might ideally be the best fix and remaining consistent with the design decisions that underlie a software system throughout its architecture.</p>
<p>I was more impressed by the individual categories of the classification than by that classification as a whole; some of the categories appear redundant (&#8220;<em>interface breakage</em>&#8220;, &#8220;<em>data propagation</em>&#8221; and &#8220;<em>internal vs external</em>&#8220;, for example, seem to be pretty much the same; ditto for &#8220;<em>cause understanding</em>&#8221; and &#8220;<em>accuracy</em>&#8220;). On the other hand the paper does not explicitly claim that the categories are orthogonal. If they turn this conference presentation into a journal article I am pretty sure they will rework the classification and make it more robust. It does not matter that it is a bit shaky at the moment since the main insights are in the individual kinds of fix and fix-reasoning uncovered by the study.</p>
<p>The authors are from Microsoft Research (one of them was visiting faculty) and interviewed numerous programmers from various Microsoft product groups to find out how they fix bugs.</p>
<p>The paper is nicely written and reads easily. It includes some audacious syntax, as in &#8220;<em>this dimension&#8221; </em>[internal vs external]<em> &#8220;describes how much internal code is changed versus external code is changed as part of a fix</em>&#8220;. It has a discreet amount of humor, some of which may escape non-US readers; for example the authors explain that when approaching programmers out of the blue for the survey they tried to reassure them through the words &#8220;<em>we are from Microsoft Research, and we are here to help</em>&#8220;, a wry reference to the celebrated comment by Ronald Reagan (or his speechwriter) that the most dangerous words in the English language are &#8220;<em>I am from the government, and I am here to help</em>&#8220;. To my taste the authors include too many details about the data collection process; I would have preferred the space to be used for a more detailed discussion of the findings on bug fixes. On the other hand we all know that papers to selective conferences are written for referees, not readers, and this amount of methodological detail was probably the minimum needed to get past the reviewers (by avoiding the typical criticism, for empirical software engineering research, that the sample is too small, the questions biased etc.). Thankfully, however, there is no pedantic discussion of statistical significance; the authors openly present the results as dependent on the particular population surveyed and on the interview technique. Still, these results seem generalizable in their basic form to a large subset of the industry. I hope their publication will spawn more detailed studies.</p>
<p>According to the ICSE program the paper will be presented on May 23 in the Debugging session, 13:30 to 15:30.</p>
<h4>Notes and references</h4>
<p>[1] This article review is part of the &#8220;Reading Notes&#8221; series. General disclaimer <a style="color: #0000ff; text-decoration: underline;" href="http://bertrandmeyer.com/2013/05/17/new-series-reading-notes/">here</a>.</p>
<p>[2] European Software Engineering Conference 2013, Saint Petersburg, Russia, 18-24 August, see <a href="http://esec-fse.inf.ethz.ch/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[3] Emerson Murphy-Hill, Thomas Zimmerman, Christian Bird and Nachiappan Nagapan: <em>The Design of Bug Fixes</em>, in ICSE 2013, available <a href="http://people.engr.ncsu.edu/ermurph3/papers/icse13a.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[4] AutoFix project at ETH Zurich, see project page <a href="http://se.inf.ethz.ch/research/autofix/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[5] Ronald Reagan speech extract <a href="http://www.youtube.com/watch?v=xhYJS80MgYA" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">on YouTube</span></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/05/18/reading-notes-the-design-of-bug-fixes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New series: Reading Notes</title>
		<link>http://bertrandmeyer.com/2013/05/17/new-series-reading-notes/</link>
		<comments>http://bertrandmeyer.com/2013/05/17/new-series-reading-notes/#comments</comments>
		<pubDate>Fri, 17 May 2013 16:37:47 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Reading notes]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3543</guid>
		<description><![CDATA[&#160; It is natural for any researcher to want to talk about his and his colleagues&#8217; work, and I have often used this blog to mention results, events and publications in which I am involved at ETH, ITMO, Eiffel Software, Informatics Europe, ACM etc. But it is also important to report about interesting stuff from [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;
<p>It is natural for any researcher to want to talk about his and his colleagues&#8217; work, and I have often used this blog to mention results, events and publications in which I am involved at ETH, ITMO, Eiffel Software, Informatics Europe, ACM etc. But it is also important to report about interesting stuff from remote quarters. So I am starting a new series, &#8220;Reading Notes&#8221;, describing articles that I encounter and that I feel may be worth bringing to the limelight. Although there have already been a few articles of that kind, it occurred to me that readers may enjoy more frequent discussions of what <em>others</em> are doing.</p>
<p>Hence the new series of occasional articles, which I am starting now: <strong>Reading Notes</strong>. Articles belonging to the series will be signaled clearly.</p>
<p>I express my opinions candidly so it is useful to include a general disclaimer, which you may consider automatically prefixed to all articles in the series. If I see a bad paper I will not waste my time and yours by writing an entry to blast it. As a corollary, if I do discuss a paper or book in the series it invariably means that I learned something from it and recommend reading it. Appreciation does not have to mean genuflection; there are often reservations to be made and always questions to be asked. But any critical comment is meant for enlightenment, not disparagement.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/05/17/new-series-reading-notes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Adult entertainment</title>
		<link>http://bertrandmeyer.com/2013/05/17/adult-entertainment/</link>
		<comments>http://bertrandmeyer.com/2013/05/17/adult-entertainment/#comments</comments>
		<pubDate>Fri, 17 May 2013 14:14:54 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Eiffel]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[User interface design]]></category>
		<category><![CDATA[Writing and style]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3448</guid>
		<description><![CDATA[&#160; I should occasionally present examples of the strange reasons people sometimes invoke for not using Eiffel. In an earlier article [1] I gave the basic idea common to all these reasons, but there are many variants, in the general style &#8220;I am responsible for IT policy and purchases for IBM, the US Department of [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>I should occasionally present examples of the strange reasons people sometimes invoke for not using Eiffel. In an earlier article [1] I gave the basic idea common to all these reasons, but there are many variants, in the general style &#8220;<em>I am responsible for IT policy and purchases for IBM, the US Department of Defense and Nikke, and was about to sign the PO for the triple site license when I noticed that an article about Eiffel was published in 1997. How dare you! I had a tooth removed that year and it hurt a lot. I would really have liked to use Eiffel but you just made it impossible</em>&#8220;.</p>
<p>While going through old email I found one of these carefully motivated strategic policy decisions: a missing &#8220;L&#8221; in a class name. Below is, verbatim [2], a message posted on the EiffelStudio developers list in 2006, and my answer. Also provides an interesting glimpse of what supposedly grown-up people find it worthwhile to spend their days on.</p>
<h3>Original message</h3>
<p><font face="arial" color="#0004000">From: es-devel-bounces@origo.ethz.ch [mailto:es-devel-bounces@origo.ethz.ch] On Behalf Of Peter Gummer<br />
Sent: Tuesday, 29 August, 2006 14:01<br />
To: es-devel@origo.ethz.ch<br />
Subject: [Es-devel] Misspelling as a naming convention<br />
Today I submitted a problem report that one of the EiffelVision classes has misspelt &#8220;<em>tabbable</em>&#8221; as &#8220;<em>tabable</em>&#8220;.</p>
<p>From: es-devel-bounces@origo.ethz.ch [mailto:es-devel-bounces@origo.ethz.ch] On Behalf Of Peter GummerManu replied that the EiffelVision naming convention is that class or feature names ending in &#8220;<em>able</em>&#8221; will not double the preceding consonant, regardless of whether this results in wrong spelling.</p>
<p>Looking at the latest Es-changes Digest email, I see various changes implementing this naming convention. For example, the comment for revision 63043 is, &#8220;<em>Changed from controllable to controlable to meet naming convention</em>&#8216;.</p>
<p>This is lunacy! &#8220;<em>Controlable</em>&#8221; (implying the existence of some verb &#8220;<em>to controle</em>&#8220;) might look quite ok to French eyes, but it looks utterly unprofessional to me. It does have a sort of Chaucerian, Middle English, pre-Gutenberg charm I suppose. Is this part of a plot for a Seconde Invasion Normande of the Langue Anglaise?</p>
<p>We are about to embark on some GUI work. Although we are probably going to use .NET WinForms, EiffelVision was a possible choice. But bad spelling puts me in a bad mood. I&#8217;d be very reluctant to work with EiffelVision because of this ridiculous naming convention.</p>
<p>- Peter Gummer<br />
</font></p>
<h3><font color="#a00000">Answer</font></h3>
<p><font face="arial">From: Bertrand Meyer<br />
Sent: Wednesday, 30 August, 2006 00:52<br />
To: Peter Gummer<br />
Cc: es-devel@origo.ethz.ch<br />
Subject: Re: [Es-devel] Misspelling as a naming convention</p>
<p>This has nothing to do with French. If anything, French practices the doubling of consonants before a suffix <em>more</em> than English does; an example (extracted from reports of users&#8217; attitudes towards EiffelVision) is English &#8220;<em>passionate</em>&#8220;, French &#8220;<em>passionné</em>&#8220;. For the record, there&#8217;s no particular French dominance in the Eiffel development team, either at Eiffel Software or elsewhere. The recent discussion on EiffelVision&#8217;s &#8220;-<em>able</em>&#8221; class names involved one native English speaker out of three people, invalidating at the 33% level Kristen Nygaard&#8217;s observation that the language of science is English as spoken by foreigners.</p>
<p>The problem in English is that the rules defining which consonants should be doubled before a suffix such as &#8220;<em>able</em>&#8221; are not obvious. See for example <a href="http://www.arts.uottawa.ca/writcent/hypergrammar/spdoubl.html" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">this page</span></a> from the University of Ottawa:</p>
<blockquote><p><em>Double the final consonant before a suffix beginning with a vowel if both of the following are true: the consonant ends a stressed syllable or a one-syllable word, and the consonant is preceded by a single vowel.</em></p></blockquote>
<p>Now close your eyes and repeat this from memory. I am sure that won&#8217;t be hard because you knew the rule all along, but can we expect this from all programmers using EiffelVision?</p>
<p>Another Web <a href="http://classweb.gmu.edu/llmiller/SPELL/doubleconsonants.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">page</span></a> , from a school in Oxfordshire, England, says:</p>
<blockquote><p><em>Rule: Double the last consonant when adding a vowel suffix to a single syllable word ending in one vowel and one consonant.</em></p></blockquote>
<p>Note that this is not quite the same rule; it doesn&#8217;t cover multi-syllable words with the stress (tonic accent) on the last syllable; and it would suggest &#8220;<em>GROUPPABLE</em>&#8221; (&#8220;<em>group</em>&#8221; is a one-syllable word ending in one vowel and one consonant), whereas the first rule correctly prescribes &#8220;<em>GROUPABLE</em>&#8220;. But apparently this is what is being taught to Oxfordshire pupils, whom we should stand ready to welcome as Eiffel programmers in a few years.</p>
<p>Both rules yield &#8220;<em>TRANSFERABLE</em>&#8221; because the stress is on the first syllable of &#8220;<em>transfer</em>&#8220;. But various dictionaries we have consulted also list &#8220;<em>TRANSFERRABLE</em>&#8221; and &#8220;<em>TRANSFERRIBLE</em>&#8220;.</p>
<p>As another example consider &#8220;<em>FORMATING</em>&#8220;. Both rules suggest a single &#8220;<em>t</em>&#8220;. The Solaris spell checker indeed rejects the form with two &#8220;<em>t</em>&#8220;s and accepts the version with one; but &#8212; a case of Unix-Windows incompatibility that seems so far to have escaped the attention of textbook authors &#8212; Microsoft Word does the reverse! In fact in default mode if you type &#8220;<em>FORMATING</em>&#8221; it silently corrects it to &#8220;<em>FORMATTING</em>&#8220;. It&#8217;s interesting in this example to note a change of tonic accent between the original and derived words: &#8220;<em>fórmat</em>&#8221; (both noun and verb) but &#8220;<em>formáting</em>&#8220;. Maybe the Word convention follows the &#8220;Ottawa&#8221; rule but by considering the stress in the derivation rather than the root? There might be a master&#8217;s thesis topic in this somewhere.</p>
<p>Both rules imply &#8220;<em>MIXXABLE</em>&#8221; and &#8220;<em>FIXXABLE</em>&#8220;, but we haven&#8217;t found a dictionary that accepts either of these forms.</p>
<p>Such rules cannot cover all cases anyway (they are &#8220;<em>UNFATHOMMABLE</em>&#8220;) because &#8220;<em>consonant</em>&#8221; vs &#8220;<em>vowel</em>&#8221; is a lexical distinction that doesn&#8217;t reflect the subtleties of English pronunciation. For example either rule would lead to &#8220;<em>DRAWWABLE</em>&#8221; because the word &#8220;<em>draw</em>&#8221; ends with &#8220;<em>w</em>&#8220;, a letter that you&#8217;ll find everywhere characterized as a consonant. Lexically it is a consonant, but phonetically it is sometimes a consonant and sometimes not, in particular at the end of a word. In &#8220;<em>Wow</em>&#8220;, the first &#8220;<em>w</em>&#8221; is a consonant, but not the second one. A valid rule would need to take into account not only spelling but also pronunciation. This is probably the reason behind the examples involving words ending in &#8220;<em>x</em>&#8220;: phonetically &#8220;<em>X</em>&#8221; can be considered two consonants, &#8220;<em>KS</em>&#8220;. But then the rule becomes more tricky, forcing the inquirer, who is understandably getting quite &#8220;<em>PERPLEXXED</em>&#8221; at this stage, to combine lexical and phonetic reasoning in appropriate doses.</p>
<p>No wonder then a <a href="http://www.eticapress.com/freelances/guides/guide_to_written_english.html" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">page</span></a> from the Oxford Dictionaries site states:</p>
<blockquote><p><em>One of the most common types of spelling error is a mistake over whether a word is spelled with a double or a single consonant.</em></p></blockquote>
<p>and goes on to list many examples.</p>
<p>You can find a list of of words ending in &#8220;<em>able</em>&#8221; <a href="http://www.morewords.com/ends-with/able/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a> . Here are a few cases involving derivations from a word ending with &#8220;<em>p</em>&#8220;:</p>
<blockquote><p><strong>Single consonant</strong><br />
<em>DEVELOPABLE</em><br />
<em> GRASPABLE</em><br />
<em> GROUPABLE</em><br />
<em> HELPABLE</em><br />
<em> KEEPABLE</em><br />
<em> REAPABLE</em><br />
<em> RECOUPABLE</em></p>
<p><strong>Doubled consonant</strong><br />
<em>DIPPABLE</em><br />
<em> DROPPABLE (but: DRAPABLE)</em><br />
<em> FLOPPABLE</em><br />
<em> MAPPABLE</em><br />
<em> RECAPPABLE (but: CAPABLE)</em><br />
<em> RIPPABLE (but: ROPABLE)</em><br />
<em> SHIPPABLE</em><br />
<em> SKIPPABLE</em><br />
<em> STOPPABLE</em><br />
<em> STRIPPABLE</em><br />
<em> TIPPABLE</em></p></blockquote>
<p>There are also differences between British and American usage.</p>
<p>True, the &#8220;Ottawa&#8221; rule could be amended to take into account words ending in &#8220;<em>w</em>&#8220;, &#8220;<em>x</em>&#8220;, &#8220;<em>h</em>&#8221; and a few other letters, and come reasonably close to matching dictionary practice. But should programmers have to remember all this? Will they?</p>
<p>Since we are dealing in part with artificial words, there is also some doubt as to what constitutes a &#8220;<em>misspelt</em>&#8221; word as you call it (or a &#8220;<em>misspelled</em>&#8221; one as Eiffel conventions &#8212; based on American English &#8212; would have it). Applying the rule yields &#8220;<em>MAPPABLE</em>&#8220;, which is indeed found in dictionaries. But in the world of graphics we have the term &#8220;<em>bitmap</em>&#8220;, where the stress is on the first syllable. The rule then yields &#8220;<em>BITMAPABLE</em>&#8220;. That&#8217;s suspicious but &#8220;<em>GOOGLABLE</em>&#8220;; a search produces 31 &#8220;<em>BITMAPPABLE</em>&#8221; and two &#8220;<em>BITMAPABLE</em>&#8220;, one of which qualified by &#8220;(Is that a word?)&#8221;. So either EiffelVision uses something that looks inconsistent (&#8220;<em>BITMAPABLE</em>&#8221; vs &#8220;<em>MAPPABLE</em>&#8220;) but follows the rule; or we decide for consistency.</p>
<p>In our view this case can be generalized. The best convention is the one that doesn&#8217;t require programmers to remember delicate and sometimes fuzzy rules of English spelling, but standardizes on a naming convention that will be as easy to remember as possible. To achieve this goal the key is consistency. A simple rule for EiffelVision classes is:</p>
<blockquote>
<ul>
<li>For an &#8220;-<em>able</em>&#8221; name derived from a word ending with &#8220;<em>e</em>&#8220;, drop the &#8220;<em>e</em>&#8220;: <em>REUSABLE</em>. There seems to be no case of words ending with another vowel.</li>
<li>If the name is derived from a word ending with a consonant, just add &#8220;<em>able</em>&#8220;: <em>CONTROLABLE</em>, <em>TOOLTIPABLE</em>, <em>GROUPABLE</em>.</li>
</ul>
</blockquote>
<p>Some of these might look strange the first couple of times but from then on you will remember the convention.</p>
<p>While we are flattered that EiffelVision should be treated as literature, we must admit that there are better recommendations for beach reading, and that Eiffel is not English (or French).</p>
<p>The above rule is just a convention and someone may have a better suggestion.</p>
<p>With best regards,</p>
<p>&#8211; Bertrand Meyer, Ian King, Emmanuel Stapf<br />
</font></p>
<h4>Reference and note</h4>
<p>[1] <em>Habit, happiness and programming languages</em>, article in this blog, 22 October 2012, see <a href="http://bertrandmeyer.com/2012/10/22/habit-happiness-and-mainstream-programming-languages/"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[2] I checked the URLs, found that two pages have disappeared since 2006, and replaced them with others having the same content. The formatting (fonts, some of the indentation) is added. Peter Gummer asked me to make sure that his name always appears with two &#8220;<em>m</em>&#8220;.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/05/17/adult-entertainment/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Apocalypse no! (Part 2)</title>
		<link>http://bertrandmeyer.com/2013/05/16/apocalypse-no-part-2/</link>
		<comments>http://bertrandmeyer.com/2013/05/16/apocalypse-no-part-2/#comments</comments>
		<pubDate>Thu, 16 May 2013 06:24:48 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[General technology]]></category>
		<category><![CDATA[History]]></category>
		<category><![CDATA[Software engineering]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3394</guid>
		<description><![CDATA[&#160; (Revised from an article originally published in the CACM blog. Part 2 of a two-part article.) Part 1 of this article (to be found here, please read it first) made fun of authors who claim that software engineering is a total failure — and, like everyone else, benefit from powerful software at every step [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p><a href="http://bertrandmeyer.com/2009/08/03/long-and-clear/recycled1/" rel="attachment wp-att-155"><img class="alignleft size-thumbnail wp-image-155" style="margin-left: 2px; margin-right: 2px;" title="Recycled" src="http://bertrandmeyer.com/wp-content/upLoads/recycled1-150x138.jpg" alt="Recycled" width="33" height="31" /></a>(<em>Revised from an article originally published in the CACM blog. Part 2 of a two-part article</em>.)</p>
<p>Part 1 of this article (to be found <a href="http://bertrandmeyer.com/2013/03/12/apocalypse-no-part-1/"><span style="color: #0000ff; text-decoration: underline;">here</span></a>, please read it first) made fun of authors who claim that software engineering is a total failure — and, like everyone else, benefit from powerful software at every step of their daily lives.</p>
<p>Catastrophism in talking about software has a long history. Software engineering started around 1966 [1] with the recognition of a &#8220;<em>software crisis</em>&#8220;. For many years it was customary to start any article on any software topic by a lament about the terrible situation of the field, leaving in your reader’s mind the implicit suggestion that the solution to the &#8220;crisis&#8221; lay in your article&#8217;s little language or tool.</p>
<p>After the field had matured, this lugubrious style went out of fashion. In fact, it is hard to sustain: in a world where every device we use, every move we make and every service we receive is powered by software, it seems a bit silly to claim that in software development everyone is wrong and everything is broken.</p>
<p>The apocalyptic mode has, however, made a comeback of late in the agile literature, which is fond in particular of citing the so-called &#8220;Chaos&#8221; reports. These reports, emanating from Standish, a consulting firm, purport to show that a large percentage of projects either do not produce anything or do not meet their objectives. It was fashionable to cite Standish (I even included a citation in a 2003 article), until the methodology and the results were thoroughly debunked starting in 2006 [2, 3, 4]. The Chaos findings are not replicated by other studies, and the data is not available to the public. Capers Jones, for one, publishes his sources and has much more credible results.</p>
<p>Yet the Chaos results continue to be reverently cited as justification for agile processes, including, at length, in the most recent book by the creators of Scrum [5].</p>
<p>Not long ago, I raised the issue with a well-known software engineering author who was using the Standish findings in a talk. Wasn&#8217;t he aware of the shakiness of these results? His answer was that we don&#8217;t have anything better. It did not sound like the kind of justification we should use in a mature discipline. Either the results are sound, or we should not rely on them.</p>
<p>Software engineering is hard enough and faces enough obstacles, so obvious to everyone in the industry and to every user of software products, that we do not need to conjure up imaginary scandals and paint a picture of general desolation and universal (except for us, that is) incompetence. Take Schwaber and Sutherland, in their introductory chapter:</p>
<blockquote><p><em>You have been ill served by the software industry for 40 years—not purposely, but inextricably. We want to restore the partnership.</em></p></blockquote>
<p>No less!</p>
<p>Pretending that the whole field is a disaster and no one else as a clue may be a good way to attract attention (for a while), but it is infantile as well as dishonest. Such gross exaggerations discredit their authors, and beyond them, the ideas they promote, good ones included.</p>
<p>As software engineers, we can in fact feel some pride when we look at the world around us and see how much our profession has contributed to it. Not just the profession as a whole, but, crucially, software engineering research: advances in programming methodology, software architecture, programming languages, specification techniques, software tools, user interfaces, formal modeling of software concepts, process management, empirical analysis and human aspects of computing have, step after step, belied the dismal picture that may have been painfully accurate in the early days.</p>
<p>Yes, challenges and unsolved problems face us at every corner of software engineering. Yes, we are still at the beginning, and on many topics we do not even know how to proceed. Yes, there are lots of things to criticize in current practices (and I am not the least vocal of the critics, including in this blog). But we need a sense of measure. Software engineering has made tremendous progress over the last five decades; neither the magnitude of the remaining problems nor the urge to sell one&#8217;s products and services justifies slandering the rest of the discipline.</p>
<h4>Notes and references</h4>
<p>[1] Not in 1968 with the NATO conference, as everyone seems to believe. See an earlier <a href="http://bertrandmeyer.com/2013/04/04/the-origin-of-software-engineering/"><span style="color: #0000ff; text-decoration: underline;">article</span></a> in this blog.</p>
<p>[2] Robert L. Glass: <em>The Standish report: does it really describe a software crisis?</em>, in <em>Communications of the ACM</em>, vol. 49, no. 8, pages 15-16, August 2006; see <a href="http://dl.acm.org/citation.cfm?id=1145301" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[3] J. Laurens Eveleens and Chris Verhoef: <em>The Rise and Fall of the Chaos Report Figures</em>, in IEEE <em>Software</em>, vol. 27, no. 1, Jan-Feb 2010, pages 30-36; see <a href="http://www.cs.vu.nl/%7Ex/chaos/chaos.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[4] S. Aidane, <em>The &#8220;Chaos Report&#8221; Myth Busters</em>, 26 March 2010, see <a href="http://www.guerrillaprojectmanagement.com/the-chaos-report-myth-busters" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[5] Ken Schwaber and Jeff Sutherland: <em>Software in 30 Days: How Agile Managers Beat the Odds, Delight Their Customers, And Leave Competitors In the Dust</em>, Wiley, 2012.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/05/16/apocalypse-no-part-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Specify less to prove more</title>
		<link>http://bertrandmeyer.com/2013/05/15/specify-less-to-prove-more/</link>
		<comments>http://bertrandmeyer.com/2013/05/15/specify-less-to-prove-more/#comments</comments>
		<pubDate>Wed, 15 May 2013 13:37:08 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[Formal methods and proofs]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software verification]]></category>
		<category><![CDATA[VAMOC]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3346</guid>
		<description><![CDATA[Software verification is progressing slowly but surely. Much of that progress is incremental: making the fundamental results applicable to real programs as they are built every day by programmers working in standard circumstances. A key condition is to minimize the amount of annotations that they have to provide. The article mentioned in my previous post, [...]]]></description>
			<content:encoded><![CDATA[<p>Software verification is progressing slowly but surely. Much of that progress is incremental: making the fundamental results applicable to real programs as they are built every day by programmers working in standard circumstances. A key condition is to minimize the amount of annotations that they have to provide.</p>
<p>The article mentioned in my previous post, “<em><em>Program Checking With Less Hassle</em></em>” [1], to be presented at VSTTE in San Francisco on Friday by its lead author, <a href="http://se.inf.ethz.ch/people/tschannen/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">Julian Tschannen</span></a>, introduces several interesting contributions in this direction. One of the surprising conclusions is that sometimes it pays to specify less. That goes against intuition: usually, the more specification information (correctness annotations) you provide the more you help the prover. But in fact partial specifications can hurt rather than help. Consider for example a <em>swap</em> routine with a partial specification, which actually stands in the way of a proof. If modularity is not a concern, for example if the routine is part of the code being verified rather than of a library, it may be more effective to ignore the specification and use the routine&#8217;s implementation. This is particularly appropriate for small<em> “</em>helper<em>”</em> routines such as <em>the swap</em> example.</p>
<p>This <strong>inlining</strong> technique is applicable in other cases, for example to make up for a missing precondition: assume that a helper routine will only work for <em>x</em> &gt; 0 but does not state that precondition, or maybe states only the weaker one<em> x</em> ≥ 0 ; in the code, however, it is only called with positive arguments. If we try to verify the code modularly we will fail, as indeed we should since the routine is incorrect as a general-purpose primitive. But within the context of the code there is nothing wrong with it. Forgetting the contract of the routine if any, and instead using its actual implementation, we may be able to show that everything is fine.</p>
<p>Another component of the approach is to fill in preconditions that programmers have omitted because they are somehow obvious to them. For example it is tempting and common to write just <em>a</em> [1] &gt; 0 rather than <em>a</em> /= <strong>Void and then</strong> <em>a</em> [1] &gt; 0 for a detachable array<em> a</em>. The tool takes care of  interpreting the simpler precondition as the more complete one.</p>
<p>The resulting “two-step verification”, integrated into the AutoProof verification tool for Eiffel, should turn out to be an important simplification towards the goal of “Verification As a Matter Of Course” [2].</p>
<h4>References</h4>
<p>[1] Julian Tschannen, Carlo A. Furia, Martin Nordio and Bertrand Meyer:<em> <em>Program Checking With Less Hassle</em></em>, in VSTTE 2013<em>, </em>Springer LNCS, to appear, draft available <a href="http://se.ethz.ch/~meyer/publications/proofs/two_step.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;" >here</span></a>; presentation on May 17 in the 15:30-16:30  <a href="https://sites.google.com/site/vstte2013/home/program" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">session</span></a>.</p>
<p>[2] <em>Verification As a Matter Of Course</em>, article in this blog, 29 March 2010, see <a style="color: #0000ff; text-decoration: underline;" href="http://bertrandmeyer.com/2010/03/29/verification-as-a-matter-of-course/">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/05/15/specify-less-to-prove-more/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Presentations at ICSE and VSTTE</title>
		<link>http://bertrandmeyer.com/2013/05/14/presentations-at-icse-and-vstte/</link>
		<comments>http://bertrandmeyer.com/2013/05/14/presentations-at-icse-and-vstte/#comments</comments>
		<pubDate>Tue, 14 May 2013 17:44:28 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[Design by Contract]]></category>
		<category><![CDATA[Formal methods and proofs]]></category>
		<category><![CDATA[Object technology]]></category>
		<category><![CDATA[Paper announcement]]></category>
		<category><![CDATA[Programming techniques]]></category>
		<category><![CDATA[Publications]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software verification]]></category>
		<category><![CDATA[Software design]]></category>
		<category><![CDATA[Theory]]></category>
		<category><![CDATA[ICSE]]></category>
		<category><![CDATA[VSTTE]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3382</guid>
		<description><![CDATA[&#160; The following presentations from our ETH group in the ICSE week (International Conference on Software Engineering, San Francisco) address important issues of software specification and verification, describing new techniques that we have recently developed as part of our work building EVE, the Eiffel Verification Environment. One is at ICSE proper and the other at [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>The following presentations from our ETH group in the ICSE week (International Conference on Software Engineering, San Francisco) address important issues of software specification and verification, describing new techniques that we have recently developed as part of our work building EVE, the Eiffel Verification Environment. One is at ICSE proper and the other at VSTTE (Verified Software: Tools, Theories, Experiments). If you are around please attend them.</p>
<p>Julian Tschannen  will present <em>Program Checking With Less Hassle</em>, written with  Carlo A. Furia, Martin Nordio and me, at VSTTE on May 17 in the 15:30-16:30 session (see <a href="https://sites.google.com/site/vstte2013/home/program" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a> in the VSTTE program. The draft is available <a href="http://se.ethz.ch/~meyer/publications/proofs/two_step.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>. I will write a blog article about this work in the coming days.</p>
<p>Nadia Polikarpova will present <em>What Good Are Strong Specifications</em>?, written with , Carlo A. Furia, Yu Pei, Yi Wei and me at ICSE on May 22 in the 13:30-15:30 session (see <a href="http://2013.icse-conferences.org/content/technical-research" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a> in the ICSE program). The draft is available <a href="http://se.ethz.ch/~meyer/publications/methodology/strong_specifications_icse.pdf" target="blog_illustrations">here</a>. I wrote about this paper in an earlier post: see <a href="http://bertrandmeyer.com/2013/01/23/how-good-are-strong-specifications-new-paper-icse-2013/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>. It describes the systematic application of theory-based modeling to the full specification and verification of advanced software.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/05/14/presentations-at-icse-and-vstte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What is wrong with CMMI</title>
		<link>http://bertrandmeyer.com/2013/05/12/what-is-wrong-with-cmmi/</link>
		<comments>http://bertrandmeyer.com/2013/05/12/what-is-wrong-with-cmmi/#comments</comments>
		<pubDate>Sun, 12 May 2013 19:16:29 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software process]]></category>
		<category><![CDATA[Standardization]]></category>
		<category><![CDATA[Writing and style]]></category>
		<category><![CDATA[CMMI]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3343</guid>
		<description><![CDATA[Translated into English, CMMI might actually be useful.]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>The CMMI model of process planning and assessment has been very successful in some industry circles, essentially as a way for software suppliers to establish credibility. It is far, however, from having achieved the influence it deserves. It is, for example, not widely taught in universities, which in turn limits its attractiveness to industry. The most tempting explanation involves the substance of CMMI: that it prescribes processes that are too heavy. But in fact the basic ideas are elegant, they are not so complicated, and they have been shown to be compatible with flexible approaches to development, such as agile methods.</p>
<p>I think there is a simpler reason, of form rather than substance: the CMMI defining documents are atrociously written.  Had they benefited from well-known techniques of effective technical writing, the approach would have been adopted much more widely. The obstacles to comprehension discourage many people and companies which could benefit from CMMI.</p>
<h3>Defining the concepts</h3>
<p>One of the first qualities you expect from a technical text is that it defines the basic notions. Take one of the important concepts of CMMI, “process area”. Not just important, but fundamental; you cannot understand anything about CMMI if you do not understand what a process area is. The glossary of the basic document ([1], page 449) defines it as</p>
<blockquote><p><em>A cluster of related practices in an area that, when implemented collectively, satisfies a set of goals considered important for making improvement in that area.</em></p></blockquote>
<p>The mangled syntax is not a good omen: contrary to what the sentence states, it is not the area that should be “<em>implemented collectively</em>”, but the practices. Let us ignore it and try to understand the intended definition. A process area is a collection of practices? A bit strange, but could make sense, provided the notion of “practice” is itself well defined. Before we look at that, we note that these are practices “in an area”. An area of what? Presumably, a <em>process</em> area, since no other kind of area is ever mentioned, and CMMI is about processes. But then a process area is&#8230; a collection of practices in a process area? Completely circular! (Not <em>recursive</em>: a meaningful recursive definition is one that defines simple cases directly and builds complex cases from them. A circular definition defines nothing.)</p>
<p>All that this is apparently saying is that if we <em>already know</em> what a process area is, CMMI adds the concept that a process area is characterized by a set of associated practices. This is actually a useful idea, but it does not give us a definition.</p>
<p>Let&#8217;s try to see if the definition of “practice” helps. The term itself does not have an entry in the glossary, a bit regrettable but not too worrying given that in CMMI there are two relevant kinds of practices: specific and generic. “<em>Specific practice</em>” is defined (page 461) as</p>
<blockquote><p><em>An expected model component that is considered important in achieving the associated specific goal. (See also “process area” and “specific goal.”)</em></p></blockquote>
<p>This statement introduces the important observation that in CMMI a practice is always related to a “<em>goal</em>” (another one of the key CMMI concepts); it is one of the ways to achieve that goal. But this is not a definition of “practice”! As to the phrase “<em>an expected model component</em>”, it simply tells us that practices, along with goals, are among the components of CMMI (“<em>the model</em>”), but that is a side remark, not a definition: we cannot define “practice” as meaning “model component”.</p>
<p>What is happening here is that the glossary <em>does not</em> give a definition at all; it simply relies on the ordinary English meaning of “practice”. Realizing this also helps us understand the definition of “process area”: it too is not a definition, but assumes that the reader already understands the words “process” and “area” from their ordinary meanings. It simply tells us that in CMMI a process area has a set of associated practices. But that is not what a glossary is for: the reader expects it to give precise definitions of the technical terms used in the document.</p>
<p>This misuse of the glossary is typical of what makes CMMI documents so ineffective. In technical discourse it is common to hijack words from ordinary language and give them a special meaning: the mathematical use of such words as “matrix” or “edge” (of a graph) denotes well-defined objects. But you have to explain such technical terms precisely, and be clear at each step whether you are using the plain-language meaning or the technical meaning. If you mix them up, you completely confuse the reader.</p>
<p>In fact any decent glossary should make the distinction explicit by underlining, in definitions, terms that have their own entries (as in: <em>a cluster or related <span style="text-decoration: underline;">practices</span></em>, assuming there is an entry for “practice”); then it is clear to the reader whether a word is used in its ordinary or technical sense. In an electronic version the underlined words can be links to the corresponding entries. It is hard to understand why the CMMI documents do not use this widely accepted convention.</p>
<h3>Towards suitable definitions</h3>
<p>Let us try our hand at what suitable definitions could have been for the two concepts just described; not a vacuous exercise since process area and practice are among the five or six core concepts of CMMI. (Candidates for the others are process, goal, institutionalization and assessment).</p>
<p>“Practice” is the more elementary concept. In fact it retains its essential meaning from ordinary language, but in the CMMI context a practice is related to a process and, as noted, is intended to satisfy a goal. What distinguishes a practice from a mere activity is that the practice is codified and repeatable. If a project occasionally decides to conduct a  design review that is not a practice; a systematically observed daily Scrum meeting is a practice. Here is my take on defining “practice” in CMMI:</p>
<blockquote><p><strong>Practice</strong><em>: A <span style="text-decoration: underline;">process</span>-related activity, repeatable as part of a plan, that helps achieve a stated <span style="text-decoration: underline;">goal</span>.<br />
</em></p></blockquote>
<p>CMMI has both <em>generic</em> practices, applicable to the process as a whole, and <em>specific</em> practices, applicable to a particular process area. From this definition we can easily derive definitions for both variants.</p>
<p>Now for “process area”. In discussing this concept above, there is one point I did not mention: the reason the CMMI documents can get away with the bizarre definition (or rather non-definition) cited is that if you ask what a process area really is you will immediately be given <strong>examples</strong>: configuration management, project planning, risk management, supplier agreement management&#8230; Then  you get it. But examples are not a substitute for a definition, at least in a standard that is supposed to be precise and complete. Here is my attempt:</p>
<blockquote><p><strong>Process area</strong><em>: An important aspect of the <span style="text-decoration: underline;">process</span>, characterized by a clearly identified set of issues and activities, and in CMMI by a set of applicable <span style="text-decoration: underline;">practices</span>.</em></p></blockquote>
<p>The definition of “specific practice” follows simply: a <span style="text-decoration: underline;">practice</span> that is associated with a particular <span style="text-decoration: underline;">process area</span>. Similarly, a “generic practice” is a practice not associated with any process area.</p>
<p>I&#8217;ll let you be the judge: which definitions do you prefer, these or the ones in the CMMI documents?</p>
<p>By the way, I can hear the cynical explanation: that the jargon and obscurity are intentional, the goal being to justify the need for experts that will interpret the sacred texts. Similar observations have been made to explain the complexity of certain programming languages. Maybe. But bad writing is common enough that we do not need to invoke a conspiracy in this case.</p>
<h3>Training for the world championship of muddy writing</h3>
<p>The absence of clear definitions of basic concepts is inexcusable. But the entire documents are written in government-committee-speak that erect barriers against comprehension. As an example among hundreds, take the following extract, the entire description of the generic practice GP2.2, “Establish and maintain the plan for performing the organizational training process“” , part of the Software CMM (a 729-page document!), [2], page 360:</p>
<blockquote><p><em>This plan for performing the organizational training process differs from the tactical plan for organizational training described in a specific practice in this process area. The plan called for in this generic practice would address the comprehensive planning for all of the specific practices in this process area, from the establishment of strategic training needs all the way through to the assessment of the effectiveness of the organizational training effort. In contrast, the organizational training tactical plan called for in the specific practice would address the periodic planning for the delivery of individual training offerings.</em></p></blockquote>
<p>Even to a good-willed reader the second and third sentences sound like gibberish. One can vaguely intuit that the practice just introduced is being distinguished from another, but which one, and how? Why the conditional phrases, “<em>would</em> address”? A plan either <em>does</em> or <em>does not</em> address its goals. And if it addresses them, what does it mean that a <em>plan</em> addresses a <em>planning</em>? Such tortured tautologies, in a high-school essay, would result in a firm request to clean up and resubmit.</p>
<p>In fact the text is trying to say something simple, which should have been expressed like this:</p>
<blockquote><p><em>This practice is distinct from practice <span style="text-decoration: underline;">SP1.3, “<strong>Establish an Organizational Training Tactical Plan</strong></span>” (page 353). The present practice is strategic: it is covers planning the overall training process. SP1.3 is tactical: it covers the periodic planning of individual training activities.</em></p></blockquote>
<p>(In the second sentence we could retain “from defining training needs all the way to assessing the effectiveness of training”, simplified of course from the corresponding phrase in the original, although I do not think it adds much.)</p>
<p>Again, which version do you prefer?</p>
<p>The first step in producing something decent was not even a matter of style but simple courtesy to the reader. The text compares a practice to another, but it is hard to find the target of the comparison: it is identified as the “<em>tactical plan for organizational training</em>” but that phrase does not appear anywhere else in the document!  You have to guess that it is listed elsewhere as the “<em>organizational</em> <em>training tactical plan</em>”, search for that string, and cycle through its 14 occurrences to see which one is the definition.  (To make things worse, the phrase “training tactical plan” also appears in the document — not very smart for what is supposed to be a precisely written standard.)</p>
<p>The right thing to do is to use the precise name, here SP1.3 — what good is it to introduce such code names throughout a document if it does not use them for reference? — and for good measure list the page number, since this is so easy to do with text processing tools.</p>
<p>In the CMMI chapter of my book <em>Touch of Class</em> (yes, an introductory programming textbook does contain an introduction to CMMI) I cited another extract from [2] (page 326):</p>
<blockquote><p><em>The plan for performing the organizational process focus process, which is often called “the process-improvement plan,” differs from the process action plans described in specific practices in this process area. The plan called for in this generic practice addresses the comprehensive planning for all of the specific practices in this process area, from the establishment of organizational process needs all the way through to the incorporation of process-related experiences into the organizational process assets.</em></p></blockquote>
<p>In this case the translation into text understandable by common mortals is left as an exercise for the reader.</p>
<p>With such uncanny ability to say in fifty words what would better be expressed in ten, it is not surprising that basic documents run into 729 pages and that understanding of CMMI by companies who feel compelled  to adopt it requires an entire industry of commentators of the sacred word.</p>
<h3>Well-defined concepts have simple names</h3>
<p>The very name of the approach, “Capability Maturity Model Integration”, is already a sign of WMD (Word-Muddying Disease) at the terminal stages. I am not sure if anyone anywhere knows how to parse it correctly: is it the integration of a model of maturity of capability (right-associative interpretation)? Of several models? These and other variants do not make much sense, if only because in CMMI “capability” and “maturity” are <em>alternatives</em>, used respectively for the Continuous and Staged versions.</p>
<p>In fact the only word that seems really useful is “model”; the accumulation of tetrasyllabic words with very broad meanings does not help suggest what the whole thing is about. “Integration”, for example, only makes sense if you are aware of the history of CMMI, which generalized the single CMM model to a family of models, but this history is hardly interesting to a newcomer. A name, especially a long one, should carry the basic notion.</p>
<p>A much better name would have been “<strong>Catalog of Assessable Process Practices</strong>”, which is even pronounceable as an acronym, and defines the key elements: the approach is based on recognized best <em>practices</em>; these practices apply to <em>processes</em> (of an organization); they must be subject to <em>assessment</em> (the most visible part of CMMI — the famous five levels — although not necessarily the most important one); and they are collected into a <em>catalog</em>. If “catalog” is felt too lowly, “collection” would also do.</p>
<p>Catalog of Assessable Process Practices: granted, it sounds less impressive than the accumulation of pretentious words making up the actual acronym. As is often the case in software engineering methods and tools, once you remove the hype you may be disappointed at first (“So that&#8217;s all that it was after all!”), and then you realize that the idea, although brought back down to more modest size, remains a good idea, and can be put to effective use.</p>
<p>At least if you explain it in English.</p>
<h4>References</h4>
<p>[1] CMMI Product Team: <em>CMMI for Development, Version 1.3, Improving processes for developing better products and services</em>, Technical Report CMU/SEI-2010-TR-033, Software Engineering Institute, Carnegie Mellon University, November 2010, available <a href="www.sei.cmu.edu/reports/10tr033.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[2] CMMI Product Team, ; <em>CMMI for Systems Engineering/Software Engineering/Integrated Product and Process Development/Supplier Sourcing, Version 1.1, Staged Representation (CMMI-SE/SW/IPPD/SS, V1.1, Staged)</em> (CMU/SEI-2002-TR-012). Software Engineering Institute, Carnegie Mellon University, 2002, available <a href="http://www.sei.cmu.edu/library/abstracts/reports/02tr012.cfm" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/05/12/what-is-wrong-with-cmmi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ershov lecture</title>
		<link>http://bertrandmeyer.com/2013/05/01/ershov-lecture/</link>
		<comments>http://bertrandmeyer.com/2013/05/01/ershov-lecture/#comments</comments>
		<pubDate>Wed, 01 May 2013 16:12:10 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[History]]></category>
		<category><![CDATA[Seminar]]></category>
		<category><![CDATA[Software engineering]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3337</guid>
		<description><![CDATA[&#160; On April 11 I gave the &#8220;Ershov lecture&#8221; in Novosibirsk. I talked about concurrency; a video recording is available here. The lecture is given annually in memory of Andrey P. Ershov, one of the founding fathers of Russian computer science and originator of many important concepts such as partial evaluation. According to Wikipedia, Knuth [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;
<p>
On April 11 I gave the &#8220;Ershov lecture&#8221; in Novosibirsk. I talked about concurrency; a video recording is available <a href="http://www.iis.nsk.su/ershov_lectures/2013" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>The lecture is given annually in memory of Andrey P. Ershov, one of the founding fathers of Russian computer science and originator of many important concepts such as partial evaluation. According to Wikipedia, Knuth considers Ershov to be the inventor of hashing. I was fortunate to make Ershov&#8217;s acquaintance in the late seventies and to meet him regularly afterwards. He invited me to his institute in Novosibirsk for a two-month stay where I learned a lot. He had a warm, caring personality, and set many young computer scientists in their tracks. His premature death in 1988 was a shock to all and his memory continues to be revered; it was gratifying to be able to give the lecture named in his honor.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/05/01/ershov-lecture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bringing C code to the modern world</title>
		<link>http://bertrandmeyer.com/2013/04/29/bringing-c-code-to-the-modern-world/</link>
		<comments>http://bertrandmeyer.com/2013/04/29/bringing-c-code-to-the-modern-world/#comments</comments>
		<pubDate>Mon, 29 Apr 2013 17:05:06 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Eiffel]]></category>
		<category><![CDATA[Programming techniques]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software process]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3291</guid>
		<description><![CDATA[The C2Eif translator developed by Marco Trudel takes C code and translates it into Eiffel; it produces not just a literal translation but a re-engineering version exhibiting object-oriented properties. Trudel defended his PhD thesis last Friday at ETH (the examiners were Hausi Muller from Victoria University, Manuel Oriol from ABB, Richard Paige from the University [...]]]></description>
			<content:encoded><![CDATA[<p>The C2Eif translator developed by Marco Trudel takes C code and translates it into Eiffel; it produces not just a literal translation but a re-engineering version exhibiting object-oriented properties. Trudel defended his PhD thesis last Friday at ETH (the examiners were Hausi Muller from Victoria University, Manuel Oriol from ABB, Richard Paige from the University of York,  and me as the advisor). The thesis is not yet available online but earlier papers describing C2Eif are, all reachable from the project&#8217;s home page [1].</p>
<p>At issue is what we do with legacy code. “<em>J’ai plus de souvenirs que si j’avais mille ans</em>”, wrote Charles Baudelaire in <em>Les Fleurs du Mal</em> (“Spleen de Paris”). The software industry is not a thousand years old, but has accumulated even more “souvenirs” than</p>
<p style="padding-left: 30px;"><em>A heavy chest of drawers cluttered with balance-sheets,<br />
Poems, love letters, lawsuits, romances<br />
And heavy locks of hair wrapped in invoices</em>.</p>
<p>We are suffocating under layers of legacy code heaped up by previous generations of programmers using languages that no longer meet our scientific and engineering standards. We cannot get rid of this heritage; how do we bring it to the modern world? We need automatic tools to wrap it in contemporary code, or, better, translate it into contemporary code. The thesis and the system offer a way out through translation to a modern object-oriented language. It took courage to choose such a topic, since there have been many attempts in the past, leading to conventional wisdom consisting of two strongly established opinions:</p>
<ul>
<li>Plain translation: it has been tried, and it works. Not interesting for a thesis.</li>
<li>Object-oriented reengineering: it has been tried, and it does not work. Not realistic for a thesis.</li>
</ul>
<p>Both are wrong. For translation, many of the proposed solutions “almost work”: they are good enough to translate simple programs, or even some large programs but on the condition that the code avoids murky areas of C programming such as signals, exceptions (setjmp/longjmp) and library mechanisms. In practice, however, most useful C programs need these facilities, so any tool that ignores them is bound to be of conceptual value only. The basis for Trudel’s work has been to tackle C to OO translation “<em>beyond the easy stuff</em>” (as stated in the title of one of the published papers). This effort has been largely successful, as demonstrated by the translation of close to a million lines of actual C code, including some well-known and representative tools such as the Vim editor.</p>
<p>As to OO reengineering, C2Eif makes a serious effort to derive code that exhibits a true object-oriented design and hence resembles, in its structure at least, what a programmer in the target language might produce. The key is to identify the right data abstractions, yielding classes, and specialization properties, yielding inheritance. In this area too, many people have tried to come up with solutions, with little success. Trudel has had the good sense of avoiding grandiose goals and sticking to a number of heuristics that work, such as looking at the signatures of a set of functions to see if they all involve a common argument type. Clearly there is more to be done in this direction but the result is already significant.</p>
<p>Since Eiffel has a sophisticated C interface it is also possible to wrap existing code; some tools are available for that purpose, such as Andreas Leitner&#8217;s EWG (Eiffel Wrapper Generator). Wrapping and translating each have their advantages and limitations; wrapping may be more appropriate for C libraries that someone else is still actively updating  (so that you do not have to redo a translation with every new release), and translation for legacy code that you want to take over and bring up to par with the rest of your software. C2Eif is engineered to support both. More generally, this is a practitioner&#8217;s tool, devoting considerable attention to the many details that make all the difference between a nice idea and a tool that really works. The emphasis is on full automation, although more parametrization has been added in recent months.</p>
<p>C2Eif will make a big mark on the Eiffel developer community. Try it yourself — and don&#8217;t be shy about telling its author about the future directions in which you think the tool should evolve.</p>
<h4>Reference</h4>
<p>[1] C2Eif project page, <a href="http://se.inf.ethz.ch/research/c2eif/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/04/29/bringing-c-code-to-the-modern-world/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The origin of “software engineering”</title>
		<link>http://bertrandmeyer.com/2013/04/04/the-origin-of-software-engineering/</link>
		<comments>http://bertrandmeyer.com/2013/04/04/the-origin-of-software-engineering/#comments</comments>
		<pubDate>Thu, 04 Apr 2013 07:33:43 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Software engineering]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3278</guid>
		<description><![CDATA[A mistake repeated in every software engineering textbook remains a mistake. ]]></description>
			<content:encoded><![CDATA[<p><a href="http://bertrandmeyer.com/2009/08/03/long-and-clear/recycled1/" rel="attachment wp-att-155"><img class="alignleft size-thumbnail wp-image-155" style="margin-left: 2px; margin-right: 2px;" title="Recycled" src="http://bertrandmeyer.com/wp-content/upLoads/recycled1-150x138.jpg" alt="Recycled" width="33" height="31" /></a>Everyone and her sister continues to repeat the canard that the term “<em>software engineering</em>” was coined on the occasion of the eponymous 1968 NATO conference. A mistake repeated in every software engineering textbook remains a mistake. Below is a note I published twenty years ago on the topic in a newsgroup discussion. I found it in an archive <a href="http://www.unl.csi.cuny.edu/faqs/software-enginering/archive/SEorigin" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>, where you can read the longer exchange of which it was part.</p>
<blockquote><p>All textbooks on software engineering that I know, and many articles in the field, claim (that is to say, repeat someone else&#8217;s claim) that the term “software engineering” itself was coined on the occasion of the Fall 1968 Garmisch-Partenkirchen conference on S.E., organized by the NATO Science Affairs committee. (See [1] for the proceedings, published several years later.)</p>
<p>The very term, it is said, was a challenge to the software community to get its act together and start rationalizing the software production process.</p>
<p>This common wisdom may need to be revised. The August, 1966 issue of <em>Communications of the ACM</em> (Volume 9, number 8) contains an interesting “<em>letter to the ACM membership</em>” by Anthony A. Oettinger, then ACM President. I must confess I don&#8217;t know much about the author; he is identified (in the announcement of his election in the June 1966 issue) as Professor of Applied Mathematics and Linguistics, Harvard University, and from his picture looks like a nice fellow. The sentence of interest appears on page 546 at the end of a long paragraph, which I have reproduced below in its entirety because by looking at the full context it appears clearly that Professor Oettinger did not just use two words together by accident, as it were, but knew exactly what he was talking about. Here is the paragraph (italics in original):</p>
<p style="padding-left: 30px;">“A concern with the <em>science</em> of computing and information processing, while undeniably of the utmost importance and an historic root of our organization [i.e. the ACM - BM] is, alone, too exclusive. While much of what we do is or has its root in not only computer and information science, but also many older and better defined sciences, even more is not at all scientific but of a professional and engineering nature. We must recognize ourselves &#8211; not necessarily all of us and not necessarily any one of us all the time &#8211; as members of an <em>engineering</em> profession, be it hardware engineering or software engineering, a profession without artificial and irrelevant boundaries like that between &#8216;scientific&#8217; and &#8216;business&#8217; applications.”</p>
<p>(The last point would still be worth making today. The end of the second sentence would seem to indicate that the writer viewed engineering as being remote from science, but this would not be accurate; in the paragraph following the one reproduced above, Prof. Oettinger discussed in more detail his view of the close relation between science and engineering.)</p>
<p>The above quotation is clear evidence that the term “software engineering” was used significantly earlier than commonly thought &#8211; more than two years before the Garmisch conference.</p>
<p>What I don&#8217;t know is whether Prof. Oettinger created the term, or whether it had been in use before. In the latter case, does anyone know of an older reference? Is Prof. Oettinger still around to enlighten us? (For all I know he could be reading this!)</p>
<p>Switching now our theme from the past to the future: does anyone have an idea of when some actual semantics might become attached to the expression “software engineering”? Is 2025 too optimistic?</p>
<p><strong>Reference</strong></p>
<p>[1] J. M. Buxton, P. Naur, B. Randell: <em>Software Engineering Concepts and Techniques</em> (Proceeedings of 1968 NATO Conference on Software Engineering), Van Nostrand Reinhold, 1976.</p></blockquote>
<p>The last sentence&#8217;s sarcasm is, by the way, no longer warranted today.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/04/04/the-origin-of-software-engineering/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>LASER summer school: Software for the Cloud and Big Data</title>
		<link>http://bertrandmeyer.com/2013/04/02/laser-summer-school-software-for-the-cloud-and-big-data/</link>
		<comments>http://bertrandmeyer.com/2013/04/02/laser-summer-school-software-for-the-cloud-and-big-data/#comments</comments>
		<pubDate>Tue, 02 Apr 2013 13:51:05 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[Distributed software development]]></category>
		<category><![CDATA[General technology]]></category>
		<category><![CDATA[Programming techniques]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software process]]></category>
		<category><![CDATA[Theory]]></category>
		<category><![CDATA[LASER]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3268</guid>
		<description><![CDATA[The 2013 LASER summer school, organized by our chair at ETH, will take place September 8-14, once more in the idyllic setting of the Hotel del Golfo in Procchio, on the island of Elba in Italy. This is already the 10th conference; the roster of speakers so far reads like a who&#8217;s who of software [...]]]></description>
			<content:encoded><![CDATA[<p>The 2013 LASER summer school, organized by our chair at ETH, will take place September 8-14, once more in the idyllic setting of the Hotel del Golfo in Procchio, on the island of Elba in Italy. This is already the 10th conference; the roster of speakers so far reads like a who&#8217;s who of software engineering.</p>
<p>The theme this year is <strong><em>Software for the Cloud and Big Data</em></strong> and the speakers are Roger Barga from Microsoft, Karin Breitman from EMC,  Sebastian Burckhardt  from Microsoft,  Adrian Cockcroft from Netflix,  Carlo Ghezzi from Politecnico di Milano,  Anthony Joseph from Berkeley,  Pere Mato Vila from CERN and I.</p>
<p>LASER always has a strong practical bent, but this year it is particularly pronounced as you can see from the list of speakers and their affiliations. The topic is particularly timely: exploring the software aspects of game-changing developments currently redefining the IT scene.</p>
<p>The LASER formula is by now well-tuned: lectures over seven days (Sunday to Saturday), about five hours in the morning and three in the early evening, by world-class speakers; free time in the afternoon to enjoy the magnificent surroundings; 5-star accommodation and food in the best hotel of Elba, made affordable as we come towards the end of the season (and are valued long-term customers). The group picture below is from last year&#8217;s school.</p>
<p>Participants are from both industry and academia and have ample opportunities for interaction with the speakers, who typically attend each others&#8217; lectures and engage in in-depth discussions. There is also time for some participant presentations; a free afternoon to discover Elba and brush up on your Napoleonic knowledge; and a boat trip on the final day.</p>
<p>Information about the 2013 school can be found <a href="http://laser.inf.ethz.ch" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p style="text-align: center;"><a href="http://bertrandmeyer.com/2013/04/02/laser-summer-school-software-for-the-cloud-and-big-data/laser_2012/" rel="attachment wp-att-3281"><img class="aligncenter size-medium wp-image-3281" title="LASER_2012" src="http://bertrandmeyer.com/wp-content/upLoads/LASER_2012-500x328.jpg" alt="LASER 2012, Procchio, Hotel del Golvo" width="709" height="465" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/04/02/laser-summer-school-software-for-the-cloud-and-big-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The ABC of software engineering</title>
		<link>http://bertrandmeyer.com/2013/03/25/the-abc-of-software-engineering/</link>
		<comments>http://bertrandmeyer.com/2013/03/25/the-abc-of-software-engineering/#comments</comments>
		<pubDate>Mon, 25 Mar 2013 14:14:44 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Design by Contract]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software design]]></category>
		<category><![CDATA[Theory]]></category>
		<category><![CDATA[ABC]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3255</guid>
		<description><![CDATA[Lack of a precise context can render discussions of software engineering and particularly of software quality meaningless. Take for example the (usually absurd) statement “We cannot expect that programmers will equip their programs with contracts”. Whom do you mean? A physicist who writes 50 lines of Matlab code to produce a graph illustrating his latest [...]]]></description>
			<content:encoded><![CDATA[<p>Lack of a precise context can render discussions of software engineering and particularly of software quality meaningless. Take for example the (usually absurd) statement “<em>We cannot expect that programmers will equip their programs with contracts</em>”. Whom do you mean? A physicist who writes 50 lines of Matlab code to produce a graph illustrating his latest experiment? A member of the maintenance team for Microsoft Word? A programmer on the team for a flight control system? These are completely different constituencies, and the answer is also different. In the last case, the answer is probably that we do not care what the programmers like and do not like. When you buy an electrical device that malfunctions, would you accept from the manufacturer the excuse that differential equations are, really, you see, too hard for our electrical engineers?</p>
<p>In discussing the evolution of software methods and tools we must first specify what and whom we are talking about. The following ABC characterization is sufficient for most cases.</p>
<p>C is for Casual. Programs in that category do all kinds of useful things, and like anything else they should work properly, but if they are not ideal in software engineering terms of reliability, reusability, extendibility and so on — if sometimes they crash, sometimes produce not-quite-right results,  cannot be easily understood or maintained by anyone other than their original developers, target just one platform, run too slowly, eat up too much memory, are not easy to change, include duplicated code — it is not the end of the world. I do not have any scientific figures, but I suspect that most of the world&#8217;s software is actually in that category, from JavaScript or Python code that runs web sites to spreadsheet macros. Obviously it has to be good enough to serve its needs, but “good enough<em></em>” is good enough.</p>
<p>B is for Business. Programs in that category run key processes in the organization. While often far from impeccable, they must satisfy strict quality constraints; if they do not, the organization will suffer significantly.</p>
<p>A is for Acute. This is life-critical software: if it does not work — more precisely, if it does not work exactly right — someone will get killed, someone will lose huge amounts of money, or something else will go terribly wrong. We are talking transportation systems, software embedded in critical devices, make-or-break processes of an organization.</p>
<p>Even in a professional setting, and even within a single company, the three categories usually coexist. Take for example a large engineering or scientific organization.  Some programs are developed to support experiments or provide an answer to a specific technical question. Some programs run the organization, both on the information systems side (enterprise management) and on the technical side (large scientific simulations, experiment set-up). And some programs play a critical role in making strategy decisions, or run the organization&#8217;s products.</p>
<p>The ABC classification is independent of the traditional division between enterprise and technical computing. Organizations often handle these two categories separately, whereas in fact they raise issues of similar difficulty and are subject to solutions of a similar nature. It is more important to assess the criticality of each software projects, along the ABC scale.</p>
<p>It is surprising that few organizations make that scale explicit.  It is partly a consequence of that neglect that many software quality initiatives and company-wide software engineering policies are ineffective: they lump everything together, and since they tend to be driven by A-grade applications, for which the risk of bad quality is highest, they create a burden that can be too high for C- and even B-grade developments. People resent the constraints where they are not justified, and as a consequence ignore them where they would be critical. Whether your goal for the most demanding projects is to achieve CMMI qualification or to establish an effective agile process, you cannot impose the same rules on everyone. Sometimes the stakes are high; and sometimes a program is just a program.</p>
<p>The first step in establishing a successful software policy is to separate levels of criticality, and require every development to position itself along the resulting scale. The same observation qualifies just about any discussion of software methodology. Acute, Business or Casual: you must know your ABC.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/03/25/the-abc-of-software-engineering/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Apocalypse no! (part 1)</title>
		<link>http://bertrandmeyer.com/2013/03/12/apocalypse-no-part-1/</link>
		<comments>http://bertrandmeyer.com/2013/03/12/apocalypse-no-part-1/#comments</comments>
		<pubDate>Tue, 12 Mar 2013 08:46:45 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Software engineering]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3264</guid>
		<description><![CDATA[The sentence, which was to remain as the key punch delivered by the first page of the published book, sprung to his mind in one single, felicitous shot.]]></description>
			<content:encoded><![CDATA[<p>&nbsp;
<p><a href="http://bertrandmeyer.com/2009/08/03/long-and-clear/recycled1/" rel="attachment wp-att-155"><img class="alignleft size-thumbnail wp-image-155" style="margin-left: 2px; margin-right: 2px;" title="Recycled" src="http://bertrandmeyer.com/wp-content/upLoads/recycled1-150x138.jpg" alt="Recycled" width="33" height="31" /></a>(<em>Originally published in the CACM blog. Part 1 of a two-part article. See [2] for part 2.</em>)</p>
<p>On a cold morning of February 2012, Mr. S woke up early. Even though his sleep was always deep, he did not resent having to interrupt it since he had set up his iPhone&#8217;s alarm to a favorite tune from <em>Götterdämmerung</em>, downloaded from a free-MP3 site. He liked his breakfast eggs made in a very specific way, and got them exactly right since he had programmed his microwave oven to the exact combination of heat and cooking time.</p>
<p>He had left his car to his daughter on the previous night; even though the roads were icy, he did not worry too much for her, since he knew the automatic braking system was good at silently correcting the mistakes of a still somewhat novice driver; and with the car&#8217;s built-in navigation system she would be advised away from any impracticable street.</p>
<p>As for himself he decided to take public transportation, something he did only rarely. He had forgotten the schedule, but found it on the Web and saw that he had a few minutes before the next bus. The extra time meant that he could quickly check his email. He noticed that he had received, as a PDF attachment, the pay slip for his last consulting gig; as an Agile consultant, Mr. S was in high demand. He knew his accountant&#8217;s system would automatically receive and check the information, but still made a cursory pass to convince himself that the figures looked right, with social security contributions and tax deductions properly computed.</p>
<p>He went out and hopped onto the bus, all the way to the client&#8217;s office continuing to check his email on his phone, even finding the time to confirm the online flight reservation for his next consulting assignment, while monitoring the hanging displays to check the bus&#8217;s progress (it was all dark outside and he was not that familiar with the route). Unlike some mornings, he had remembered to take his id card, so he was able to slide it into the slot at the building&#8217;s entrance and again into the elevator, gaining access to the right floor. Before heading to his office he walked to the beverage machine for his morning coffee, a particular but programmable combination of two-shot expresso, a bit of hot water, and just a touch of milk.</p>
<p>Sitting down at his computer, he brought it up from hibernation, for some reason remembering — Mr. S was fond of such trivia — that Windows 7 was estimated to consist of 50 million lines of code, and reflecting that the system now kind of did what he wanted from it. Mr. S had thought of moving, like many of his friends, to a Mac, but the advantages were not clear, and he was fond of the old Word text processing system with which he was writing his latest agile advocacy text, tentatively entitled<em> Software in 30 days</em>. (It has since appeared as a book [1].)</p>
<p>Mr. S — whose full name was either &#8220;Schwaber&#8221; or &#8220;Sutherland&#8221;, although it might have been &#8220;Scrum&#8221; or perhaps &#8220;Sprint&#8221;, as some of the details of the story are missing — opened up the document at the place where he had left it the evening before. Like many a good author, he had postponed finalizing the introduction to the last moment. Until now inspiration had failed him and his coauthor: it is always so hard to discover how best to begin! Over the past months, working together in long Skype discussions from wherever each happened to be, they had tried many different variants, often simultaneously editing their shared Google Docs draft. But now he suddenly knew exactly what he had to say to capture the future readers&#8217; attention.</p>
<p>The sentence, which was to remain as the key punch delivered by the first page of the published book [1, page 1], sprung to his mind in one single, felicitous shot:</p>
<blockquote><p><em>You have been ill served by the software industry for 40 years — not purposefully, but inextricably.</em></p></blockquote>
<h4>References</h4>
<p>[1] Ken Schwaber and Jeff Sutherland:<em> Software in 30 Days — How Agile Managers Beat the Odds, Delight their Customers and Leave Competitors in the Dust</em>, Wiley, 2012.<br />
[2] Part 2 of the present article was published on 16 May 2013 and appears <a href="http://bertrandmeyer.com/2013/05/16/apocalypse-no-part-2/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/03/12/apocalypse-no-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Public lecture at ITMO</title>
		<link>http://bertrandmeyer.com/2013/02/27/public-lecture-at-itmo/</link>
		<comments>http://bertrandmeyer.com/2013/02/27/public-lecture-at-itmo/#comments</comments>
		<pubDate>Wed, 27 Feb 2013 18:40:05 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Seminar]]></category>
		<category><![CDATA[Software engineering]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3245</guid>
		<description><![CDATA[Inaugural lecture on "Programming: Magic, Art, Routine or Science"?]]></description>
			<content:encoded><![CDATA[<p>I am giving my &#8220;inaugural lecture&#8221; at ITMO in Saint Petersburg tomorrow (Thursday, 28 February 2013) at 14 (2 PM) local time, meaning e.g. 11 AM in Western Europe and 2 AM (ouch!) in California. See <a href="http://sel.ifmo.ru/inaugural/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>  for the announcement. The title is &#8220;<em>Programming: Magic, Art, Routine or Science?</em>&#8220;. The talk will be streamed live: see <a href="http://www.ifmo.ru/online/online.htm" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/02/27/public-lecture-at-itmo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Doing it right or doing it over?</title>
		<link>http://bertrandmeyer.com/2013/02/23/doing-it-right-or-doing-it-over/</link>
		<comments>http://bertrandmeyer.com/2013/02/23/doing-it-right-or-doing-it-over/#comments</comments>
		<pubDate>Sat, 23 Feb 2013 15:42:45 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Empirical Software Engineering]]></category>
		<category><![CDATA[General technology]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software process]]></category>
		<category><![CDATA[Software design]]></category>
		<category><![CDATA[Kästner]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3224</guid>
		<description><![CDATA[(Adapted from an article in the Communications of the ACM blog.) I have become interested in agile methods because they are all the rage now in industry and, upon dispassionate examination, they appear to be a pretty amazing mix of good and bad ideas. I am finishing a book that tries to sort out the [...]]]></description>
			<content:encoded><![CDATA[<p>(Adapted from an article in the <em>Communications of the ACM</em> blog.)</p>
<p>I have become interested in agile methods because they are all the rage now in industry and, upon dispassionate examination, they appear to be a pretty amazing mix of good and bad ideas. I am finishing a book that tries to sort out the nuggets from the gravel [1].</p>
<p>An interesting example is the emphasis on developing a system by successive increments covering expanding slices of user functionality. This urge to deliver something that can actually be shown — &#8220;<em>Are we shipping yet?&#8221;</em> — is excellent. It is effective in focusing the work of a team, especially once the foundations of the software have been laid. But does it have to be the only way of working? Does it have to exclude the time-honored engineering practice of building the infrastructure first? After all, when a building gets constructed, it takes many months before any  &#8220;user functionality&#8221; becomes visible.</p>
<p>In a typical exhortation [2], the Poppendiecks argue that:</p>
<blockquote><p><em>The </em><em><em>&#8220;</em>right the first time</em><em><em>&#8220;</em> approach may work for well-structured problems, but the </em><em><em>&#8220;</em>try-it, test-it, fix-it</em><em><em>&#8220;</em> approach is usually the better approach for ill-structured problems</em>.</p></blockquote>
<p>Very strange. It is precisely ill-structured problems that require deeper analysis before you jump in into wrong architectural decisions which may require complete rework later on. Doing prototypes to try possible solutions can be a great way to evaluate potential solutions, but a prototype is an experiment, something quite different from an increment (an early version of the future system).</p>
<p>One of the problems with the agile literature is that its enthusiastic admonitions to renounce standard software engineering practices are largely based on triumphant anecdotes of successful projects. I am willing to believe all these anecdotes, but they are only anecdotes. In the present case systematic empirical evidence does not seem to support the agile view. Boehm and Turner [3] write:</p>
<blockquote><p><em>Experience to date indicates that low-cost refactoring cannot be depended upon as projects scale up.</em></p></blockquote>
<p>and</p>
<blockquote><p><em>The only sources of empirical data we have encountered come from less-expert early adopters who found that even for small applications the percentage of refactoring and defect-correction effort increases with [the size of requirements]</em>.</p></blockquote>
<p>They do not cite references here, and I am not aware of any empirical study that definitely answers the question. But their argument certainly fits my experience. In software as in engineering of any kind, experimenting with various solutions is good, but it is critical to engage in the appropriate Big Upfront Thinking to avoid starting out with the wrong decisions. Some of the worst project catastrophes I have seen were those in which the customer or manager was demanding to see something that worked right away — <em>&#8220;it doesn&#8217;t matter if it&#8217;s not the whole thing, just demonstrate a piece of it!</em><em>&#8220;</em> — and criticized the developers who worked on infrastructure that did not produce immediately visible results (in other words, were doing their job of responsible software professionals). The inevitable result: feel-good demos throughout the project, reassured customer, and nothing to deliver at the end because the difficult problems have been left to rot. System shelved and never to be heard of again.</p>
<p>When the basis has been devised right, perhaps with nothing much to show for months, <em>then </em>it becomes critical to insist on regular visible releases. Doing it prematurely is just sloppy engineering.</p>
<p>The problem here is extremism. Software engineering is a difficult balance between conflicting criteria. The agile literature&#8217;s criticism of teams that spend all their time on design or on foundations and never deliver any usable functionality is unfortunately justified. It does not mean that we have to fall into the other extreme and discard upfront thinking.</p>
<p>In the agile tradition of argument by anecdote, here is an extract from James Surowiecki&#8217;s  <em>&#8220;Financial Page&#8221;</em> article in last month&#8217;s <em>New Yorker</em>. It&#8217;s not about software but about the current Boeing 787 &#8220;Dreamliner&#8221; debacle:</em></em></p>
<blockquote><p><em>Determined to get the Dreamliners to customers quickly, Boeing built many of them while still waiting for the Federal Aviation Administration to certify the plane to fly; then it had to go back and retrofit the planes in line with the FAA&#8217;s requirements. &#8220;If the saying is check twice and build once, this was more like build twice and check once&#8221;, [an industry analyst] said to me. &#8220;With all the time and cost pressures, it was an alchemist’s recipe for trouble.&#8221;</em></p></blockquote>
<p>(Actually, the result is &#8220;build twice and check twice&#8221;, or more, since every time you rebuild you must also recheck.) Does that ring a bell?</p>
<p>Erich Kästner&#8217;s ditty about reaching America, cited in a previous article [5], is once again the proper commentary here.</p>
<h3>References</h3>
<p>[1] Bertrand Meyer: <em>Agile! The Good, the Hype and the Ugly</em>, Springer, 2013, to appear.</p>
<p>[2] Mary and Tom Poppendieck: <em>Lean Software Development </em><em>— An Agile Toolkit</em>, Addison-Wesley, 2003.</p>
<p>[3] Barry W. Boehm and Richard Turner: <em>Balancing Agility with Discipline — A Guide for the Perplexed</em>, Addison-Wesley, 2004. (Second citation slightly abridged.)</p>
<p>[4] James Surowiecki, in the <em>New Yorker</em>, 4 February 2013, available <a href="http://www.newyorker.com/talk/financial/2013/02/04/130204ta_talk_surowiecki" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span>.</p>
<p>[5] <em>Hitting on America</em>, article from this blog, 5 December 2012, available <a href="http://bertrandmeyer.com/2012/12/05/hitting-on-america/"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/02/23/doing-it-right-or-doing-it-over/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The waves of publication</title>
		<link>http://bertrandmeyer.com/2013/02/20/the-waves-of-publication/</link>
		<comments>http://bertrandmeyer.com/2013/02/20/the-waves-of-publication/#comments</comments>
		<pubDate>Wed, 20 Feb 2013 17:38:51 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Publications]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3225</guid>
		<description><![CDATA[(This article first appeared in the Communications of the ACM blog.) The very concept of publication has changed, half of its traditional meaning having disappeared in hardly more than a decade. Or to put it differently (if you will accept the metaphor, explained below), how it has lost its duality: no longer particle, just wave. [...]]]></description>
			<content:encoded><![CDATA[<p>(This article first appeared in the<em> Communications of the ACM</em> blog.)</p>
<p>The very concept of publication has changed, half of its traditional meaning having disappeared in hardly more than a decade. Or to put it differently (if you will accept the metaphor, explained below), how it has lost its duality: no longer particle, just wave.</p>
<h3>Process and product<strong> </strong></h3>
<p>Some words ending with <em>ation</em> (<em>atio </em>in Latin) describe a change of state: <em>restoration</em>, <em>dilatation</em>. Others describe the state itself, or one of its artifacts: <em>domination</em>, <em>fascination</em>. And yet others play both roles: <em>decoration</em> can denote either the process of embellishing (<em>she works in interior decoration</em>), or an element of the resulting embellishment (<em>Christmas tree decoration</em>).</p>
<p>Since at least Gutenberg, <em>publication </em>has belonged to that last category: both process and artifact. A publication is an artifact, such as an article or a book accessible to a community of readers. We are referring to that view when we say &#8220;she has a long publication list or <em>&#8220;Communications of the ACM</em> is a prestigious publication.&#8221; But the word also denotes a process, built from the verb &#8220;publish&#8221; the same way &#8220;restoration&#8221; is built from &#8220;restore&#8221; and &#8220;insemination&#8221; from &#8220;inseminate&#8221;: <em>the publication of her latest book took six months</em>.</p>
<p>The thesis of this article is that the second view of publication will soon be gone, and its purpose is to discuss the consequences for scientists.</p>
<p>Let me restrict the scope: I am only discussing scientific publication, and more specifically the scientific <em>article</em>. The situation for <em>books </em>is less clear; for all the attraction of the Kindle and other tablets, the traditional paper book still has many advantages and it would be risky to talk about its demise. For the standard scholarly article, however, electronic media and the web are quickly destroying the traditional setup.</p>
<h3>That was then . . .</h3>
<p>Let us step back a bit to what publication, the process, was a couple of decades ago. When you wrote something, you could send it by post to your friends (Edsger Dijkstra famously turned this idea into his modus operandi, regularly xeroxing his &#8220;EWD&#8221; memos [1] to a few dozen people) , but if you wanted to make it known to the world you had to go through the intermediation of a PUBLISHER — the mere word was enough to overwhelm you with awe. That publisher, either a non-profit organization or a commercial house, was in charge not only of selecting papers for a conference or journal but of bringing the accepted ones to light. Once you got the paper accepted began a long and tedious process of preparing the text to the publisher&#8217;s specifications and correcting successive versions of &#8220;galley proofs.&#8221; That step could be painful for papers having to do with programming, since in the early days typesetters had no idea how to lay out code. A few months or a couple of years later, you received a package in the mail and proudly opened the journal or proceedings at the page where YOUR article appeared. You would also, usually for a fee, receive fifty or so separately printed (<em>tirés à part</em>) reprints of just your article, typeset the same way but more modestly bound. Ah, the discrete charm of 20-th century publication!</p>
<h3>. . . and this is now</h3>
<p>Cut to today. Publishers stopped long ago to do the typesetting for you. They impose the format, obligingly give you LaTex, Word or FrameMaker templates, and you take care of everything. We have moved to WYSIWYG publishing: the version you write is the version you submit through a site such as EasyChair or CyberChair and the version that, after correction, will be published. The middlemen have been cut out.</p>
<p>We moved to this system because technology made it possible, and also because of the irresistible lure, for publishers, of saving money (even if, in the long term, they may have removed some of the very reasons for their existence). The consequences of this change go, however, far beyond money.</p>
<h3>Integrating change</h3>
<p>To understand how fundamentally the stage has changed, let us go back for a moment to the old system. It has many advantages, but also limitations. Some are obvious, such as the amount of work required, involving several people, and the delay from paper completion to paper publication. But in my view the most significant drawback has to do with managing <em>change</em>. If after publication you find a mistake, you must convince the journal to include an erratum: a new mini-article, subject to the same process. That requirement is reasonable enough but the scheme does not support a significant mode of scientific writing: working repeatedly on a single article and progressively refining it. This is not the &#8220;LPU&#8221; (Least Publishable Unit) style of publishing, but a process of studying an important idea or research project and aiming towards the ideal paper about it by successive approximation. If six months after the original publication of an article you have learned more about the topic and how to present it, the publication strategy is not obvious: resubmit it and risk being accused of self-plagiarism; avoid repetition of basic elements, making the article harder to read independently; artificially increase differences. This conundrum is one of the legitimate sources of the LPU phenomenon: faced with the choice between freezing material and repeating it, people end up publishing it bit by bit.</p>
<p>Now back again to today. If you are a researcher, you want the world to know about your ideas as soon as they are in a clean form. Today you can do this easily: no need to photocopy page after page and lick postage stamps on envelopes the way Dijkstra did; just generate a PDF and put it on your Web page or (to help establish a record if a question of precedence later comes up) on ArXiv. Just to make sure no one misses the information, tweet about it and announce it on your Facebook and LinkedIn pages. Some authors do this once the paper has been accepted, but many start earlier, at the time of submission or even before. I should say here that not all disciplines allow such author behavior; in biology and medicine in particular publishers appear to limit authors’ rights to distribute their own texts. Computer scientists would not tolerate such restrictions, and publishers, whether nonprofit or commercial, largely leave us alone when we make our work available on the Web.</p>
<p>But we are talking about far more than copyright and permissions (in this article I am in any case staying out of these emotionally and politically charged issues, open access and the like, and concentrating on the effect of technology changes on the process of publishing and the publication culture). The very notion of publication has changed. The process part is gone; only the result remains, and that result can be an evolving product, not a frozen artifact.</p>
<h3>Particle, or wave?<strong> </strong></h3>
<p>Another way to describe the difference is that a traditional publication, for example an article published in a journal, is like a particle: an identifiable material object. With the ease of modification, a publication becomes more like a wave, which allows an initial presentation to propagate to successively wider groups of readers:<a href="http://bertrandmeyer.com/2013/02/20/the-waves-of-publication/wave/" rel="attachment wp-att-3228"><img class="alignleft size-medium wp-image-3228" title="wave" src="http://bertrandmeyer.com/wp-content/upLoads/wave-500x363.jpg" alt="Waves of publication" width="461" height="334" /></a></p>
<p>Maybe you start with a blog entry, then you register the first version of the work as a technical report in your institution or on ArXiv, then you submit it to a workshop, then to a conference, then a version of record in a journal.</p>
<p>In the traditional world of publication each of these would have to be made sufficiently different to avoid the accusation of plagiarism. (There is some tolerance, for example a technical report is usually not considered prior publication, and it is common to submit an extended version of a conference paper to a journal — but the journal will require that you include enough new material, typically &#8220;at least 30%.&#8221;)</p>
<p>For people who like to polish their work repeatedly, that traditional model is increasingly hard to accept. If you find an error, or a better way to express something, or a complementary result, you just itch to make the change here and now. And you can. Not on a publisher&#8217;s site, but on your own, or on ArXiv. After all, one of the epochal contributions of computer technology, not heralded loudly enough, is, as I argued in another blog article [2], the ease with which we can change, extend and refine our creations, developing like a Beethoven and releasing like a Mozart.</p>
<p>The &#8220;publication as product&#8221; becomes an <em>evolving </em>product, available at every step as a snapshot of the current state. This does not mean that you can cover up your mistakes with impunity: archival sites use &#8220;diff&#8221; techniques to maintain a dated record of successive versions, so that in case of doubt, or of a dispute over precedence,  one can assess beyond doubt who released what statement when. But you can make sure that at any time the current version is the one you like best. Often, it is better than the official version on the conference or journal site, which remains frozen forever in the form it had on the day of its release.</p>
<p>What then remains of &#8220;publication as process&#8221;? Not much; in the end, a mere drag-and-drop from the work folder to the publication folder.</p>
<p>Well, there is an aspect I have not mentioned yet.</p>
<h3>The sanction<strong><br />
</strong></h3>
<p>Apart from its material side, now gone or soon to be gone, the traditional publication process has another role: what a recent article in this blog [3] called <em>sanction</em>. You want to publish your latest scientific article in <em>Communications of the ACM</em> not just because it will end up being printed and mailed, but because acceptance is a mark of recognition by experts. There is a whole gradation of prestige, well known to researchers in every particular field: conferences are better than workshops, some journals are as good as conferences or higher, some conferences are far more prestigious than others, and so on.</p>
<p>That sanction, that need for an independent stamp of approval, will remain (and, for academics, young academics in particular, is of ever growing importance). But now it can be completely separated from the publication process and largely separated (in computer science, where conferences are so important today) from the conference process.</p>
<p>Here then is what I think scientific publication will become. The researcher (the author) will largely be in control of his or her own text as it goes through the successive waves described above. A certified record will be available to verify that at time <em>t</em> the document <em>d</em> had the content <em>c</em>. Then at specific stages the author will submit the paper. Submit in the sense of appraisal and, if the appraisal is succesful, certification. The submission may be to a conference: you submit your paper for presentation at this year&#8217;s ICSE, POPL or SIGGRAPH. (At the recent Dagstuhl publication culture workshop, Nicolas Holzschuch mentioned that some graphics conferences accept for presentation work that has already been published; isn&#8217;t this scheme more reasonable than the currently dominant practice of conference-as-publication?) You may also submit your work, once it reaches full maturity, to a journal. Acceptance does not have to mean that any trees get cut, that any ink gets spread, or even that any bits get moved: it simply enables the journal&#8217;s site to point to the article, and your site to add this mark of recognition.</p>
<p>There may also be other forms of recognition, social-network or Trip Advisor style: the community gets to pitch in, comment and assess. Don&#8217;t laugh too soon. Sure, scientific publication has higher standards than Wikipedia, and will not let the wisdom of the crowds replace the judgment of experts. But sometimes you want to publish for communication, not sanction; especially if you have the privilege of no longer being trapped in the publish-or-perish race you may simply want to make your research known, and you have little patience for navigating the meanders of conventional publication, genuflecting to the publications of PC members, and following the idiosyncratic conventional structure of the chosen conference community. Then you just publish and let the world decide.</p>
<p>In most cases, of course, we do need the sanction, but there is no absolute reason it should be tied to the traditional structures of journal publication and conference participation. There will be resistance, if only because of the economic interests involved; some of what we know today will remain, albeit with a different focus: conferences, as a place where the best work of the moment is presented (independently of its publication); printed books, as noted;  and printed journals that bring real added value in the form of high-quality printing, layout and copy editing (and might still insist that you put on their site a copy of your paper rather than, or in addition to, a reference to your working version).</p>
<p>The trend, however, is irresistible. Publication is no longer a process, it is a product, increasingly under the control of the authors. As a product it is no longer a defined particle but a wave, progressively improving as it reaches successive classes of readership, undergoes successive steps of refinement and receives, informally from the community and officially from more or less prestigious sources, successive stamps of approval.</p>
<h3>References</h3>
<p>[1] Dijkstra archive at the University of Texas at Austin, <a href="http://www.cs.utexas.edu/%7EEWD/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[2] Bertrand Meyer: <em>Computer Technology: Making Mozzies out of Betties</em>, article on this blog, 2 August 2009, available <a href="http://bertrandmeyer.com/tag/mozart/"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[3] Bertrand Meyer: <em>Conferences: Publication, Communication, Sanction</em>, article on this blog, 6 February 2013, available <a href="http://bertrandmeyer.com/2013/02/06/conferemces-publication-communication-sanction/"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/02/20/the-waves-of-publication/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conferences: Publication, Communication, Sanction</title>
		<link>http://bertrandmeyer.com/2013/02/06/conferemces-publication-communication-sanction/</link>
		<comments>http://bertrandmeyer.com/2013/02/06/conferemces-publication-communication-sanction/#comments</comments>
		<pubDate>Wed, 06 Feb 2013 17:18:46 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[Essay]]></category>
		<category><![CDATA[Publications]]></category>
		<category><![CDATA[Research evaluation]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3193</guid>
		<description><![CDATA[Separating the three roles of computer science conferences.]]></description>
			<content:encoded><![CDATA[<p><a href="http://bertrandmeyer.com/2009/08/03/long-and-clear/recycled1/" rel="attachment wp-att-155"><img class="alignleft size-thumbnail wp-image-155" style="margin-left: 2px; margin-right: 2px;" title="Recycled" src="http://bertrandmeyer.com/wp-content/upLoads/recycled1-150x138.jpg" alt="Recycled" width="33" height="31" /></a>(<em>This article was first published in the<em> Communications of the ACM</em> blog.</em>)</p>
<p>
A healthy discussion is taking place in the computer science community on our publication culture. It was spurred by Lance Fortnow&#8217;s 2009 article [1]; now Moshe Vardi has taken the lead to prepare a report on the topic, following a workshop in Dagstuhl in November [2]. The present article and one that follows (“<em>The Waves of Publication</em>”)  are intended as contributions to the debate.</p>
<p>One of the central issues is what to do with conferences. Fortnow had strong words for the computer science practice of using conferences as the selective publication venues, instead of relying on journals as traditional scientific disciplines do. The criticism is correct, but if we look at the problem from a practical perspective it is unlikely that top conferences will lose their role as certifiers of quality. This is not a scientific matter but one of power. People in charge of POPL or OOPSLA have decisive sway over the careers (one is tempted to say the lives) of academics, particularly young academics, and it is a rare situation in human affairs that people who have critical power voluntarily renounce it. Maybe the POPL committee will see the light: maybe starting in 2014 it will accept all reasonable papers somehow related to “principles of programming languages”, turn the event itself into a pleasant multi-track community affair where everyone in the field can network, and hand over the selection and stamp-of-approval job to a journal such as TOPLAS. Dream on; it is not going to happen.</p>
<p>We should not, however, remain stuck with the status quo and all its drawbacks. That situation is unsustainable. As a single illustration, consider the requirement, imposed by all conferences, that having a paper pass the refereeing process is not enough: you must also register. A couple of months before the conference, authors of accepted papers (at least, they thought their paper was accepted) receive a threatening email telling them that unless they register and pay their paper will not be published after all. Now assume an author, in a field where a conference is the top token of recognition, has his visa application rejected by the country of the conference — a not so uncommon situation — and does not register. (Maybe he does not mind paying the fee, but he does not want to lie by pretending he is going to attend whereas he knows he will not.) He has lost his opportunity for publication and perhaps severely harmed this career. What have such requirements to do with science?</p>
<p>To understand what can be done, we need to analyze the role of conferences. In an earlier article  [3] I described four “modes and uses” of publication: <em>Publication</em>, <em>Exam</em>, <em>Business</em> and <em>Ritual</em>. From the organizers&#8217; viewpoint, ignoring the Business and Ritual aspects although they do play a significant role, a conference has three roles: <em>Publication</em>, <em>Communication</em> and <em>Sanction</em>. The publication part corresponds to the proceedings of the conference, which makes articles available to the community at large, not just the conference attendees. The communication part only addresses the attendees: it includes the presentation of papers as well as all other interactions made possible by being present at a conference. The sanction part (corresponding to the &#8220;exam&#8221; part of the more general classification) is the role of a renowned conference as a stamp of approval for the best work of the moment.</p>
<p>What we should do is separate these roles. A conference can play all three roles, but it can also select two of them, or even just one. A well-established, prestigious conference will want to retain its sanctioning role: accepted papers get the stamp of approval. It will also remain an event, where people meet. And it may distribute proceedings. But the three roles can also be untied:</p>
<ul>
<li>Publication is the least critical, and can easily be removed from the other two, since everything will be available on the Web. In fact the very notion of proceedings is quickly becoming fuzzy: more and more conferences save money by not distributing printed proceedings to attendees, sometimes not printing any proceedings at all; and some even spare themselves the production of a proceedings-on-a-stick, putting the material on the Web instead. A conference may still decide to have its own proceedings, or it might outsource that part to a journal. Each conference will make these decisions based on its own culture, tradition, ambition and constraints. For authors, the decision does not particularly matter: what counts are the sanction, which is provided by the refereeing process, and the availability of their material to the world, which will be provided in any scenario (at least in computer science where we have, thankfully, the permission to put our papers on our own web sites, an acquired right that our colleagues from other disciplines do not all enjoy).</li>
<li>Separating sanction from communication is a natural step. Acceptance and participation are two different things.</li>
</ul>
<p>Conference organizers should not be concerned about lost revenue: most authors will still want to participate in the conference, and will get the funding since institutions are used to pay for travel to present accepted papers; some new participants might come, attracted by more interaction-oriented conference styles; and organizers can replace the requirement to register by a choice between registering and paying a publication fee.</p>
<p>Separating the three roles does not mean that any established conference renounces its sanctioning status, acquired through the hard work of building the conference&#8217;s reputation, often over decades. But everyone gets more flexibility. Several combinations are possible, such as:</p>
<ul>
<li>Sanction without communication or publication: papers are submitted for certification through peer-review, they are available on the Web anyway, and there is no need for a conference.</li>
<li>Publication without sanction or communication: an author puts a paper on his web page or on a self-publication site such as ArXiv.</li>
<li>Sanction and communication without publication: a traditional selective conference, which does not bother to produce proceedings.</li>
<li>Communication without sanction: a working conference whose sole aim is to advance the field through presentations and discussions, and accepts any reasonable submission. It may be by invitation (a kind of advance sanction). It may have proceedings (publication) or not.</li>
</ul>
<p>Once we understand that the three roles are not inextricably tied, the stage is clear for removal for some impediments to a more effective publication culture. Some, not all. The more general problem is the rapidly changing nature of scientific publication, what may be called the <strong>concentric waves of publication</strong>. That will be the topic of the next article.</p>
<h4>References</h4>
<p>[1] Lance Fortnow: <em>Time for Computer Science to Grow Up</em>, in<em> Communications of the ACM</em>, Vol. 52, no. 8, pages 33-35, 2009, available <a href="http://cacm.acm.org/magazines/2009/8/34492-viewpoint-time-for-computer-science-to-grow-up/fulltext" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[2] Dagstuhl: Perspectives Workshop: Publication Culture in Computing Research, see <a href="https://www.dagstuhl.de/en/program/calendar/semhp/?semnr=12452" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[3] Bertrand Meyer: <em>The Modes and Uses of Scientific Publication</em>, article on this blog, 22 November 2011, see <a href="http://bertrandmeyer.com/2011/11/22/the-modes-and-uses-of-scientific-publication/"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/02/06/conferemces-publication-communication-sanction/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Master, please explain: “gun control”</title>
		<link>http://bertrandmeyer.com/2013/02/06/master-please-explain-gun-control/</link>
		<comments>http://bertrandmeyer.com/2013/02/06/master-please-explain-gun-control/#comments</comments>
		<pubDate>Wed, 06 Feb 2013 16:59:16 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Master, please explain]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3069</guid>
		<description><![CDATA[&#160; I got my definition from the NRA (they are all in favor!). “Gun control” means that, for every gun, there has to be another gun to control it.]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>I got my definition from the NRA (they are all in favor!). “Gun control” means that, for every gun, there has to be another gun to control it.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/02/06/master-please-explain-gun-control/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Master, please explain: your opinion of Facebook</title>
		<link>http://bertrandmeyer.com/2013/02/05/master-please-explain-your-opinion-of-facebook/</link>
		<comments>http://bertrandmeyer.com/2013/02/05/master-please-explain-your-opinion-of-facebook/#comments</comments>
		<pubDate>Tue, 05 Feb 2013 04:02:17 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Master, please explain]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3191</guid>
		<description><![CDATA[&#160; It&#8217;s complicated.]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>It&#8217;s complicated.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/02/05/master-please-explain-your-opinion-of-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Master, please explain: “impotence”</title>
		<link>http://bertrandmeyer.com/2013/02/02/master-please-explain-impotence/</link>
		<comments>http://bertrandmeyer.com/2013/02/02/master-please-explain-impotence/#comments</comments>
		<pubDate>Sat, 02 Feb 2013 19:19:25 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Master, please explain]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3116</guid>
		<description><![CDATA[&#160; I would like to!]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>I would like to!</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/02/02/master-please-explain-impotence/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Master, please explain: “arrogance”</title>
		<link>http://bertrandmeyer.com/2013/02/01/master-please-explain-arrogance/</link>
		<comments>http://bertrandmeyer.com/2013/02/01/master-please-explain-arrogance/#comments</comments>
		<pubDate>Fri, 01 Feb 2013 22:28:24 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Master, please explain]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3070</guid>
		<description><![CDATA[&#160; Even if I tried, you would not understand.]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Even if I tried, you would not understand.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/02/01/master-please-explain-arrogance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Master, please explain: “recursively”</title>
		<link>http://bertrandmeyer.com/2013/02/01/master-please-explain-recursively/</link>
		<comments>http://bertrandmeyer.com/2013/02/01/master-please-explain-recursively/#comments</comments>
		<pubDate>Thu, 31 Jan 2013 23:41:25 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Master, please explain]]></category>
		<category><![CDATA[Programming techniques]]></category>
		<category><![CDATA[Software engineering]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3073</guid>
		<description><![CDATA[&#160; With pleasure. To define a concept recursively is to define part of it directly and the rest, if any, recursively.]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>With pleasure. To define a concept recursively is to define part of it directly and the rest, if any, recursively.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/02/01/master-please-explain-recursively/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Your IP: does Google care?</title>
		<link>http://bertrandmeyer.com/2013/01/28/your-ip-does-google-care-2/</link>
		<comments>http://bertrandmeyer.com/2013/01/28/your-ip-does-google-care-2/#comments</comments>
		<pubDate>Sun, 27 Jan 2013 23:04:40 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[General technology]]></category>
		<category><![CDATA[Policy]]></category>
		<category><![CDATA[Publications]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Intellectual property]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3155</guid>
		<description><![CDATA[&#160; A search for my name on Google Scholar [1] shows, at the top of the resulting list, my book Object-Oriented Software Construction [2], with over 7800 citations in the scientific literature. Very nice (thanks, and keep those citations coming!). That top result is a link to a pirated version [3] of the full content [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>A search for my name on Google Scholar [1] shows, at the top of the resulting list, my book <em>Object-Oriented Software Construction</em> [2], with over 7800 citations in the scientific literature. Very nice (thanks, and keep those citations coming!).</p>
<p>That top result is a link to a pirated version [3] of the full content — 1350 pages or so — at an organization in Indonesia, “Institut Teknologi Telkom”, whose logo bears the slogan “<em>Center of Excellence in ICT</em>”. The text has been made available, along with the entire contents of several other software engineering textbooks, in a directory helpfully called “ebooks”, apparently by a user with the initials “kms”. I think I know his full name but attempts at emailing him failed. I wrote a couple of times to the site&#8217;s webmaster, who does not respond.</p>
<p>Needless to say, the work is copyrighted and that online copy is not authorized. (I realize that to some people the very idea of protecting intellectual property is anathema, but I, not they, wrote the book, and for the time being it is not public property.)</p>
<p>At least Google could avoid directing people to a pirated text as the first answer to a query about my publications. I was able to to bring the issue to the attention of someone at Google; that result is already something of a miracle, as anyone who tries to interact with a human being regarding a Google-related problem can testify. The history of that interaction, which was initially about something else, might serve as the subject for another article. The person refused to do anything and pointed me to an online tool [4] for removing search results.</p>
<p>Navigating the tool proved to be an obstacle course, starting with the absence of Google Scholar among the Google products listed (I inquired and was told to use “Web Search”). Interestingly, to use this service, you have to be logged in as a Gmail user; I do have a gmail account, but I know several people, including a famous computer scientist, who refuse to open one out of fear for their privacy. Think of the plight of someone who has a complaint against Google results affecting his privacy, and to lodge that complaint must first register as a Google user! I did not have that problem but had to navigate the obstacle course. (It includes one of those “Captchas” that are so good at preventing automatic tools from deciphering the words that humans can&#8217;t read them either — I have pretty good eyesight and still I had to try five times. Fodder for yet another article.) But I succeeded, sent my request, and got an automatic acknowledgement. Then&#8230;</p>
<p>Then nothing. No answer. The search results remain the same. No one seems to care.</p>
<p>Here is a little thought experiment. Imagine <em>you</em> violated Google&#8217;s IP, for example by posting some Google proprietary code on your Web page. Now I have a hunch that they would respond faster. Much faster. This is all pure speculation of course, and I am not advising anyone to try the experiment for real. Pure speculation.</p>
<p>In the meantime, maybe I can at least use the opportunity for some self-promotion. The book is actually pretty good, I think. You can buy it at Amazon [5] for $97.40, a bit less for a used copy. But why pay? Google invites you to read it for free. Just follow the link they obligingly provide at [1].</p>
<h4>References</h4>
<p>[1] Result of a search for <em>author:&#8221;b meyer&#8221;</em> on Google Scholar: see <a href="http://scholar.google.com/scholar?as_q=&amp;num=100&amp;btnG=Search+Scholar&amp;as_epq=&amp;as_oq=&amp;as_eq=&amp;as_occt=any&amp;as_sauthors=%22b+meyer%22&amp;as_publication=&amp;as_ylo=&amp;as_yhi=&amp;as_allsubj=some&amp;as_subj=eng&amp;hl=en&amp;lr=" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[2] Bertrand Meyer: <em>Object-Oriented Software Construction, 2nd edition</em>, Prentice Hall, 1997. See the book&#8217;s page at Eiffel Software <a href="http://docs.eiffel.com/book/method/object-oriented-software-construction-2nd-edition" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a> and the Wikipedia entry <a href="http://en.wikipedia.org/wiki/Object-oriented_Software_Construction" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>. Note that either would be appropriate for Google Scholar to identify the book.</p>
<p>[3] Bootlegged version of [1] <a href="http://www.ittelkom.ac.id/staf/kms/RPL%20OOT%202011/slide%20kuliah/ebook/oosoftwareconstruction%20bertrand%20meyer.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[4] Google: “<em>Removing content from Google</em>”, page available <a href="http://support.google.com/bin/static.py?hl=en&amp;ts=1114905&amp;page=ts.cs" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[5] Amazon book page for [1]: <a href="http://www.amazon.com/Object-Oriented-Software-Construction-CD-ROM-Edition/dp/0136291554/ref=sr_1_1?ie=UTF8&amp;qid=1359327501&amp;sr=8-1&amp;keywords=object-oriented+software+construction" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/01/28/your-ip-does-google-care-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>How good are strong specifications? (New paper, ICSE 2013)</title>
		<link>http://bertrandmeyer.com/2013/01/23/how-good-are-strong-specifications-new-paper-icse-2013/</link>
		<comments>http://bertrandmeyer.com/2013/01/23/how-good-are-strong-specifications-new-paper-icse-2013/#comments</comments>
		<pubDate>Tue, 22 Jan 2013 23:56:35 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Design by Contract]]></category>
		<category><![CDATA[Eiffel]]></category>
		<category><![CDATA[Empirical Software Engineering]]></category>
		<category><![CDATA[Paper announcement]]></category>
		<category><![CDATA[Programming techniques]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software verification]]></category>
		<category><![CDATA[Software design]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Strong specifications]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3046</guid>
		<description><![CDATA[&#160; A core aspect of our verification work is the use of “strong” contracts, which express sophisticated specification properties without requiring a separate specification language: even for advanced properties, there is no need for a separate specification language, with special notations such as those of first-order logic; instead, one can continue to rely, in the [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>A core aspect of our verification work is the use of “strong” contracts, which express sophisticated specification properties without requiring a separate specification language: even for advanced properties, there is no need for a separate specification language, with special notations such as those of first-order logic; instead, one can continue to rely, in the tradition of Design by Contract, on the built-in notations of the programming language, Eiffel.</p>
<p>This is the idea of domain theory, as discussed in earlier posts on this blog, in particular [1]. An early description of the approach, part of Bernd Schoeller&#8217;s PhD thesis work, was [2]; the next step was [3], presented at VSTTE in 2010.</p>
<p>A new paper to be presented at ICSE in May [3], part of an effort led by Nadia Polikarpova for her own thesis in progress, shows new advances in using strong specifications, demonstrating their expressive power and submitting them to empirical evaluation. The results show in particular that strong specifications justify the extra effort; in particular they enable automatic tests to find significantly more bugs.</p>
<p>A byproduct of this work is to show again the complementarity between various forms of verification, including not only proofs but (particularly in the contribution of two of the co-authors, Yi Wei and Yu Pei, as well as Carlo Furia) tests.</p>
<h4>References</h4>
<p>[1] Bertrand Meyer: <em>Domain Theory: the forgotten step in program verification, article on this blog</em>, see <a style="color: #0000ff; text-decoration: underline;" href="http://bertrandmeyer.com/2012/04/11/domain-theory-the-forgotten-step-in-program-verification/">here</a>.</p>
<p>[2] Bernd Schoeller, Tobias Widmer and Bertrand Meyer: <em>Making Specifications Complete Through Models</em>, in <em>Architecting Systems with Trustworthy Components</em>, eds. Ralf Reussner, Judith Stafford and Clemens Szyperski, Lecture Notes in Computer Science, Springer-Verlag, 2006, available <a href="http://se.ethz.ch/~meyer/publications/lncs/model_library.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[3] Nadia Polikarpova, Carlo Furia and Bertrand Meyer: <em>Specifying Reusable Components</em>, in <em>Verified Software: Theories, Tools, Experiments</em> (VSTTE &#8216; 10), Edinburgh, UK, 16-19 August 2010, Lecture Notes in Computer Science, Springer Verlag, 2010, available <a href="http://se.ethz.ch/~meyer/publications/proofs/components-vstte.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[4] Nadia Polikarpova, Carlo A. Furia, Yu Pei, Yi Wei and Bertrand Meyer:<em> What Good Are Strong Specifications</em>?, to appear in ICSE 2013 (Proceedings of 35th International Conference on Software Engineering), San Francisco, May 2013, draft available <a href="http://se.ethz.ch/~meyer/publications/methodology/strong_specifications_icse.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/01/23/how-good-are-strong-specifications-new-paper-icse-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interesting functionalities</title>
		<link>http://bertrandmeyer.com/2013/01/08/fun-with-pushkin-and-featurism/</link>
		<comments>http://bertrandmeyer.com/2013/01/08/fun-with-pushkin-and-featurism/#comments</comments>
		<pubDate>Tue, 08 Jan 2013 18:56:58 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[General technology]]></category>
		<category><![CDATA[Writing and style]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Pushkin]]></category>
		<category><![CDATA[Translation]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3035</guid>
		<description><![CDATA[Admittedly the number of people who will find the following funny, or of any interest at all, is pretty limited, so it is a good bet that about 99.86% of the faithful readers of this blog can safely wait for the next post. To appreciate the present one you must be a French-speaking nerd with [...]]]></description>
			<content:encoded><![CDATA[<p>Admittedly the number of people who will find the following funny, or of any interest at all, is pretty limited, so it is a good bet that about 99.86% of the faithful readers of this blog can safely wait for the next post. To appreciate the present one you must be a French-speaking nerd with an interest in both Pushkin&#8217;s poetry and Bayesian language translation. Worse, you must have a sense of the comic that somehow matches mine. (Then let&#8217;s make that 99.98%.)</p>
<p>Anyway, if you are still with me: there is a famous Pushkin love poem entitled <em>Я помню чудное мгновенье</em>&#8230;: “I remember the magic moment&#8230;” (the moment when he first saw her). I have no idea why I fed it into Google Translate; sheer idleness I suppose. In the line</p>
<blockquote><p><em>И снились милые черты</em></p></blockquote>
<p>the poet states that the delicate features of his beloved came to him in his sleep. Literally: “And [your] gentle [face's] features came to my dreams”.</p>
<p>Google renders this into French as “Et rêvé de fonctionnalités intéressantes”:<em> And dreamed of interesting functionalities</em>. (The direct translation to English is less fun.)</p>
<p>Kudos to Google for capturing the subtle mood of 21st-century  passion. When the true nerd — I know what I am talking about — feels romantic, falls asleep, and starts dreaming, we now know what he dreams of: interesting functionalities.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/01/08/fun-with-pushkin-and-featurism/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multirequirements (new paper)</title>
		<link>http://bertrandmeyer.com/2013/01/04/multirequirements-new-paper/</link>
		<comments>http://bertrandmeyer.com/2013/01/04/multirequirements-new-paper/#comments</comments>
		<pubDate>Fri, 04 Jan 2013 11:36:28 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Design by Contract]]></category>
		<category><![CDATA[Eiffel]]></category>
		<category><![CDATA[Formal methods and proofs]]></category>
		<category><![CDATA[Language design]]></category>
		<category><![CDATA[Object technology]]></category>
		<category><![CDATA[Paper announcement]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software design]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2901</guid>
		<description><![CDATA[&#160; As part of a Festschrift volume for Martin Glinz of the university of Zurich I wrote a paper [1] describing a general approach to requirements that I have been practicing and developing for a while, and presented in a couple of talks. The basic idea is to rely on object-oriented techniques, including contracts for [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>As part of a Festschrift volume for Martin Glinz of the university of Zurich I wrote a paper [1] describing a general approach to requirements that I have been practicing and developing for a while, and presented in a couple of talks. The basic idea is to rely on object-oriented techniques, including contracts for the semantics, and to weave several levels of discourse: natural-language, formal and graphical.</p>
<h4>Reference</h4>
<p>[1] Bertrand Meyer: <em>Multirequirements</em>, to appear in <em>Martin Glinz Festschrift</em>, eds. Anne Koziolek and Norbert Scheyff, 2013, available <a href="http://se.ethz.ch/~meyer/publications/methodology/multirequirements.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2013/01/04/multirequirements-new-paper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ESEC/FSE 2013: 18-26 August, Saint Petersburg, Russia</title>
		<link>http://bertrandmeyer.com/2012/12/17/esecfse-2013-18-26-august-saint-petersburg-russia/</link>
		<comments>http://bertrandmeyer.com/2012/12/17/esecfse-2013-18-26-august-saint-petersburg-russia/#comments</comments>
		<pubDate>Mon, 17 Dec 2012 15:56:41 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[Programming techniques]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software process]]></category>
		<category><![CDATA[Software verification]]></category>
		<category><![CDATA[Software design]]></category>
		<category><![CDATA[ESEC]]></category>
		<category><![CDATA[ESEC/FSE]]></category>
		<category><![CDATA[FSE]]></category>
		<category><![CDATA[Herzen]]></category>
		<category><![CDATA[Saint-Petersburg]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=3016</guid>
		<description><![CDATA[The European Software Engineering Conference takes place every two years in connection with the ACM Foundations of Software Engineering symposium (which in even years is in the US). The next ESEC/FSE  will be held for the first time in Russia, where it will be the first major international software engineering conference ever. It comes at [...]]]></description>
			<content:encoded><![CDATA[<p>The European Software Engineering Conference takes place every two years in connection with the ACM Foundations of Software Engineering symposium (which in even years is in the US). The next ESEC/FSE  will be held for the first time in Russia, where it will be the first major international software engineering conference ever. It comes at a time when the Russian software industry is ever more present through products and services offered worldwide. See the conference site <a href="http://esec-fse.inf.ethz.ch/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>. The main conference will be held 21-23 August 2013, with associated events before and after so that the full dates are August 18 to 26. (I am the general chair.)</p>
<p>Other than ICSE, ESEC/FSE is second to none in the quality of the program. We already have four outstanding keynote speakers:  Georges Gonthier from Microsoft Research, Paola Inverardi from L&#8217;Aquila in Italy, David Notkin from U. of Washington (in whose honor a symposium will be held as an associated event of ESEC/FSE, chaired by Michael Ernst), and Moshe Vardi of Rice and of course <em>Communications of the ACM</em>.</p>
<p>Saint Petersburg is one of the most beautiful cities in the world, strewn with gilded palaces, canals, world-class museums (not just the Hermitage), and everywhere mementos of the great poets, novelists, musicians and scientists who built up its fame.</p>
<p>Hosted by ITMO National Research University, the conference will be held in the magnificent building of the Razumovsky Palace on the banks of the Moika river; see <a style="color: #0000ff; text-decoration: underline;" href="http://esec-fse.inf.ethz.ch/venue.html" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>The Call for Papers has a deadline of March 1st, so there is still plenty of time to polish your best paper and send it to ESEC/FSE. There is also still time to propose worskhops and other associated events. ESEC/FSE will be a memorable moment for the community and we hope to see many of the readers there.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2012/12/17/esecfse-2013-18-26-august-saint-petersburg-russia/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A Pretty Good Motto</title>
		<link>http://bertrandmeyer.com/2012/12/12/a-pretty-good-motto/</link>
		<comments>http://bertrandmeyer.com/2012/12/12/a-pretty-good-motto/#comments</comments>
		<pubDate>Wed, 12 Dec 2012 06:39:06 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Saady]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2938</guid>
		<description><![CDATA[Antoine Galland (1646-1715), one of the great orientalists of the classical age, was sent by the government of Louis XIV to the court of the Sultan. Among his many discoveries he revealed the Thousand and One Nights and other Arabian Tales to the Western public through his French translation, Les Mille et Unes Nuits, Paris [...]]]></description>
			<content:encoded><![CDATA[<p>Antoine Galland (1646-1715), one of the great orientalists of the classical age, was sent by the government of Louis XIV to the court of the Sultan. Among his many discoveries he revealed the Thousand and One Nights and other Arabian Tales to the Western public through his French translation, <em>Les Mille et Unes Nuits</em>, Paris 1704-1717. The diary from his stay in Constantinople in 1672-1673 was published and annotated by Charles Schefer in 1881 [1].</p>
<p>On page 133 of volume 2 I found this “litteral translation of a quatrain attributed to Saady” , presumably Abū-Muhammad Muslih al-Dīn bin Abdallāh Shīrāzī, Persian poet born in 1184 and according to Wikipedia deceased in either 1281 or 1303. I have not seen it anywhere else, and it seems like a pretty good motto [2]:</p>
<blockquote>
<p style="font-style: italic; font-weight: bold;">Think back to the time when you came to the world. Everyone around you was in joy, and you were crying.<br />
Apply all your strength so that when you die, all will be in grief and you alone will smile.</p>
</blockquote>
<h4>Reference and note</h4>
<p>[1] <em>Journal d&#8217;Antoine Galland pendant son Séjour à Constantinople (1672-1673), publié et annoté par Charles Schefer</em> (2 volumes), Ernest Leroux, Paris, 1881.</p>
<p>[2] My translation. Galland&#8217;s original, which also includes the Persian quote (below) reads:</p>
<blockquote>
<p style="font-style: italic; font-weight: bold;">Réfléchis à l&#8217;instant où tu es venu au monde. Ceux qui t&#8217;entouraient étaient dans la joie et toi tu pleurais. Fais tous tes efforts pour qu&#8217;au moment de ton trépas, tout le monde soit plongé dans la douleur et toi seul souriant.</p>
<p><em>Ces vers sont une traduction littérale d&#8217;un quatrain persan attribué à Saady.</em></p>
</blockquote>
<p style="text-align: center;"><a href="http://bertrandmeyer.com/2012/12/12/a-pretty-good-motto/saady/" rel="attachment wp-att-2947"><img class="size-full wp-image-2947 aligncenter" title="saady" src="http://bertrandmeyer.com/wp-content/upLoads/saady.jpg" alt="Saady's original as cited by Galland" width="284" height="57" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2012/12/12/a-pretty-good-motto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Negative variables and the essence of object-oriented programming (new paper)</title>
		<link>http://bertrandmeyer.com/2012/12/11/negative-variables-and-the-essence-of-object-oriented-programming-new-paper/</link>
		<comments>http://bertrandmeyer.com/2012/12/11/negative-variables-and-the-essence-of-object-oriented-programming-new-paper/#comments</comments>
		<pubDate>Tue, 11 Dec 2012 06:01:57 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Eiffel]]></category>
		<category><![CDATA[Formal methods and proofs]]></category>
		<category><![CDATA[Language design]]></category>
		<category><![CDATA[Object technology]]></category>
		<category><![CDATA[Paper announcement]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software verification]]></category>
		<category><![CDATA[Theory]]></category>
		<category><![CDATA[general relativity]]></category>
		<category><![CDATA[Negative variable]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2972</guid>
		<description><![CDATA[In modeling object-oriented programs, for purposes of verification (proofs) or merely for a better understanding, we are faced with the unique “general relativity” property of OO programming: all the operations you write (excluding non-OO mechanisms such as static functions) are expressed relative to a “current object” which changes repeatedly execution. More precisely at the start [...]]]></description>
			<content:encoded><![CDATA[<p>In modeling object-oriented programs, for purposes of verification (proofs) or merely for a better understanding, we are faced with the unique “general relativity” property of OO programming: all the operations you write (excluding non-OO mechanisms such as static functions) are expressed relative to a “current object” which changes repeatedly execution. More precisely at the start of a call <span style="color: #0000ff;"><em>x.r</em> (&#8230;)</span> and for the duration of that call the current object changes to whatever <span style="color: #0000ff;"><em>x</em></span> denotes — but to determine that object we must again interpret <span style="color: #0000ff;"><em>x</em></span> in the context of the previous current object. This raises a challenge for reasoning about programs; for example in a routine the notation <span style="color: #0000ff;"><em>f.some_reference</em></span>, if <span style="color: #0000ff;"><em>f</em></span> is a formal argument, refers to objects in the context of the calling object, and we cannot apply standard rules of substitution as in the non-OO style of handling calls.</p>
<p>In earlier work [1, 2] initially motivated by the development of the Alias Calculus, I introduced a notion of <em>negative variable</em> to deal with this issue. During the execution of a call <span style="color: #0000ff;"><em>x.r</em> (&#8230;)</span> the negation of <span style="color: #0000ff;"><em>x</em></span> , written <span style="color: #0000ff;"><em>x&#8217;</em></span>, represents a back pointer to the calling object; negative variables are characterized by axiomatic properties such as <span style="color: #0000ff;"><em>x.x&#8217;= </em><strong>Current</strong></span> and <span style="color: #0000ff;"><em>x&#8217;.</em>(<strong>old</strong><em> x</em>)<em>= </em><strong>Current</strong></span>. Alexander Kogtenkov has implemented these ideas and refined them.</p>
<p><a href="http://bertrandmeyer.com/2012/12/11/negative-variables-and-the-essence-of-object-oriented-programming-new-paper/negative/" rel="attachment wp-att-2991"><img title="Negative" src="http://bertrandmeyer.com/wp-content/upLoads/negative-500x298.jpg" alt="Negative variable as back pointer" width="311" height="185" /></a></p>
<p>In a recent paper under submission [3], we review the concepts and applications of negative variables.</p>
<h4>References</h4>
<p>[1] Bertrand Meyer: <em>Steps Towards a Theory and Calculus of Aliasing</em>, in <em>International Journal of Software and Informatics</em>, 2011, available <a href="http://se.ethz.ch/~meyer/publications/aliasing/alias-broy.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[2] Bertrand Meyer: <em>Towards a Calculus of Object Programs</em>, in <em>Patterns, Programming and Everything</em>, Judith Bishop Festschrift, eds. Karin Breitman and Nigel Horspool, Springer-Verlag, 2012, pages 91-128, available <a href="http://se.ethz.ch/~meyer/publications/proofs/cop.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[3] Bertrand Meyer and Alexander Kogtenkov: <em>Negative Variables and the Essence of Object-Oriented Programming</em>, submitted for publication, 2012, draft available <a href="http://se.ethz.ch/~meyer/publications/proofs/negative.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2012/12/11/negative-variables-and-the-essence-of-object-oriented-programming-new-paper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
