CS111I. Introduction to Programming

Introduces the fundamental techniques of programming as a foundation for more advanced study of computer science. Considerable attention is devoted to developing effective software engineering practice, emphasizing such principles as design, decomposition, encapsulation, procedural abstraction, testing, and software reuse. Topics include standard programming constructs, problem-solving strategies, the concept of an algorithm, and fundamental data structures (strings, arrays, and records) along with an introduction to machine representation, graphics, and networking.

Prerequisites: No programming or computer science experience is required. Students should have sufficient facility with high-school mathematics to solve simple linear equations and to appreciate the use of mathematical notation and formalism.

Syllabus:

Units covered:
PF1 Fundamental programming constructs   9 core hours
PF2 Algorithms and problem-solving   3 core hours (of 6)
PF3 Fundamental data structures   6 core hours (of 14)
AL3 Fundamental computing algorithms   2 core hours (of 12)
AL5 Basic computability   1 core hour (of 6)
PL1 Overview of programming languages   1 core hour (of 2)
PL4 Declarations and types   1 core hour (of 3)
PL5 Abstraction mechanisms   2 core hours (of 3)
PL6 Object-oriented programming   3 core hours (of 10)
AR2 Machine level representation of data   1 core hour (of 3)
AR3 Assembly level machine organization   2 core hours (of 9)
GV1 Fundamental techniques in graphics   2 core hours
SP1 History of computing   1 core hour
SE1 Software design   2 core hours (of 8)
SE3 Software tools and environments   1 core hour (of 3)
SE5 Software requirements and specifications   1 core hour (of 4)
SE6 Software validation   1 core hour (of 3)
  Elective topics   1 hour

Notes:
This course introduces the fundamental concepts of programming, emphasizing the traditional procedural or imperative paradigm. Most modern programming languages are suitable as a foundation for the programming assignments in this course, including those that support the object-oriented paradigm; indeed, introductory courses that use object-oriented languages often begin by emphasizing the procedural aspects of those languages. What sets this course apart from the objects-first implementation in CS111O is the ordering and emphasis of topics. In this course, the discussion of control statements precedes the discussion of classes, subclasses, and inheritance; in the objects-first version, this ordering is reversed.

Just as the procedural aspects of programming can be taught in an object-oriented language, some of the fundamental principles of object-oriented programming can be included even in the context of a traditional imperative language. The syllabus topic entitled "Principles of encapsulation" makes sense in either domain, but would be approached differently depending on the language. In either case, this presentation would encompass some of the ideas in the PL6 unit on object-oriented programming.

Online resources for CS111I


 
CC2001 Report
December 15, 2001