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.
- Back, R.-J. 1978. On the correctness of refinement steps in program development. PhD thesis, Department of Computer Science, University of Helsinki.Google Scholar
- Back, R.-J. 1998. Refinement Calculus: A Systematic Introduction. Springer-Verlag. Google ScholarCross Ref
- Beck, K. 2000. Extreme Programming Explained: Embrace Change. Addison-Wesley. Google ScholarDigital Library
- Beck, K. 2003. Test-Driven Development by Example. Addison-Wesley. Google ScholarDigital Library
- 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 ScholarDigital Library
- Caspersen, M.E. 2007. Educating novices in the skills of programming. PhD dissertation PD-07-4, Department of Computer Science, University of Aarhus.Google Scholar
- Cockburn, A. 2002. Agile Software Development. Addison-Wesley. Google ScholarDigital Library
- Cohen, E. 1990. Programming in the 1990’s. Springer-Verlag.Google Scholar
- Collins, A.M., Brown, J.S. and Holum, A. 1991. Cognitive apprenticeship: Making thinking visible. American Educator 15, 3.Google Scholar
- 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 ScholarCross Ref
- Dijkstra, E.W. 1969. Notes on structured programming, EWD 249.Google Scholar
- Dijkstra, E.W. 1976. A Discipline of Programming. Prentice-Hall. Google ScholarDigital Library
- Dr. Java. 2009. http://drjava.org (Feb. 8, 2009).Google Scholar
- 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 ScholarDigital Library
- Fowler, M. 1999. Refactoring: Improving the Design of Existing Code. Addison-Wesley. Google ScholarDigital Library
- Gamma, E., Helm, R., Johnson, R., and Vlissides, J.M. 1995. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. Google ScholarDigital Library
- Gries, D. 1981. The Science of Programming. Springer-Verlag. Google ScholarDigital Library
- Hanks, B. 2008. Problems Encountered by Novice Pair Programmers. J. Educ. Resour. Comput. 7, 4. Google ScholarCross Ref
- Hunt, A. and Thomas, D. 2003. Pragmatic Unit Testing in Java with JUnit. The Pragmatic Programmers. Google ScholarDigital Library
- 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 ScholarDigital Library
- Jones, C.G. 2004. Test-driven development goes to school. J. Comput. Sci. Coll., 20, 1, 220--231. Google ScholarDigital Library
- JUnit. 2009. http://www.junit.org (Feb. 8, 2009).Google Scholar
- Kölling, M. 2009. Unit testing in BlueJ. http://www.bluej.org/tutorial/testing-tutorial.pdf (Feb. 8, 2009).Google Scholar
- 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 ScholarCross Ref
- Martin, R.C. 2003. Agile Software Development: Principles, Patterns, and Practices. Prentice-Hall. Google ScholarDigital Library
- Morgan, C. 1990. Programming from Specifications, Prentice-Hall. Google ScholarDigital Library
- Saiedian, H. 2001. Practical software engineering education. Comput. Science Ed. 11, 1, 3--5.Google ScholarCross Ref
- 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 ScholarCross Ref
- Williams, L.A. and Tomayko, J. 2002. Agile software development. Comput. Science Ed. 12, 3, 167--168.Google ScholarCross Ref
- Winslow, L.E. 1996. Programming pedagogy - A psychological overview. SIGCSE Bull. 28, 3, 17--22. Google ScholarDigital Library
- Wirfs-Brock, R. and McKean, A. 2003. Object design: Roles, Responsibilities, and Collaborations, Addison-Wesley. Google ScholarDigital Library
- Wirth, N. 1971. Program development by stepwise refinement. Comm. ACM 14, 4, 221--227. Google ScholarDigital Library
- Wirth, N. 1973. Systematic Programming, Prentice-Hall. Google ScholarDigital Library
Index Terms
- STREAM: A First Programming Process
Recommendations
Revealing the programming process
SIGCSE '05: Proceedings of the 36th SIGCSE technical symposium on Computer science educationOne of the most important goals of an introductory programming course is that the students learn a systematic approach to the development of computer programs. Revealing the programming process is an important part of this; however, textbooks do not ...
A novice's process of object-oriented programming
OOPSLA '06: Companion to the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applicationsExposing students to the process of programming is merely implied but not explicitly addressed in texts on programming which appear to deal with 'program' as a noun rather than as a verb.We present a set of principles and techniques as well as an ...
Revealing the programming process
One of the most important goals of an introductory programming course is that the students learn a systematic approach to the development of computer programs. Revealing the programming process is an important part of this; however, textbooks do not ...
Comments