CSE 374

Intermediate Programming Concepts and Tools

Credits
3.0
Lead Instructor
Hal Perkins
Textbook
Course Description
Covers key software development concepts and tools not in introductory courses. Concepts of lower-level programming (C/C++) and explicit memory management; techniques and tools for individual and group software development; design, implementation, and testing strategies. Intended for non-majors. Cannot be taken for credit if credit received for CSE 303 or CSE 333.
Prerequisites
CSE 143.
CE Major Status
None
Course Objectives

Successful course participants will:

ABET Outcomes
No outcomes registered
Course Topics

Almost all of the following topics are covered each time the course is taught, although there is some variability between offerings.

  1. Files, processes, and shells (6 classes)
    1. Command-line utilities
    2. File editing
    3. Shell scripting
    4. String processing; regular expressions
    5. Web basics (http, html)
    Note: For consistency, we will all use Linux and bash. The concepts are similar for other operating systems and shells. We will use UW CSE Fedora Linux as our reference system in the few situations where it matters.

  2. C Programming (6-7 classes)
    1. Memory model
    2. Pointers
    3. Arrays
    4. Manual resource management
    5. The preprocessor
    6. Idioms for safe programming

  3. Programming tools (6 classes)
    1. Debuggers
    2. Profilers
    3. Linkers
    4. Compilation managers
    5. Version-control systems

  4. Software-engineering issues (2-3 classes)
    1. Multiperson programming
    2. Specification
    3. Testing
    4. Code-reuse patterns

  5. C++ (2-3 classes)
    1. C with classes and objects
    2. Other differences from C

  6. Concurrency (2-3 classes)
    1. Threads
    2. Races and deadlocks
    3. Locks and Transactions
    4. Message-passing