CSE 490c (a.k.a. CSE 303):
Concepts and Tools for Software Development
Spring Quarter, 2004
Catalog Description
Introduction to key concepts and tools in
the development of software, not introduced in the introductory
programming courses. These include programming with explicit memory
management and layout (e.g. C or C++), techniques for group software
development, modern design, implementation, and testing patterns and
strategies, and societal impact.
Course Motivation and Purpose
- 142 & 143 focused on the essentials of programming,
abstraction, composition, etc.; they stayed at a fairly abstract, high level;
and hid as many distracting details of the OS, IDE, and machine
representations as possible. Now that students know these basics, and
have reached a certain level of maturity and sophistication, we're
going to teach them what's going on "under the hood". We're going to give the
students more power, more control, and more understanding, and also more
responsibility and danger. At the OS level (Unix etc.), the IDE
level (javac/gcc, make, etc.), and the PL level (C).
- Teach (or give exposure to) additional skills and concepts that
are important in being a productive, (semi-)professional programmer.
Self-reliance, group programming, design skills, testing & debugging
skills, societal impact. This "book learnin'", along with
experience, should enable students to become effective, professional
programmers.
Outcomes
- Other 300- and 400-level CS courses can assume these skills in
their coursework.
- Students are prepared to get summer jobs doing basic
programming/testing tasks.
- Students have exposure to key concepts, which they will become
better at applying as they grow in experience.
Topics
(Roughly in order of appearance in the course)
- Explicit control over operating system
- Unix (e.g. linux and cygwin), shell commands, shell scripts
- man pages
- maybe perl, python, ruby
- Explicit control over programming environment
- explicit edit, compile, link, run, debug components
- emacs
- make
- debugger
- profiler
- Explicit control over program resources
- C (primarily the low-level data model)
- perhaps some brief exposure to C++, mainly templates
- Testing and debugging
- defensive programming, asserts, designing for robustness
- specifications, pre/post conditions
- test suites, coverage
- writing test cases first, as simple specs
- Design
- design patterns
- requirements, use cases
- (very basic) (human) interface design
- Societal impact, safety, security, privacy, & other ethical
issues in computer software and systems
chambers@cs.washington.edu