<?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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Bertrand Meyer's technology blog</title>
	
	<link>http://bertrandmeyer.com</link>
	<description>Software engineering, programming methodology, programming  languages, software verification, general technology</description>
	<lastBuildDate>Fri, 27 Apr 2012 13:34:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<feedburner:info uri="bertrandmeyer" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://bertrandmeyer.com/feed/" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Fbertrandmeyer.com%2Ffeed%2F" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Fbertrandmeyer.com%2Ffeed%2F" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Fbertrandmeyer.com%2Ffeed%2F" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://bertrandmeyer.com/feed/" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Fbertrandmeyer.com%2Ffeed%2F" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Fbertrandmeyer.com%2Ffeed%2F" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Fbertrandmeyer.com%2Ffeed%2F" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Fbertrandmeyer.com%2Ffeed%2F" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Fbertrandmeyer.com%2Ffeed%2F" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Fbertrandmeyer.com%2Ffeed%2F" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Fbertrandmeyer.com%2Ffeed%2F" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Fbertrandmeyer.com%2Ffeed%2F" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Fbertrandmeyer.com%2Ffeed%2F" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Fbertrandmeyer.com%2Ffeed%2F" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Fbertrandmeyer.com%2Ffeed%2F" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Fbertrandmeyer.com%2Ffeed%2F" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Fbertrandmeyer.com%2Ffeed%2F" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Fbertrandmeyer.com%2Ffeed%2F" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Fbertrandmeyer.com%2Ffeed%2F" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>Talks in coming months</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/ZMsFF__RDWA/</link>
		<comments>http://bertrandmeyer.com/2012/04/26/talks-in-coming-months/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 17:31:15 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Talks]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2358</guid>
		<description><![CDATA[Here is a list of some presentations I am scheduled to give in the near future. Time for the faithful followers of this blog to start organizing groupie trips and get ready to haggle with the ticket scalpers and queue up at 3 AM for the best seats.]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Here is a list of some presentations I am scheduled to give in the near future. Time for the faithful followers of this blog to start organizing groupie trips and get ready to haggle with the ticket scalpers and queue up at 3 AM for the best seats.</p>
<p>On May 9 I will give a talk in Paris, at Valtech, on the topic “Eiffel: Objects, Languages, Concurrency” [1]. It will be a general overview talk (in French) describing the key concepts of the Eiffel method and new developments.</p>
<p>On May 17 I will give a keynote at the Russian conference on IT education [2]. I haven&#8217;t sent a title and abstract yet but will talk about our experience of teaching introductory programming at ETH, now for 9 years, supported by the <em>Touch of Class</em> textbook which is now available in Russian. The talk itself will be in Russian.</p>
<p>On Tuesday, 29 May, I will give a keynote at TOOLS EUROPE in Prague [2]. This is the 50th TOOLS conference, a milestone, and I will talk on the theme of the conference, “<em>The Triumph of Objects</em>”, to assess the impact of object technology on the field of IT.</p>
<p>I am also giving a keynote at MSEPT (Multicore Software Engineering, Performance and Tools) the same week, on May 31. MSEPT [4] is co-located with TOOLS in Prague. The title of my presentation is “<em>Concurrent Programming is Easy</em>” and I will in particular present new developments in the SCOOP model and our first steps in the Concurrency Made Easy ERC Advanced Investigator Project. In addition I will be participating in two Eiffel-related workshops at TOOLS, WAVE on Advances in Verification for Eiffel, May 29 [5], where we are submitting several papers, and the third “Eiffel Web Design Feast” on May 30, part of a community project that is building an Eiffel-based Web development framework [6].</p>
<p>On June 5 I am giving an invited talk at the New Faculty Symposium of ICSE (International Conference on Software Engineering) in Zurich [7]. The title (assigned by the organizers) is “Promoting your ideas”. I did warn the organizers that this would be a contrarian talk as I find the current computer science publication culture in need of a reboot — this is the goal of the November Dagstuhl workshop mentioned below — but they said it was OK; I might even have heard the word “welcome” at some point.</p>
<p>On June 12 I will deliver a keynote at the International Conference on Reliable Software Technologies, also known as Ada-Europe, in Stockholm  [8]. The Ada community remains significant and is becoming interested in contracts, hence the subject of my talk: Life with Contracts. I will summarize the experience gained in applying Design by Contract as a core principle throughout development, and the next steps in developing the approach.</p>
<p>On June 24 I am  on one of the two panels at the Alan Turing Centenary Conference in Manchester [9]; the panel is entitled <em>The Big Questions in Computation, Intelligence and Life</em>.</p>
<p>In Seattle, 16-20 July, I look forward to presenting our latest verification ideas to the other members of the IFIP Working Group 2.3 on programming methodology [10]; this is the toughest and most unforgiving audience I know, but their feedback has always proved invaluable.</p>
<p>The next set of talks (apart from a possible presentation at the Snowbird conference in July, which I haven&#8217;t confirmed yet) is at our LASER summer school in Elba, September 2-8 [11], where I will deliver a set of lectures entitled<em> Eiffel: a study in language design and evolution</em>; it will be an in-depth discussion of issues that arise in devising a quality-focused programming language and managing its continued refinement over a long period, focusing on a few key design principles.</p>
<p>A few weeks later, on September 26, in Natal, I will present a keynote at the Brazilian software engineering conference, SBES [12]. I will talk about concurrency again, hoping of course to have new results to showcase by then.</p>
<p>Another event in which I am involved and expect to give a presentation is a Dagstuhl “Perspectives” workshop on the Publication Culture in Computer Science, November 6-9 [13]. The workshop was set up on the initiative of Moshe Vardi and I am one of the organizers. There is a widespread feeling that the publication model of computer science is broken; a number of articles in this blog have discussed the issues. At Dagstuhl we hope to be able to start fixing the process. Stay tuned.</p>
<h4>References</h4>
<p>[1] Talk at Valtech, 9 May 2012, information <a href="http://blog.valtech.fr/wordpress/2012/04/18/valtech-accueille-bertrand-meyer-pour-une-conference-le-9-mai-2012-a-paris/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[2] <em>10th All-Russian conference on IT education</em>, Moscow, 16-18 May 2012, conference page <a href="http://2012.ит-образование.рф/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[3] <em>TOOLS Europe 2012</em>, Prague, 28 May &#8211; 1 June 2012, conference page <a href="http://tools2012.fit.cvut.cz/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[4] <em>MSEPT: International Conference on Multicore Software Engineering, Performance, and Tools</em>, Prague, 31 May &#8211; June 1, 2012, conference page <a href="http://www.multicore-systems.org/msept" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[5] <em>Workshop on Advances in Verification for Eiffel (WAVE)</em>, Prague, 29 May 2012, workshop page <a href="http://wave.inf.ethz.ch/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[6] <em>Eiffel Web Design Feast</em>, Prague, 30 May 2012, call for participation available <a href="http://dev.eiffel.com/Eiffel_Design_Feast_May-2012" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[7] <em>New Faculty Symposium</em> at the International Conference on Software Engineering (ICSE), Zurich, 5 June 2012, symposium page <a href="http://www.ifi.uzh.ch/icse2012/program/new-faculty-symposium/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[8] <em>17th International Conference on Reliable Software Technologies</em> (Ada Europe 2012), Stockholm, 11-15 June 2012, conference page <a href="http://www.cister.isep.ipp.pt/ae2012/keynote" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[9] <em>Alan Turing Centenary Conference</em>, Manchester, 11-25 June 2012, conference page <a href="http://www.turing100.manchester.ac.uk/index.php/programme/programme" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[10] IFIP TC2-WG2.3 (Working group on Programming Methodology), group page <a href="http://research.microsoft.com/en-us/um/people/leino/ifip-wg2.3/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a> (meetings by invitation only).</p>
<p>[11] <em>LASER summer school 2012</em>, Innovative Languages for Software Engineering, 2-8 September 2012 (other speakers are Andrei Alexandrescu on D, Roberto Ierusalimschy on Lua, Ivar Jacobson on UML and SEMAT, Eric Meijer on C# and Linq, Martin Odersky on Scala, Simon Peyton-Jones on Haskell, and Guido van Rossum on Python; school page <a href="http://se.ethz.ch/laser" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[12] <em>XXVI Brazilian Symposium on Software Engineering</em> (SBES), part of CBSoft (3rd Brazilian Conference on Software: Theory and Practice), Natal, 23-28 September 2012, symposium page <a href="http://www.cbsoft.dimap.ufrn.br/sbes_palestras.php" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[13] <em>Perspectives Workshop</em>: Publication Culture in Computing Research (by invitation), Dagstuhl, 6-9 November 2012, workshop page <a href="http://www.dagstuhl.de/en/program/calendar/semhp/?semnr=12452" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/ZMsFF__RDWA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2012/04/26/talks-in-coming-months/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2012/04/26/talks-in-coming-months/</feedburner:origLink></item>
		<item>
		<title>Domain Theory: precedents</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/86DLZSVK6U4/</link>
		<comments>http://bertrandmeyer.com/2012/04/17/domain-theory-precedents/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 07:36:20 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Formal methods and proofs]]></category>
		<category><![CDATA[Language design]]></category>
		<category><![CDATA[Programming techniques]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software process]]></category>
		<category><![CDATA[Software verification]]></category>
		<category><![CDATA[Theory]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2408</guid>
		<description><![CDATA[Both Gary Leavens and Jim Horning commented (partly here, partly on Facebook) about my Domain Theory article [1] to mention that Larch had mechanisms for domain modeling and specification reuse. As Horning writes: The Larch Shared Language was really all about creating reusable domain theories, including theorems about the domains.  See, for example [2] and [...]]]></description>
			<content:encoded><![CDATA[<p>Both Gary Leavens and Jim Horning commented (partly here, partly on Facebook) about my Domain Theory article [1] to mention that Larch had mechanisms for domain modeling and specification reuse. As Horning writes:</p>
<blockquote><p><em>The Larch Shared Language was really all about creating reusable domain theories, including theorems about the domains.  See, for example [2] and [3].</em></p></blockquote>
<p>I am honored that they found the time to write about the article and happy to acknowledge Larch, one of the most extensive efforts, over several decades, to provide serious notations and tools for specification. Leavens&#8217;s and Horning&#8217;s messages gave me the opportunity to re-read some Larch papers and discover a couple I did not know.</p>
<p>My article did not try to provide exhaustive references; if it had, Larch would have been among them. I would probably have cited my own paper on M [4], earlier than [3], which introduces a notation for composing specifications; see section 1.4 (“<em>Features of the M method and the associated notation have thus been devised to allow for modular descriptions of systems. A system description may include an interface paragraph that describes the connection of the current specification with others, existing or yet to be written</em>”) and the  presentation of these mechanisms in section 5.</p>
<p>Larch traits, described in [3], pursue a similar aim, but the earlier article cited by Horning [2] is a general, informal discussion of formal specification; it does not mention traits, and in fact does not cite Larch, stating instead “<em>We have experimented with the use of two very different tools, PIE and Affirm, in constructing modest sized algebraic specifications</em>”. Its general observations about the specification task remain useful today, and it does mention reuse in passing.</p>
<p>If we were to look for precedents, the basic source would have to be the Clear specification language of Goguen and Burstall, for which the citations [5, 6, 7] all appear in my M paper [4] and go back further: 1977-1981. Clear made a convincing case for modularizing specifications, and defined supporting language constructs.</p>
<p>Since these early publications, many people have come to realize that reuse and composition can be as useful on the specification side as they are for programming. Typical specification and verification techniques, however, do not take advantage of this idea and tend to make us restart every time from the lowest level. Domain Theory, as outlined in [1], is intended to bring abstraction, which has proved so beneficial in other parts of software engineering, to the world of specification.</p>
<h4>References</h4>
<p>[1] <em>Domain Theory: The Forgotten step in program verification</em>, an article in this blog, see <a href="http://bertrandmeyer.com/2012/04/11/domain-theory-the-forgotten-step-in-program-verification/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[2] John V. Guttag, James J. Horning, Jeannette M. Wing: <em>Some Notes on Putting Formal Specifications to Productive Use</em>, in <em>Science of Computer Programming</em>, vol. 2, no. 1, 1982, pages 53-68. (BM note: I found a copy <a href="http://www.sciencedirect.com/science/journal/01676423/2/1" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.)</p>
<p>[3] John V. Guttag, James J. Horning: A Larch Shared Language Handbook, in <em>Science of Computer Programming</em>, vol. 6, no. 2, 1986, pages 135-157. (BM note: I found a copy <a href="http://www.sciencedirect.com/science/journal/01676423/6" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>, which also has a link to the Larch report.)</p>
<p>[4] Bertrand Meyer: <em>M: A System Description Method</em>, Technical Report TR CS 85-15, University of California, Santa Barbara, 1985, available <a href="http://se.ethz.ch/~meyer/publications/specification/M_method.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[5] Rod M. Burstall and Joe A. Goguen: <em>Putting Theories Together to Make Specifications</em>, in <em>Proceedings of 5th International Joint Conference on Artificial Intelligence</em>, Cambridge (Mass.), 1977, pages 1045- 1058.</p>
<p>[6] Rod M. Burstall and Joe A. Goguen: &#8220;The Semantics of Clear, a Specification Language,&#8221; in <em>Proceedings of Advanced Course on Abstract Software Specifications</em>, Copenhagen, Lecture Notes on Computer Science 86, Copenhagen, Springer-Verlag, 1980, pages 292-332, available <a href="http://www.springerlink.com/content/77k87055jt3068t8/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[7] Rod M. Burstall and Joe A. Goguen: <em>An Informal Introduction to Specifications using Clear</em>, in <em>The Correctness Problem in Computer Science</em>, eds R. S. Boyer and JJ. S. Moore, Springer-Verlag, 1981, pages 185-213.</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/86DLZSVK6U4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2012/04/17/domain-theory-precedents/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2012/04/17/domain-theory-precedents/</feedburner:origLink></item>
		<item>
		<title>Domain Theory: the forgotten step in program verification</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/FkcCWdT4IrU/</link>
		<comments>http://bertrandmeyer.com/2012/04/11/domain-theory-the-forgotten-step-in-program-verification/#comments</comments>
		<pubDate>Wed, 11 Apr 2012 13:04:13 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Essay]]></category>
		<category><![CDATA[Language design]]></category>
		<category><![CDATA[Object technology]]></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>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2281</guid>
		<description><![CDATA[&#160; Program verification is making considerable progress but is hampered by a lack of abstraction in specifications. A crucial step is, almost always, absent from the process; this omission is the principal obstacle to making verification a standard component of everyday software development. Steps in software verification In the first few minutes of any introduction [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Program verification is making considerable progress but is hampered by a lack of abstraction in specifications. A crucial step is, almost always, absent from the process; this omission is the principal obstacle to making verification a standard component of everyday software development.</p>
<h2>Steps in software verification</h2>
<p>In the first few minutes of any introduction to program verification, you will be told that the task requires two artifacts: a program, and a specification. The program describes what executions will do; the specification, what they are supposed to do. To verify software is to ascertain that the program matches the specification: that it does is what it should.</p>
<p>The consequence usually drawn is that verification consists of three steps: write a specification, write a program, prove that the program satisfies the specification. The practical process is of course messier, if only because the first two steps may occur in the reverse order and, more generally, all three steps are often intertwined: the specification and the program influence each other, in particular through the introduction of “verification conditions” into the program; and initial proof attempts will often lead to changes in both the specification and the program. But by and large these are the three accepted steps.</p>
<p>Such a description misses a fourth step, a prerequisite to specification that is essential to a scalable verification process: <em>Domain Theory. </em>Any program addresses a specific domain of discourse, be it the domain of network access and communication for a mobile phone system, the domain of air travel for a flight control system, of companies and shares for a stock exchange system and so on. Even simple programs with a limited scope, such as the computation of the maximum of an array, use a specific domain beyond elementary mathematics. In this example, it is the domain of arrays, with their specific properties: an array has a range, a minimum and maximum indexes in that range, an associated sequence of values; we may define a slice <span style="color: #0000ff;"><em>a</em> [<em>i</em>..<em>j</em>]</span>, ask for the value associated with a given index, replace an element at a given index and so on. The Domain Theory provides a formal model for any such domain, with the appropriate mathematical operations and their properties. In the example the operations are the ones just mentioned, and the properties will include the axiom that if we replace an element at a certain index <span style="color: #0000ff;"><em>i</em></span> with a value <span style="color: #0000ff;"><em>v</em></span> then access the element at an index <span style="color: #0000ff;"><em>j</em></span>, the value we get is <span style="color: #0000ff;"><em>v</em></span> if <span style="color: #0000ff;"><em>i </em>=<em> j</em></span>, and otherwise the earlier value at <span style="color: #0000ff;"><em>j</em></span>.</p>
<h2>The role of a Domain Theory</h2>
<p>The task of devising a Domain Theory is to describe such a domain of reference, in the spirit of abstract data types: by listing the applicable operations and their properties. If we do not treat this task as a separate step, we end up with the kind of specification that works for toy examples but quickly becomes unmanageable for real-life applications. Most of the verification literature, unfortunately, relies on such specifications. They lack abstraction since they keep using the lowest-level mathematical objects and constructs, such as numbers and quantified expressions. They are to specification what assembly language is to modern programming.</p>
<p>Dines Bjørner has for a long time advocated a closely related idea, <em>domain engineering</em>; see for example his book in progress [1]. Unfortunately, he does not take advantage of modularization through abstract data types; the book is an example of always-back-to-the-basics specification, resorting time and again to fully explicit specifications based on a small number of mathematical primitives, and as a consequence making formal specification look difficult.</p>
<h2>Maximum computed from both ends</h2>
<p>As a simple example of modeling through an abstract theory consider an algorithm for computing the maximum of an array. We could use the standard technique that goes through the array one-way, but for variety let us take the algorithm that works from both ends, moving two integer cursors towards each other until they meet.  (This example was used in a verification competition at a recent conference, I forgot which one.) The code looks like this:</p>
<p><a href="http://bertrandmeyer.com/2012/04/11/domain-theory-the-forgotten-step-in-program-verification/twowaymax-8/" rel="attachment wp-att-2397"><img class="alignnone size-full wp-image-2397" title="Two-way maximum" src="http://bertrandmeyer.com/wp-content/upLoads/twowaymax7.jpg" alt="Two-way maximum" width="563" height="377" /></a></p>
<p>The specification, expressed by the postcondition (<span style="color: #0000ff;"><strong>ensure</strong></span>) should state that <span style="color: #0000ff;"><strong>Result</strong></span> is the maximum of the array; the loop invariant will be closely related to it. How do we express these properties? The obvious way is not the right way. It states the postcondition as something like</p>
<p style="padding-left: 30px;"><span style="color: #0000ff;">∀ <em>k: </em>Z<em> | </em>(<em>k</em> ≥ <em>a.lower</em> ∧ <em>k</em> ≤ <em>a.upper</em>)<em> </em>⇒<em> a </em>[<em>k</em>] ≤ <strong>Result</strong></span></p>
<p style="padding-left: 30px;"><span style="color: #0000ff;">∃<em> k: </em>Z<em> | k</em> ≥ <em>a.lower</em> ∧ <em>k</em> ≤ <em>a.upper </em>∧<em> a </em>[<em>k</em>] = <strong>Result</strong></span></p>
<p>In words, <span style="color: #0000ff;"><strong>Result</strong></span> is at least as large as every element of the array, and is equal to at least one of the elements of the array. The invariant can also be expressed in this style (try it).</p>
<p>The preceding specification expresses the desired property, but it is of an outrageously lower level than called for. The notion of maximum is a general one for arrays over an ordered type. It can be computed through many different algorithms in addition to the one shown above, and exists independently of these algorithms. The detailed, assembly-language-like definition of its properties should not have to be repeated in every case. It should be part of the <strong>Domain Theory</strong> for the underlying notion, arrays.</p>
<h2>A specification at the right level of abstraction</h2>
<p>In a Domain Theory for arrays of elements from an ordered set, one of the principal operations is <span style="color: #0000ff;"><em>maximum</em></span>, satisfying the above properties. The definition of <span style="color: #0000ff;"><em>maximum </em></span>through these properties belongs at the Domain Theory level. The Domain Theory should include that definition, independent of any particular computational technique such as <span style="color: #0000ff;"><em>two_way_max</em></span>. Then the routine’s postcondition, relying on this notion from the Domain Theory, becomes simply</p>
<p style="padding-left: 30px;"><span style="color: #0000ff;"><strong>Result</strong> = <em>a.maximum</em></span></p>
<p>The application of this approach to the loop invariant is particularly interesting. If you tried to write it at the lowest level, as suggested above, you should have produced something like this:</p>
<p style="padding-left: 30px;"><span style="color: #0000ff;"><em>a.lower</em> ≤ <em>i</em> ≤ <em>j</em> ≤ <em>a.upper</em></span></p>
<p style="padding-left: 30px;"><span style="color: #0000ff;">∃ <em>k</em>:<em> </em>Z<em> | k</em> ≥ <em>i</em> ∧ <em>k</em> ≤ <em>j </em>∧ (∀ <em>l: </em>Z<em> | l </em> ≥ <em>a.lower</em> ∧ <em>l </em> ≤ <em>a.upper </em>⇒<em> a </em>[<em>l</em>] ≤ <em>a</em> [<em>k</em>])</span></p>
<p>The first clause is appropriate but the rest is horrible! With its nested quantified expressions it gives an impression of great complexity for a property that is in fact straightforward, simple enough in fact to be explained to a 10-year-old: <strong>the maximum of the entire array can be found between indexes </strong><span style="color: #0000ff;"><em>i</em></span><strong> and </strong><span style="color: #0000ff;"><em>j</em></span>. In other words, it is also the maximum of the array slice going from <span style="color: #0000ff;"><em>i</em></span> to <span style="color: #0000ff;"><em>j</em></span>. The Domain Theory will define the notion of slice and enable us to express the invariant as just</p>
<p style="padding-left: 30px;"><span style="color: #0000ff;"><em>a.lower</em> ≤ <em>i</em> ≤ <em>j </em> ≤ <em>a.upper</em> &#8212; This bounding clause remains</span></p>
<p style="padding-left: 30px;"><span style="color: #0000ff;"><em>a.maximum</em> = (<em>a</em> [<em>i..j</em><em> </em>]).<em>maximum</em></span></p>
<p>(where we will write the slice <span style="color: #0000ff;"><em>a</em> [<em>i..j</em><em> </em>]</span> as <span style="color: #0000ff;"><em>a.slice</em> (<em>i, j</em> )</span> if we do not have mechanisms for defining special syntax). To verify the routine becomes trivial: on loop exit the invariant still holds and <span style="color: #0000ff;"><em>i</em> = <em>j</em></span>, so the maximum of the entire array is given by the maximum of the single-element slice <span style="color: #0000ff;"><em>a</em> [<em>i..i</em><em> </em>]</span>, which is the value of its single element <span style="color: #0000ff;"><em>a</em> [<em>i</em><em> </em>]</span>. This last property — the maximum of a single-element array is its single value — is independent of the verification of any particular program and should be proved as a little theorem of the <em>Domain Theory</em> for arrays.</p>
<p>The comparison between the two versions is striking: without Domain Theory, we are back to the most tedious mathematical manipulations again and again; simple, clear properties look complicated and obscure. This just for a small example on basic data structures; now think what it will be for a complex application domain. Without a first step of formal modeling to develop a Domain Theory, no realistic specification and verification process is realistic.</p>
<p>Although the idea is illustrated here through examples of individual routines, the construction of a Domain Theory should usually occur, in an object-oriented development process, at the level of a <em>class</em>: the embodiment of an abstract data type, which is at the appropriate level of granularity. The theory applies to objects of a given type, and hence will be used for the verification of all operations of that type. This observation justifies the effort of devising a Domain Theory, since it will benefit a whole set of software elements.</p>
<h2>Components of a Domain Theory</h2>
<p>The Domain Theory should include the three ingredients illustrated in the example:</p>
<ul>
<li>Operations, modeled as mathematical functions (no side effects of course, we are in the world of specification).</li>
<li>Axioms characterizing the defining properties of these operations.</li>
<li>Theorems, characterizing other important properties.</li>
</ul>
<p>This approach is of course nothing else than abstract data types (the same thing, although few people realize it, as object-oriented analysis). Even though ADTs are a widely popularized notion, supported for example by tools such as CafeOBJ [2] and Maude [3], it is generally not taken to its full conclusions; in particular there is too often a tendency to define every new ADT from scratch, rather than building up libraries of reusable high-level mathematical components in the O-O spirit of reuse.</p>
<h2>Results, not just definitions</h2>
<p>In devising a Domain Theory with the three kinds of ingredient listed above, we should not forget the last one, the theorems! The most depressing characteristic of much of the work on formal specification is that it is long on definitions and short on results, while good mathematics is supposed to be the reverse. I think people who have seriously looked at formal methods and do not adopt them are turned off not so much by the need to use mathematics but by the impression they get little value for it.</p>
<p>That is why Eiffel contracts do get adopted: even if it’s just for testing and debugging, people see immediate returns. It suffices for a programmer to have caught one bug as the violation of a simple postcondition to be convinced for life and lose any initial math-phobia.</p>
<h2>Quantifiers are evil</h2>
<p>As we go beyond simple contract properties — this argument must be positive, this reference will not be void — the math needs to be at the same level of abstraction to which, as modern programmers, we are accustomed. For example, one should always be wary of program specifications relying directly on quantified expressions, as in the low-level variants of the postcondition and loop invariant of the <em>two_way_max </em>routine.</p>
<p>This is not just a matter of taste, as in the choice in logic [4] between lambda expressions (more low-level but also more immediately understandable) and combinators (more abstract but, for many, more abstruse). We are talking here about the fundamental software engineering problem of scalability; more generally, of the understandability, extendibility and reusability of programs, and the same criteria for their specification and verification. Quantifiers are of course needed to express fundamental properties of a structure but in general should not directly appear in program assertions: as the example illustrated, their level of abstraction is lower than the level of discourse of a modern object-oriented program. If the rule — <em>Quantifiers Considered Harmful</em> — is not absolute, it must be pretty close.</p>
<p>Quantified expressions, “<em>All elements of this structure possess this property</em>” and “<em>Some element of this structure possesses this property</em>” — belong in the description of the structure and not in the program. They should appear in the Domain Theory, not in the verification. If you want to express that a hash table search found an element of key K, you should not write</p>
<p style="padding-left: 30px;"><span style="color: #0000ff;">(<strong>Result</strong> = <strong>Void</strong> <em> </em>∧ (∀ <em>i</em>: Z<em> | i </em> ≥ <em>a.lower</em> ∧ <em>i </em> ≤ <em>a.upper </em>⇒<em> a.item </em>(<em>i</em>)<em>.key </em> ≠ K))<br />
∨<br />
(<strong>Result</strong> ≠ <strong>Void</strong> <em> </em>∧ (∀ <em>i</em>: Z<em> | i </em> ≥ <em>a.lower</em> ∧ <em>i </em> ≤ <em>a.upper </em>∧<em> a.item </em>(<em>i</em>)<em>.key </em> = K ∧ <strong>Result</strong> = <em>a</em>.<em>item </em>(<em>i</em>))</span></p>
<p>but</p>
<p style="padding-left: 30px;"><span style="color: #0000ff;"><strong>Result</strong> /= <strong>Void</strong>   <span style="font-size: large;">⇔</span>   (<strong>Result</strong> ∈<em style="font-size: medium;"> a.elements_of_key</em> (K))</span></p>
<p>The quantified expressions will appear in the Domain Theory for the corresponding structure, in the definition of such domain properties as <span style="color: #0000ff;"><em>elements_of_key</em></span>. Then the program’s specification — the contracts to be verified — can rely on concepts that make sense to the programmer; the verification will take advantage of theorems that have been proved independently since they belong to the Domain Theory and do not depend on individual programs.</p>
<h2>Even the simplest examples&#8230;</h2>
<p>Practical software verification requires Domain Theory even in the simplest cases, including those often used as purely academic examples. Perhaps the most common (and convenient) way to explain the notion of loop invariant is Euclid’s algorithm to compute the greatest common divisor (gcd) of two numbers (with a structure remarkably similar to that of <span style="color: #0000ff;"><em>two_way_max</em></span>):<br />
<a href="http://bertrandmeyer.com/2012/04/11/domain-theory-the-forgotten-step-in-program-verification/euclid-4/" rel="attachment wp-att-2394"><img class="alignnone size-full wp-image-2394" title="Euclid" src="http://bertrandmeyer.com/wp-content/upLoads/euclid3.jpg" alt="Euclid" width="386" height="461" /></a></p>
<p>I have expressed the postcondition using a concept from an assumed Domain Theory for the underlying problem: <span style="color: #0000ff;"><em>gcd</em></span>, the mathematical function that yields the greatest common divisor of two integers. Many specifications I have seen go back to the basics, with something like this (using <span style="color: #0000ff;">\\</span> for integer remainder):</p>
<blockquote><p><span style="color: #0000ff;"><em>a</em> \\ <strong>Result</strong> = 0 <span style="font-size: medium;">∧</span> <em>b</em> \\ <strong>Result</strong> = 0 <a name="top"></a><span style="font-size: medium;">∧</span>  ∀ <em>i: </em>N<em> | </em>(<em>a</em> \\ <em>i</em> = 0) ∧ (<em>b</em> \\ <em>i</em> = 0)<em></em><span style="font-size: medium;"> ⇒</span><em>  i </em><span style="font-size: medium;">≤</span><em> </em><strong>Result</strong><em> </em></span></p></blockquote>
<p>This is indeed the definition of what it means for <span style="color: #0000ff;"><strong>Result</strong></span> to be the gcd of <em>a</em> and <em>b</em> (it divides <span style="color: #0000ff;"><em>a</em></span>, it divides <span style="color: #0000ff;"><em>b</em></span>, and is greater than any other integer that also has these two properties). But it makes no sense to include such a detailed mathematical property in the specification of a program element. It belongs in the domain theory, where it will serve as the definition of a function <span style="color: #0000ff;"><em>gcd</em></span>, which we can then use directly in the specification of the program.</p>
<p>Note how the invariant makes the necessity of the Domain Theory approach even more clear: try to express it in the basic mathematical form, not using the function <span style="color: #0000ff;"><em>gcd</em></span>, It can be done, but the result is typical of the high complexity to usefulness ratio of traditional formal specifications mentioned above. Instead, the invariant that I have included in the program text above says exactly what there is to say, clearly and concisely: at each iteration, the gcd of our two temporary values,<span style="color: #0000ff;"><em> i</em></span> and <span style="color: #0000ff;"><em>j</em></span>, is the result that we are seeking, the gcd of the original values <span style="color: #0000ff;"><em>a</em></span> and <span style="color: #0000ff;"><em>b</em></span>. On exit from the loop, when <span style="color: #0000ff;"><em>i</em></span> and <span style="color: #0000ff;"><em>j</em></span> are equal, their common value is that result.</p>
<p>It is also thanks to the Domain Theory modeling that the verification of the program — consisting of proving that the stated property is indeed invariant — will be so simple: as part of the theory, we should have the two little theorems</p>
<p style="padding-left: 30px;"><span style="color: #0000ff;"><em>i</em> &gt; <em>j</em> &gt; 0 <a name="top"></a><em><span style="font-size: medium;">⇒ </span></em><em>gcd</em> (<em>i</em>, <em>j</em>) = <em>gcd</em> (<em>i</em> –<em>j</em>, <em>j</em>)<em><br />
gcd</em> (<em>i</em>, <em>i</em>) = <em>i</em></span></p>
<p>which immediately show the implementation to be correct.</p>
<p>Inside of any big, fat, messy, quantifier-ridden specification there is a simple, elegant and clear Domain-Theory-based specification desperately trying to get out. Find it and use it.</p>
<h2>From Domain Theory to domain library</h2>
<p>One of the reasons most people working on program verification have not used the division into levels of discourse described here, with a clear role for developing a Domain Theory, is that they lack the appropriate notational support. Mathematical notation is of course available, but we are talking about programs a general verification framework cannot resort to a new special notation for every new application domain.</p>
<p>This is one of the places where Eiffel provides a consistent solution, through its seamless approach to integrating programs and specifications in a single notation. Thanks to mechanisms such as deferred classes (classes that describe concepts through detailed specifications without committing to an implementation), Eiffel is as much for specification as for design and implementation; a Domain Theory can be expressed though a set of deferred Eiffel classes, which we may call a domain <em>library</em>. The classes in a domain library should not just be deferred, meaning devoid of implementation; they should in addition describe stateless operations only — queries, not commands — since they are modeling purely mathematical concepts.</p>
<p>An earlier article in this blog [5] outlined the context of our verification work: the EVE project (Eiffel Verification Environment), a practical approach to integrating software verification in the day-to-day practice of modern software development, with the slogan &#8220;“Verification As a Matter Of Course”. In this project we have applied the idea of Domain Theory by building a domain library covering fundamental concepts of set theory, including functions and relations. This is the Mathematical Model Library (MML) [6, 7], which we use to verify the new data structure library EiffelBase 2 using specifications at the appropriate level of abstraction.</p>
<p>MML is in fact useful for the specification of a wide variety of programs, since almost every application area can benefit from the general concepts of set, subset, relation and such. But to cover a specific application domain, say flight traffic control, MML will generally not suffice; you will need to devise a Domain Theory that mathematically models the target domain, and may express it in the form of a domain library written in the same general spirit as MML: all deferred, stateless, focused on high-level abstractions.</p>
<p>It is one of the attractions of Eiffel that you can express such a theory and library in the same notation as the programs that will use it — more precisely in a subset of that notation, since the specification classes do not need the imperative constructs of the language such as instructions and attributes. Then both the development process and the verification use a seamlessly integrated set of notations and techniques, and all use the same tools from a modern IDE, in our case EiffelStudio, for browsing, editing, working with graphical repreentation, metrics etc.</p>
<h2>DSL libraries for specifications</h2>
<p>A mechanism to express Domain Theories is to a general specification mechanism essentially like a Domain Specific Language (DSL) is to a general programming language: a specialization for a particular domain. Domain libraries make the approach practical by:</p>
<ul>
<li>Embedding the specification language in the programming language.</li>
<li>Fundamentally relying on reuse, in the best spirit of object technology.</li>
</ul>
<p>This approach is in line with the one I presented for handling DSLs in an earlier article of this blog [8] (thanks, by the way, for the many comments received, some of them posted here and some on Facebook and LinkedIn where the post triggered long discussions). It is usually a bad idea to invent a new language for a new application domain. A better solution is to rely on libraries, by taking advantage of the power of object-oriented mechanisms to model (in domain libraries) and implement (for DSLs) the defining features of such a domain, and to make the result widely reusable. The resulting libraries are purely descriptive in the case of a domain library expressing a Domain Theory, and directly usable by programs in the case of a library embodying a DSL, but the goal is the same.</p>
<h2>A sound and necessary engineering practice</h2>
<p>Many ideas superficially look similar to Domain Theory: domain engineering as mentioned above, “domain analysis” as widely discussed in the requirements literature, model-driven development, abstract data type specification&#8230; They all start from some of the same observations, but  Domain Theory as described in this article is something different: a systematic approach to modeling an arbitrary application domain mathematically, which:</p>
<ul>
<li>Describes the concepts through applicable operations, axioms and (most importantly) theorems.</li>
<li>Expresses these elements in an applicative (side-effect free, i.e. equivalent to pure mathematics) subset of the programming language, for direct embedding in program specifications.</li>
<li>Relies on the class mechanism to structure the results.</li>
<li>Collects the specifications into specification libraries and promotes the reuse of specifications in the same way we promote software reuse.</li>
<li>Uses the combination of these techniques to ensure that program specifications are at a high level of abstraction, compatible with the programmers&#8217; view of their software.</li>
<li>Promotes a clear and effective verification process.</li>
</ul>
<p>The core idea is in line with standard engineering practices in disciplines other than software: to build a bridge, a car or a chip you need first to develop a sound model of the future system and its environment, using any useful models developed previously rather than always going back to elementary textbook mathematics.</p>
<p>It seems in fact easier to justify doing Domain Analysis than to justify not doing it. The power of expression and abstraction of our programs has grown by leaps and bounds; it&#8217;s time for our specifications to catch up.</p>
<h4>References</h4>
<p>[1] Dines Bjørner: <em>From Domains to Requirements —The Triptych Approach to Software Engineering</em>, “to be submitted to Springer”, available <a href="http://www2.imm.dtu.dk/%7Edibj/de+re-p.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[2] Kokichi Futatsugi and others: CafeObj page, <a href="http://www.ldl.jaist.ac.jp/cafeobj/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[3] José Meseguer and others: Maude publication page, <a href="http://maude.cs.uiuc.edu/papers/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[4] J. Roger Hindley, J. P. Seldin: <em>Introduction to Combinators and </em><em>l-calculus</em>, Cambridge University Press, 1986.</p>
<p>[5] <em>Verification As a Matter Of Course</em>, earlier article on this blog (March 2010), available <a href="../2010/0%E2%89%A5/29/verification-as-a-matter-of-course/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[6] 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, pages 48-70, available <a href="http://se.ethz.ch/%7Emeyer/publications/lncs/model_library.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[7] Nadia Polikarpova, Carlo A. Furia and Bertrand Meyer: <em>Specifying Reusable Components</em>, in <em>VSTTE&#8217;10: Verified Software</em>: <em>Theories, Tools and Experiments</em>, Edinburgh, August 2010, Lecture Notes in Computer Science, Springer-Verlag, available <a href="http://se.ethz.ch/%7Emeyer/publications/proofs/components-vstte.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[8] <em>Never Design a Language</em>, earlier article on this blog (January 2012), available <a href="../2012/01/%E2%89%A51/never-design-a-language/"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/FkcCWdT4IrU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2012/04/11/domain-theory-the-forgotten-step-in-program-verification/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2012/04/11/domain-theory-the-forgotten-step-in-program-verification/</feedburner:origLink></item>
		<item>
		<title>Aliasing and framing: Saint Petersburg seminar next week</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/tOP_9-DsCjc/</link>
		<comments>http://bertrandmeyer.com/2012/03/31/aliasing-and-framing-saint-petersburg-seminar-next-week/#comments</comments>
		<pubDate>Sat, 31 Mar 2012 15:20:28 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Design by Contract]]></category>
		<category><![CDATA[Formal methods and proofs]]></category>
		<category><![CDATA[Language design]]></category>
		<category><![CDATA[Object technology]]></category>
		<category><![CDATA[Seminar]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software verification]]></category>
		<category><![CDATA[Aliasing]]></category>
		<category><![CDATA[ITMO]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2258</guid>
		<description><![CDATA[In  last Thursday&#8217;s session of the seminar, Kokichi Futatsugi&#8217;s talk took longer than planned (and it would have been a pity to stop him), so I postponed my own talk on Automatic inference of frame conditions through the alias calculus to next week (Thursday local date). As usual it will be broadcast live. Seminar page: here, [...]]]></description>
			<content:encoded><![CDATA[<p>In  <a href="http://bertrandmeyer.com/2012/03/29/seminar-sessions-in-saint-petersburg-cafeobj-and-the-frame-issue/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">last Thursday&#8217;s session</span></a> of the seminar, Kokichi Futatsugi&#8217;s talk took longer than planned (and it would have been a pity to stop him), so I postponed my own talk on <strong>Automatic inference of frame conditions through the alias calculus</strong> to next week (Thursday local date). As usual it will be broadcast live.</p>
<p>Seminar page: <a href="http://sel.ifmo.ru/seminar/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>, including the link to follow the webcast.</p>
<p>Time and date: 5 April 2012, 18 Saint Petersburg time; you can see the local time at your location <a href="http://www.timeanddate.com/worldclock/fixedtime.html?msg=Meyer-seminar&amp;iso=20120405T18&amp;p1=352&amp;ah=1" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p><strong>Abstract:</strong></p>
<blockquote><p>Frame specifications, the description of what does not change in a routine call, are one of the most annoying components of verification, in particular for object-oriented software. Ideally frame conditions should be inferred automatically. I will present how the alias calculus, described in recent papers, can address this need.</p></blockquote>
<p>There may be a second talk, on hybrid systems, by Sergey Velder.</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/tOP_9-DsCjc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2012/03/31/aliasing-and-framing-saint-petersburg-seminar-next-week/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2012/03/31/aliasing-and-framing-saint-petersburg-seminar-next-week/</feedburner:origLink></item>
		<item>
		<title>Seminar sessions in Saint Petersburg: CafeOBJ and the frame issue</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/gq67ojMUBaI/</link>
		<comments>http://bertrandmeyer.com/2012/03/29/seminar-sessions-in-saint-petersburg-cafeobj-and-the-frame-issue/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 05:29:31 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Language design]]></category>
		<category><![CDATA[Seminar]]></category>
		<category><![CDATA[Software verification]]></category>
		<category><![CDATA[ITMO]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2255</guid>
		<description><![CDATA[The Saint Petersburg software engineering seminar has two sessions today (29 March 2012, 18 local time, see here for the date and time in your area), broadcast live: By Kokichi Futatsugi from KAIST (Japan): Combining Inference and Search in Verification with CafeOBJ. By me: Automatic inference of frame conditions through the alias calculus. See details [...]]]></description>
			<content:encoded><![CDATA[<p>The Saint Petersburg software engineering seminar has two sessions today (29 March 2012, 18 local time, see <a href="http://www.timeanddate.com/worldclock/fixedtime.html?msg=Meyer-seminar&amp;iso=20120329T18&amp;p1=352&amp;ah=2" target="blog_illustrations">here </a>for the date and time in your area), broadcast live:</p>
<ul>
<li>By Kokichi Futatsugi from KAIST (Japan):<strong> Combining Inference and Search in Verification with CafeOBJ</strong>.</li>
<li>By me: <strong>Automatic inference of frame conditions through the alias calculus</strong>.</li>
</ul>
<p>See details including the link for the live webcast on the <a href="http://sel.ifmo.ru/seminar/" target="blog_illustrations">seminar page</a>. The page also includes links to video recordings of recent sessions.</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/gq67ojMUBaI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2012/03/29/seminar-sessions-in-saint-petersburg-cafeobj-and-the-frame-issue/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2012/03/29/seminar-sessions-in-saint-petersburg-cafeobj-and-the-frame-issue/</feedburner:origLink></item>
		<item>
		<title>A carefully designed Result</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/iZ3Z2SO9Gkk/</link>
		<comments>http://bertrandmeyer.com/2012/03/19/a-carefully-designed-result/#comments</comments>
		<pubDate>Mon, 19 Mar 2012 20:11:06 +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[Language design]]></category>
		<category><![CDATA[Object technology]]></category>
		<category><![CDATA[Programming techniques]]></category>
		<category><![CDATA[Software engineering]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2240</guid>
		<description><![CDATA[&#160; In the Eiffel user discussion group [1], Ian Joyner recently asked: A lot of people are now using Result as a variable name for the return value in many languages. I believe this first came from Eiffel, but can&#8217;t find proof. Or was it adopted from an earlier language? Proof I cannot offer, but [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>In the Eiffel user discussion group [1], Ian Joyner recently asked:</p>
<blockquote><p><em>A lot of people are now using </em><strong><span style="color: #0000ff;">Result</span></strong><em> as a variable name for the return value in many languages. I believe this first came from Eiffel, but can&#8217;t find proof. Or was it adopted from an earlier language?</em></p></blockquote>
<p>Proof I cannot offer, but certainly my recollection is that the mechanism was an original design and not based on any previous language. (Many of Eiffel’s mechanisms were inspired by other languages, which I have always acknowledged as precisely as I could, but this is not one of them. If there is any earlier language with this convention — in which case a reader will certainly tell me — I was and so far am not aware of it.)</p>
<p>The competing conventions are a <strong>return</strong> instruction, as in C and languages based on it (C++, Java, C#), and Fortran’s practice, also used in Pascal, of using the function name as a variable within the function body. Neither is satisfactory. The <strong>return</strong> instruction suffers from two deficiencies:</p>
<ul>
<li>It is an extreme form of <strong>goto</strong>, jumping out of a function from anywhere in its control structure. The rest of the language sticks to one-entry, one-exit structures, as I think all languages should.</li>
<li>In most non-trivial cases the return value is not just a simple formula but has to be computed through some algorithm, requiring the declaration of a local variable just to denote that result. In every case the programmer must invent a name for that variable and, in a typed language, include a declaration. This is tedious and suggests that the language should take care of the declaration for the programmer.</li>
</ul>
<p>The Fortran-Pascal convention does not combine well with recursion (which Fortran for a long time did not support). In the body of the function, an occurrence of the function’s name can denote the result, or it can denote a recursive call; conventions can be defined to remove the ambiguity, but they are messy, especially for a function without arguments: in function f, does the instruction</p>
<p style="padding-left: 30px;"><span style="color: #0000ff;"><em>f</em> := <em>f</em> + 1</span></p>
<p>add one to the value of the function’s result as computed so far, as it would if<em> <span style="color: #0000ff;">f</span></em> were an ordinary variable, or to the result of calling <em><span style="color: #0000ff;">f</span></em> recursively?</p>
<p>Another problem with the Fortran-Pascal approach is that in the absence of a language-defined rule for variable initialization a function can return an undefined result, if some path has failed to initialize the corresponding variable.</p>
<p>The Eiffel design addresses these problems. It combines several ideas:</p>
<ul>
<li><strong>No nesting of routines</strong>. This condition is essential because without it the name <strong><span style="color: #0000ff;">Result</span></strong> would be ambiguous. In all Algol- and Pascal-like languages it was considered really cool to be able to declare routines within routines, without limitation on the depth of recursion. I realized that in an object-oriented language such a mechanism was useless and in fact harmful: a class should be a collection of features — services offered to the rest of the world — and it would be confusing to define features within features. Simula 67 offered such a facility; I wrote an analysis of inter-module relations in Simula, including inheritance and all the mechanisms retained from Algol such as nesting (I am trying to find that document, and if I do I will post it in this blog); my conclusion was the result was too complicated and that the main culprit was nesting. Requiring classes to be flat structures was, in my opinion, one of the most effective design decisions for Eiffel.</li>
<li><strong>Language-defined initialization</strong>. Even a passing experience with C and C++ shows that uninitialized variables are one of the major sources of bugs. Eiffel introduced a systematic rule for all variables, including <strong><span style="color: #0000ff;">Result</span></strong>, and it is good to see that some subsequent languages such as Java have retained that convention. For a function result, it is common to ignore the default case, relying on the standard initialization, as in <span style="color: #0000ff;"><strong>if</strong> “interesting case” <strong>then Result</strong>:= “interesting value” <strong>end</strong></span> without an <span style="color: #0000ff;"><strong>else</strong></span> clause (I like this convention, but some people prefer to make all cases explicit).</li>
<li><strong>One-entry, one-exit blocks</strong>; no <strong>goto</strong> in overt or covert form (<strong>break</strong>, <strong>continue</strong> etc.).</li>
<li><strong>Design by Contract mechanisms</strong>: postconditions usually need to refer to the result computed by a function.</li>
</ul>
<p>The convention is then simple: in any function, you can use a language-defined local variable <strong><span style="color: #0000ff;">Result</span></strong> for you, of the type that you declared for the function result; you can use it as a normal variable, and the result returned by any particular call will be the final value of the variable on exit from the function body.</p>
<p>The convention has been widely imitated, starting with Delphi and most recently in Microsoft’s “code contracts”, a kind of poor-man’s Design by Contract emulation, achieved through libraries; it requires a <strong><span style="color: #0000ff;">Result </span></strong>notation to denote the function result in a postcondition, although this notation is unrelated to the mechanisms in the target languages such as C#. As the example of Eiffel’s design illustrates, a programming language is a delicate construction where all elements should fit together; the <strong><span style="color: #0000ff;">Result</span></strong> convention relies on many other essential concepts of the language, and in turn makes them possible.</p>
<h4>Reference</h4>
<p>[1] Eiffel Software discussion group, <a href="http://tech.groups.yahoo.com/group/eiffel_software" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/iZ3Z2SO9Gkk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2012/03/19/a-carefully-designed-result/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2012/03/19/a-carefully-designed-result/</feedburner:origLink></item>
		<item>
		<title>New LASER proceedings</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/HHhHtmkt1Ro/</link>
		<comments>http://bertrandmeyer.com/2012/02/20/new-laser-proceedings/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 18:21:59 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Eiffel]]></category>
		<category><![CDATA[Empirical Software Engineering]]></category>
		<category><![CDATA[Formal methods and proofs]]></category>
		<category><![CDATA[Language design]]></category>
		<category><![CDATA[Publications]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software verification]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2233</guid>
		<description><![CDATA[Springer has just published in the tutorial sub-series of Lecture Notes in Computer Science a new proceedings volume for the LASER summer school [1]. The five chapters are notes from the 2008, 2009 and 2010 schools (a previous volume [2] covered earlier schools). The themes range over search-based software engineering (Mark Harman and colleagues), replication [...]]]></description>
			<content:encoded><![CDATA[<p>Springer has just published in the tutorial sub-series of Lecture Notes in Computer Science a new proceedings volume for the LASER summer school [1]. The five chapters are notes from the 2008, 2009 and 2010 schools (a previous volume [2] covered earlier schools). The themes range over search-based software engineering (Mark Harman and colleagues), replication of software engineering experiments (Natalia Juristo and Omar Gómez), integration of testing and formal analysis (Mauro Pezzè and colleagues), and, in two papers by our ETH group, <em>Is branch coverage a good measure of testing effectiveness</em> (with Yi Wei and Manuel Oriol — answer: not really!) and a formal reference for SCOOP (with Benjamin Morandi and Sebastian Nanz).</p>
<p>The idea of these LASER tutorial books — which are now a tradition, with the volume from the 2011 school currently in preparation — is to collect material from the presentations at the summer school, prepared by the lecturers themselves, sometimes in collaboration with some of the participants. Reading them is not quite as fun as attending the school, but it gives an idea.</p>
<p>The 2012 school is in full preparation, on the theme of “<strong>Advanced Languages for Software Engineering</strong>” and with once again an exceptional roster of speakers, or should I say an exceptional roster of exceptional speakers: Guido van Rossum (<em>Python</em>), Ivar Jacobson (<em>from UML to Semat</em>), Simon Peyton-Jones (<em>Haskell</em>), Roberto Ierusalimschy (<em>Lua</em>), Martin Odersky (<em>Scala</em>), Andrei Alexandrescu (<em>C++ and D</em>),Erik Meijer (C<em># and LINQ</em>), plus me on the design and evolution of Eiffel.</p>
<p>The preparation of LASER 2012 is under way, with registration now open [3]; the school will take place from Sept. 2 to Sept. 8 and, like its predecessors, in the wonderful setting on the island of Elba, off the coast of Tuscany, with a very dense technical program but time for enjoying the beach, the amenities of a 4-star hotel and the many treasures of the island. On the other hand not everyone likes Italy, the sun, the Mediterranean etc.; that&#8217;s fine too, you can wait for the 2013 proceedings.</p>
<h4>References</h4>
<p>[1] Bertrand Meyer and Martin Nordio (eds): <em>Empirical Software Engineering and Verification</em>, International Summer Schools LASER 2008-2010, Elba Island, Italy, Revised Tutorial Lectures, Springer Verlag, Lecture Notes in Computer Science 7007, Springer-Verlag, 2012, see <a href="http://www.springer.com/computer/swe/book/978-3-642-25230-3" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[2] Peter Müller (ed.): <em>Advanced Lectures on Software Engineering</em>, LASER Summer School 2007-2008, Springer Verlag, Lecture Notes in Computer Science 7007, Springer-Verlag, 2012, see <a href="http://www.springer.com/computer/swe/book/978-3-642-13009-0"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[3] LASER summer school information and registration form, <a href="http://se.ethz.ch/laser">http://se.ethz.ch/laser</a><a>.</a></p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/HHhHtmkt1Ro" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2012/02/20/new-laser-proceedings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2012/02/20/new-laser-proceedings/</feedburner:origLink></item>
		<item>
		<title>ERC Advanced Investigator Grant: Concurrency Made Easy</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/X26IGGbK_vY/</link>
		<comments>http://bertrandmeyer.com/2012/02/12/erc-advanced-investigator-grant-concurrency-made-easy/#comments</comments>
		<pubDate>Sun, 12 Feb 2012 19:01:04 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Formal methods and proofs]]></category>
		<category><![CDATA[Programming techniques]]></category>
		<category><![CDATA[Research evaluation]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software verification]]></category>
		<category><![CDATA[Software design]]></category>
		<category><![CDATA[Theory]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2219</guid>
		<description><![CDATA[We have just been awarded an ERC Advanced Investigator Grant project on concurrent programming (2.5 M EUR). This article is a brief introduction to the project and a first announcement of the positions (postdocs, phds, engineer) for which we will be advertising.]]></description>
			<content:encoded><![CDATA[<p>In April we will be starting the  “<strong>Concurrency Made Easy</strong>” research project, the result of a just announced Advanced Investigator Grant from the European Research Council. Such ERC grants are awarded to a specific person, rather than a consortium of research organizations as in the usual EU funding scheme. The usual amount, which applies in my case, is 2.5 million euros (currently almost 3 .3 million dollars) over five years, on a specific theme. According to the ERC&#8217;s own description [1],</p>
<blockquote><p><em>ERC Advanced Grants allow exceptional established research leaders of any nationality and any age to pursue ground-breaking, high-risk projects that open new directions in their respective research fields or other domains.</em></p></blockquote>
<p>This is the most sought-after research funding instrument of the EU, with a success rate of about 12% [2], out of a group already preselected by the host institutions. What makes ERC Advanced Investigator Grants so coveted is the flexibility of the scheme (no constraints on the topic, light administrative baggage) and the trust that an award implies in a particular researcher and his ability to carry out advanced research.</p>
<p>The name of the CME project clearly signals its ambition: to turn concurrent programming into a normal, unheroic part of programming. Today adding concurrency to a program, usually in the form of multithreading, is very hard, complexity and risk of all kinds. Everyone is telling us that we must rethink programming, retrain programmers and revamp curricula to put the specific reasoning modes of concurrent programming at the center. I don&#8217;t think this can work; thinking concurrently is just too hard to become the default mode. Instead, we should adapt programming languages, theories and tools so that programmers can continue to apply the reasoning schemes that have proved so successful in classical programming, especially object-oriented programming with the benefit of Design by Contract.</p>
<p>The starting point is the SCOOP model, to which I started an introduction in an earlier article of this blog [3], with a sequel yet to come. SCOOP is a minimal extension to the O-O framework to support concurrency, yielding very simple (the S in the acronym) solutions to concurrent programming problems. As part of the CME project we plan to develop it in many different directions and establish a sound and effective formal basis.</p>
<p>I have put the project description — the scientific part of the actual proposal text accepted by the ERC — online [4].</p>
<p>In the next few weeks I will be publishing here specific announcements for the positions we are seeking to fill very quickly; they include postdocs, PhD students, and one research engineer. We are looking for candidates with excellent knowledge and practice of concurrency, Eiffel, formal techniques etc. The formal application procedure will be Web-based and is not in place yet but you can contact me if you fit the profile and are interested.</p>
<p>We can defeat the curse: concurrent programming (an obligatory condition of any path towards a successful future for information technology) does not have to be black magic. It can be made simple and efficient. Such is the challenge of the CME project.</p>
<h4>References</h4>
<p>[1] European Research Council: Advanced Grants, available <a href="http://erc.europa.eu/advanced-grants" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[2] European Research Council: Press release on 2011 Advanced Investigator Grants, 24 January 2012, available <a href="http://erc.europa.eu/sites/default/files/press_release/files/press_release_adg2011_results.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[3] <em>Concurrent Programming is Easy</em>, article from this blog, available <a href="http://bertrandmeyer.com/2011/06/20/concurrent-programming-is-easy/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[4] CME Advanced Investigator Grant project description, available <a href="http://se.inf.ethz.ch/research/scoop/CME.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/X26IGGbK_vY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2012/02/12/erc-advanced-investigator-grant-concurrency-made-easy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2012/02/12/erc-advanced-investigator-grant-concurrency-made-easy/</feedburner:origLink></item>
		<item>
		<title>R&amp;D positions in software engineering</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/XIjTeKfqdrw/</link>
		<comments>http://bertrandmeyer.com/2012/02/06/rd-positions-in-software-engineering/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 05:34:57 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Positions]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software verification]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Alloy]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2212</guid>
		<description><![CDATA[In the past couple of weeks, three colleagues separately sent me announcements of PhD and postdoc positions, asking me to circulate them. This blog is as good a place as any other (as a matter of fact when I asked Oge de Moor if it was appropriate  he replied: “Readers of your blog are just [...]]]></description>
			<content:encoded><![CDATA[<p>In the past couple of weeks, three colleagues separately sent me announcements of PhD and postdoc positions, asking me to circulate them. This blog is as good a place as any other (as a matter of fact when I asked Oge de Moor if it was appropriate  he replied: “<em>Readers of your blog are just the kind of applicants we look for&#8230;</em>” — I hope you appreciate the compliment). So here they are:</p>
<ul>
<li>Daniel Jackson, for work on Alloy, see <a href="http://alloy.mit.edu" target="blog_illustrations">here</a>. (“<em>Our plan now is to take Alloy in new directions, and dramatically improve the usability and scalability of the analyzer. We are looking for someone who is excited by these possibilities and will be deeply involved not only in design and implementation but also in strategic planning. There are also opportunities to co-advise students and participate in research proposals.</em>”)</li>
<li>University College London (Anthony Finkelstein), a position as lecturer, similar to assistant professor), see <a href="https://atsv7.wcn.co.uk/search_engine/jobs.cgi?amNvZGU9MTIyOTE3NSZ2dF90ZW1wbGF0ZT05NjYmb3duZXI9NTA0MTE3OCZvd25lcnR5cGU9ZmFpciZicmFuZF9pZD0wJnZhY3R5cGU9MTI3MSZwb3N0aW5nX2NvZGU9MjI0JnJlcXNpZz0xMzI2ODk4MTAzLWMyNTlmYzIwZDMxZTM4NzY4NjY4Y2U4ZGNmMDJiNjM1MmY1ZTBjYjc=&amp;jcode=1229175&amp;vt_template=966&amp;owner=5041178&amp;ownertype=fair&amp;brand_id=0&amp;vactype=1271&amp;posting_code=224&amp;reqsig=1326898103-c259fc20d31e38768668ce8dcf02b6352f5e0cb7" target="blog_illustrations"><span style="text-decoration: underline;">here</span></a>. The title is “Lecturer in software testing” (which, by the way, seems a bit restrictive, as I am more familiar with an academic culture in which the general academic discipline is set, say software engineering or possibly software verification, rather than a narrow specialty, but I hope the scope can be broadened).</li>
<li>Semmle, Oge de Moor&#8217;s company, see <a href="http://semmle.com/download-files/recruit.pdf" target="blog_illustrations"><span style="text-decoration: underline;">here</span></a>.</li>
</ul>
<p>These are all excellent environments, so if you are very, very good, please consider applying. If you are very, very, <em>very</em> good don&#8217;t, as I am soon going to post a whole set of announcements for PhD and postdoc positions at ETH in connection with a large new grant.</p>
<p>&nbsp;</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/XIjTeKfqdrw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2012/02/06/rd-positions-in-software-engineering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2012/02/06/rd-positions-in-software-engineering/</feedburner:origLink></item>
		<item>
		<title>TOOLS 2012, “The Triumph of Objects”, Prague in May: Call for Workshops</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/rr0Gs1TcvGE/</link>
		<comments>http://bertrandmeyer.com/2012/02/02/tools-2012-the-triumph-of-objects-prague-in-may-call-for-workshops/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 21:38:08 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Empirical Software Engineering]]></category>
		<category><![CDATA[Formal methods and proofs]]></category>
		<category><![CDATA[General technology]]></category>
		<category><![CDATA[Language design]]></category>
		<category><![CDATA[Object technology]]></category>
		<category><![CDATA[Programming techniques]]></category>
		<category><![CDATA[Publications]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software process]]></category>
		<category><![CDATA[Software verification]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Theory]]></category>
		<category><![CDATA[Object]]></category>
		<category><![CDATA[TOOLS]]></category>
		<category><![CDATA[Workshops]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2208</guid>
		<description><![CDATA[The TOOLS federated conferences, held in Prague May 28 to June 1, will include five conferences (TOOLS EUROPE, ICMT, Software Composition, Tests And Proofs, Multicore Software Engineering) and a number of workshop. It is still possible to propose workshops; the instructions are given here.]]></description>
			<content:encoded><![CDATA[<p>Workshop proposals are invited for TOOLS 2012, <em>“<strong>The Triumph of Objects</strong></em>” <a href="http://tools.ethz.ch" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">tools.ethz.ch</span></a>, to be held in Prague May 28 to June 1. TOOLS is a federated set of conferences:</p>
<ul>
<li>TOOLS EUROPE 2012: 50th International Conference on Objects, Models, Components, Patterns.</li>
<li>ICMT 2012: 5th International Conference on Model Transformation.</li>
<li>Software Composition 2012: 10th International Conference.</li>
<li>TAP 2012: 6th International Conference on Tests And Proofs.</li>
<li>MSEPT 2012: International Conference on Multicore Software Engineering, Performance, and Tools.</li>
</ul>
<p>Workshops, which are normally one- or two-day long, provide organizers and participants with an opportunity to exchange opinions, advance ideas, and discuss preliminary results on current topics. The focus can be on in-depth research topics related to the themes of the TOOLS conferences, on best practices, on applications and industrial issues, or on some combination of these.</p>
<p><strong>SUBMISSION GUIDELINES</strong></p>
<p>Submission proposal implies the organizers&#8217; commitment to organize and lead the workshop personally if it is accepted. The proposal should include:</p>
<ul>
<li> Workshop title.</li>
<li>Names and short bio of organizers .</li>
<li>Proposed duration.</li>
<li> Summary of the topics, goals and contents (guideline: 500 words).</li>
<li> Brief description of the audience and community to which the workshop is targeted.</li>
<li>Plans for publication if any.</li>
<li>Tentative Call for Papers.</li>
</ul>
<p>Acceptance criteria are:</p>
<ul>
<li>Organizers&#8217; track record and ability to lead a successful workshop.</li>
<li> Potential to advance the state of the art.</li>
<li>Relevance of topics and contents to the topics of the TOOLS federated conferences.</li>
<li> Timeliness and interest to a sufficiently large community.</li>
</ul>
<p>Please send the proposals to me (Bertrand.Meyer AT inf.ethz.ch), with a Subject header including the words &#8220;<em>TOOLS WORKSHOP</em>&#8220;. Feel free to contact me if you have any question.</p>
<p><strong>DATES</strong></p>
<ul>
<li> Workshop proposal submission deadline: 17 February 2012.</li>
<li>Notification of acceptance or rejection: as promptly as possible and no later than February 24.</li>
<li>Workshops: 28 May to 1 June 2012.</li>
</ul>
<p>&nbsp;</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/rr0Gs1TcvGE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2012/02/02/tools-2012-the-triumph-of-objects-prague-in-may-call-for-workshops/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2012/02/02/tools-2012-the-triumph-of-objects-prague-in-may-call-for-workshops/</feedburner:origLink></item>
		<item>
		<title>Never design a language</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/hJZ1Q7OLtZ0/</link>
		<comments>http://bertrandmeyer.com/2012/01/31/never-design-a-language/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 03:26:08 +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[Essay]]></category>
		<category><![CDATA[Language design]]></category>
		<category><![CDATA[Programming techniques]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software design]]></category>
		<category><![CDATA[Theory]]></category>
		<category><![CDATA[User interface design]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Domain-Specific Language]]></category>
		<category><![CDATA[DSL]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2151</guid>
		<description><![CDATA[It is almost always a bad idea to design a language (for example, a DSL), and I am not even sure anymore why I wrote "almost".]]></description>
			<content:encoded><![CDATA[<p>It is a common occurrence in software development. Someone says: “<em>We should design a language</em>”. The usual context is that some part of the development requires a rich functionality set, and it appears appropriate to provide a flexible solution through a specialized language. As an example, in the development of an airline&#8217;s frequent flyer program on which I once worked the suggestion came to design a “<em>Flyer Award Language</em>” , with instructions appropriate for that application domain: record a trip, redeem an award, provide a statement of available miles and so on. A common term for such notations is DSL, for Domain-Specific Language.</p>
<p>Designing a language in such a context is almost always a bad idea (and I am not sure why I wrote “almost”). Languages are endless objects of discussion, usually on the least important aspects, which are also the most visible and those on which everyone has a strong opinion: concrete syntactic properties. People might pretend otherwise (“<em>let&#8217;s not get bogged down on syntax, this is just one possible form</em>”) but syntax is what the discussions will get bogged down to — keywords or symbols, this order or that order of operands, one instruction with several variants vs. several instructions&#8230; — at the expense of discussing the fundamental issues of functionality.</p>
<p>Worse yet, even if a language will be part of the solution it is usually just one facet to the solution.As was already explained in detail in [1], any useful functionality set will naturally be useful through <em>several</em> interfaces: a textual notation with concrete syntax may be one of them, but other possible ones include an API (Abstract Program Interface) for use from other software elements, a Graphical User Interface, a web user interface, yet another for web services (typically WSDL or some other XML or JSON format).</p>
<p>In such cases, starting with a concrete textual language is pretty silly, since it cannot yield the others directly (it would have to be parsed and further analyzed, which does not make sense). Of all the kinds of interface listed, the most fundamental one is the API: it describes the raw functionality, excluding any choice of syntax but including, thanks to contracts, elements of semantics. For example, a class <span style="color: #0000ff;"><em>AWARD</em></span> in our frequent flyer application might include the feature</p>
<p><span style="color: #0000ff;"><br />
<em>             redeem_for_upgrade </em>(<em>c</em>:<em> CUSTOMER; f</em> :<em> FLIGHT</em>)<br />
<em></em>                                     &#8212; Upgrade<em> c</em> to next class of service on <em>f</em>.<em><br />
</em>                       <strong>require</strong><em><br />
<em>                                    c /= holder </em></em><strong>implies </strong><em><em>holder.allowed_substitute </em></em>(<em><em>c</em></em>)<em><br />
<em>                                    f.permitted_for_upgrade </em></em>(<strong>Current</strong>)<em><em><br />
<em>                                    c.booked </em></em></em>(<em><em><em> f</em></em> </em>)<em><em><br />
</em>                        </em><strong>ensure</strong><em><em><br />
<em>                                    c.class_of_service </em></em></em>(<em><em><em> f </em></em></em>)<em><em><em> =</em></em>  </em><strong>old </strong><em><em><em>c.class_of_service </em></em></em>(<em> <em><em>f </em></em></em>) + 1<br />
<em></em><br />
</span></p>
<p>There is of course no implementation as this declaration only specifies an interface, but it says what needs to be said: to redeem the award for an upgrade, the intended customer must be either the holder of the award or an allowed substitute; the flight must be available for an upgrade with the current award (including the availability of enough miles); the intended customer must already be booked on the flight; and the upgrade will be for the next class of service.</p>
<p>These details are the kind of things that need to be discussed and agreed before the API is finalized. <em>Then</em> one can start discussing about a textual form (a DSL), a graphical interface, a web services interface. They all consist of relatively simple layers to be superimposed on a solidly defined and precisely specified basis. Once you have that basis, you can have all the fun you like arguing over everyone&#8217;s favorite forms of concrete syntax; it cannot hurt the project any more. Having these discussions early, at the expense of the more fundamental issues, is a great danger.</p>
<p>One of the key rules for successful software construction — as for many other ventures of course, especially in science and technology — is to distinguish the essential from the auxiliary, and consequently to devote proper attention to the essential issues while avoiding disputations of auxiliary issues. To define functionality, API is essential; language is auxiliary.</p>
<p>So when should you design a language? Never. Well, hardly ever.</p>
<h4>Reference</h4>
<p>[1] Bertrand Meyer: <em>Introduction to the Theory of Programming Languages</em>, Prentice Hall, 1990.</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/hJZ1Q7OLtZ0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2012/01/31/never-design-a-language/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2012/01/31/never-design-a-language/</feedburner:origLink></item>
		<item>
		<title>Concurrency seminars</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/ua-CGjNh4zY/</link>
		<comments>http://bertrandmeyer.com/2012/01/23/concurrency-seminars/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 22:27:18 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Programming techniques]]></category>
		<category><![CDATA[Software engineering]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2171</guid>
		<description><![CDATA[A set of one-day concurrency seminars organized in the US and Europe in the next few months.]]></description>
			<content:encoded><![CDATA[<p>Ever more people are realizing that concurrency is at the center of IT challenges for the next decades. Concurrent programming remains as hard as ever; we have put together a one-day seminar that helps understand the concepts and build successful concurrent applications. The sessions for the first few months of 2012 are:</p>
<ul>
<li>Palo Alto (February 15)</li>
<li>Zurich, (March 2)</li>
<li>London (March 22)</li>
<li>Paris (May 10)</li>
<li>Stockholm (June 15)</li>
<li>Seattle (July 20)</li>
</ul>
<p>and the seminar program is available <a href="http://www.eiffel.com/general/awareness/concurrency_seminars_2012.html">here</a>.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/ua-CGjNh4zY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2012/01/23/concurrency-seminars/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2012/01/23/concurrency-seminars/</feedburner:origLink></item>
		<item>
		<title>Webinar today: the Varieties of Loop Invariants</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/sIQB8vREBUk/</link>
		<comments>http://bertrandmeyer.com/2012/01/13/2158/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 12:05:24 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Design by Contract]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Invariant]]></category>
		<category><![CDATA[ITMO]]></category>
		<category><![CDATA[Loop invariant]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2158</guid>
		<description><![CDATA[I did not have time to complete my Monday post this week; it will be for next Monday (title: Never design a language). In the meantime, here is the announcement for today&#8217;s Saint Petersburg Software Engineering seminar , which can be followed live at http://sel.ifmo.ru/seminar/live (19:30 Saint Petersburg time, meaning 16:30 Zurich/Paris, 7:30 PDT on [...]]]></description>
			<content:encoded><![CDATA[<p>I did not have time to complete my Monday post this week; it will be for next Monday (title: <em>Never design a language</em>). In the meantime, here is the announcement for today&#8217;s <a href="http://sel.ifmo.ru/seminar/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">Saint Petersburg Software Engineering seminar </span></a>, which can be followed live at <a href="http://sel.ifmo.ru/seminar/live" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">http://sel.ifmo.ru/seminar/live</span></a> (19:30 Saint Petersburg time, meaning 16:30 Zurich/Paris, 7:30 PDT on 12 January 2012), duration about one hour.</p>
<p>I will be talking today; the topic is &#8220;The varieties of loop invariants&#8221;, reporting on joint work with Carlo Furia and Sergey Velder. The abstract appears below.</p>
<p>A recording of previous talks, starting from those of last week, will soon be available on the seminar page.</p>
<p>&nbsp;</p>
<h4>Abstract</h4>
<p>The key practical issue in verifying software is to come up with the right loop invariants. We are performing an extensive analysis of loop invariants in important algorithms across all major areas of computer science, and have developed a taxonomy. I will present some of the results of this ongoing work, performed with Sergey Velder (ITMO) and Carlo Furia (ETH).</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/sIQB8vREBUk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2012/01/13/2158/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2012/01/13/2158/</feedburner:origLink></item>
		<item>
		<title>Various interviews</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/gY6vXIINqcE/</link>
		<comments>http://bertrandmeyer.com/2012/01/02/various-interviews/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 16:39:30 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Publications]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2119</guid>
		<description><![CDATA[Over the past few months I have given a few interviews to Russian news outlets on technology- and software-related issues. Here are the links I have. In September, Mikhail Saprykin interviewed me [1] for Kommersant (the main Russian business daily) on a question that worries everyone in technology and academia: the brain drain. In early [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past few months I have given a few interviews to Russian news outlets on technology- and software-related issues. Here are the links I have.</p>
<p>In September, Mikhail Saprykin interviewed me [1] for Kommersant (the main Russian business daily) on a question that worries everyone in technology and academia: the brain drain.</p>
<p>In early November, at the SECR conference in Moscow where I gave a keynote [2], Natalia Dubova from Open Systems, the principal applied publication on software issues (which published translations of many of my articles over the years), interviewed me on the theme of software reliability and Eiffel [3].</p>
<p>On the same occasion, Internet University, which recently published the translation [4] of my introductory programming textbook <em>Touch of Class</em> [5], recorded a video conversation [6] between Prof. Vladimir Billig from Tver Technical University and me. Vladimir (pictured here a few weeks later)</p>
<p><a href="http://bertrandmeyer.com/2012/01/02/various-interviews/billig/" rel="attachment wp-att-2134"><img class="aligncenter size-full wp-image-2134" title="Vladimir Billig" src="http://bertrandmeyer.com/wp-content/upLoads/billig.jpg" alt="Vladimir Billig" width="182" height="275" /></a></p>
<p>is the book&#8217;s translator; he had already translated the second edition of <em>Object-Oriented Software Construction</em>.</p>
<p>On December 19 I was interviewed with Dmitry Grishin, head of mail.ru — the biggest Russian internet companies — by Alexander Belanovskiy at the radio station &#8220;Echo Moskvy&#8221; in Moscow, for Echonet, the station&#8217;s technology program. The interview will air, I was told, on January 15.</p>
<p>On the occasion of a talk I gave on December 19 at the Technical University of Tver, a historic city at the junction of the Volga (appearing on the far-right in the picture) and the Tverska,</p>
<p><a href="http://bertrandmeyer.com/2012/01/02/various-interviews/tver/" rel="attachment wp-att-2131"><img class="aligncenter size-full wp-image-2131" title="Tver, November 2011" src="http://bertrandmeyer.com/wp-content/upLoads/tver.jpg" alt="Tver, November 2011" width="364" height="242" /></a>I was interviewed on two separate TV stations (one of them Russia 1); I didn&#8217;t get to see the broadcasts, but if anyone finds them on the Web I will be grateful for the links.</p>
<p><a href="http://bertrandmeyer.com/2012/01/02/various-interviews/tver_house1/" rel="attachment wp-att-2141"><img class="aligncenter size-medium wp-image-2141" title="Tver house" src="http://bertrandmeyer.com/wp-content/upLoads/tver_house1-500x326.jpg" alt="Tver house" width="363" height="235" /></a></p>
<p><a href="http://bertrandmeyer.com/2012/01/02/various-interviews/tver_church/" rel="attachment wp-att-2142"><img class="aligncenter size-medium wp-image-2142" title="Tver church" src="http://bertrandmeyer.com/wp-content/upLoads/tver_church-333x500.jpg" alt="Tver church" width="362" height="541" /></a></p>
<h4>References</h4>
<p>[1] Interview by Mikhail Saprykin in Kommersant, 20 September 2011, available <a href="http://www.kommersant.ru/doc/1773357/print" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[2] Keynote at Software Engineering Conference Russia, available <a href="http://www.secr.ru/lang/en-en/key-speakers/bertrand-meyer" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[3] Interview by Natalia Dubova in<em> Otkrytye Systemy</em> (Open Systems), vol. 10, no. 21, December 2011, available <a href="http://www.osp.ru/os/2011/10/13012232/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[4] Potchustvuj Klass: translation by Vladimir Billig of <em>Touch of Class</em> [5], book page available <a href="http://www.intuit.ru/shop/product.xhtml?id=2494814" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[5] Bertrand Meyer: <em>Touch of Class: Learning to Program Well, Using Objects and Contracts</em>, Springer Verlag, 2009, book page available <a href="http://touch.ethz.ch" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[6] Video interview with Vladimir Billig, available <a href="http://www.intuit.ru/department/se/mbasepr/0/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/gY6vXIINqcE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2012/01/02/various-interviews/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2012/01/02/various-interviews/</feedburner:origLink></item>
		<item>
		<title>Webinars Dec. 29: (1) Model-based contracts (2) Assessing agile methods</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/6Ft4Da6prD0/</link>
		<comments>http://bertrandmeyer.com/2011/12/28/webinars-dec-29-1-model-based-contracts-2-assessing-agile-methods/#comments</comments>
		<pubDate>Wed, 28 Dec 2011 16:56:38 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[ITMO]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2109</guid>
		<description><![CDATA[The Saint Petersburg Software Engineering seminar (organized jointly by ITMO and SPbSPU universities) takes place every Thursday, normally 18-21. You can find the program at &#160; http://sel.ifmo.ru/seminar/ . Starting with the Dec. 29 seminar, the talks can now be attended remotely. You can follow them live (i.e. starting at 18:00 SP time, 15:00 Zurich/Paris, 9 [...]]]></description>
			<content:encoded><![CDATA[<p>The Saint Petersburg Software Engineering seminar (organized jointly by ITMO and SPbSPU universities) takes place every Thursday, normally 18-21. You can find the program at</p>
<p>&nbsp;</p>
<p style="padding-left: 30px;"><a href="http://sel.ifmo.ru/seminar/" target="blog_illustrations">http://sel.ifmo.ru/seminar/</a> .</p>
<p>Starting with the Dec. 29 seminar, the talks can now be attended remotely. You can follow them live (i.e. starting at 18:00 SP time, 15:00 Zurich/Paris, 9 AM PDT) at</p>
<p style="padding-left: 30px;"><a href="http://sel.ifmo.ru/seminar/live" target="blog_illustrations">http://sel.ifmo.ru/seminar/live</a></p>
<p>Warning: this is an experimental setup and it may not work perfectly the first time around.</p>
<p>The talks on Dec. 29 are the following (see the seminar page for the abstracts):</p>
<p style="padding-left: 30px;">Nadia Polikarpova (ETH): <em>API design with strong specifications</em> 18-19<br />
Bertrand Meyer: <em>Agile Methods: The Good, The Hype and The Ugly</em> 19-20</p>
<p>For the abstracts, see the seminar page referenced above.</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/6Ft4Da6prD0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2011/12/28/webinars-dec-29-1-model-based-contracts-2-assessing-agile-methods/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2011/12/28/webinars-dec-29-1-model-based-contracts-2-assessing-agile-methods/</feedburner:origLink></item>
		<item>
		<title>Guest article: funding great research</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/XiRFk4MuaPo/</link>
		<comments>http://bertrandmeyer.com/2011/12/27/guest-column-funding-great-research/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 13:18:35 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[General technology]]></category>
		<category><![CDATA[Research evaluation]]></category>
		<category><![CDATA[Software engineering]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2083</guid>
		<description><![CDATA[In a blog article posted in its original version on this blog [1] and in a revised version on the Communications of the ACM blog [2], I emphasized the relevance of incremental research. Recently Mikkel Thorup sent me some interesting comments, which I am publishing here as the first Guest Column of this blog. References [...]]]></description>
			<content:encoded><![CDATA[<p>In a blog article posted in its original version on this blog [1] and in a revised version on the Communications of the ACM blog [2], I emphasized the relevance of incremental research. Recently Mikkel Thorup sent me some interesting comments, which I am publishing here as the first Guest Column of this blog.</p>
<h4>References</h4>
<p>[1] Bertrand Meyer: <em>One Cheer for Incremental Research</em>, in the present blog, 10 August 2009, available <span style="text-decoration: underline;"><a style="color: #0000ff; text-decoration: underline;" href="http://bertrandmeyer.com/2009/08/10/one-cheer-for-incremental-research/g-live-incremental-research/fulltext">here</a></span></p>
<p>[2] Bertrand Meyer: <em>Long Live Incremental Research</em>, in <em>Communications of the ACM</em> Blog, 13 June 2011, available <span style="text-decoration: underline;"><a style="color: #0000cc;" href="http://cacm.acm.org/blogs/blog-cacm/109579-long-live-incremental-research/fulltext">here</a></span>.</p>
<h2><em>Guest article by Mikkel Thorup: Funding Great Research<br />
</em></h2>
<p>Research foundations want great research projects. However, a while back Bertrand Meyer wrote an interesting blog post: <em>Long Live Incremental Research</em> [2]. With examples he showed that many of the greatest results of research could not possibly be the projected results of great sounding project descriptions. His conclusion is that we should drop the high-flying ambitions from project descriptions, and instead support more incremental research proposals, hoping that great stuff will happen on the way. Indeed incremental research is perfect for research projects with predictable deliverables. However, I suggest the opposite conclusion; namely that we for some of the funding drop the project description.</p>
<p>The basic idea is that foundations should encourage researchers to look for results far better than those that can reasonably be projected. In particular, researchers should be free to follow their inspiration when they see new exiting opportunities. This is not done by tying researchers to incremental projects. Instead we can sometimes switch to result based funding, that is, funding based on results already achieved (with emphasis on the more recent past). Such result based funding is more like rewards for great results, and it offers researchers the perfect incentive to do their very best so as to secure future funding.</p>
<p>Consider a researcher with a history of brilliant ideas taking research in surprising new directions. If we try casting this as a project, the referees will rightly complain: &#8220;It is not clear how the applicant will come up with a brilliant idea, nor is it clear what the surprise will be&#8221;. With such lack of focus and feasibility, a low project score is expected.  If the project description has a predefined weight of, say, 40%, then the overall score will be too low for funding, regardless of the researcher&#8217;s established track record of succeeding in unlikely situations.  However, research needs great new ideas. Therefore we need some result based funding so that we can support researchers with a proven talent for generating great new ideas even if we do not quite understand how it will happen.</p>
<p>The above problem is often very real in my field of theoretical computer science. Like in other fields, theoretical research is only interesting if it contains surprises (otherwise it is more like development). A project plan would make sense if the starting point was a surprising idea or approach that it would take years to develop, but in theory, the most exciting ideas are often strikingly simple. When first you have such an idea, you are typically close to done, ready to start writing a paper. Thus, if you have a great idea when you apply for a grant, you will typically be done long before you get the grant. The essence of the research is thus the unpredictable search for powerful ideas and insights. The most appropriate project description is therefore just a description of the importance of the area to be researched and the type of results aimed for. The track record shows which researchers have the talent to succeed.</p>
<p>Dropping the how-part of the project description will greatly increase methodological diversity, allowing researchers to use the strategy that has proved most suitable for their area and their own talent and skills.  As a simple example, Bertrand suggested funding incremental research, hoping that great surprising things would turn up on the way. My strategy is the opposite. I try to spend as much time as possible on overly ambitious targets. Most of the time I fail, but I rarely come home empty-handed, for by studying the unknown I nearly always discover something new, sometimes even more interesting than the original target. From the perspective of ambition, I see it as an advantage that I minimize time spend on easy targets, but foundations seem to prefer that you take a planned path with some guaranteed targets on the way. The point here is not to argue whether one strategy is superior to the other, but rather to embrace the diversity of strategies that may work depending on the area and the individual researcher.</p>
<p>Perhaps more seriously, if a target is hard to achieve, it may be because it requires a crazy approach that would not look reasonable to anyone else, but which may work for a researcher thanks to his special talents and intuition. Indeed I have often been positively surprised seeing how others succeeded using an approach I had myself dismissed.  As a project, such crazy approaches would fail on perceived feasibility, but the point in result based funding is that researchers are free to use whatever approach they find most efficient. Funding is given to those who prove successful. This gives the perfect incentive to do great work, securing future funding.</p>
<p>Result-based funding would also reduce resources needed to evaluate applications. It is very hard for a general panel to evaluate the methodology and success probability of a project.  Moreover, it requires an intimate knowledge of a field to evaluate how big a difference a result would make relative to what is already known. However, handling published results, we know what happened and we can rely on peer-review for the difference it made to the field. All the panel has to do is to evaluate how the successes meet with the objectives of the foundation.</p>
<p>Let us, as an example, take something like the ERC Advanced Investigator Grant which welcomes high risk high gain research. It would seem that aiming for surprising breakthroughs in an important area would fall well within this scope. Having researchers with proven skills explore the area and follow their inspiration may be the optimal strategy. Uncertainty about what they would find should not be worse than high risk. In fact, based on past performance, it may be safe to assume that they will discover something interesting if not ground-breaking. However, when projects are scored on focused feasibility, such projects will fail even if their expected return is very high. It has to be possible to get a high overall score for promising research even if standard project parameters like focus and feasibility would be counterproductive.  At the end of the day, what we want are results, not project descriptions, so what should determine the overall score is which proposal is expected to yield the greatest results.</p>
<p>Long live great research!</p>
<p><em>Mikkel Thorup</em></p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/XiRFk4MuaPo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2011/12/27/guest-column-funding-great-research/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2011/12/27/guest-column-funding-great-research/</feedburner:origLink></item>
		<item>
		<title>How to design software</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/nKki9i2y23c/</link>
		<comments>http://bertrandmeyer.com/2011/12/13/how-to-design-software/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 19:49:14 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Programming techniques]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Bottom-up]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Gotthard]]></category>
		<category><![CDATA[Top-down]]></category>
		<category><![CDATA[Tunnel]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2070</guid>
		<description><![CDATA[The process of software design consists of developing intermediate levels of abstraction until we reach a compromise: a set of abstractions that satisfy the needs of application programmers and are efficiently implementable  in terms of what was available in the first place.]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>&nbsp;</p>
<p>I think I recently understood how software should be designed — or at least, since I have informally practiced the method for some time, how to explain it. Maybe not absolutely all types of software, but the most important kind: APIs (abstract program interfaces). The key task in software design is to define proper interfaces; if it is done right, everything else will fall into place, and if it is done wrong, there will be no end of problems everywhere else.</p>
<p>To put a Swiss theme to the description I may call this approach the<strong> Gotthard method</strong>. You are building a tunnel, starting from both sides at the same time, the northern, rainy, German-speaking part, and the southern, sunny, Italian-speaking part. (Actual languages and climates may vary.)</p>
<p><a href="http://bertrandmeyer.com/2011/12/13/how-to-design-software/mountains/" rel="attachment wp-att-2072"><img class="aligncenter size-medium wp-image-2072" title="Tunnel through a mountain" src="http://bertrandmeyer.com/wp-content/upLoads/mountains-500x240.jpg" alt="Tunnel through a mountain" width="609" height="292" /></a></p>
<p>For the method to work it is really important that the two crews should meet somewhere in the middle:</p>
<p><a href="http://bertrandmeyer.com/2011/12/13/how-to-design-software/gotthard-small/" rel="attachment wp-att-2101"><img class="aligncenter size-medium wp-image-2101" title="Gotthard crews meeting" src="http://bertrandmeyer.com/wp-content/upLoads/gotthard-small-500x293.jpg" alt="Gotthard crews meeting" width="366" height="214" /></a></p>
<p>In software design we are typically confronted with two views:</p>
<ul>
<li>The client view: application software needs certain abstraction and functionalities that will make it easy to produce clear, simple, extendible, reusable client programs.</li>
<li>The supplier view: the necessary mechanisms are usually available in a raw form directly reflecting the underlying platform, a combination of hardware and software facilities.</li>
</ul>
<p>Good design is a negotiation and iteration process that tries to reconcile the two views, working top-down from the client side and bottom-up from the supplier side, just as you would work when digging a tunnel between Unterwald and the Tessin.</p>
<p>As an example, consider a Web-oriented API. On the supplier side, we have a stateless protocol with essentially one mechanism: processing a request and sending a response. On the client side, we want to enable the building of applications, such as an e-commerce site, which need to pretend that they are working with stateful sessions, just as with a classical client-server GUI setup. The task of building software is to provide what the client application needs, in terms that make sense to the client and with all the abstractions that it needs — in our example, <em>SESSION</em>, <em>STATE</em>, <em>USER</em> and so on.</p>
<p>Since these higher-level abstractions are not directly provided by the supplier side, they need to be implemented or, to use a more appropriate term, <em>faked</em>. After all, everything in computer science is about faking: pretending that we have machines that we really don’t, simply by building them conceptually, in the form of APIs, in terms of machines that we have already built (bottom-up approach) or hope to build (top-down approach). “Building” a machine here means— except for the bottom-most machines, down at the level of the hardware, which very few programmers ever use directly anyway —faking them again, in terms of simpler ones. Fakes all the way down.</p>
<p>The process of software design then consists of developing intermediate levels of abstraction until we reach a compromise: a set of abstractions that satisfy the needs of application programmers and are efficiently implementable (or better yet, already implemented as part of this negotiation process) on the basis of what was available in the first place.</p>
<p>A poorly functioning software process will be more like <em>yoyo design</em>: trying something too abstract, then something too low-level and so on, converging too late if at all. Effective design is like boring a tunnel using modern engineering techniques, which start from a clear understanding of where the crews start on both sides, and make sure they end up meeting at the right place.</p>
<p>&nbsp;</p>
<p><span><em>Photo reference</em>: Herrenknecht AG, <a href="http://www.herrenknecht.com" target="blog_illustrations">www.herrenknecht.com</a></span>.</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/nKki9i2y23c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2011/12/13/how-to-design-software/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2011/12/13/how-to-design-software/</feedburner:origLink></item>
		<item>
		<title>Ado About The Resource That Was (Not)</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/7abUsBItu7k/</link>
		<comments>http://bertrandmeyer.com/2011/11/26/ado-about-the-resource-that-was-not/#comments</comments>
		<pubDate>Sat, 26 Nov 2011 19:16:56 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Algorithms]]></category>
		<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Eiffel]]></category>
		<category><![CDATA[Programming techniques]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[User interface design]]></category>
		<category><![CDATA[Deutsch-Schorr-Waite]]></category>
		<category><![CDATA[Garbage collection]]></category>
		<category><![CDATA[Small-memory software]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2025</guid>
		<description><![CDATA[The resources we have at our disposal on a computing system may be huge, but they are always finite, and our programs’ appetite for resources will eventually exhaust them. At that stage, we have to deal with the SBYBAW rule, which sounds like a tautology but is an encouragement to look for clever algorithms:  techniques for freeing resources when no resources remain may not request new resources.]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>After a few weeks of use, Microsoft Outlook tends in my experience to go into a kind of thrashing mode where the user interface no longer quite functions as it should, although to the tool&#8217;s credit it does not lose information. Recently I have been getting pop-up warnings such as</p>
<p>&nbsp;</p>
<p><a href="http://bertrandmeyer.com/2011/11/26/ado-about-the-resource-that-was-not/resource1/" rel="attachment wp-att-2027"><img class="aligncenter size-full wp-image-2027" title="A required resource was" src="http://bertrandmeyer.com/wp-content/upLoads/resource1.jpg" alt="A required resource was" width="345" height="147" /></a></p>
<p>&nbsp;</p>
<p>A required resource was <em>what</em> ? The message reminded me of an episode in a long-ago game of Scrabble, in which I proposed ADOABOUT as a word. “<em>Ado about what?</em> ”, the other players asked, and were not placated by my answer.</p>
<p>The message must have been trying to say  that a required resource was <em>missing</em>, or <em>not found</em>, but at the time of getting the final detail Outlook must have run out of UI resources and hence could not summon the needed text string. Not surprising, since running out of resources is precisely what caused the message to appear, in a valiant attempt to tell the user what is going on. (Valiant but not that useful: if you are not a programmer on the Outlook development team but just a customer trying to read email, it is not absolutely obvious how the message, even with the missing part, helps you.) The irony in the example is that the title bar suggests the problem arose in connection with trying to display the “Social Connector” area, a recent Outlook feature which I have never used. (<em>Social connector</em>? Wasn&#8217;t the deal about getting into computer science in the first place that for the rest of your life you&#8217;d be spared the nuisance of social connections? One can no longer trust anything nowadays.)</p>
<p>We can sympathize with whoever wrote the code. The Case Of The Resource That Was (Not) is an example of a general programming problem which we may call <em>Space Between Your Back And Wall</em>  or SBYBAW:  when you have your back against the wall, there is not much maneuvering space left.</p>
<p>A fairly difficult case of the SBYBAW problem arises in garbage collection, for example for object-oriented languages. A typical mark-and-sweep garbage collector must traverse the entire object structure to remove all the objects that have not been marked as reachable from the stack. The natural way to write a graph traversal algorithm is <em>recursive</em>: visit the roots; then recursively traverse their successors, flagging visited objects in some way to avoid cycling. Yes, but the implementation of a recursive routine relies on a stack of unpredictable size (the longest path length). If we got into  garbage collection, most likely it&#8217;s that we ran out of memory, precisely the kind of situation in which we cannot afford room for unpredictable stack growth.</p>
<p>In one of the early Eiffel garbage collectors, someone not aware of better techniques had actually written the traversal recursively; had the mistake not been caught early enough, it would no doubt have inflicted unbearable pain on humankind. Fortunately there is a solution: the Deutsch-Schorr-Waite algorithm [1], which avoids recursion on the <em>program</em> side by perverting the <em>data</em> structure to  replace some of the object links by recursion-control links; when the traversal&#8217;s execution proceeds along an edge, it reverses that edge to permit eventual return to the source. Strictly speaking, Deutsch-Schorr-Waite still requires a stack of booleans — to distinguish original edges from perverted ones — but we can avoid a separate stack (even just  a stack of booleans, which can be compactly represented in a few integers) by storing these booleans in the mark field of the objects themselves. The resulting traversal algorithm is a beauty — although it is fairly tricky, presents a challenge for verification tools, and raises new difficulties in a multi-threaded environment.</p>
<p>Deutsch-Schorr-Waite is a good example of “Small Memory Software” as studied in a useful book of the same title [2]. The need for Small Memory Software does not just arise for embedded programs running on small devices, but also in mainstream programming whenever we face the SBYBAW issue.</p>
<p>The SBYBAW lesson for the programmer is tough but simple. The resources we have at our disposal on a computing system may be huge, but they are always finite, and our programs&#8217; appetite for resources will eventually exhaust them. At that stage, we have to deal with the SBYBAW rule, which sounds like a tautology but is an encouragement to look for clever algorithms:  techniques for freeing resources when no resources remain must not request new resources.</p>
<h4>References</h4>
<p>[1] Deutsch-Schorr-Waite is described in Knuth and also in [2]. Someone should start a Wikipedia entry.</p>
<p>[2] James Noble and Charles Weir: <em>Small Memory Software: Patterns for Systems with Limited Memory</em>, Addison-Wesley, 2001.</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/7abUsBItu7k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2011/11/26/ado-about-the-resource-that-was-not/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2011/11/26/ado-about-the-resource-that-was-not/</feedburner:origLink></item>
		<item>
		<title>The Modes and Uses of Scientific Publication</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/fYYcIhDqnX0/</link>
		<comments>http://bertrandmeyer.com/2011/11/22/the-modes-and-uses-of-scientific-publication/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 22:26:19 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Essay]]></category>
		<category><![CDATA[Recycled]]></category>
		<category><![CDATA[Research evaluation]]></category>
		<category><![CDATA[Writing and style]]></category>
		<category><![CDATA[Publication]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2018</guid>
		<description><![CDATA[Publication is about helping the advancement of humankind. Of course.

Let us take this basis for granted and look at the other, possibly less glamorous aspects.

Publication has four modes: Publicity; Exam; Business; and Ritual.]]></description>
			<content:encoded><![CDATA[<p><a href="http://bertrandmeyer.com/2009/08/03/long-and-clear/recycled1/" rel="attachment wp-att-155"><img class="size-medium wp-image-155 alignright" title="recycling" src="http://bertrandmeyer.com/wp-content/upLoads/recycled1-300x277.jpg" alt="" width="50" height="48" /></a>Publication is about helping the advancement of humankind. Of course.</p>
<p>Let us take this basis for granted and look at the other, possibly less glamorous aspects.</p>
<p>Publication has four modes: Publicity; Exam; Business; and Ritual.</p>
<div>
<p><strong>1. Publication as Publicity</strong></p>
<p>The first goal of publication is to tell the world that you have discovered something: “See how smart I am!” (and how much smarter than all the others out there!). In a world devoid of material constraints for science, or where the material constraints are handled separately, as in 19<sup>th</sup>-century German universities where professors were expected to fund their own labs, this would be the <em>only</em> mode and use of publication. Science today is a more complex edifice.</p>
<p>A good sign that <em>Publication as Publicity</em> is only one of the modes is that with today’s technology we could easily skip all the others. If all we cared about were to make our ideas and results known, we would simply put out our papers on ArXiv or just our own Web page. But almost no one stops there; researchers submit to conferences and journals, demonstrating how crucial the other three modes are to the modern culture of science.</p>
<p><strong>2. Publication as Exam</strong></p>
<p>Academic careers depend on a publication record. Actually this is not supposed to be the case; search and tenure committees are officially interested in “impact,” but any candidate is scared of showing a short publication list where competitors have tens or (commonly) hundreds of items.</p>
<p>We do not just publish; we want to be chosen for publication. Authors are proud of the low acceptance rates of conferences at which their papers have been accepted; in the past few years it has in fact become common practice, in publication lists attached to CVs, to list this percentage next to each accepted article. Acceptance rates are carefully tracked; see for example [2] for software engineering.</p>
<p>As Jeff Naughton has pointed out [1], this mode of working amounts to giving researchers the status of students forced to take exams again and again. Maybe that part is inevitable; the need to justify ourselves anew every morning may be an integral part of being a scientist, especially one funded by other people’s money. Two other consequences of this phenomenon are, I believe, more damaging.</p>
<p>The first risk directly affects the primary purpose of publication (remember the advancement of humankind?): a time-limited review process with low acceptance rates implies that some good papers get rejected and some flawed ones accepted. Everyone in software engineering knows (and recent PC chairs have admitted) that getting a paper accepted at the International Conference on Software Engineering is in part a lottery; with an acceptance rate hovering around 13%, this is inevitable. The mistakes occur both ways: papers accepted or even getting awards, then shown a few months later to be inaccurate; and innovative papers getting rejected because some sentence rubbed the referees the wrong way, or some paper was not cited. With a 4-month review cycle, and the next deadline coming several months later, the publication of a truly important result can be delayed significantly.</p>
<p>The second visible damage is publication inflation. Today’s research environment channels productive research teams towards an LPU (Least Publishable Unit) publication practice, causing an explosion of small contributions and the continuous decrease of the ratio of readers to writers. When submitting a paper I have always had, as my personal goal, to be read; but looking at the overall situation of computer science publication today suggests that this is not the dominant view: the overwhelming goal of publication is publication.</p>
<p><strong>3. Publication as Business</strong></p>
<p>Publishing requires an infrastructure, and money plays a role. Conferences in particular are a business. They have a budget to balance, not always an easy task, although a truly successful conference can be a big money-maker for its sponsor, commercial or non-profit. The financial side of conference publication has its consequences on authors: if you do not pay your fees, not only will you be unable to participate, but your paper will not be published.</p>
<p>One can deplore these practices, in particular their effect on authors from less well-endowed institutions, but they result from today’s computer science publication culture with its focus on the conference, what Lance Fortnow has called “A Journal in a Hotel”.</p>
<p>Sometimes the consequences border on the absurd. The ASE conference (Automated Software Engineering) accepts some contributions as “short papers”. Fair enough. At ASE 2009, “short paper” did not mean a shorter conference presentation but the permission to put up a poster and stand next to it for a while and answer passersby’s questions. For that privilege — and the real one: a publication in the conference volume — one had to register for the conference. ASE 2009 was in New Zealand, the other end of the world for a majority of authors. I ceded to the injunction: who was I to tell the PhD student whose work was the core of the submission, and who was so happy to have a paper accepted at a well-ranked conference, that he was not going to be published after all? But such practices are dubious. It would be more transparent to set up an explicit pay-for-play system, with page charges: at least the money would go to a scientific society or a university. Instead we ended up funding (in addition to the conference, which from what I heard was an excellent experience) airlines and hotels.</p>
<p>What makes such an example remarkable is that a reasonable justification exists for every one of its components: a highly selective refereeing process to maintain the value of the publication venue; limiting the number of papers selected for full presentation, to avoid a conference with multiple parallel tracks (and the all too frequent phenomenon of conference sessions whose audience consists of the three presenters plus the session chair); making sure that authors of published papers actually attend the event, so that it is a real conference with personal encounters, not just an opportunity to increment one’s publication count. The concrete result, however, is that authors of short papers have the impression of being ransomed without getting the opportunity to present their work in a serious way. Literally seconds as I was going to hit the “publish” button for the present article, an author of an accepted short paper for ASE 2012 (where the process appears similar) sent an email to complain, triggering a new discussion. We clearly need to find better solutions to resolve the conflicting criteria.</p>
<p><strong>4. Publication as Ritual</strong></p>
<p>Many of the seminal papers in science, including some of the most influential in computer science, defy classification and used a distinctive, one-of-a-kind style. Would they stand a chance in one of today’s highly ranked conferences, such as ICSE in software or VLDB in databases? It’s hard to guess. Each community has developed its own standard look-and-feel, so that after a while all papers start looking the same. They are like a classical mass with its Te Deum, Agnus Dei and Kyrie Eleison. (The “Te Deum” part is, in a conference submission, spread throughout the paper, in the form of adoring citations of the program committee members&#8217; own divinely inspired articles, good for their H-indexes if they bless your own offering.)</p>
<p>All empirical software engineering papers, for example, have the obligatory “Threats to Validity” section, which is has developed into a true art form. The trick is the same as in the standard interview question “<em>What can you say about your own deficiencies?</em>”, to which every applicant know the key: describe a personality trait so that you superficially appear self-critical but in reality continue boasting, as in “<em>sometimes I take my work too much to heart</em>” [3]. The “Threats to Validity” section follows the same pattern: you try to think of all possible referee objections, the better to refute them.</p>
<p>Another part of the ritual is the “related work” section, treacherous because you have to make sure not to omit anything that a PC member finds important; also, you must walk a fine line between criticizing existing research too much, which could offend someone, or not enough, which enables the referee to say that you are not bringing anything significantly new. I often wonder who, besides the referees, reads those sections. But here too it is easier to lament than to fault the basic idea or propose better solutions. We do want to avoid wasting our time on papers whose authors are not aware of previous work. The related work section allows referees to perform this check. Its importance in the selection process has, however, grown out of proportion. It is one thing to make sure that a paper is state-of-the-art, but another to reject it (as often happens) because it fails to cite a particular contribution whose results would not directly affect its own. Here we move from the world of the rational to the world of the ritual. An extreme and funny recent example — funny to me, not necessarily to the coauthors — is a rejection from  APSEC 2011, the Australia-Pacific Software Engineering Conference, based on one review (the others were positive) that stated: “<em>How novel is this? Are [there] not any cloud-based IDEs out there that have [a] similar awareness model integrated into their CM? This is something the related work [section] fails to describe precisely. </em>[4]<em>”</em> The ritual here becomes bizarre: as far as we know, <em>no</em> existing system discusses a similar model; the reviewer too does not know of any; but he blasts the paper all the same for not citing work that he <em>thinks</em> must have been done by someone, somehow, somewhere. APSEC is a fine conference — it <em>has</em> to be, from the totally unbiased criterion that it accepted another one of our submissions this year! — and this particular paper may or may not have been ready for publication; judge it for yourself [5]. Such examples suggest, however, that the ritual of computer science publication has its limits.</p>
<p>Publicity, Exam, Business, Ritual: to which one of the four modes of publication are you most attuned? Oh, sorry, I forgot: in your case, it is solely for the advancement of humankind.</p>
<p><strong>References and notes<br />
</strong></p>
<p>[1] Jeffrey F. Naughton, <em>DBMS Research: First 50 Years, Next 50 Years</em>, slides of keynote at 26<sup>th</sup> IEEE International Conference on Data Engineering, 2010, available at <a href="http://lazowska.cs.washington.edu/naughtonicde.pdf" target="_blank">lazowska.cs.washington.edu/naughtonicde.pdf </a>.</p>
<p>[2] Tao Xie, <em>Software Engineering Conferences</em>, at <a href="http://people.engr.ncsu.edu/txie/seconferences.htm" target="_blank">people.engr.ncsu.edu/txie/seconferences.htm </a>.</p>
<p>[3] I once saw on French TV a hilarious interview of an entrepreneur who had started a software company in Vietnam, where job candidates just did not know “the code”, and moved on, in response to such a question, to tell the interviewer about being rude to their mother and all the other horrible things they had done in their lives.</p>
<p>[4] The words in brackets were not in the review but I added them for clarity.</p>
<p>[5] Martin Nordio, H.-Christian Estler, Carlo A. Furia and Bertrand Meyer: <em>Collaborative Software Development on the Web</em>, available at <a href="http://arxiv.org/abs/1105.0768" target="_blank">arxiv.org/abs/1105.0768 </a>.</p>
<p>(This article was first published on the CACM blog in September 2011.)</p>
</div>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/fYYcIhDqnX0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2011/11/22/the-modes-and-uses-of-scientific-publication/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2011/11/22/the-modes-and-uses-of-scientific-publication/</feedburner:origLink></item>
		<item>
		<title>Averaging</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/RYkMvhQ9rHE/</link>
		<comments>http://bertrandmeyer.com/2011/11/15/averaging/#comments</comments>
		<pubDate>Tue, 15 Nov 2011 05:38:31 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[General technology]]></category>
		<category><![CDATA[Policy]]></category>
		<category><![CDATA[Research evaluation]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=2009</guid>
		<description><![CDATA[&#160; A statistical textbook [1] contains this gem of wisdom: Only a fool would conclude that a painting that was judged as excellent by one person and contemptible by another ought therefore to be classified as mediocre. Common sense indeed; but does the procedure not recall how the typical conference program committee works, with averages [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>A statistical textbook [1] contains this gem of wisdom:</p>
<blockquote><p><em>Only a fool would conclude that a painting that was judged as excellent by one person and contemptible by another ought therefore to be classified as mediocre.</em></p></blockquote>
<p>Common sense indeed; but does the procedure not recall how the typical conference program committee works, with averages obligingly computed by the supporting web-based systems?</p>
<h4>Reference</h4>
<p>[1] David C. Howell: <em>Statistical Methods for Psychology</em>, sixth edition, Thomson-Wadsworth, 2007</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/RYkMvhQ9rHE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2011/11/15/averaging/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2011/11/15/averaging/</feedburner:origLink></item>
		<item>
		<title>John McCarthy</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/53raYq2rhhY/</link>
		<comments>http://bertrandmeyer.com/2011/11/07/john-mccarthy/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 12:11:12 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Eulogy]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software verification]]></category>
		<category><![CDATA[Theory]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=1993</guid>
		<description><![CDATA[John McCarthy, who died last week at the age of 84, was one of the true giants of computer science. Most remarkable about his contributions are their diversity, their depth, and how they span both theory and practice]]></description>
			<content:encoded><![CDATA[<p><a href="http://bertrandmeyer.com/2011/11/07/john-mccarthy/mc_carthy/" rel="attachment wp-att-1994"><img class="alignright size-full wp-image-1994" style="margin: 8px;" title="mc_carthy" src="http://bertrandmeyer.com/wp-content/upLoads/mc_carthy.jpg" alt="John McCarthy" width="192" height="270" /></a>John McCarthy, who died last week at the age of 84, was one of the true giants of computer science. Most remarkable about his contributions are their diversity, their depth, and how they span both theory and practice.</p>
<p>To talk about him it is necessary first to dispel an unjustly negative connotation. McCarthy was one of the founders of the discipline of artificial intelligence, its most forceful advocate and the inventor of its very name. In the “AI Winter” episode of the late 1970s and 1980s, that name suffered some disrepute as a result of a scathing report by James Lighthill blaming AI researchers for over-promising. In fact the promoters of AI may not have delivered exactly what they announced (who can accurately predict science?); but what they delivered is astounding. Many breakthroughs in computer science, both in theory (advances in lambda calculus and the theory of computation) and in the practice of programming (garbage collection, functional programming languages), can directly be traced to work in AI. Part of the problem is a phenomenon that I heard John McCarthy himself describe:  “<em>As soon as it works, no one calls it AI any more</em>.” Automatic garbage collection was once advanced artificial intelligence; now it is just an algorithm that makes sure my smartphone does not freeze up. In a different field, we have become used to computers routinely beating chess champions, a feat that critics of AI once deemed unthinkable.</p>
<p>The worst over-promises came not from researchers in the field such as McCarthy, who understood the difficulties, but from people like Herbert Simon, more of a philosopher, who in 1965 wrote that “<em>machines will be capable, within twenty years, of doing any work a man can do</em>.” McCarthy’s own best-known over-promise was to take up David Levy on his 1968 bet that no computer would be able to beat him within ten years. But McCarthy was only mistaken in under-estimating the time span: Deep Blue eventually proved him right.</p>
<p>The word that comes most naturally to mind when thinking about McCarthy is &#8220;brilliant.&#8221; He belonged to that category of scientists who produce the fundamental insights before anyone else, even if they do not always have the patience to finalize the details. The breathtaking paper that introduced Lisp [1] is labeled &#8220;Part 1&#8243;; there was never a &#8220;Part 2.&#8221; (Of course we have a celebrated example in computer science, this one from a famously meticulous author, of a seven-volume treaty which never materialized in full.) It was imprudent to announce a second part, but the first was enough to create a whole new school of programming. The Lisp 1.5 manual [2], published in 1962, was another masterpiece; as early as page 13 it introduces — an unbelievable feat, especially considering that the program takes hardly more than half a page — an interpreter for the language being defined, written in that very language! The more recent reader can only experience here the kind of visceral, poignant and inextinguishable jealously that overwhelms us the first time we realize that we will never be able to attend the première of <em>Don Giovanni</em> at the Estates Theater in Prague on 29 October, 1787 (exactly 224 years ago yesterday — did you remember to celebrate?). What may have been the reaction of someone in &#8220;Data Processing,&#8221; such as it was in 1962, suddenly coming across such a language manual?</p>
<p>These years, 1959-1963, will remain as McCarthy&#8217;s <em>Anni Mirabiles</em>. 1961 and 1962 saw the publication of two visionary papers [3, 4] which started the road to modern program verification (and where with the benefit of hindsight it seems that he came remarkably close to denotational semantics). In [4] he wrote</p>
<p style="padding-left: 30px;"><em>Instead of debugging a program, one should prove that it meets its specifications, and this proof should be checked by a computer program. For this to be possible, formal systems are required in which it is easy to write proofs. There is a good prospect of doing this, because we can require the computer to do much more work in checking each step than a human is willing to do. Therefore, the steps can be bigger than with present formal systems.</em></p>
<p>Words both precise and prophetic. The conclusion of [3] reads:</p>
<p style="padding-left: 30px;"><em>It is reasonable to hope that the relationship between computation and mathematical logic will be as fruitful in the next century as that between analysis and physics in the last. The development of this relationship demands a concern for both applications and for mathematical elegance.</em></p>
<p>&#8220;A concern for both applications and mathematical elegance&#8221; is an apt characterization of McCarthy’s own work. When he was not busy designing Lisp, inventing the notion of meta-circular interpreter and developing the mathematical basis of programming, he was building the Lisp garbage collector and proposing the concept of time-sharing. He also played, again in the same period, a significant role in another milestone development, Algol 60 — yet another sign of his intellectual openness and versatility, since Algol is (in spite of the presence of recursion, which McCarthy championed) an imperative language at the antipodes of Lisp.</p>
<p>McCarthy was in the 1960s and 70s the head of the Artificial Intelligence Laboratory at Stanford. For some reason the Stanford AI Lab has not become as legendary as Xerox PARC, but it was also the home to early versions of  revolutionary technologies that have now become commonplace. Email, which hardly anyone outside of the community had heard about, was already the normal way of communicating, whether with a coworker next door or with a researcher at MIT; the Internet was taken for granted; everyone was using graphical displays and full-screen user interfaces; outside, robots were playing volley-ball (not very successfully, it must be said); the vending machines took no coins, but you entered your login name and received a bill at the end of the month, a setup which never failed to astonish visitors; papers were printed with sophisticated fonts on a laser printer (I remember a whole group reading the successive pages of Marvin Minsky’s  frames paper [5] directly on the lab’s XGP, Xerox Graphics Printer, as  they were coming out, one by one, straight from MIT). Arthur Samuel was perfecting his checkers program. Those who were not programming in Lisp were hooked to SAIL, &#8220;Stanford Artificial Intelligence Language,&#8221; an amazing design which among other insights convinced me once and for all that one cannot seriously deal with data structures without the benefit of an automatic serialization mechanism. The building itself, improbably set up amid the pastures of the Santa Cruz foothills, was razed in the eighties and the lab moved to the main campus, but the spirit of these early years lives on.</p>
<p>McCarthy ran the laboratory in an open and almost debonair way; he was a legend and somewhat intimidating, but never arrogant and in fact remarkably approachable. I took the Lisp course from him; in my second or third week at Stanford, I raised my hand and with the unflappable assurance of the fully ignorant slowly asked a long question: &#8220;<em>In all the recursive function definitions that you have shown so far, termination was obvious because there is some &#8216;n&#8217; that decreases for every recursive call, and we treat the case &#8216;n = 0&#8242; or &#8216;n = 1&#8242; in a special, non-recursive way. But things won&#8217;t always be so simple. Is there some kind of </em>grammatical<em> criterion on Lisp programs that we could use to ascertain whether a recursive definition will always lead to a terminating computation?</em>&#8221; There was a collective gasp from the older graduate students in the audience, amazed that a greenhorn would have the audacity to interrupt the course with such an incompetent query. But instead of dismissing me, McCarthy proceeded, with a smile, to explain the basics of undecidability. He had the same attitude in the many seminars that he taught, often on topics straddling computer science and philosophy, in a Socratic style where every opinion was welcome and no one was above criticism.</p>
<p>He also had a facetious side. At the end of a talk by McCarthy at SRI, Tony Hoare, who was visiting for a few days, asked a question; McCarthy immediately rejoined that he had expected that question, summoned to the stage a guitar-carrying researcher from the AI Lab, and proceeded with the answer in the form of a prepared song.</p>
<p>The progress of science and technology is a collective effort; it takes many people to turn new insights into everyday reality. The insights themselves come from a few individuals, a handful in every generation. McCarthy was one of these undisputed pioneers.</p>
<p>&nbsp;</p>
<p><strong>References</strong></p>
<p>[1] John McCarthy: <em>Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I</em>, in<em> Communications of the ACM</em>, vol. 3, no. 4, 1960, pages 184-195.</p>
<p>[2] John McCarthy, Paul W. Abrahams, Daniel J. Edwards, Timothy P. Hart, Michael I. Levin, LISP 1.5 Programmer’s Manual, MIT, 1962. Available at <a href="http://www.amazon.com/LISP-Programmers-Manual-John-McCarthy/dp/0262130114" target="_blank"><span style="text-decoration: underline;">Amazon</span>  <img title="This link opens off-site" src="http://cacm.acm.org/images/icon.external-link.gif" alt="External Link" width="8" height="8" /></a>and also as a <a href="http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf" target="_blank"><span style="text-decoration: underline;">PDF</span> <img title="This link opens off-site" src="http://cacm.acm.org/images/icon.external-link.gif" alt="External Link" width="8" height="8" /></a>.</p>
<p>[3] John McCarthy: <em>A Basis for a Mathematical Theory of Computation</em>, first version in Proc. Western Joint Computer Conference, 1961, revised version in <em>Computer Programming and Formal Systems</em>, eds. P. Braffort and D. Hirschberg, North Holland, 1963. Available in various places on the Web, e.g. <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.55.8479" target="_blank"><span style="text-decoration: underline;">here</span> <img title="This link opens off-site" src="http://cacm.acm.org/images/icon.external-link.gif" alt="External Link" width="8" height="8" /></a>.</p>
<p>[4] John McCarthy: <em>Towards a Mathematical Science of Computation</em>, in IFIP Congress 1962, pages 21-28, available in various places on the Web, e.g. <a href="http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.79.8613" target="_blank"><span style="text-decoration: underline;">here</span> <img title="This link opens off-site" src="http://cacm.acm.org/images/icon.external-link.gif" alt="External Link" width="8" height="8" /></a>.</p>
<p>[5] Marvin Minsky: <em> A Framework for Representing Knowledge</em>, MIT-AI Laboratory Memo 306, June 1974, available <a href="http://web.media.mit.edu/%7Eminsky/papers/Frames/frames.html" target="_blank"><span style="text-decoration: underline;">here</span> <img title="This link opens off-site" src="http://cacm.acm.org/images/icon.external-link.gif" alt="External Link" width="8" height="8" /></a>.</p>
<p>&nbsp;</p>
<p>(<em>This article was first published on my ACM blog.  I am resuming regular Monday publication.</em>)</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/53raYq2rhhY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2011/11/07/john-mccarthy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2011/11/07/john-mccarthy/</feedburner:origLink></item>
		<item>
		<title>The story of our field, in a few short words</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/ztt7Oye6nXc/</link>
		<comments>http://bertrandmeyer.com/2011/10/16/the-story-of-our-field-in-a-few-short-words/#comments</comments>
		<pubDate>Sun, 16 Oct 2011 14:49:24 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Empirical Software Engineering]]></category>
		<category><![CDATA[Formal methods and proofs]]></category>
		<category><![CDATA[Programming techniques]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software process]]></category>
		<category><![CDATA[Software verification]]></category>
		<category><![CDATA[Theory]]></category>
		<category><![CDATA[Writing and style]]></category>
		<category><![CDATA[Dijkstra]]></category>
		<category><![CDATA[Hoare]]></category>
		<category><![CDATA[Turing]]></category>
		<category><![CDATA[Wirth]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=1948</guid>
		<description><![CDATA[A history of software engineering in words of five letters or less.]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p><em>(With all dues to </em>[<em>1</em>]<em>, but going up from four to five as it is good to be brief yet not curt.</em>)</p>
<p>At the start there was Alan. He was the best of all: built the right math model (years ahead of the real thing in any shape, color or form); was able to prove that no one among us can know for sure if his or her loops — or their code as a whole — will ever stop; got to crack the Nazis’ codes; and in so doing kind of saved the world. Once the war was over he got to build his own CPUs, among the very first two or three of any sort. But after the Brits had used him, they hated him, let him down, broke him (for the sole crime that he was too gay for the time or at least for their taste), and soon he died.</p>
<p>There was Ed. Once upon a time he was Dutch, but one day he got on a plane and — voilà! — the next day he was a Texan. Yet he never got the twang. The first topic that had put him on  the map was the graph (how to find a path, as short as can be, from a start to a sink); he also wrote an Algol tool (the first I think to deal with all of Algol 60), and built an OS made of many a layer, which he named THE in honor of his alma mater [2]. He soon got known for his harsh views, spoke of the GOTO and its users in terms akin to libel, and wrote words, not at all kind, about BASIC and PL/I. All this he aired in the form of his famed “EWD”s, notes that he would xerox and send by post along the globe (there was no Web, no Net and no Email back then) to pals and foes alike. He could be kind, but often he stung. In work whose value will last more, he said that all we must care about is to prove our stuff right; or (to be more close to his own words) to <em>build</em> it so that it is sure to be right, and keep it so from start to end, the proof and the code going hand in hand. One of the keys, for him, was to use as a basis for ifs and loops the idea of a “guard”, which does imply that the very same code can in one case print a value A and in some other case print a value B, under the watch of an angel or a demon; but he said this does not have to be a cause for worry.</p>
<p>At about that time there was Wirth, whom some call Nick, and Hoare, whom all call Tony. (“Tony” is short for a list of no less than three long first names, which makes for a good quiz at a party of nerds — can you cite them all from rote?) Nick had a nice coda to Algol, which he named “W”; what came after Algol W was also much noted, but the onset of Unix and hence of C cast some shade over its later life. Tony too did much to help the field grow. Early on, he had shown a good way to sort an array real quick. Later he wrote that for every type of unit there must be an axiom or a rule, which gives it an exact sense and lets you know for sure what will hold after every run of your code. His fame also comes from work (based in part on Ed’s idea of the guard, noted above) on the topic of more than one run at once, a field that is very hot today as the law of Moore nears its end and every maker of chips has moved to  a mode where each wafer holds more than one — and often many — cores.</p>
<p>Dave (from the US, but then at work under the clime of the North) must not be left out of this list. In a paper pair, both from the same year and both much cited ever since,  he told the world that what we say about a piece of code must only be a part, often a very small part, of what we <em>could</em> say if we cared about every trait and every quirk. In other words, we must draw a clear line: on one side, what the rest of the code <em>must</em> know of that one piece; on the other, what it <em>may</em> avoid to know of it, and even not care about. Dave also spent much time to argue that our specs must not rely so much on logic, and more on a form of table.  In a later paper, short and sweet, he told us that it may not be so bad that you do not apply full rigor when you chart your road to code, as long as you can “fake” such rigor (his own word) after the fact.</p>
<p>Of UML, MDA and other such TLAs, the less be said, the more happy we all fare.</p>
<p>A big step came from the cold: not just one Norse but two, Ole-J (Dahl) and Kris, came up with the idea of the class; not just that, but all that makes the basis of what today we call “O-O”. For a long time few would heed their view, but then came Alan (Kay), Adele and their gang at PARC, who tied it all to the mouse and icons and menus and all the other cool stuff that makes up a good GUI. It still took a while, and a lot of hit and miss, but in the end O-O came to rule the world.</p>
<p>As to the math basis, it came in part from MIT — think Barb and John — and the idea, known as the ADT (not all TLAs are bad!), that a data type must be known at a high level, not from the nuts and bolts.</p>
<p>There also is a guy with a long first name (he hates it when they call him Bert) but a short last name. I feel a great urge to tell you all that he did, all that he does and all that he will do, but much of it uses long words that would seem hard to fit here; and he is, in any case, far too shy.</p>
<p>It is not all about code and we must not fail to note Barry (Boehm), Watts, Vic and all those to whom we owe that the human side (dear to Tom and Tim) also came to light. Barry has a great model that lets you find out, while it is not yet too late, how much your tasks will cost; its name fails me right now, but I think it is all in upper case.  At some point the agile guys — Kent (Beck) and so on — came in and said we had got it all wrong: we must work in pairs, set our goals to no more than a week away, stand up for a while at the start of each day (a feat known by the cool name of Scrum), and dump specs in favor of tests. Some of this, to be fair, is very much like what comes out of the less noble part of the male of the cow; but in truth not all of it is bad, and we must not yield to the urge to throw away the baby along with the water of the bath.</p>
<p>I could go on (and on, and on); who knows, I might even come back at some point and add to this. On the other hand I take it that by now you got the idea, and even on this last day of the week I have other work to do, so ciao.</p>
<h4>Notes</h4>
<p>[1] <em>Al’s Famed Model Of the World, In Words Of Four Signs Or Fewer </em>(not quite the exact title, but very close): find it on line <a href="http://www.muppetlabs.com/%7Ebreadbox/txt/al.html" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[2] If not quite his alma mater in the exact sense of the term, at least the place where he had a post at the time. (If we can trust <a href="http://en.wikipedia.org/wiki/Edsger_W._Dijkstra" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">this entry</span></a>, his true alma mater would have been Leyde, but he did not stay long.)</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/ztt7Oye6nXc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2011/10/16/the-story-of-our-field-in-a-few-short-words/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2011/10/16/the-story-of-our-field-in-a-few-short-words/</feedburner:origLink></item>
		<item>
		<title>PhD position: concurrent programming (SCOOP) for robotics</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/nMy-Rrah91Y/</link>
		<comments>http://bertrandmeyer.com/2011/10/12/phd-position-concurrent-programming-scoop-for-robotics/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 17:56:18 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Software verification]]></category>
		<category><![CDATA[Robotics]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=1938</guid>
		<description><![CDATA[The ETH Chair of Software Engineering has won a grant from the Hasler foundation, in a joint project with the Technical University of Lucerne and the Autonomous Systems Lab of ETH, to develop a robotics framework involving concurrent computation. The project, called Roboscoop,  will produce a demonstrator system: a &#8220;SmartWalker&#8221; robot &#8212; a robotic version [...]]]></description>
			<content:encoded><![CDATA[<p>The ETH Chair of Software Engineering has won a grant from the Hasler foundation, in a joint project with the Technical University of Lucerne and the Autonomous Systems Lab of ETH, to develop a robotics framework involving concurrent computation. The project, called <strong>Roboscoop</strong>,  will produce a demonstrator system: a &#8220;SmartWalker&#8221; robot &#8212; a robotic version of  “walkers” used by elderly people and others with reduced mobility. The research proposal is available [2].</p>
<p>One of the major goals of the Roboscoop framework is to provide robotics applications with the full possibilities of concurrent programming. Many robotics developments use no or little concurrency because of the tricky programming involved in using threads, and the difficulty of getting applications right. With SCOOP [1] programmers have a simple, high-level mechanism that removes the risk of data races and other plagues of concurrent programming.</p>
<p>We are looking for someone with a strong background in both software engineering and robotics. If you are interested, please see the position announcement [3].</p>
<h4>References</h4>
<p>[1] On SCOOP see <a href="http://docs.eiffel.com/book/solutions/concurrent-eiffel-scoop" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a> and <a href="http://scoop.origo.ethz.ch/wiki/Tutorial" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>. See also a YouTube <a href="http://www.youtube.com/watch?v=LWkETPn5Fn8" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">video</span></a> of a small robot programmed with  SCOOP as part of an earlier student project (by Ganesh Ramanathan).</p>
<p>[2] Roboscoop research proposal, <a href="http://se.inf.ethz.ch/roboscoop.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[2] Position announcement: <a href="http://se.inf.ethz.ch/roboscoop.html" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a></p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/nMy-Rrah91Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2011/10/12/phd-position-concurrent-programming-scoop-for-robotics/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2011/10/12/phd-position-concurrent-programming-scoop-for-robotics/</feedburner:origLink></item>
		<item>
		<title>The charming naïveté of an IEEE standard</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/cSUhw9SblB4/</link>
		<comments>http://bertrandmeyer.com/2011/10/05/the-charming-naivete-of-an-ieee-standard/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 09:53:22 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Formal methods and proofs]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Standardization]]></category>
		<category><![CDATA[Theory]]></category>
		<category><![CDATA[IEEE]]></category>
		<category><![CDATA[Termination]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=1899</guid>
		<description><![CDATA[Naïve misunderstanding of basic undecidability results is common; it is touchingly refreshing to find it in an IEEE standard. ]]></description>
			<content:encoded><![CDATA[<p>The IEEE Standard for Requirements Specifications [1], a short and readable text providing concrete and useful advice, is a valuable guide for anyone writing requirements. In our course projects we always require students to follow its recommended structure.</p>
<p>Re-reading it recently, I noticed the following extract  in the section that argues that a  requirements specification should be <em>verifiable</em> (sentence labels in brackets are my addition):<br />
<strong></strong></p>
<p style="padding-left: 30px;">[A]<em> Nonverifiable requirements include statements such as “works well,” “good human interface,” and “shall usually happen.” </em>[B]<em> These requirements cannot be verified because it is impossible to define the terms “good,” “well,” or “usually.” </em></p>
<p style="padding-left: 30px;">[C]<em> The statement that “the program shall never enter an infinite loop” is nonverifiable because the testing of this quality is theoretically impossible.</em></p>
<p style="padding-left: 30px;">[D]<em>An example of a verifiable statement is<br />
</em>      [E]<em> “Output of the program shall be produced within 20 s of event 60% of the time; and shall be produced within 30 s of event 100% of the time.”</em><br />
[F]<em> This statement can be verified because it uses concrete terms and measurable quantities.</em></p>
<p>&nbsp;</p>
<p><strong></strong><br />
[A] and [B] are good advice, deserving to be repeated in every software engineering course and to anyone writing requirements. [C], however, is puzzling.</p>
<p>One might initially understand that the authors are telling us that it is impossible to devise a finite set of <em>tests</em> guaranteeing that a program terminates. But on closer examination this cannot be what they mean. Such a statement, although correct, would be uninteresting since it can be applied to <em>any</em> functional requirement: if I say “<em>the program shall accept an integer as input and print out that same integer on the output</em>”, I also cannot test that (trivial) requirement finitely since I would have to try all integers. The same observation applies to the example given in [D, E, F]: the property [D] they laud as an example of a  “verifiable” requirement is just as impossible to test exhaustively [2].</p>
<p>Since the literal interpretation of [C] is trivial and applies to essentially all possible requirements, whether bad or good in the authors’ eyes, they must mean something else when they cite loop termination as their example of a nonverifiable requirement. The word “<em>theoretically</em>” suggests what they have in mind: the undecidability results of computation theory, specifically the undecidability of the Halting Problem. It is well known that no general mechanism exists to determine whether an arbitrary program, or even just an arbitrary loop, will terminate. This must be what they are referring to.</p>
<p>Except, of course, that they are wrong. And a very good thing too that they are wrong, since “<em>The program shall never enter an infinite loop</em>” is a pretty reasonable requirement for <em>any</em> system [3].</p>
<p>If we were to accept [C], we would also accept that it is OK for any program to enter an infinite loop every once in a while, because the authors of its requirements were not permitted to specify otherwise! Fortunately for users of software systems, this particular sentence of the standard is balderdash.</p>
<p>What the halting property states, of course, is that no general mechanism exists that could examine an <em>arbitrary</em> program or loop and tell us whether it will always terminate. This result in no way excludes the possibility of verifying (although not through “testing”) that a <em>particular</em> program or loop will terminate. If the text of a program shows that it will print “Hello World” and do nothing else, we can safely determine that it will terminate. If a loop is of the form</p>
<p style="color: #0000ff; padding-left: 30px;"><strong>from</strong> <em>i</em> := 1 <strong>until</strong> <em>i</em> &gt; 10 <strong>loop</strong><br />
<span style="color: #ffffff;">&#8230;..</span><em>print</em> (<em>i</em>)<br />
<span style="color: #ffffff;">&#8230;..</span><em>i</em> := <em>i</em> + 1<br />
<strong>end</strong></p>
<p>there is also no doubt about its termination. More complex examples require the techniques of modern program verification, such as exhibiting a loop <em>variant</em> in the sense of Hoare logic, but they can still be practically tractable.</p>
<p>Like many fundamental results of modern science (think of Heisenberg&#8217;s uncertainty principle), Turing&#8217;s demonstration of the undecidability of the Halting Problem is at the same time simple to state, striking, deep, and easy to misunderstand. It is touchingly refreshing to find such a misunderstanding in an IEEE standard.</p>
<p>Do not let it discourage you from applying the excellent advice of the rest of IEEE 830-1998, ; but when you write a program, do make sure — whether or not the requirements specify this property explicitly — that all its loops terminate.</p>
<h4>Reference and notes</h4>
<p>[1] IEEE Computer Society: <em>IEEE Recommended Practice for Software Requirements SpeciÞcations</em>, IEEE Standard 830-1998, revised 1998; available <a href="http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;arnumber=720574" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a> (with subscription).</p>
<p>[2] The property [E] is actually more difficult to test, even non-exhaustively, than the authors acknowledge, if only because it is a probabilistic requirement, which can only be tested after one has defined appropriate probabilistic hypotheses.</p>
<p>[3] In requesting that all programs must terminate we must of course take note of the special case of systems that are non-terminating by design, such as most embedded systems. Such systems, however, are still made out of components representing individual steps that must terminate. The operating system on your smartphone may need to run forever (or until the next reboot), but the processing of an incoming text message is still, like a traditional program, required to terminate in finite time.</p>
<p>&nbsp;</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/cSUhw9SblB4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2011/10/05/the-charming-naivete-of-an-ieee-standard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2011/10/05/the-charming-naivete-of-an-ieee-standard/</feedburner:origLink></item>
		<item>
		<title>Fun with Bayes</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/Y6Fmt1AEG2A/</link>
		<comments>http://bertrandmeyer.com/2011/09/24/fun-with-bayes/#comments</comments>
		<pubDate>Sat, 24 Sep 2011 16:21:28 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[General technology]]></category>
		<category><![CDATA[Writing and style]]></category>
		<category><![CDATA[Bayesian]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Translation]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=1867</guid>
		<description><![CDATA[Statistical translation techniques are great but the examples cited show their limits. I truly hope that in the future they can be combined with more exact techniques based on sound linguistic theory.]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Try this:  go to <span style="text-decoration: underline;"><a href="http://translate.google.com" target="blog_illustrations">translate.google.com</a></span>, choose Russian as the source and English as the target languages. In the input field, type“<em>Андрей Иванович мне писал</em>” or, if you do not have a Cyrillic keyboard, the transliteration into the Latin alphabet, “<em>Andrej Ivanovich mne pisal</em><em></em>”, which (unless you uncheck the default option) will be automatically transcribed into Cyrillic as you go. The correct English translation appears: “<em>Andrey wrote to me</em><em></em>”.</p>
<p>Correct yes, but partial: the input did not read <em>“Andrey</em><em></em>” but “<em>Andrey Ivanovich</em><em></em>”. Russians have a first name, a last name and also a “patronymic<em></em>”  based on the father&#8217;s name: our Andrey&#8217;s father is or was called Ivan. Following the characters in, say, <em>War and Peace</em>, would be next to impossible without patronymics (it&#8217;s hard enough <em>with</em> them). On the other hand, English usually omits the patronymic, so if you are translating something simpler than a Tolstoy novel it is reasonable for an automated tool to yield <em>“Andrey</em><em></em>” as the translation of “<em>Andrey Ivanovich</em><em></em>”. In some cases, depending on the context, it gives <em>“Andrei</em>”, and in some others the anglicized <em>“Andrew</em>”.</p>
<p>Google Translate has yet another translation for <em></em>“<em>Andrey Ivanovich</em><em></em>”. Assume that you want to be specific; maybe you know two people called Andrey and use the patronymic to distinguish between them. You want to say, for example,</p>
<p><em>       I have in mind not Andrey Nikolaevich, but Andrey Petrovich</em>.</p>
<p>You can enter this as “<em>Ja imeju v vidu ne Andreja Nikolaevicha, no Andreja Petrovicha</em>”, or copy-paste the Cyrillic: <em>Я имею в виду не Андрея Николаевича, но Андрея</em> <em>Петрович</em><em>а</em>. (Note for Russian speakers: the word expected after the comma is of course <em>а</em>, but Google Translate, knowing that <em>а </em>can mean <em>“and</em>” in other contexts, translates it here with the opposite of the intended meaning. This is why I use <em><em>но</em></em>, which sounds strange but understandable, and is correctly translated.). Try it now and see what comes out on the English side:</p>
<p><strong style="color: #990000;">      I do not mean Kolmogorov, but Andrei Petrovich.</strong></p>
<p>Google Translate, in other words, has another translation for “<em>Andrey Nikolaevich</em>”:</p>
<p><strong style="color: #990000;">       Kolmogorov</strong></p>
<p>The great mathematician A.N. Kolmogorov (1903-1987) indeed had this first name and this patronymic; to conclude that anyone with these names is also called Kolmogorov is not, however, a step that most of us are prepared to take, especially those of us with a (living) friend called Andrey Nikolaevich.</p>
<p>A favorite of Russians is “<em>Dobroje Utro, Dmitri Anatolevich</em>”, meaning “<em>Good morning, Dimitri Anatolevich</em>”, which Google translates into “<em>Good morning, Mr. President</em>”. I will let you figure this one out.</p>
<p>All the translations cited were, by the way, obtained on the date of this post; algorithms can change. For other examples, see <span style="text-decoration: underline;"><a href="http://googlerussiablog.blogspot.com/2010/01/blog-post_29.html" target="blog_illustrations">this page</a></span>, in Russian (thanks to Sergey Velder for bringing it to my attention).</p>
<p>What happened? Automatic translation has made great progress in recent years, largely as a result of the switch from structural, precise techniques based on linguistic theory to approximate methods based on statistics. These methods rely on an immense corpus of existing human translations, accessible on the Internet, and apply Bayesian techniques to match every text element to the most frequently encountered translation of a similar phrase in existing translations. This switch has caused a revolution in translation, making it possible to get approximate equivalents. Personally I find them most useful for a language I do not know at all: if I want to read a Web page in Korean, I can get its general idea, which I could not have done fifteen years ago without finding a native speaker. For a language that I know imperfectly, the help is less clear, because the translations are almost never entirely right; in fact they are almost always, beyond the level of simple phrases, grammatically incorrect.</p>
<p>With Bayesian techniques it is understandable why “<em>Andrey Nikolaevich</em>” sometimes comes out in English as “<em>Kolmogorov<em></em></em>”: he is probably the most famous of all Andrey Nikolaevichs in Google&#8217;s database of Russian-English translation pairs. If you do not know the database, the behavior is mysterious, as you cannot usually guess whether the translation in a particular context will be “<em>Andrey</em>, “<em>Andrei</em>”, “<em>Andrew</em>”, “<em>Andrey N.</em>” or “<em>Kolmogorov</em><em></em>”, the five variants that I have seen (try your own experiments!). Some cases are predictable once you know that the techniques are statistical: if you include the word “<em>Teorema</em>” (theorem) anywhere close, you are sure to get “<em>Kolmogorov</em><em></em>”. But usually there is no obvious clue.</p>
<p>Statistical techniques are great but such examples, beyond the fun, show their limits. I truly hope that in the future they can be combined with more exact techniques based on sound linguistics.</p>
<h4>Postscript: are you bytypal?</h4>
<p>Perhaps I should explain why I use Google Translate with Russian as the source language. I do not use it for translation, but I do need it to type texts in Russian. I could use a Cyrillic keyboard, but I don&#8217;t because I am a very fast touch typist on the English (QWERTY) keyboard. (Learning to type at a professional level early in life was one of the most useful skills I ever acquired — not as useful as grammar, set theory or axiomatic semantics, but far more useful than separation logic.) So it is convenient for me to type in Latin letters, say “<em>Dostojeksky</em>”, and rely on a tool that immediately transliterates into the Cyrillic equivalent, here <em>Достоевский</em> . Then I can copy-paste the result into, for example, an email to a Russian-speaking recipient.</p>
<p>I used to rely on a tool that does exactly this, Translit (<span style="text-decoration: underline;"><a href="http://www.translit.ru/" target="blog_illustrations">www.translit.ru</a></span>); I have of late found Google Translate generally more convenient because it does not just transliterate but relies on its database to correct some typos. I do not need the translation (except possibly to check that what I wrote makes sense), but I see it anyway; that is how I ran into the Bayesian fun described above.</p>
<p>As a matter of fact the transliteration tool is good but, as often with software from Google, only  “<em>almost</em>” right. Sometimes it simply refuses to transliterate what I wrote, because it insists on its own misguided idea of what I meant. The Auto Correct option of Microsoft Office has the good sense, when it wrongly corrects your input and  you retype it, to obey you the second time around; but Google Translate&#8217;s transliteration facility does not seem to have any such policy: it sticks to its own view, right or wrong. As a consequence it has occasionally taken me a good five minutes of fighting the tool to enter a <em>single</em> word. Such glitches might be removed over time, but at the moment they are sufficiently annoying that I am thinking of teaching myself to touch-type in Cyrillic.</p>
<p>Is this possible? Initially I learned to type on the French (AZERTY) keyboard and I had to unlearn it, since otherwise a Q would occasionally come out as an A, a Z as a W and a semicolon as an M. I know bilingual people, but none who have programmed themselves to touch-type on different keyboards. Anyone out there willing to comment on the experience of bytypalism?</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/Y6Fmt1AEG2A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2011/09/24/fun-with-bayes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2011/09/24/fun-with-bayes/</feedburner:origLink></item>
		<item>
		<title>Nastiness in computer science</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/oJ1tI05mkp8/</link>
		<comments>http://bertrandmeyer.com/2011/08/27/nastiness-in-computer-science/#comments</comments>
		<pubDate>Sat, 27 Aug 2011 16:51:45 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Essay]]></category>
		<category><![CDATA[General technology]]></category>
		<category><![CDATA[Refereeing]]></category>
		<category><![CDATA[Research]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=1858</guid>
		<description><![CDATA[Are we malevolent grumps? Nothing personal, but as a community computer scientists sometimes seem to succumb to negativism.]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Are we malevolent grumps? Nothing personal, but as a community computer scientists sometimes seem to succumb to negativism.</p>
<p style="padding-left: 30px;">[This article republished from my CACM blog; see <a href="http://cacm.acm.org/blogs/blog-cacm/123611-the-nastiness-problem-in-computer-science/fulltext" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.]<br />
&nbsp;</p>
<p>They admit it themselves. A common complaint in the profession (at least in academia) is that instead of taking a cue from our colleagues in more cogently organized fields such as physics, who band together for funds, promotion, and recognition, we are incurably fractious. In committees, for example, we damage everyone&#8217;s chances by badmouthing colleagues with approaches other than ours. At least this is a widely perceived view (&#8220;<em>Circling the wagons and shooting inward,</em>&#8221; as Greg Andrews put it in a recent discussion). Is it accurate?</p>
<p>One statistic that I have heard cited is that in 1-to-5 evaluations of projects submitted to the U.S. National Science Foundation the average grade of computer science projects is one full point lower than the average for other disciplines. This is secondhand information, however, and I would be interested to know if readers with direct knowledge of the situation can confirm or disprove it.</p>
<p>More such examples can be found in the material from a recent keynote by Jeffrey Naughton, full of fascinating insights (see his <a href="http://pages.cs.wisc.edu/%7Enaughton/naughtonicde.pptx" target="_blank">Powerpoint slides <img title="This link opens off-site" src="http://cacm.acm.org/images/icon.external-link.gif" alt="External Link" width="8" height="8" /></a>). Naughton, a database expert, mentions that only one paper out of 350 submissions to SIGMOD 2010 received a unanimous “accept” from its referees, and only four had an <em>average </em>accept recommendation. As he writes, &#8220;<em>either we all suck or something is broken!</em>&#8221;</p>
<p>Much of the other evidence I have seen and heard is anecdotal, but persistent enough to make one wonder if there is something special with us. I am reminded of a committee for a generously funded CS award some time ago, where we came close to not giving the prize at all because we only had &#8220;good&#8221; proposals, and none that a committee member was willing to die for. The committee did come to its senses, and afterwards several members wondered aloud what was the reason for this perfectionism that almost made us waste a great opportunity to reward successful initiatives and promote the discipline.</p>
<p>We come across such cases so often—the research project review that gratuitously but lethally states that you have &#8220;<em>less than a 10% chance&#8221; </em>of reaching your goals, the killer argument  &#8220;<em>I didn&#8217;t hear anything that surprised me&#8221; </em>after a candidate&#8217;s talk—that we consider such nastiness normal without asking any more whether it is ethical or helpful. (The &#8220;surprise&#8221; comment is particularly vicious. Its real purpose is to make its author look smart and knowledgeable about the ways of the world, since he is so hard to surprise; and few people are ready to contradict it: Who wants to admit that <em>he </em>is naïve enough to have been surprised?)</p>
<p>A particular source of evidence is refereeing, as in the SIGMOD example.  I keep wondering at the sheer nastiness of referees in CS venues.</p>
<p>We should note that the large number of rejected submissions is not by itself the problem. Naughton complains that researchers spend their entire careers being graded, as if passing exams again and again. Well, I too like acceptance better than rejection, but we have to consider the reality: with acceptance rates in the 8%-20% range at good conferences, much refereeing is bound to be negative. Nor can we angelically hope for higher acceptance rates overall; research is a competitive business, and we are evaluated at every step of our careers, whether we like it or not. One could argue that most papers submitted to ICSE and ESEC are pretty reasonable contributions to software engineering, and hence that these conferences should accept four out of five submissions; but the only practical consequence would be that some other venue would soon replace ICSE and ESEC as the publication place that matters in software engineering. In reality, rejection remains a frequent occurrence even for established authors.</p>
<p>Rejecting a paper, however, is not the same thing as insulting the author under the convenient cover of anonymity.</p>
<p>The particular combination of incompetence and arrogance that characterizes much of what Naughton calls &#8220;bad refereeing&#8221; always stings when you are on the receiving end, although after a while it can be retrospectively funny; one day I will publish some of my own inventory, collected over the years. As a preview, here are two comments on the first paper I wrote on Eiffel, rejected in 1987 by the IEEE <em>Transactions on Software Engineering</em> (it was later published, thanks to a more enlightened editor, Robert Glass, in the <em>Journal of Systems and Software</em>, <a href="http://se.ethz.ch/%7Emeyer/publications/eiffel/eiffel_jss.pdf" target="_blank">8, 1988, pp. 199-246 <img title="This link opens off-site" src="http://cacm.acm.org/images/icon.external-link.gif" alt="External Link" width="8" height="8" /></a>). The IEEE rejection was on the basis of such review gems as:</p>
<ul>
<li><em>I think time will show that inheritance (section 1.5.3) is a terrible idea.</em></li>
<li><em>Systems that do automatic garbage collection and prevent the designer from doing his own memory management are not good systems for industrial-strength software engineering.</em></li>
</ul>
<p>One of the reviewers also wrote: &#8220;<em>But of course, the bulk of the paper is contained in Part 2, where we are given code fragments showing how well things can be done in Eiffel. I only read 2.1 arrays. After that I could not bring myself to waste the time to read the others.&#8221; </em>This is sheer boorishness passing itself off as refereeing. I wonder if editors in other, more established disciplines tolerate such attitudes. I also have the impression that in non-CS journals the editor has more personal leverage. How can the editor of IEEE-TSE have based his decision on such a biased an unprofessional review? Quis custodiet ipsoes custodes?</p>
<p>&#8220;More established disciplines&#8221;: Indeed, the usual excuse is that we are still a young field, suffering from adolescent aggressiveness. If so, it may be, as Lance Fortnow has <a href="http://cacm.acm.org/magazines/2009/8/34492-viewpoint-time-for-computer-science-to-grow-up/fulltext">argued in a more general context</a>, &#8220;<em>time for computer science to grow up.&#8221;</em> After some 60 or 70 years we are not so young any more.</p>
<p>What is your experience? Is the grass greener elsewhere? Are we just like everyone else, or do we truly have a nastiness problem in computer science?</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/oJ1tI05mkp8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2011/08/27/nastiness-in-computer-science/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2011/08/27/nastiness-in-computer-science/</feedburner:origLink></item>
		<item>
		<title>All Bugs Great and Small</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/hf8qI0G3vm0/</link>
		<comments>http://bertrandmeyer.com/2011/08/23/all-bugs-large-and-small/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 06:38:42 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Design by Contract]]></category>
		<category><![CDATA[Essay]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[AutoTest]]></category>
		<category><![CDATA[Design by Contract]]></category>
		<category><![CDATA[Eiffel]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=1827</guid>
		<description><![CDATA[Do high bug detection rates signal bad software, or better testing tools?]]></description>
			<content:encoded><![CDATA[<p>(<em>Acknowledgment</em>: this article came out of a discussion with Manuel Oriol, Carlo Furia and Yi Wei. The material is largely theirs but the opinions are mine.)</p>
<p>A paper on automatic testing, submitted some time ago, received the following referee comment:</p>
<blockquote><p><em>The case study seems unrealistic and biased toward the proposed technique. 736 unique faults found in 92 classes means at least 8 unique faults per class at the same time. I have never seen in all my life a published library with so many faults &#8230;</em></p></blockquote>
<p>This would be a good start for a discussion of what is wrong with refereeing in computer science today (on the negativism of our field see [1]); we have a referee who mistakes experience for expertise, prejudice for truth, and refuses to accept carefully documented evidence because “<em>in all his life</em>”, presumably a rich and rewarding life, he has never seen anything of the sort. That is not the focus of the present article, however; arrogant referees eventually retire and good papers eventually get published. The technical problems are what matters. The technical point here is about testing.</p>
<p>Specifically, what bugs are worth finding, and are high bug rates extraordinary?</p>
<p>The paper under review was a step in the work around the automatic testing tool AutoTest (see [2] for a slightly older overall description and [3] for the precise documentation). AutoTest applies a fully automatic strategy, exercising classes and their routines without the need to provide test cases or test oracles. What makes such automation possible is the combination of  random generation of tests and reliance on contracts to determine the success of tests.</p>
<p>For several years we have regularly subjected libraries, in particular the EiffelBase data structure library, to long AutoTest sessions, and we keep finding bugs (the better term is faults). The fault counts are significant; here they caught the referee&#8217;s eye. In fact we have had such comments before: I don&#8217;t believe your fault counts for production software; your software must be terrible!</p>
<p>Well, maybe.</p>
<p>My guess is that in fact EiffelBase has no more bugs, and possibly far fewer bugs, than other “production” code. The difference is that the  AutoTest framework performs far more exhaustive tests than usually practiced.</p>
<p>This is only a conjecture; unlike the referee I do not claim any special powers that make my guess self-evident. Until we get test harnesses comparable to AutoTest for environments other than Eiffel and, just as importantly, libraries that are fully equipped with contracts, enabling the detection of bugs that otherwise might not come to light, we will not know whether the explanation is the badness of EiffelBase or the goodness of AutoTest.</p>
<p>What concrete, incontrovertible evidence demonstrates is that systematic random testing does find faults that human testers typically do not. In a 2008 paper [4] with Ilinca Ciupa, Manuel Oriol and Alexander Pretschner, we ran AutoTest on some classes and compared the results with those of human testers (as well as actual bug reports from the field, since this was released software). We found that the two categories are complementary: human testers find faults that are still beyond the reach of automated tools, but they typically never find certain faults that AutoTest, with its stubborn dedication to leaving no stone unturned, routinely uncovers. We keep getting surprised at bugs that AutoTest detects and which no one had sought to test before.</p>
<p>A typical set of cases that human programmers seldom test, but which frequently lead to uncovering bugs, involves boundary values. AutoTest, in its “random-plus” strategy, always exercises special values of every type, such as MAXINT, the maximum representable integer. Programmers don&#8217;t. They should — all testing textbooks tell them so — but they just don&#8217;t, and perhaps they can&#8217;t, as the task is often too tedious for a manual process. It is remarkable how many routines using integers go bezerk when you feed them MAXINT or its negative counterpart. Some of the fault counts that seem so outrageous to our referee directly come from trying such values.</p>
<p>Some would say the cases are so extreme as to be insignificant. Wrong. Many documented software failures and catastrophes are due to untested extreme values. Perhaps the saddest is the case of the Patriot anti-missile system, which at the beginning of the first Gulf war was failing to catch Scud missiles, resulting in one case in the killing of twenty-eight American soldiers in an army barrack. It was traced to a software error [5]. To predict the position of the incoming missile, the computation multiplied time by velocity. The time computation used multiples of the time unit, a tenth of a second, stored in a 24-bit register and hence approximated. After enough time, long enough to elapse on the battlefield, but longer than what the tests had exercised, the accumulated error became so large as to cause a significant — and in the event catastrophic — deviation. The unique poser of automatic testing is that unlike human testers it is not encumbered by a priori notions of a situation being extreme or unlikely. It tries all the possibilities it can.</p>
<p>The following example, less portentous in its consequences but just as instructive, is directly related to AutoTest. For his work on model-based contracts [6] performed as part of his PhD completed in 2008 at ETH, Bernd Schoeller developed classes representing the mathematical notion of set. There were two implementations; it turned out that one of them, say <span style="color: #0000ff;"><em>SET1</em></span>, uses data structures that make the subset operation <span style="color: #0000ff;">⊆</span> easy to program efficiently; in the corresponding class, the superset operation, <span style="color: #0000ff;"><em>a</em> ⊇ <em>b</em></span>, is then simply implemented as <span style="color: #0000ff;"><em>b</em> ⊆ <em>a</em></span>. In the other implementation, say <span style="color: #0000ff;"><em>SET2</em></span>, it is the other way around: <span style="color: #0000ff;">⊇</span> is directly implemented, and <span style="color: #0000ff;"><em>a</em> ⊆ <em>b</em></span>, is implemented as <span style="color: #0000ff;"><em>b</em> ⊇ <em>a</em></span>. This all uses a nice object-oriented structure, with a general class <span style="color: #0000ff;"><em>SET</em></span> defining the abstract notion and the two implementations inheriting from it.</p>
<p><a href="http://bertrandmeyer.com/2011/08/23/all-bugs-large-and-small/set_implementations-3/" rel="attachment wp-att-1846"><img class="aligncenter size-full wp-image-1846" title="set_implementations" src="http://bertrandmeyer.com/wp-content/upLoads/set_implementations2.jpg" alt="" width="323" height="272" /></a></p>
<p>Now you may see (if you have developed a hunch for automated testing) where this is heading: AutoTest knows about polymorphism and dynamic binding, and tries all the type combinations that make sense. One of the generated test cases has two variables <span style="color: #0000ff;"><em>s1</em></span> and <span style="color: #0000ff;"><em>s2</em></span> of type <span style="color: #0000ff;"><em>SET</em></span>, and tries out <span style="color: #0000ff;"><em>s2</em> ⊆ <em>s1</em></span>; in one of the combinations that AutoTest tries, <span style="color: #0000ff;"><em>s1</em></span> is dynamically and polymorphically of type <span style="color: #0000ff;"><em>SET1</em></span> and <span style="color: #0000ff;"><em>s2</em></span> of type <span style="color: #0000ff;"><em>SET2</em></span>. The version of <span style="color: #0000ff;">⊆</span> that it will use is from <span style="color: #0000ff;"><em>SET2</em></span>, so it actually calls <span style="color: #0000ff;"><em>s1</em> ⊇ <em>s2</em></span>; but this tests the <span style="color: #0000ff;"><em>SET1</em></span> version of <span style="color: #0000ff;">⊇</span>, which goes back to <span style="color: #0000ff;"><em>SET2</em></span>. The process would go on forever, were it not for a timeout in AutoTest that uncovers the fault. Bernd Schoeller had tried AutoTest on these classes not in the particular expectation of finding bugs, but more as a favor to the then incipient development of AutoTest, to see how well the tool could handle model-based contracts. The uncovering of the fault, testament to the power of relentless, systematic automatic testing, surprised us all.</p>
<p>In this case no contract was violated; the problem was infinite recursion, due to a use of O-O techniques that for all its elegance had failed to notice a pitfall. In most cases, AutoTest finds the faults through violated postconditions or class invariants. This is one more reason to be cautious about sweeping generalizations of the kind “<em>I do not believe these bug rates, no serious software that I have seen shows anything of the sort!</em>”. Contracts express semantic properties of the software, which the designer takes care of stating explicitly. In run-of-the-mill code that does not benefit from such care, lots of things can go wrong but remain undetected during testing, only to cause havoc much later during some actual execution.</p>
<p>When you find such a fault, it is irrelevant that the case is extreme, or special, or rare, or trivial. When a failure happens it no longer matter that the fault was supposed to be rare; and you will only know how harmful it is when you deal with the consequences. Testing, single-mindedly  devoted to the uncovering of faults [7], knows no such distinction: it hunts all bugs large and small.</p>
<h4>References</h4>
<p>[1] <em>The nastiness problem in computer science</em>, article on the CACM blog, 22 August 2011, available <a href="http://cacm.acm.org/blogs/blog-cacm/123611-the-nastiness-problem-in-computer-science/fulltext " target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[2] Bertrand Meyer, Ilinca Ciupa, Andreas Leitner, Arno Fiva, Yi Wei and Emmanuel Stapf: Programs that Test Themselves, IEEE Computer, vol. 42, no. 9, pages 46-55, September 2009, also available <a href="http://se.ethz.ch/~meyer/publications/computer/test_themselves.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[3] Online AutoTest documentation, available <a href="http://docs.eiffel.com/book/eiffelstudio/autotest" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a> at docs.eiffel.com.</p>
<p>[4] Ilinca Ciupa, Bertrand Meyer, Manuel Oriol and Alexander Pretschner:<em> <em>Finding Faults: Manual Testing vs. Random+ Testing vs. User Reports</em>, in <em>ISSRE &#8217;08</em>, </em>Proceedings of the 19th IEEE International Symposium on Software Reliability Engineering, Redmond, November 2008<em></em>, available <a href="http://se.ethz.ch/~meyer/publications/testing/test_comparison.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[5] US General Accounting Office: GAO Report: <em>Patriot Missile Defense&#8211; Software Problem Led to System Failure at Dhahran, Saudi Arabia</em>, February 4, 1992, available <a href="http://www.fas.org/spp/starwars/gao/im92026.htm" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<p>[6] 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>[7] Bertrand Meyer: <em>Seven Principles of Software testing</em>, in IEEE <em>Computer</em>, vol. 41, no. 10, pages 99-101, August 2008available <a href="http://se.ethz.ch/~meyer/publications/testing/principles.pdf" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/hf8qI0G3vm0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2011/08/23/all-bugs-large-and-small/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2011/08/23/all-bugs-large-and-small/</feedburner:origLink></item>
		<item>
		<title>European Computer Science Summit 2011</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/_f7WSHxkDOM/</link>
		<comments>http://bertrandmeyer.com/2011/08/18/european-computer-science-summit-2011/#comments</comments>
		<pubDate>Thu, 18 Aug 2011 18:23:02 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[Policy]]></category>
		<category><![CDATA[Research evaluation]]></category>
		<category><![CDATA[ACM]]></category>
		<category><![CDATA[Informatics Europe]]></category>
		<category><![CDATA[Research]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=1825</guid>
		<description><![CDATA[ECSS is not a typical scientific conference; like Snowbird, its counterpart in the US, it is focused on professional and policy issues, and also a place to hear from technology leaders about their research visions. For me it is one of the most interesting events of the year.]]></description>
			<content:encoded><![CDATA[<p>The program for ECSS 2011 (Milan, 7-9 November) has just been put online [1]. The European Computer Science Summit, held yearly since 2005, is the annual conference of Informatics Europe and a unique opportunity to discuss issues of interest to the computer science / informatics research and education community; much of the audience is made of deans, department heads, lab directors, researchers and senior faculty. Keynote speakers this year include Stefano Ceri, Mary Fernández, Monika Henzinger, Willem Jonker, Miron Livny, John Mylopoulos, Xavier Serra and John White. </p>
<p>ECSS is not a typical scientific conference; like Snowbird, its counterpart in the US, it is focused on professional and policy issues, and also a place to hear from technology leaders about their research visions. For me it is one of the most interesting events of the year.</p>
<h4>References</h4>
<p>[1] ECSS home page including advance program, <a href="http://www.ecss2011.polimi.it/" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a>.</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/_f7WSHxkDOM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2011/08/18/european-computer-science-summit-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2011/08/18/european-computer-science-summit-2011/</feedburner:origLink></item>
		<item>
		<title>A safe and stable solution</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/mTQeCWBxApM/</link>
		<comments>http://bertrandmeyer.com/2011/08/02/a-safe-and-stable-solution/#comments</comments>
		<pubDate>Tue, 02 Aug 2011 00:28:58 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Eiffel]]></category>
		<category><![CDATA[General technology]]></category>
		<category><![CDATA[Policy]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Standardization]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Void safety]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=1805</guid>
		<description><![CDATA[Reading about the latest hullabaloo around Android&#8217;s usage of Java, and more generally following the incessant flow of news about X suing Y in the software industry (with many combinations of X and Y) over Java and other object-oriented technologies, someone with an Eiffel perspective can only smile. Throughout its history, suggestions to use Eiffel [...]]]></description>
			<content:encoded><![CDATA[<p>Reading about the latest hullabaloo around Android&#8217;s usage of Java, and more generally following the incessant flow of news about X suing Y in the software industry (with many combinations of X and Y) over Java and other object-oriented technologies, someone with an Eiffel perspective can only smile. Throughout its history, suggestions to use Eiffel have often been met initially — along with “<em>Will Eiffel still be around next year</em>?”, becoming truly riotous after 25 years — with objections of proprietariness, apparently because Eiffel initially came from a startup company. In contrast, many other approaches, from C++ to Smalltalk and Java, somehow managed to get favorable vibes from the media; the respective institutions, from AT&amp;T to Xerox and Sun, must be disinterested benefactors of humanity.</p>
<p>Now many who believed this are experiencing a next-morning surprise, discovering under daylight that the person next to whom they wake up is covered with patents and lawsuits.</p>
<p>For their part, people who adopted Eiffel over the years and went on to develop project after project  do not have to stay awake worrying about legal issues and the effects of corporate takeovers; they can instead devote their time to building the best software possible with adequate methods, notations and tools.</p>
<p>This is a good time to recall the regulatory situation of Eiffel. First, the Eiffel Software implementation (EiffelStudio): the product can be used through either an open-source and a proprietary licenses. With both licenses the software is exactly the same; what differs is the status of the code users generate: with the open-source license, they are requested to make their own programs open-source; to keep their code proprietary, they need the commercial license. This is a fair and symmetric requirement. It is made even more attractive by the absence of any run-time fees or royalties of the kind typically charged by database vendors.</p>
<p>The open-source availability of the entire environment, over 2.5 millions line of (mostly Eiffel) code, has spurred the development of countless community contributions, with many more in progress.</p>
<p>Now for the general picture on the language, separate from any particular implementation. Java&#8217;s evolution has always been tightly controlled by Sun and now its successor Oracle. There may actually be technical arguments in favor of the designers retaining a strong say in the evolution of a language, but they no longer seem to apply any more now that most of the Java creators have left the company. Contrast this with Eiffel, which is entirely under the control of an international standards committee at ECMA International, the oldest and arguably the most prestigious international standards body for information technology. The standard is freely available online from the ECMA site [1]. It is also an ISO standard [2].</p>
<p>The standardization process is the usual ECMA setup, enabling any interested party to participate. This is not just a statement of principle but the reality, to which I can personally testify since, in spite of being the language&#8217;s original designer and author of the reference book, I lost countless battles in the discussions that led to the current standard and continue in preparation of the next version. While I was not always pleased on the moment, the committee&#8217;s collegial approach has led to a much more solid result than any single person could have achieved.</p>
<p>The work of ECMA TC49-TG4 (the Eiffel standard committee) has disproved the conventional view that committees can only design camels. In fact TC49-TG4 has constantly worked to keep the language simple and manageable, not hesitating to remove features deemed obsolete or problematic, while extending the range of the language and increasing the Eiffel programmer&#8217;s power of expression. As a result, Eiffel today is an immensely better language than when we started our work in 2002. Without a strong community-based process we would never, for example, have made Eiffel the first widespread language to guarantee void-safety (the compile-time removal of null-pointer-dereferencing errors), a breakthrough for software reliability.</p>
<p>Open, fair, free from lawsuits and commercial fights, supported by an enthusiastic community: for projects that need a modern quality-focused software framework, Eiffel is a safe and stable solution.</p>
<h4>References</h4>
<p>[1] ECMA International: <em>Standard ECMA-367: Eiffel: Analysis, Design and Programming Language</em>, 2nd edition (June 2006), available <a href="http://www.ecma-international.org/publications/standards/Ecma-367.htm" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a> (free download).</p>
<p>[2] International Organization for Standardization: ISO/IEC 25436:2006: <em>Information technology &#8212; Eiffel: Analysis, Design and Programming Language</em>, available <a href="http://www.iso.org/iso/catalogue_detail.htm?csnumber=42924" target="blog_illustrations"><span style="color: #0000ff; text-decoration: underline;">here</span></a> (for a fee; same text as [1], different formatting).</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/mTQeCWBxApM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2011/08/02/a-safe-and-stable-solution/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2011/08/02/a-safe-and-stable-solution/</feedburner:origLink></item>
		<item>
		<title>Scopus’s view of computer science research</title>
		<link>http://feedproxy.google.com/~r/BertrandMeyer/~3/sBtVvogwNac/</link>
		<comments>http://bertrandmeyer.com/2011/07/28/scopuss-view-of-computer-science-research/#comments</comments>
		<pubDate>Thu, 28 Jul 2011 21:08:09 +0000</pubDate>
		<dc:creator>Bertrand Meyer</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Research evaluation]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[Scopus]]></category>

		<guid isPermaLink="false">http://bertrandmeyer.com/?p=1799</guid>
		<description><![CDATA[I posted on the Informatics Europe blog  a short note about what Scopus sees as the hottest articles in computer science.]]></description>
			<content:encoded><![CDATA[<p>I posted on the <a title="Scopus's view of CS research" href="http://informaticseurope.wordpress.com/2011/07/28/scopuss-view-of-computer-science-research/ " target="blog_illustrations">Informatics Europe blog</a>  a short note about what Scopus sees as the hottest articles in computer science.</p>
<img src="http://feeds.feedburner.com/~r/BertrandMeyer/~4/sBtVvogwNac" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bertrandmeyer.com/2011/07/28/scopuss-view-of-computer-science-research/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bertrandmeyer.com/2011/07/28/scopuss-view-of-computer-science-research/</feedburner:origLink></item>
	</channel>
</rss>

