Programming from specifications
Programming from specifications
Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
Programming pedagogy—a psychological overview
ACM SIGCSE Bulletin
Refactoring: improving the design of existing code
Refactoring: improving the design of existing code
Extreme programming explained: embrace change
Extreme programming explained: embrace change
Program development by stepwise refinement
Communications of the ACM
Agile software development
Agile Software Development: Principles, Patterns, and Practices
Agile Software Development: Principles, Patterns, and Practices
The Science of Programming
Systematic Programming: An Introduction
Systematic Programming: An Introduction
A Discipline of Programming
Refinement Calculus: A Systematic Introduction
Refinement Calculus: A Systematic Introduction
Test Driven Development: By Example
Test Driven Development: By Example
Object Design: Roles, Responsibilities, and Collaborations
Object Design: Roles, Responsibilities, and Collaborations
Using software testing to move students from trial-and-error to reflection-in-action
Proceedings of the 35th SIGCSE technical symposium on Computer science education
Teaching software development methods: the case of extreme programming
Proceedings of the 35th SIGCSE technical symposium on Computer science education
Test-driven development goes to school
Journal of Computing Sciences in Colleges
Test-driven learning: intrinsic integration of testing into the CS/SE curriculum
Proceedings of the 37th SIGCSE technical symposium on Computer science education
Pragmatic Unit Testing in Java with JUnit
Pragmatic Unit Testing in Java with JUnit
Problems encountered by novice pair programmers
Journal on Educational Resources in Computing (JERIC)
ACM Transactions on Computing Education (TOCE)
Developing verification-driven learning cases
Proceedings of the fifteenth annual conference on Innovation and technology in computer science education
A Motivation Guided Holistic Rehabilitation of the First Programming Course
ACM Transactions on Computing Education (TOCE)
Agile projects in high school computing education: emphasizing a learners' perspective
Proceedings of the 7th Workshop in Primary and Secondary Computing Education
Teaching novice programming using goals and plans in a visual notation
ACE '12 Proceedings of the Fourteenth Australasian Computing Education Conference - Volume 123
A methodology for teaching programming for beginners
Proceedings of the ninth annual international ACM conference on International computing education research
Hi-index | 0.00 |
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.