{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,1,2]],"date-time":"2026-01-02T07:40:45Z","timestamp":1767339645839,"version":"3.41.0"},"reference-count":31,"publisher":"Association for Computing Machinery (ACM)","issue":"1","license":[{"start":{"date-parts":[[2009,3,1]],"date-time":"2009-03-01T00:00:00Z","timestamp":1235865600000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["ACM Trans. Comput. Educ."],"published-print":{"date-parts":[[2009,3]]},"abstract":"<jats:p>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.<\/jats:p>\n          <jats:p>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.<\/jats:p>\n          <jats:p>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.<\/jats:p>\n          <jats:p>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\u2019 process competences.<\/jats:p>","DOI":"10.1145\/1513593.1513597","type":"journal-article","created":{"date-parts":[[2009,12,1]],"date-time":"2009-12-01T14:35:04Z","timestamp":1259678104000},"page":"1-29","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":29,"title":["STREAM"],"prefix":"10.1145","volume":"9","author":[{"given":"Michael E.","family":"Caspersen","sequence":"first","affiliation":[{"name":"Aarhus University"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Michael","family":"Kolling","sequence":"additional","affiliation":[{"name":"University of Kent"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2009,3]]},"reference":[{"key":"e_1_2_1_2_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-1-4612-1674-2"},{"volume-title":"Extreme Programming Explained: Embrace Change","author":"Beck K.","key":"e_1_2_1_3_1"},{"volume-title":"Test-Driven Development by Example","author":"Beck K.","key":"e_1_2_1_4_1"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/971300.971452"},{"volume-title":"Agile Software Development","author":"Cockburn A.","key":"e_1_2_1_7_1"},{"volume-title":"Programming in the 1990\u2019s","author":"Cohen E.","key":"e_1_2_1_8_1"},{"key":"e_1_2_1_9_1","first-page":"3","article-title":"Cognitive apprenticeship: Making thinking visible","volume":"15","author":"Collins A.M.","year":"1991","journal-title":"American Educator"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1007\/BF01933419"},{"key":"e_1_2_1_11_1","unstructured":"Dijkstra E.W. 1969. Notes on structured programming EWD 249. Dijkstra E.W. 1969. Notes on structured programming EWD 249."},{"volume-title":"A Discipline of Programming","author":"Dijkstra E.W.","key":"e_1_2_1_12_1"},{"volume-title":"http:\/\/drjava.org (Feb. 8","year":"2009","author":"Dr Java","key":"e_1_2_1_13_1"},{"key":"e_1_2_1_14_1","doi-asserted-by":"publisher","DOI":"10.1145\/971300.971312"},{"volume-title":"Refactoring: Improving the Design of Existing Code","year":"1999","author":"Fowler M.","key":"e_1_2_1_15_1"},{"volume-title":"Design Patterns: Elements of Reusable Object-Oriented Software","year":"1995","author":"Gamma E.","key":"e_1_2_1_16_1"},{"volume-title":"The Science of Programming","author":"Gries D.","key":"e_1_2_1_17_1","doi-asserted-by":"crossref","DOI":"10.1007\/978-1-4612-5983-1"},{"key":"e_1_2_1_18_1"},{"key":"e_1_2_1_19_1","unstructured":"Hunt A. and Thomas D. 2003. Pragmatic Unit Testing in Java with JUnit. The Pragmatic Programmers. Hunt A. and Thomas D. 2003. Pragmatic Unit Testing in Java with JUnit . The Pragmatic Programmers."},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/1121341.1121419"},{"key":"e_1_2_1_21_1","first-page":"220","article-title":"Test-driven development goes to school","volume":"20","author":"Jones C.G.","year":"2004","journal-title":"J. Comput. Sci. Coll."},{"volume-title":"http:\/\/www.junit.org (Feb. 8","year":"2009","author":"Unit","key":"e_1_2_1_22_1"},{"key":"e_1_2_1_23_1","unstructured":"K\u00f6lling M. 2009. Unit testing in BlueJ. http:\/\/www.bluej.org\/tutorial\/testing-tutorial.pdf (Feb. 8 2009). K\u00f6lling M. 2009. Unit testing in BlueJ. http:\/\/www.bluej.org\/tutorial\/testing-tutorial.pdf (Feb. 8 2009)."},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1076\/csed.13.4.249.17496"},{"volume-title":"Agile Software Development: Principles, Patterns, and Practices","author":"Martin R.C.","key":"e_1_2_1_25_1"},{"volume-title":"Programming from Specifications","author":"Morgan C.","key":"e_1_2_1_26_1"},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.1076\/csed.11.1.3.3842"},{"key":"e_1_2_1_28_1","doi-asserted-by":"publisher","DOI":"10.1076\/csed.11.1.7.3846"},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1076\/csed.12.3.167.8613"},{"key":"e_1_2_1_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/234867.234872"},{"volume-title":"Object design: Roles, Responsibilities, and Collaborations","author":"Wirfs-Brock R.","key":"e_1_2_1_31_1"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1145\/362575.362577"},{"volume-title":"Systematic Programming","author":"Wirth N.","key":"e_1_2_1_33_1"}],"container-title":["ACM Transactions on Computing Education"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/1513593.1513597","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/1513593.1513597","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T13:57:57Z","timestamp":1750255077000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/1513593.1513597"}},"subtitle":["A First Programming Process"],"short-title":[],"issued":{"date-parts":[[2009,3]]},"references-count":31,"journal-issue":{"issue":"1","published-print":{"date-parts":[[2009,3]]}},"alternative-id":["10.1145\/1513593.1513597"],"URL":"https:\/\/doi.org\/10.1145\/1513593.1513597","relation":{},"ISSN":["1946-6226"],"issn-type":[{"type":"electronic","value":"1946-6226"}],"subject":[],"published":{"date-parts":[[2009,3]]},"assertion":[{"value":"2008-11-01","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2009-02-01","order":1,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2009-03-01","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}