Lower Division

ECS 032C: Implementation of Data Structures in C

Subject
ECS 032C
Title
Implementation of Data Structures in C
Status
Active
Units
4.0
Effective Term
2020 Fall Quarter
Learning Activities
Lecture: 3 hours
Discussion: 1 hour
Description
Programming in the C language. Use of basic UNIX tools. Writing good programs of increased complexity and efficiency. Implementation of data structures in C. Not open for credit to students who have completed course ECS 036C. GE Prior to Fall 2011: SciEng. GE: SE.
Prerequisites
ECS 032B C- or better
Credit Limitation
Not open for credit to students who have completed course ECS 036C.
Expanded Course Description

Summary of Course Content

  1. Programming in C
    1. Basic syntax and difference of C and other languages such as Python.
    2. Data types: scalar, single and multidimensional arrays, character strings, structs.
    3. Use of system files such as library and “include” files.
    4. Use of I/O including the use of file manipulation and command line arguments.
    5. Pointers and dynamic memory allocation.
    6. Functions: declaration and calls, & and * operators, parameters, function call stacks.
    7. Modular programming: programs composed of multiple C files and headers, overview of the compilation/linking sequence
  2. The UNIX Environment
    1. First-level understanding of the nature of UNIX processes and job control.
    2. UNIX hierarchical file system.
    3. UNIX utilities (e.g. find, grep, sort, uniq, head, etc.).
  3. Software Engineering & Tools
    1. Version Control (e.g. git).
    2. Program development and use of the UNIX “make” program to organize them.
    3. Software debugging techniques.
    4. Other Tools (e.g. IDEs, ssh clients, linters, etc.).
  4. Implementation of Data Structures
    1. Singly-and doubly-linked lists.
    2. Stacks and queues.
    3. Trees (e.g. binary, AVL, Red-Black etc.).

Illustrative Reading
J. Hanley and E. Koffman, Problem Solving and Program Design in C, 8th edition, Pearson, 2015.
W. Shotts, The Linux Command Line 2nd Edition, No Starch Press, 2019.

GE3
Science & Engineering

Overlap
The course overlaps with ECS 36A and ECS 34 in the coverage of UNIX but does not include shell scripting. The course overlaps with ECS 34 and ECS 36B in the coverage of version control and ECS 36B in the implementation of some data structures; however, ECS 34 and ECS 36B cover the implementations in C++. The course overlaps with ECS 36C in the implementation of some more advanced data structures but ECS 36C implementations are in C++.

Course Category

ECS 098F: Student Facilitated Course

Subject
ECS 098F
Title
Student Facilitated Course
Status
Active
Units
1.0 - 4.0
Effective Term
2016 Winter Quarter
Learning Activities
Variable - 1.0 to 4.0 hours
Description
Student facilitated course intended primarily for lower division students.
Prerequisites
Consent of Instructor.
Expanded Course Description

Summary of Course Content
Student facilitated course intended for undergraduate students, under the supervision of a faculty mentor. Course content and structure vary.

Illustrative Reading
Varies by topic

Potential Course Overlap
None

Course Category

ECS 098: Directed Group Study

Subject
ECS 098
Title
Directed Group Study
Status
Active
Units
1.0 - 5.0
Effective Term
1997 Winter Quarter
Learning Activities
Variable
Prerequisites
Lower division standing; project approval prior to period of internship
Credit Limitation
Pass/No Pass grading only
Course Category

ECS 092: Internship in Computer Science

Subject
ECS 092
Title
Internship in Computer Science
Status
Active
Units
1.0 - 5.0
Effective Term
1997 Winter Quarter
Learning Activities
Internship
Description
Supervised work experience in computer science. May be repeated for credit.
Prerequisites
Lower division standing; project approval prior to period of internship.
Credit Limitation
Pass/No Pass grading only. May be repeated for credit.
Course Category

ECS 089A-L: Special Topics in Computer Science: Computer Science Theory

Subject
ECS 089A-L
Title
Special Topics in Computer Science: Computer Science Theory
Status
Active
Units
1.0 - 5.0
Effective Term
1997 Winter Quarter
Learning Activities
Lecture
Laboratory
Lecture/Lab
Description
Special topics in Computer Science Theory. May be repeated for credit when topic differs. GE Prior to Fall 2011: SciEng. GE: SE.
Prerequisites
Consent of Instructor.
Credit Limitation
May be repeated for credit when topic differs.
Expanded Course Description

Summary of course contents

Illustrative Reading
Varies by course offering in the special topic areas

GE3
Science & Engineering

Overlap
None

Instructors
Staff

Course Category

ECS 050: Computer Organization & Machine-Dependent Programming

Subject
ECS 050
Title
Computer Organization & Machine-Dependent Programming
Status
Active
Units
4.0
Effective Term
2020 Spring Quarter
Learning Activities
Lecture - 3.0 hours
Discussion - 1.0 hours
Description
Comparative study of different hardware architectures via programming in the assembly languages of various machines. Role of system software in producing an abstract machine. Introduction to I/O devices and programming. Only 1 unit of credit allowed for students who have taken EEC 070. GE Prior to Fall 2011: SciEng. GE: SE.
Prerequisites
ECS 040 C- or better or ECS 034 C- or better or ECS 036B C- or better
Credit Limitation
Only 1 unit of credit allowed for students who have taken EEC 070.
Enrollment Restrictions
Pass One open to Computer Science, Computer Science & Engineering, Computer Engineering, and Cognitive Science Majors only.
Expanded Course Description

Summary of Course Contents

  1. Basic Memory Architecture
    Review of ECS 40 C-language material on bits, bytes and memory addresses. Linear versus segmented address forms.
  2. Introduction to Processor Architecture
    Introduction to instruction sets, addressing modes and register sets, and their variation from one machine to another. Comparison of at least one CISC architecture and at least one RISC architecture, via extensive assembly-language programming on each. Memory-mapped versus separate-address-space I/O. I/O devices. Hardware interrupts. I/O programming—wait-loop, interrupt-driven, and via calls to operating system services or keyboard, video and file access.
  3. The Role of System Software in Producing an Abstract Machine
    Distinction between the roles of hardware and software. The use of compilers and operating systems in providing abstractions and machine independence to the programmer. Compiler implementation of C/Pascal data types, and storage allocation of variables in memory. Role of the operating system in helping the programmer to create, store and execute his/her programs, and in managing system resources.
  4. Machine Capability and Speed
    Transportability/nontransportability of programs on different machines, and under different operating systems and compilers. Efficiency of compiled vs. hand-coded programs. Writing mixed C-language/assembly language programs for extra efficiency or for special capabilities. Tradeoffs between the speed of hardware implementation of a function and the flexibility of software implementation.

Goals
Students will (1) learn fundamental concepts of computer architecture; (2) learn fundamental concepts of software systems; (3) be able to write programs in assembly language for at least two different architectures .

Illustrative Reading

  • Norm Matloff, Below C Level: An Introduction to Computer Systems, 2012. Open-source book, available at http://heather.cs.ucdavis.edu/~matloff/50/PLN/CompSystsBook.pdf
  • Gerald Karam and John Bryant, Principles of Computer Systems, Prentice Hall, 1992

Engineering Design Statement
Students in the course write sophisticated, systems-level programs according to their own design. Many of the programs involve analysis of tradeoffs between efficient use of the hardware and ease of programming.

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

GE3
Science & Engineering

Overlap
Substantial overlap with EEC 70, but large student demand justifies the overlap in content.

Instructors
S. Davis, M. Farrens, and N. Matloff

Outcomes

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 X knowledge of contemporary issues
11   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
Course Category

ECS 036C: Data Structures, Algorithms, & Programming

Subject
ECS 036C
Title
Data Structures, Algorithms, & Programming
Status
Active
Units
4.0
Effective Term
2019 Winter Quarter
Learning Activities
Lecture - 3.0 hours
Discussion - 1.0 hours
Description
Design and analysis of data structures for a variety of applications; trees, heaps, searching, sorting, hashing, and graphs. Extensive programming. Not open for credit to students who have taken ECS 032B or previous ECS 060. GE Prior to Fall 2011: SciEng. GE: SE.
Prerequisites
(ECS 040 C- or better or ECS 036B C- or better); ECS 020 C- or better
Credit Limitation
Not open for credit to students who have taken ECS 032B or previous ECS 060.
Enrollment Restrictions
Pass One restricted to Computer Science, Computer Science and Engineering, Computer Engineering, Electrical Engineering, and Cognitive Science majors only.
Expanded Course Description

Summary of Course Content

A systematic study of data structures, including stacks, queues, lists, skip lists, trees, binary search trees, AVL trees, splay trees, B-trees, priority queues, hash tables, and the union/find data structure. Analysis of algorithms, including sorting, graph algorithms, topological sort, depth-first search, shortest path, minimum spanning tree. Amortized analysis. If time permits, any of the following topics: tries, Huffman codes, branch-and-bound, digital search trees, Fibonacci heaps, network flow, and critical path analysis.

Goals
Students will:

  • learn to think clearly about and solve complex and poorly-defined programming tasks
  • be able to (a) find appropriate abstractions to solve a complex problem, (b) choose appropriate data structures and algorithms, (c) analyze simple algorithms and discuss tradeoffs among data structures, (d) get it all working

Illustrative Reading

  • M. Weiss, Data Structures and Algorithms in C++, 3rd edition,Addison Wesley, 2006
  • E. Horowitz, S. Sahni, D. Mehta. Fundamentals of Data Structures in C++, Second Edition , Silicon Press, 2006

GE3
Science & Engineering

Engineering Design Statement
Programming assignments involve design of the proper data-structure, design of the associated program, coding, and testing of open-ended problems requiring independent solution by the students. The function of the programs are specified, but design details of possible solutions are not specified. Engineering design skills are further developed by increasing the complexity and open-ended nature of the assignments throughout the term.

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

Overlap
ECS 36C/60 and ECS 32B both cover data structures. 

Instructors
Staff

Outcomes

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 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
Course Category

ECS 036B: Software Development & Object-Oriented Programming in C++

Subject
ECS 036B
Title
Software Development & Object-Oriented Programming in C++
Status
Active
Units
4.0
Effective Term
2018 Fall Quarter
Learning Activities
Lecture - 3.0 hours
Discussion - 1.0 hours
Description
Object-oriented programming in C++. Basic data structures and their use. Writing good programs of increased complexity and efficiency. Methods for debugging and verification. Not open for credit to students who have taken ECS 034, previous ECS 040 or ECS 060. GE Prior to Fall 2011: SciEng. GE: SE.
Prerequisites
ECS 030 C- or better or ECS 036A C- or better
Credit Limitation
Not open for credit to students who have taken ECS 034, previous ECS 040 or ECS 060.
Enrollment Restrictions
Pass One restricted to Computer Science, Computer Science and Engineering, Computer Engineering, Electrical Engineering, and Cognitive Science majors only.
Expanded Course Description

Summary of Course Contents

  1. Object-Oriented Programming and the C++ Language.
    1. Object-oriented design and implementation, polymorphism, operator overloading, encapsulation, derivation, exceptions.
  2. Programming in C
    1. Basic syntax and difference of C and other languages, including Python, and semantic differences of C with C++
    2. Data types: single and multidimensional arrays, character strings, structs.
    3. Use of system files such as library and “include” files
    4. Pointers and dynamic memory allocation.
    5. Functions: declaration and calls, & and * operators, parameters, function call stacks.
    6. Function pointers and inversion of control
  3. Software Engineering & Tools
    1. Integrated Development Environments
    2. Debugging techniques, especially using UNIX debugging aids such as gdb/ddd.
    3. Version Control
    4. Unit Testing (e.g. GoogleTest)
    5. Program development using third party libraries, and use of the UNIX “make” program to organize them.
    6. Function pointers and inversion of control
  4. Advanced Programming Concepts in C++
    1. Singly-and doubly-linked lists, recursion, and, if time permits, one or more topics chosen from: binary trees, stacks, queues
    2. Templates and the Standard Template Library
    3. Modern C++

Illustrative Reading
Stanley Lippman, Josee Lajoie, and Barbara Moo: C++ Primer, 5th ed., Addison-Wesley, 2013. 

GE3
Science & Engineering

Overlap
ECS 36B/40 and ECS 34 both cover object-oriented programming. 

Instructors
Staff

Course Category

ECS 034: Software Development in UNIX & C/C++

Subject
ECS 034
Title
Software Development in UNIX & C/C++
Status
Active
Units
5.0
Effective Term
2018 Fall Quarter
Learning Activities
Lecture - 3.0 hours
Discussion - 1.0 hours
Extensive Problem Solving
Description
UNIX Operating system tools and programming environment. Methods for debugging and verification. Principles of C and object-oriented programming in C++. Extensive programming. Only 3 units of credit for students who have previously taken ECS 036B. GE Prior to Fall 2011: SciEng. GE: SE.
Prerequisites
ECS 032B C- or better; or Consent of Instructor.
Credit Limitation
Only 3 units of credit for students who have previously taken ECS 036B.
Expanded Course Description

Summary of Course Content

  • The UNIX Environment
    • First-level understanding of the nature of UNIX processes and job control
    • UNIX hierarchical file system
    • UNIX utilities, e.g., find, grep, sort, uniq, head
    • Shell scripts
  • Software engineering: running, debugging, testing programs, building quality program using software development tools
    • Debugging techniques, especially using UNIX debugging aids such as gdb/ddd
    • Program development as multi-file modules, and use of the UNIX “make” program to organize them
    • Integrated Development Environments
    • Version Control
    • Unit Testing (e.g. Google Test)
    • Program development using third party libraries
  • Programming in C
    • Basic syntax differences of C other languages, including Python
    • Data structures: single and multidimensional arrays; character strings; structs Use of system files such as library and “include” files
    • Pointers and dynamic memory allocation
    • Function pointers and inversion of control.
  • C++ Topics Pointer manipulation including dynamic memory allocation
    • Linked lists
    • Advanced object-oriented programming: Polymorphism and operator overloading
    • Templates and the Standard Template Library
    • C++11
  • Analysis of Graph Algorithms
    • Critical path analysis, depth-first search, shortest path, minimum spanning tree, and network flow

Illustrative Reading
C++ Primer, Fifth Edition, by Stanley B. Lippman, Josee Ltajoie, and Barbara E. Moo.

1. Getting Started. 2. Variables and Basic Types. 3. Strings, Vectors, and Arrays. 4. Expressions. 5. Statements. 6. Functions. 7. Classes. 8. The IO Library. 9. Sequential Containers. 10. Generic Algorithms. 11. Associative Containers. 12. Dynamic Memory. 13. Copy Control. 14. Overloaded Operations and Conversions. 15. Object-Oriented Programming. 16. Templates and Generic Programming. 17. Specialized Library Facilities. 18. Tools for Large Programs. 19. Specialized Tools and Techniques

GE3
Science & Engineering

Overlap
This course is a non-major analog of ECS 036B and will overlap significantly in concepts. ECS 34 introduces UNIX and analysis of graph algorithms, which is not covered in ECS 036B.

Instructors
Staff

Course Category