Skip to main content

CSE 390, 1 credit, System and Software Tools, recommended for new majors who have not had 303

*CSE 390 sln 19260 1 credit, cr/no credit only, Tues 130-220

*If you have completed 303 you are NOT allowed to register, no begging, we mean it…  🙂

1. You don’t need it, you already covered these points

2. We don’t have the space even if you think you want some review

UW CSE – System and Software Tools
Course Description

Structural Place in the Curriculum

  • 1 credit (1 weekly lecture),  credit / no-credit  (C/NC) only
  • Pre-requisites: CSE 143
  • Taken by: Optional but recommended for CS and CE students who have NOT had 303
  • Catalog Description: TBD

Course Overview / Goals

There are many practical skills that are important for students to know for upper-division CSE coursework, but that do not smoothly fit in with the core material of those courses.  Such skills include: using a Unix/Linux environment; text editors and software tools; Unix shell commands; file/process management; regular expressions and text processing; shell scripts and scripting languages; and tools for managing and compiling programs.  This material is important to computer scientists, but much of it is practical and not strictly computer science.

This course provides a weekly lecture on these topics to students who have completed CSE 143.  It is a gentle introduction “on the side” of the rest of the curriculum, with only moderate work, requirements, and demands on student time.  The course makes no assumptions about student knowledge beyond basic programming ability.

The course is for CSE majors only.  It will be listed as optional, because some students will already know these topics or will not need them in their course path.  But the department will recommend it to all incoming majors because of its importance to many majors courses.

The course will have a faculty member listed as “instructor of record,” but the weekly lectures and grading will be conducted by a graduate student under the faculty member’s supervision.

Description of Possible Homework, etc.

Each lecture would end with the assigning of one short homework, expected to take 2-3 hours at most to complete.  Each assignment would involve solving various problems in the CSE labs or at home involving Unix commands, shell scripting, etc.  Example assignments:

  • Write various shell command one-liners to produce given results or discover various system information.
  • Solve various shell tasks involving regular expressions and related tools.
  • Create a shell login script that sets up certain environment variables and settings.
  • Author, compile, and run a short Java program from a Unix server.
  • Set up a short Makefile to compile and run a Java program.
  • Write short script programs to perform various tasks and produce a given output or result.

“Passing” the course involves submitting satisfactory solutions to the majority (say, 8 out of 10) of the assignments given out for the quarter.  At the instructor’s discretion there may also be a short final exam at the end of the quarter, though such an exam should be less strenuous than most CSE course exams.

Possible Textbook

Barrett, Daniel J.  Linux Pocket Guide.  O’Reilly, 2004.

The textbook would likely be optional.  A substantial set of online and printed resources (lecture slides, web pages, links, etc.) would also be given to students as a reference, for both during and after the course.


Approximate Topic List

  • basics of navigating a Unix/Linux environment
  • using a Unix command-line shell
  • Unix file system; file and directory management
  • permissions, groups, and users (including super-user, root)
  • processes and process management
  • pipes and redirection
  • globs and wildcard characters
  • environment variables
  • connecting to remote servers (ssh, sftp, scp, vnc, rdesktop, etc.)
  • commands related to multi-user shared Unix systems (e.g. attu)
  • using a text editor such as emacs
  • regular expressions and related tools (e.g. sed, grep)
  • string and text processing basics: filtering, substituting, etc.
  • compiling and executing Java programs from a command line
  • Makefile basics (without C programming)
  • shell scripting (bash or Python)
  • version control basics

Possible additional topics, time permitting:

  • basics of programming in a scripting language such as Python, Ruby, or Lua
  • basics of HTML and/or setting up a basic web page
  • setting up a basic Unix/Linux system
  • configuring a Unix/Linux system to act as a basic file/web server

Non-Topics and Relation to Old Curriculum

This course is essentially a subset of the material once offered in CSE 303, spread out over a 10-week quarter.  The most major topic area removed from 303 is the coverage of C/C++ programming and related issues.  Some topics are covered in less detail than they would be in 303.  The following (which occupied up to 6-7 weeks of CSE 303) are not covered:

  • messy details of many topics (version control, emacs, Makefiles)
  • details of particular Unix/Linux operating system distributions (e.g. “How to use Ubuntu”)
  • C / C++ programming
  • object-oriented programming
  • memory and manual memory management
  • debuggers, testing, linking, loading, libraries
  • concurrency, synchronization
  • security (beyond that provided by file permissions)
  • ethics and society
March 2, 2010