Software engineering-from the beginning

The paper discusses ideas and techniques for integrating concepts of software engineering into the first year of a computer science program. The importance of introducing the student to certain "programming in the large" concepts at an early stage is argued. There is a discussion of a general top down approach to teaching introductory Ada programming which starts with the use of modules to write programs and moves on to the analysis and implementation of these modules. The approach conveys the importance of specification and high level design to the development process and stresses the need for an architectural view prior to specific work on low level functionality and algorithm design. The paper addresses how to introduce into CS1 and CS2 type courses a prescribed set of software engineering concepts that are associated with estimation and planning, specification, design, and software quality issues. The paper presents several thoughts on the nature of software development processes that are appropriate at this level. In addition, the paper discusses a current activity that introduces first year students to time management and defect management concepts.