More concepts for teaching introductory programming

In 2007, one of the authors visited several Computer Science departments in Western Canada in an attempt to understand some of the challenges that are facing in the teaching of introductory programming. This investigation culminated in a presentation at WCCCE08 in Victoria. A certain ever-present challenge is the moving pedagogical models from the "imperative-programming first" to the "objects first" approach. Some departments kept Pascal as their CS1 course with Java kept for CS2, and this was an attempt to address challenges students (and instructors) had learning newer paradigms. An example of such a challenge is inheritance, and the authors found many students find it a challenge to understand, effectively design and implement inheritance in their programs. This paper offers several contributions. We introduce a notation called a Composite Inheritance Diagram or CID that can enable a student to understand inheritance in a way that is closer to their own intuition. An enhanced box-diagramming methodology will be demonstrated which makes clear the difference between a procedure method and a functional method, of how a method transfers control and returns to a calling location, and of how memory overhead is present in recursive programs. Finally we revisit the role played by natural language in creating identifiers, comments and program documentation in a way that can suggest to students their importance in guiding software designers and developers.