Lecture: 3 hours
Discussion: 1 hour

Catalog Description:
Syntactic definition of programming languages. Introduction to programming language features including variables, data types, data abstraction, object-orientedness, scoping, parameter disciplines, exception handling. Non-imperative programming languages. Comparative study of several high-level programming languages.

Prerequisite: ECS 050; (ECS 060 or ECS 032B or ECS 036C); ECS 020; ECS 150

Credit restrictions, cross listings: None

Summary of course contents

The lecture topics include the following, not necessarily listed in chronological order:

  1. Overview and History
  2. Syntax and Parsing
    a. BNF, syntax diagrams, parse trees, simple parsing technique
  3. Variables and Expressions
    a.Declarations, attributes, aliases, binding
    b. Side effects, precedence, order of evaluation
  4. Control Structures
    a. Alternation, iteration, generators
  5. Data Types and Type-Checking
    a. Polymorphism and overloading, conversion and coercion
    b. Static vs. dynamic type-checking
  6. Modularization and Objects
    a. Separation of specification and implementation
    b. Generics and instantiation
    c. Inheritance
    d.; Dynamic binding and its implementation
  7. Data Abstraction
    a. Mutability, adequacy, categorization of operations
    b. Abstract specification
  8. Scope and Extent
    a. Block structure, visibility and holes, contour model
    b. Dynamic vs. static scope
    c. Run-time stack and heap implementation
  9. Parameter Passing
    a. Parameter transmission methods, procedural parameters
  10. Exception Handling
    a. Notions of raising, handling, and propagating
  11. Non-Imperative Programming Paradigms
    1. Functional programming languages
    2. Logic programming languages
  12. Additional Language Paradigms
    1. Concurrent, dataflow, constraint

The projects focus either on various aspects of programming languages (for example, simple parsers, translators, symbolic computation, and implementation of abstract data types) or on exercising the particular strengths of a given language. Students work individually or in small groups on several programming projects. Students design, implement, and test their solutions. Each project typically uses a different language, such as: Ada, C++, Java, Smalltalk, Python, LISP, Scheme, Standard ML, Haskell, and Prolog. At least one project language will support object-oriented programming and at least one will be a non-imperative language.

Goals:  Students will: (1) learn the fundamental principles of modern computer programming languages; (2) learn the commonalities and differences among the different languages; (3) learn about a variety of different programming languages and about their relative strengths and weaknesses; and (4) gain experience designing and writing programs in a selected set of languages.

Illustrative reading
K. Louden, Programming Languages: Principles and Practice, Thompson, 2nd edition, 2003.

Engineering Design Statement:
The projects involve the design, implementation, and testing of programs that focus on various concepts in programming languages. The facilities used for these programming projects resemble those that would be found in industry to the extent possible, given the academic constraints. The project assignments define performance specifications and constraints, and outline a general approach to the problem. However, design and implementation details are left to the students. Lectures discuss general concepts of programming languages and design choices available to programmers, in terms of algorithmic design, what language features can be employed to solve a particular problem, and what languages are most appropriate for particular application domains. Discussion sections fill in the details of the different languages used by the student and describe system tools that can be used to aid with the projects. Projects are graded based on the design and performance, including documentation. Examination questions are based on design methods discussed in lecture and from the projects.

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

Science & Engineering

Overlap: None

Instructors: R. Olsson, R. Pandey, and Z. Su

History: Reviewed 2018.9.7 (CSUGA): prerequisites updated to include new lower division ECS series courses. 2012.10.19 (R. Olsson): edits to the catalog description and outline to bring up-to-date with what we’ve been doing, including more emphasis on non-imperative languages.  Prior course description dates to Oct 2006.


1 X 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 X 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