Gerard J. Holzmann’s article "Mars Code" (Feb. 2014) demonstrated a nonblocking implementation of concurrent double-ended queues, or deques,1 (previously shown to be incorrect by Doherty2) to not work through an application of Holzmann’s own Spin model checker. However, the demonstration seemed too shallow. Assuming the writer process of the test driver is allowed to pushRight(0) and pushRight(1) before the reader process gets a chance to run, then the value of rv returned by the first succeeding popRight() in the reader process would definitely not be 0 and the assert(rv==i) would fail because i is 0; that is, the test driver is incorrect and could fail, even with a correct implementation of concurrent deques.
Holzmann’s demonstration included a description of a failing run of his test driver exercising the concurrent deque implementation. Even though Holzmann clearly left out some details—the initialize function and complete output of the model checker—the failing run he described was definitely much simpler than the failure described by Doherty,2 indicating the failure detected was in the test driver, not in the concurrent deque implementation.
Thorkil Naur, Odense, Denmark
Author’s Response
Naur is correct, and I thank him for his keen observation. The test driver used for the example was flawed. If we make the required changes we can show it takes minimally three processes to expose the bug in the original DCAS algorithm,1 as was also shown in Doherty.2 A corrected version of the example, with the model-checking result, is available from the author.
Gerard J. Holzmann, Pasadena, CA
Yes, Teach Everybody to Code
As explored in Esther Shein’s news story "Should Everybody Learn to Code?" (Feb. 2014), educators should indeed teach everybody to code, even if not all become programmers. After all, throughout the English-speaking world, we aim to teach everybody to write good English, even though we do not expect all of them to write novels for a living.
William Clocksin, Hatfield, U.K.
Learn from Long-Term U.K. MOOC Experience
I keep reading about U.S. initiatives involving massively open online courses, or MOOCS, and computer science education in schools, as in Andrew McGettrick’s Letter from the Chair of Education Board "Education, Always" (Feb. 2014) and Tim Bell’s Viewpoint "Establishing a Nationwide CS Curriculum in New Zealand High Schools" (Feb. 2014). Here, I would like to point out the U.K. has had a distance-education university—The Open University, founded 1971—that has made ample use of appropriate technology and is well worth looking at if you want to benefit from a long-running, successful, high-quality system; for a condensed history of this so-called "University of the Air," see http://www.open.ac.uk/about/main/the-ou-explained/history-the-ou. I would also like to point to England’s more recent but equally successful campaign called "Computing At School" to introduce and scale out teaching computer science for all schoolchildren; see http://www.computingatschool.org.uk/. All can likewise share quite a bit of useful experience there, too.
Jon Crowcroft, Cambridge, England
Toward Multidisciplinary Design Thinking
In his Viewpoint "Toward a Closer Integration of Law and Computer Science" (Jan. 2014), Christopher S. Yoo raised an important point about how the law and technological change interact but emphasized only one dimension of what could be called the "social embedding" of technology. Legal concerns are an important aspect of software design, especially if the software stores and processes sensitive personal data about users. However, in order to increase the acceptability and acceptance of a software product, more aspects must be considered during development. Some (such as data privacy and usability) are well represented in most projects. Others (such as users trust in technology, incentives to participate in collective activities, inclusion of users with disabilities, and ethical and sociological challenges) have only begun to attract attention due to recent technological advancements (such as context-aware services, self-adaptive systems, and autonomously acting agents). The crucial point for software developers is these aspects of social embedding could lead to conflicting software design requirements, so should be addressed together in a systematic and integrated development process. Because society demands it, truly multidisciplinary design thinking will become increasingly important in the future.
Kurt Geihs, Kassel, Germany
Join the Discussion (0)
Become a Member or Sign In to Post a Comment