Lecture: 3 hours
Discussion: 1 hour

Catalog Description
Elements of program design, style, documentation, efficiency. Methods for debugging and verification. Operating system tools. Principles and use of object-oriented programming in C++. Basic data structures and their use.

Prerequisite: Course 30 or equivalent with a grade of C- or better

Credit restrictions/cross listings: None

Summary of course contents

  1. Use of Software Development Tools
    Debugging techniques, especially using UNIX debugging aids such as gdb/ddd. Effective use of windowing environments, such as X windows and emacs. Program development as multi-file modules, and use of the UNIX “make” program to organize them. (Note: This material is covered in discussion sections and through student self-study, not in lectures.)
  2. The UNIX Environment
    First-level understanding of the nature of UNIX processes and job control. UNIX hierarchical file system. Use of system files such as library and “include” files. Shell scripts. (Note: This material is covered in discussion sections and through student self-study, not in lectures.)
  3. Advanced Programming Concepts
    Pointers, recursion, file manipulation. Singly-and doubly-linked lists, and if time permits, one or more topics chosen from: binary trees; queues; stacks.
  4. Programming Techniques
    The material introduced in ECS 30 on stepwise refinement, documentation, multi-file program design, time/storage tradeoffs, and so on is continued here. There is particular emphasis on the use of debugging tool. One of the important goals of course 40 is to prepare students for advanced courses, many of which use UNIX-specific software. It is recommended that instructors should encourage (but not require) students to install LINUX on their home PCs, both as a convenient UNIX platform and also to gain experience in certain operations not learned in formal coursework, such as the concept of disk partitioning.
  5. Object-Oriented Programming and the C++ Language.
    Object-oriented design and implementation, polymorphism, operator overloading, encapsulation, derivation.

Goals: Students will develop programming skills and facility in the usage of operating-system tools at the level of complexity demanded by course 60 and upper-division ECS courses.

Illustrative reading

  • W. Savitch. Absolute C++, 4th edition, Addison Wesley, 2009
  • S. Das, Your UNIX: The Ultimate Guide, second edition, McGraw-Hill, 2006
  • P. Deitel and H. Deitel: C++:  How To Program, 8th edition, Prentice Hall, 2011
  • UNIX tutorial:
  • Debugging tutorial:
  • LINUX tutorial:

Engineering Design Statement
Engineering design skills are developed through a series of progressively more complex programming assignments, in which the emphasis is not only on functionality, but also clarity and efficiency.

ABET Category Content:
Engineering Science: 2 units
Engineering Design: 2 units

Science & Engineering
Visual Literacy

Visual Literacy: Modern computer programs almost all include graphical user interfaces. Interfaces should be designed so as to express the program’s functionality in a way that seems natural and appealing to the user. In this course, among other advanced programming topics, students are introduced to graphical user interfaces. Students are taught to deploy user-interaction widgets such as buttons and sliders, menus, scrolling, pop-up dialogs and the use of multiple windows so as to produce useful interfaces. A full-featured interface library such as NetBeans or Qt is used. Students are shown examples of interfaces in lecture so that they can critically evaluate their design. The students’ mastery of the design process is evaluated based on at least two programming projects which include user interfaces. The students are given grades and verbal feedback on the programs, based in part on the interface designs. In most offerings of the course this grading and feedback is done in small-group meetings between the students and the Instructor or Teaching Assistants.

Overlap: None

Instructors: Staff

History: 2012.10.29 (H. Chen): Modified course title (Introduction to), revised course description; updated texts. Prior course description went back to Feb 2001 (N. Matloff).


1   an ability to apply knowledge of mathematics, science, computing, and engineering
2   an ability to design and conduct experiments, as well as to analyze and interpret data
3 X an ability to design, implement, and evaluate a system, process, component, or program to meet desired needs, within realistic constraints such as economic, environmental, social, political, ethical, health and safety, manufacturability, and sustainability
4   an ability to function on multi-disciplinary teams
5 X an ability to identify, formulate, and solve computer science and engineering problems  and define the computing requirements appropriate to their solutions
6   an understanding of professional, ethical, legal, security and social issues and responsibilities
7   an ability to communicate effectively with a range of audiences
8   the broad education necessary to understand the impact of computer science and engineering solutions in a global and societal context
9   a recognition of the need for, and an ability to engage in life-long learning
10   knowledge of contemporary issues
11 X an ability to use current techniques, skills, and tools necessary for computing and engineering practice
12 X an ability to apply mathematical foundations, algorithmic principles, and computer science and engineering theory in the modeling and design of computer-based systems in a way that demonstrates comprehension of the tradeoffs involved in design choices
13 X an ability to apply design and development principles in the construction of software systems or computer systems of varying complexity