Progressive Programming Assignments

Introduction One constructivist view of learning is that learners construct new knowledge based on their prior knowledge (Carbone, Hurst, Mitchell, & Gunstone, 2001; Hadjerrouit, 1999). This view was basic idea behind the development of programming assignments used in an introductory Java programming course. Every assignment built on the previous one, which allowed the students to concentrate on the new concepts. In this way, the previous programming assignments became the knowledge base that the students build upon. This approach was also helpful in this particular course since it mainly dealt with abstract concepts that freshmen students typically have difficulty understanding (Whittington & Bills, 2004: Whittington, Bills, & Hill, 2003). The new topics included inheritance constructs, abstract classes, interfaces, user-defined exceptions, I/O, and GUI. An unexpected benefit of this process was the increased discussions that ensued during the lectures. Since the students were aware that the new materials were going to be incorporated into their previous assignment, they were always asking questions about how the new material related to their next assignment. They were also motivated to listen to discussions on modularization, simplification, and elimination of duplicate code, because their code got increasingly harder to control. In previous courses, students tended not to appreciate the importance of these topics. This approach also helped the students deal with scalability and continuously changing requirements, which typically happens in industry. By the end of the course, the students had created fairly complex programs consisting of thousands of lines of code. In the first assignment, the students created a program that incorporated everything they had covered in their previous programming courses. They were initially given detailed requirements but very little design direction. This allowed them to create programs in the best way that they could, and the resulting programs represented their current conceptual model of Java programming. Subsequent assignments dealt with properly designed programs. This paper describes the details of each assignment, the pedagogical goals, faulty observations, student comments, and the results of this experiment. Background The example used in this paper was used in an introductory Java programming sequence designed for students who struggled in their first programming course. Typically, the second course in the IT programming sequence presents a significant challenge to a lot of students. So a two-course sequence was offered as an alternative to the traditional second programming course. This allowed these students to take twice as long to cover the same material. This alternatively paced sequence turned out to be extremely effective and resulted in a dramatic increase in student retention, grades, and self-confidence (Whittington, Bills, & Hill, 2003). The assignments were given in the second course of this alternative sequence. The first course of this sequence concentrates on solidifying the student's of OOP conceptual knowledge and the second course deals with abstract concepts such as inheritance, user-defined exceptions, I/O, and GUI. The students had varying amounts of time to complete each assignment based on the complexity of the assignment. These first year, under-prepared students eventually created complex, well designed programs containing thousands of lines of code. On the first day of class the students were told that all of their assignments would build on the previous assignment. This was done to provide them with the incentive to keep up with the course material and assignments. Several students complained that it wasn't fair because if they fell behind it would be difficult to catch up. This was a valid point, but they were also told that programming is a cumulative process where every new concept builds on the previous ones. …