CSE 374
Intermediate Programming Concepts and Tools
Credits
3.0
Lead Instructor
Hal Perkins
Textbook
- Linux Pocket Guide, Barrett
- The C Programming Language, Kernighan & Ritchie
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:
- Gain a basic familiarity with the Linux operating system and toolchain.
- Develop the skills to automate common computing tasks such as file manipulation
and string processing
- Internalize C-level programming and obtain beginning
proficiency in C programming
- Learn the basics of programming tools such as debuggers,
profilers, compilation managers,
and version control
- Learn core software-engineering practices regarding
specification and testing
- Understand the basic issues and pitfalls of shared-memory
concurrency
- Learn how to acquire additional information and skills independently
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.
- Files, processes, and shells (6 classes)
- Command-line utilities
- File editing
- Shell scripting
- String processing; regular expressions
- 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.
- C Programming (6-7 classes)
- Memory model
- Pointers
- Arrays
- Manual resource management
- The preprocessor
- Idioms for safe programming
- Programming tools (6 classes)
- Debuggers
- Profilers
- Linkers
- Compilation managers
- Version-control systems
- Software-engineering issues (2-3 classes)
- Multiperson programming
- Specification
- Testing
- Code-reuse patterns
- C++ (2-3 classes)
- C with classes and objects
- Other differences from C
- Concurrency (2-3 classes)
- Threads
- Races and deadlocks
- Locks and Transactions
- Message-passing