Computer Science

ECS 161 Modern Programming Tools

ECS 161 Modern Programming Tools ( 4 units) 


Lecture: 2 hours
Computer Lab: 2 hour


Premkumar Devanbu (

Catalog description:

Concepts and practice of collaborative software development using modern software tools.


ECS 40 or equivalent.


Students will be responsible for participating in class, completing 5-6 assignments, and completing a midterm and a final exam.


No required textbook, online documents, and other resources, including:
Version Control with Git By, Loeliger & McCollough (2012)

Why Programs Fail, by Zeller (2009)

Computer usage:

Students will perform some of the assignments on their own machines. For others, a cloud-based installation of several needed tools will be provided.

Programming projects:

The assignments will largely consist of working with tools. In some cases, students will be working with copies of existing open-source projects.

Summary of course contents:

Students will learn concepts of modern software development, including version control, configuration management, build tools, test tools, continuous integration, and debugging. Students will also be exposed to development with modern application frameworks.  Topics will include:

  1. Integrated Development Environments
    1. Browsing, formatting
    2. Compiling, running, basic debugging
    3. Basic project configuration
    4. Plugin management
  2. Version Control
    1. History and purpose of version control
    2. Content-based naming
    3. Hash Trees and content-based versioning
    4. Distributed development practices
  3. Build, Configuration and Integration
    1. Build procedures: make, ant
    2. Configuration management Maven
    3. Cloud-based approaches. Jenkins
    4. Cloud-based integration testing. Travis
  4. Advanced Debugging
    1. Breakpoints, Tracepoints
    2. Slicing
    3. Asserts and invariants
    4. Delta debugging
  5. The API Zoo
    1. Varieties of APIs: client-side, server-side, containers.
    2. Learning to navigate APIs: a hands-on case study.

Goals: students will learn 1) a set of concepts that underlie modern software tools and 2) gain practical experience solving real programming problems by using these tools.

Overlap: Some of this material is taught on an “as-needed” basis in several other courses, including 30, 40, and 160. This course will provide a unified exposure for students to a lot of practical concepts and tools that will serve them in other programming-intensive courses, and also for internships.


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 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 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 an ability to apply design and development principles in the construction of software systems or computer systems of varying complexity