<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
<channel>
<title>John Clements</title>
<copyright>Copyright (c) 2011  All rights reserved.</copyright>
<link>http://works.bepress.com/jclement</link>
<description>Recent documents in John Clements</description>
<language>en-us</language>
<lastBuildDate>Thu, 17 Nov 2011 01:58:20 PST</lastBuildDate>
<ttl>3600</ttl>


	
		
	







<item>
<title>Supporting Introductory Test-Driven Labs with WebIDE</title>
<link>http://works.bepress.com/jclement/15</link>
<guid isPermaLink="true">http://works.bepress.com/jclement/15</guid>
<pubDate>Tue, 15 Nov 2011 16:09:24 PST</pubDate>
<description>
	<![CDATA[
	<p>WebIDE is a new web-based development environment for entry-level  programmers with two primary goals: minimize tool barriers to writing  computer programs and introduce software engineering best practices  early in a student's educational career. Currently, WebIDE focuses on  Test-Driven Learning (TDL) by using small iterative examples and  introducing lock-step labs, which prevent the student from moving  forward until they finish the current step. However, WebIDE does not  require that labs follow TDL. Instructors can write their own labs for  WebIDE using any software engineering or pedagogical approach. Likewise,  instructors can build custom evaluators - written in any language - to  support their approach and provide detailed error messages to students.  We report on a pilot study in a CS0 course where students were split  into two groups, one that used WebIDE and one that didn't. The WebIDE  group showed a significant improvement in performance when writing a  simple Android application. Additionally, among students with some  programming experience, the WebIDE group was more proficient in writing  unit tests.</p>

	]]>
</description>

<author>T. Dvornik et al.</author>


<category>Conference Proceedings</category>

</item>






<item>
<title>Overcoming Obstacles to Test-Driven Learning on Day One</title>
<link>http://works.bepress.com/jclement/14</link>
<guid isPermaLink="true">http://works.bepress.com/jclement/14</guid>
<pubDate>Mon, 17 May 2010 10:21:32 PDT</pubDate>
<description>
	<![CDATA[
	<p>We describe the preliminary construction of a web-based tool for test-driven learning in the first weeks of programming. We discuss obstacles to test-driven learning--both pragmatic and ideological--and describe the ways that we believe our tool overcomes these obstacles.</p>

	]]>
</description>

<author>John Clements et al.</author>


<category>Conference Proceedings</category>

</item>






<item>
<title>“Little Language” Project Modules</title>
<link>http://works.bepress.com/jclement/12</link>
<guid isPermaLink="true">http://works.bepress.com/jclement/12</guid>
<pubDate>Mon, 17 May 2010 09:38:42 PDT</pubDate>
<description>
	<![CDATA[
	<p>Many computer science departments are debating the role of programming languages in the curriculum. These discussions often question the relevance and appeal of programming-languages content for today's students. In our experience, domain-specific, “little languages” projects provide a compelling illustration of the importance of programming-language concepts. This paper describes projects that prototype mainstream applications such as PowerPoint, TurboTax, and animation scripting. We have used these exercises as modules in non-programming languages courses, including courses for first year students. Such modules both encourage students to study linguistic topics in more depth and provide linguistic perspective to students who might not otherwise be exposed to the area.</p>

	]]>
</description>

<author>John Clements et al.</author>


<category>Articles</category>

</item>






<item>
<title>Proceedings of the Scheme and Functional Programming Workshop</title>
<link>http://works.bepress.com/jclement/11</link>
<guid isPermaLink="true">http://works.bepress.com/jclement/11</guid>
<pubDate>Thu, 15 Oct 2009 15:21:08 PDT</pubDate>
<description>
	<![CDATA[
	<p>This volume contains the papers of the tenth annual Workshop on Scheme and Functional Programming, held August 22nd at Northeastern University in close proximity to the Symposium in honor of Mitchell Wand.</p>

	]]>
</description>

<author>John Clements (editor)</author>


<category>Conference Proceedings</category>

</item>






<item>
<title>A Tail-Recursive Semantics for Stack Inspections</title>
<link>http://works.bepress.com/jclement/10</link>
<guid isPermaLink="true">http://works.bepress.com/jclement/10</guid>
<pubDate>Fri, 01 May 2009 13:40:54 PDT</pubDate>
<description>
	<![CDATA[
	<p>Security folklore holds that a security mechanism based on stack inspection is incompatible with a global tail call optimization policy. An implementation of such a language may have to allocate memory for a source-code tail call, and a program that uses only tail calls (and no other memory-allocating construct) may nevertheless exhaust the available memory. In this paper, we prove this widely held belief wrong. We exhibit an abstract machine for a language with security stack inspection whose space consumption function is equivalent to that of the canonical tail call optimizing abstract machine. Our machine is surprisingly simple and suggests that tail-calls are as easy to implement in a security setting as they are in a conventional one.</p>

	]]>
</description>

<author>John Clements et al.</author>


<category>Articles</category>

</item>






<item>
<title>Modeling an Algebraic Stepper</title>
<link>http://works.bepress.com/jclement/9</link>
<guid isPermaLink="true">http://works.bepress.com/jclement/9</guid>
<pubDate>Fri, 01 May 2009 13:40:54 PDT</pubDate>
<description>
	<![CDATA[
	<p>Programmers rely on the correctness of the tools in their programming environments. In the past, semanticists have studied the correctness of compilers and compiler analyses, which are the most important tools. In this paper, we make the case that other tools, such as debuggers and steppers, deserve semantic models, too, and that using these models can help in developing these tools.</p>
<p>Our concrete starting point is the algebraic stepper in DrScheme, our Scheme programming environment. The algebraic stepper explains a Scheme computation in terms of an algebraic rewriting of the program text. A program is rewritten until it is in a canonical form (if it has one). The canonical form is the final result.</p>
<p>The stepper operates within the existing evaluator, by placing breakpoints and by reconstructing source expressions from source information placed on the stack. This approach raises two questions. First, do the run-time breakpoints correspond to the steps of the reduction semantics? Second, does the debugging mechanism insert enough information to reconstruct source expressions?</p>
<p>To answer these questions, we develop a high-level semantic model of the extended compiler and run-time machinery. Rather than modeling the evaluation as a low-level machine, we model the relevant low-level features of the stepper’s implementation in a high-level reduction semantics. We expect the approach to apply to other semantics-based tools.</p>

	]]>
</description>

<author>John Clements et al.</author>


<category>Articles</category>

</item>






<item>
<title>Little Languages and Their Programming Environments</title>
<link>http://works.bepress.com/jclement/8</link>
<guid isPermaLink="true">http://works.bepress.com/jclement/8</guid>
<pubDate>Fri, 01 May 2009 13:40:33 PDT</pubDate>
<description>
	<![CDATA[
	<p>Programmers constantly design, implement, and program in little languages. Two different approaches to the implementation of little languages have evolved. One emphasizes the design of little languages from scratch, using conventional technology to implement interpreters and compilers. The other advances the idea of extending a general-purpose host language; that is, the little language shares the host language's features (variables, data, loops, functions) where possible; its interpreters and compilers; and even its type soundness theorem. The second approach is often called a language embedding.</p>
<p>This paper directs the attention of little language designers to a badly neglected area: the programming environments of little languages. We argue that an embedded little language should inherit not only the host language's syntactic and semantic structure, but also its programming environment.</p>
<p>We illustrate the idea with our DrScheme programming environment and S-XML, a little transformation language for XML trees. DrScheme provides a host of tools for Scheme: a syntax analysis tool, a static debugger, an algebraic stepper, a portable plugin system, and an interactive evaluator. S-XML supports the definition of XML languages using a simple form of schemas, the convenient creation of XML data, and the definition of XML transformations.</p>
<p>The S-XML embedding consists of two parts: a library of functions and a set of syntactic extensions. The elaboration of a syntactic extension into core Scheme preserves the information necessary to report the results of an analysis or of a program evaluation at the source level. As a result, all of DrScheme's tools are naturally extended to the embedded language. The process of embedding the S-XML language into Scheme directly creates a full-fledged S-XML environment.</p>
<p>We believe that this method of language implementation may be generalized to other languages and other environments, and represents a substantial improvement upon current practice.</p>

	]]>
</description>

<author>John Clements et al.</author>


<category>Conference Proceedings</category>

</item>






<item>
<title>Laziness Without All the Hard Work: Combining Lazy and Strict Languages for Teaching</title>
<link>http://works.bepress.com/jclement/7</link>
<guid isPermaLink="true">http://works.bepress.com/jclement/7</guid>
<pubDate>Fri, 01 May 2009 13:37:28 PDT</pubDate>
<description>
	<![CDATA[
	<p>Students have trouble understanding the difference between lazy and strict programming. It is difficult to compare the two directly, because popular strict languages and popular lazy languages differ in their syntax, in their type systems, and in other ways unrelated to the lazy/strict evaluation discipline.</p>
<p>While teaching programming languages courses, we have discovered that an extension to PLT Scheme allows the system to accommodate both lazy and strict evaluation in the same system. Moreover, the extension is simple and transparent. Finally, the simple nature of the extension means that the resulting system provides a rich environment for both lazy and strict programs without modification.</p>

	]]>
</description>

<author>Eli Barzilay et al.</author>


<category>Conference Proceedings</category>

</item>






<item>
<title>A Tail-Recursive Machine with Stack Inspection</title>
<link>http://works.bepress.com/jclement/6</link>
<guid isPermaLink="true">http://works.bepress.com/jclement/6</guid>
<pubDate>Fri, 01 May 2009 13:37:28 PDT</pubDate>
<description>
	<![CDATA[
	<p>Security folklore holds that a security mechanism based on stack inspection is incompatible with a global tail call optimization policy; that an implementation of such a language must allocate memory for a source-code tail call, and a program that uses only tail calls (and no other memory allocating construct) may nevertheless exhaust the available memory. In this article, we prove this widely held belief wrong.We exhibit an abstract machine for a language with security stack inspection whose space consumption function is equivalent to that of the canonical tail call optimizing abstract machine. Our machine is surprisingly simple and suggests that tail calls are as easy to implement in a security setting as they are in a conventional one.</p>

	]]>
</description>

<author>John Clements et al.</author>


<category>Articles</category>

</item>






<item>
<title>Implementing Continuation Marks in Javascript</title>
<link>http://works.bepress.com/jclement/4</link>
<guid isPermaLink="true">http://works.bepress.com/jclement/4</guid>
<pubDate>Fri, 01 May 2009 13:37:27 PDT</pubDate>
<description>
	<![CDATA[
	<p>MzScheme’s continuation marks provide a flexible mechanism for implementing a number of useful language features and tools. We demonstrate the simplicity and utility of continuation marks by adapting them for JavaScript as frame-based stack marks using the Rhino implementation, showing a simple model of their behavior, and using them to build a toy debugger.</p>
<p>Along the way, we discover a few interesting things. First, it requires some thinking—but not much code—to add continuation marks to JavaScript. Second, coupling tail-calling with the “return” of statement-based languages leads to some interesting problems in formulating a semantics. Third, building a debugger based on continuation marks highlights (by its absence) the elegance of Scheme’s simple syntax and hygienic macro system.</p>

	]]>
</description>

<author>John Clements et al.</author>


<category>Conference Proceedings</category>

</item>






<item>
<title>Continuations from Generalized Stack Inspection</title>
<link>http://works.bepress.com/jclement/5</link>
<guid isPermaLink="true">http://works.bepress.com/jclement/5</guid>
<pubDate>Fri, 01 May 2009 13:37:27 PDT</pubDate>
<description>
	<![CDATA[
	<p>Implementing first-class continuations can pose a challenge if the target machine makes no provisions for accessing and re-installing the run-time stack. In this paper, we present a novel translation that overcomes this problem. In the first half of the paper, we introduce a theoretical model that shows how to eliminate the capture and the use of first-class continuations in the presence of a generalized stack inspection mechanism. The second half of the paper explains how to translate this model into practice in two different contexts. First, we reformulate the servlet interaction language in the PLT Web server, which heavily relies on first-class continuations. Using our technique, servlet programs can be run directly under the control of non-cooperative web servers such as Apache. Second, we show how to use our new technique to copy and reconstitute the stack on MSIL. Net using exception handlers. This establishes that Scheme’s first-class continuations can exist on non-cooperative virtual machines</p>

	]]>
</description>

<author>Greg Pettyjohn et al.</author>


<category>Conference Proceedings</category>

</item>






<item>
<title>Implications of Integrating Test-Driven Development into CS1/CS2 Curricula</title>
<link>http://works.bepress.com/jclement/3</link>
<guid isPermaLink="true">http://works.bepress.com/jclement/3</guid>
<pubDate>Wed, 01 Apr 2009 16:35:08 PDT</pubDate>
<description>
	<![CDATA[
	<p>Many academic and industry professionals have called for more testing in computer science curricula. Test-driven development (TDD) has been proposed as a solution to improve testing in academia. This paper demonstrates how TDD can be integrated into existing course materials without reducing topic coverage. Two controlled experiments were conducted in a CS1/CS2 course in Winter 2008. Following a test-driven learning approach, unit testing was introduced at the beginning of the course and reinforced through example. Results indicate that while student work loads may increase with the incorporation of TDD, students are able to successfully develop unit tests while learning to program.</p>

	]]>
</description>

<author>Chetan Desai et al.</author>


<category>Conference Proceedings</category>

</item>






<item>
<title>Improving Engineering Education Through Creativity, Collboration, and Context in a First Year Course</title>
<link>http://works.bepress.com/jclement/2</link>
<guid isPermaLink="true">http://works.bepress.com/jclement/2</guid>
<pubDate>Mon, 08 Dec 2008 10:55:45 PST</pubDate>
<description>
	<![CDATA[
	<p>Over the past few years, Computer Science and some Engineering disciplines have suffered from a decrease in student enrollment, poor retention, and low women and minority representation. We suggest three issues with first-year courses that contribute to this trend. First, students find it difficult to see how their assignments and course material relate to real-world applications. Second, students tend to perceive engineering as an individual endeavor requiring little interaction with peers. Last, early engineering assignments are often overly constrained, possibly to ease grading, allowing minimal room for student creativity.</p>
<p>In this paper, we present a model for an introductory freshman-level course that helps address student enrollment and retention issues. Our course is based on three tenets: (1) the course draws problems from, and teaches about, an interesting and relevant domain in which students already are familiar, (2) the course encourages teamwork and peer communication, (3) the student is actively responsible for their education. To address these, the class teaches game design in a collaborative environment in which students are given open-ended assignments to promote creativity. We address instructor grading concerns, various student skill levels, and individual assessment. In our approach, we encourage the implicit acquisition of basic computer science concepts and skills as opposed to directly lecturing about them. Over 60% of the students in our class had no prior programming experience, yet all of the student teams were successful in developing engaging Flash-based games. Student surveys revealed that nearly all students characterize computer science as collaborative, multi-disciplinary, and creative. We believe our class can serve as a model to create other discipline-specific introductory courses.</p>

	]]>
</description>

<author>Michael Haungs et al.</author>


<category>Articles</category>

<category>Conference Proceedings</category>

</item>





</channel>
</rss>

