skip to main content
research-article
Free Access

STREAM: A First Programming Process

Published:01 March 2009Publication History
Skip Abstract Section

Abstract

Programming is recognized as one of seven grand challenges in computing education. Decades of research have shown that the major problems novices experience are composition-based---they may know what the individual programming language constructs are, but they do not know how to put them together. Despite this fact, textbooks, educational practice, and programming education research hardly address the issue of teaching the skills needed for systematic development of programs.

We provide a conceptual framework for incremental program development, called Stepwise Improvement, which unifies best practice in modern software development such as test-driven development and refactoring with the prevailing perspective of programming methodology, stepwise refinement. The conceptual framework enables well-defined characterizations of incremental program development.

We utilize the conceptual framework to derive a programming process, STREAM, designed specifically for novices. STREAM is a carefully down-scaled version of a full and rich agile software engineering process particularly suited for novices learning object-oriented programming. In using it we hope to achieve two things: to help novice programmers learn faster and better while at the same time laying the foundation for a more thorough treatment of more advanced aspects of software engineering. In this article, two examples demonstrate the application of STREAM.

The STREAM process has been taught in the introductory programming courses at our universities for the past three years and the results are very encouraging. We report on a small, preliminary study evaluating the learning outcome of teaching STREAM. The study indicates a positive effect on the development of students’ process competences.

References

  1. Back, R.-J. 1978. On the correctness of refinement steps in program development. PhD thesis, Department of Computer Science, University of Helsinki.Google ScholarGoogle Scholar
  2. Back, R.-J. 1998. Refinement Calculus: A Systematic Introduction. Springer-Verlag. Google ScholarGoogle ScholarCross RefCross Ref
  3. Beck, K. 2000. Extreme Programming Explained: Embrace Change. Addison-Wesley. Google ScholarGoogle ScholarDigital LibraryDigital Library
  4. Beck, K. 2003. Test-Driven Development by Example. Addison-Wesley. Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. Bergin, J., Caristi, J., Dubinsky, J., Hazzan, O., and Williams, L. 2004. Teaching software development methods: The case of extreme programming. In Proceedings of the 35th Technical Symposium on Computer Science Education (SIGSCE’04), 448--449. Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. Caspersen, M.E. 2007. Educating novices in the skills of programming. PhD dissertation PD-07-4, Department of Computer Science, University of Aarhus.Google ScholarGoogle Scholar
  7. Cockburn, A. 2002. Agile Software Development. Addison-Wesley. Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. Cohen, E. 1990. Programming in the 1990’s. Springer-Verlag.Google ScholarGoogle Scholar
  9. Collins, A.M., Brown, J.S. and Holum, A. 1991. Cognitive apprenticeship: Making thinking visible. American Educator 15, 3.Google ScholarGoogle Scholar
  10. Dijkstra, E.W. 1968. A constructive approach to the problem of program correctness. In Proceedings of the Business and Information Technology Conference (BIT’68).Google ScholarGoogle ScholarCross RefCross Ref
  11. Dijkstra, E.W. 1969. Notes on structured programming, EWD 249.Google ScholarGoogle Scholar
  12. Dijkstra, E.W. 1976. A Discipline of Programming. Prentice-Hall. Google ScholarGoogle ScholarDigital LibraryDigital Library
  13. Dr. Java. 2009. http://drjava.org (Feb. 8, 2009).Google ScholarGoogle Scholar
  14. Edwards, S.H. 2004. Using software testing to move students from trial-and-error to reflection-in-action. In Proceedings of the 35th Technical Symposium on Computer Science Education (SIGCSE’04), 26--30. Google ScholarGoogle ScholarDigital LibraryDigital Library
  15. Fowler, M. 1999. Refactoring: Improving the Design of Existing Code. Addison-Wesley. Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. Gamma, E., Helm, R., Johnson, R., and Vlissides, J.M. 1995. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. Google ScholarGoogle ScholarDigital LibraryDigital Library
  17. Gries, D. 1981. The Science of Programming. Springer-Verlag. Google ScholarGoogle ScholarDigital LibraryDigital Library
  18. Hanks, B. 2008. Problems Encountered by Novice Pair Programmers. J. Educ. Resour. Comput. 7, 4. Google ScholarGoogle ScholarCross RefCross Ref
  19. Hunt, A. and Thomas, D. 2003. Pragmatic Unit Testing in Java with JUnit. The Pragmatic Programmers. Google ScholarGoogle ScholarDigital LibraryDigital Library
  20. Janzen, D.S. and Saiedian, H. 2006. Test-driven learning: Intrinsic integration of testing into the CS/SE curriculum. In Proceedings of the 37th Technical Symposium on Computer Science Education (SIGCSE’06), 254--258. Google ScholarGoogle ScholarDigital LibraryDigital Library
  21. Jones, C.G. 2004. Test-driven development goes to school. J. Comput. Sci. Coll., 20, 1, 220--231. Google ScholarGoogle ScholarDigital LibraryDigital Library
  22. JUnit. 2009. http://www.junit.org (Feb. 8, 2009).Google ScholarGoogle Scholar
  23. Kölling, M. 2009. Unit testing in BlueJ. http://www.bluej.org/tutorial/testing-tutorial.pdf (Feb. 8, 2009).Google ScholarGoogle Scholar
  24. Kölling, M., Quig, B., Patterson, A., and Rosenberg, J. 2003. The BlueJ system and its pedagogy. Comput. Science Ed. 13, 4, 249--268.Google ScholarGoogle ScholarCross RefCross Ref
  25. Martin, R.C. 2003. Agile Software Development: Principles, Patterns, and Practices. Prentice-Hall. Google ScholarGoogle ScholarDigital LibraryDigital Library
  26. Morgan, C. 1990. Programming from Specifications, Prentice-Hall. Google ScholarGoogle ScholarDigital LibraryDigital Library
  27. Saiedian, H. 2001. Practical software engineering education. Comput. Science Ed. 11, 1, 3--5.Google ScholarGoogle ScholarCross RefCross Ref
  28. Williams, L.A. and Kessler, R.R. 2001. Experiments with industry’s “pair-programming” model in the computer science classroom. Comput. Science Ed. 11, 1, 7--20.Google ScholarGoogle ScholarCross RefCross Ref
  29. Williams, L.A. and Tomayko, J. 2002. Agile software development. Comput. Science Ed. 12, 3, 167--168.Google ScholarGoogle ScholarCross RefCross Ref
  30. Winslow, L.E. 1996. Programming pedagogy - A psychological overview. SIGCSE Bull. 28, 3, 17--22. Google ScholarGoogle ScholarDigital LibraryDigital Library
  31. Wirfs-Brock, R. and McKean, A. 2003. Object design: Roles, Responsibilities, and Collaborations, Addison-Wesley. Google ScholarGoogle ScholarDigital LibraryDigital Library
  32. Wirth, N. 1971. Program development by stepwise refinement. Comm. ACM 14, 4, 221--227. Google ScholarGoogle ScholarDigital LibraryDigital Library
  33. Wirth, N. 1973. Systematic Programming, Prentice-Hall. Google ScholarGoogle ScholarDigital LibraryDigital Library

Index Terms

  1. STREAM: A First Programming Process

                  Recommendations

                  Reviews

                  Alexandre Bergel

                  As stated in the introduction, "the task of teaching programming did not become easier over the last decades." The increasing complexity of programming languages and development tools plays an important role in teaching programming. According to the authors, the teaching curricula of many universities focus too much on technical bits, instead of teaching a concise software development process. This paper is intended for teachers, students, and anyone involved in a software engineering curriculum. It promotes STREAM, a simple and easy-to-implement software process development composed of six elementary steps: create skeleton class, create tests, define instance variables, evaluate alternative representations, refine implementation, and implementation methods. Caspersen and K?lling exemplify STREAM on a simple simulation problem and provide a preliminary evaluation of teaching STREAM. The authors point to an important deficiency of many university programs: a failure to address the software process in introductory programming courses. STREAM makes important points in this respect, but there still needs to be an extended evaluation. The paper reads well. Caspersen and K?lling have a nice writing style and present an exciting in-depth analysis. Online Computing Reviews Service

                  Access critical reviews of Computing literature here

                  Become a reviewer for Computing Reviews.

                  Comments

                  Login options

                  Check if you have access through your login credentials or your institution to get full access on this article.

                  Sign in

                  Full Access

                  • Published in

                    cover image ACM Transactions on Computing Education
                    ACM Transactions on Computing Education  Volume 9, Issue 1
                    March 2009
                    167 pages
                    EISSN:1946-6226
                    DOI:10.1145/1513593
                    Issue’s Table of Contents

                    Copyright © 2009 ACM

                    Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected]

                    Publisher

                    Association for Computing Machinery

                    New York, NY, United States

                    Publication History

                    • Published: 1 March 2009
                    • Accepted: 1 February 2009
                    • Revised: 1 January 2009
                    • Received: 1 November 2008
                    Published in toce Volume 9, Issue 1

                    Permissions

                    Request permissions about this article.

                    Request Permissions

                    Check for updates

                    Qualifiers

                    • research-article
                    • Research
                    • Refereed

                  PDF Format

                  View or Download as a PDF file.

                  PDF

                  eReader

                  View online with eReader.

                  eReader