16.01.2015 Views

CS2013-final-report

CS2013-final-report

CS2013-final-report

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

CSE333: Systems Programming, University of Washington<br />

Department of Computer Science & Engineering<br />

Steven D. Gribble<br />

gribble@cs.washington.edu<br />

http://www.cs.washington.edu/education/courses/cse333/11sp<br />

Knowledge Areas that contain topics and learning outcomes covered in the course<br />

Knowledge Area<br />

Total Hours of Coverage<br />

Systems Fundamentals (SF) 8<br />

Operating Systems (OS) 7<br />

Programming Languages (PL) 5<br />

Networking and Communication (NC) 3<br />

Architecture and Organization (AR) 3<br />

Software Engineering (SE) 3<br />

Information Management (IM) 1<br />

Where does the course fit in your curriculum<br />

This is an optional course taken by undergraduates in their second year, following at least CS1, CS2, and a<br />

hardware/software interface course. Students are encouraged to have taken data abstractions/structures. The<br />

course is a prerequisite for several senior-level courses, including operating systems, networking, and computer<br />

graphics. Approximately 60 students take the course per offering; it is offered four times per year (i.e., once each<br />

quarter, including summer).<br />

What is covered in the course<br />

The major goal of the course is to give students principles, skills, and experience in implementing complex,<br />

layered systems. The course includes a quarter-long programming project in which students: (a) build rudimentary<br />

data structures in C, such as linked lists, chained hash tables, AVL trees; (b) use them to build an in-memory<br />

inverted index and file system crawler; (c) construct a C++-based access methods for writing indexes to disk and<br />

accessing disk-based indexes efficiently; and (d) construct a concurrent (threaded or event-driven) web server that<br />

exposes a search application.<br />

A substantial portion of the course focuses on giving students in-depth C and C++ skills and experience with<br />

practical engineering tools such as debuggers, unit testing frameworks, and profilers. The course stresses the<br />

discipline of producing well-structured and readable code, including techniques such as style guidelines and code<br />

reviews. Additionally, the course covers topics such as threaded vs. event-driven concurrency, the Linux system<br />

call API, memory management, and some security and defensive programming techniques.<br />

The full list of course topics is:<br />

C programming<br />

◦ pointers, structs, casts; arrays, strings<br />

◦ dynamic memory allocation<br />

- 420 -

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!