Lecture: 3 hours
Discussion: 1 hour
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
Credit restrictions, cross listings: None
Summary of course contents
The lecture topics include the following, not necessarily listed in chronological order:
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.
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
Instructors: R. Olsson, R. Pandey, and Z. Su
History: 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|