EECS 298 -- Computing for Computer Scientists


This 1-credit seminar is designed to teach the essentials of using a computer effectively for EECS students. While the target audience is CS/CE students, any student wishing to learn how to use their computer much more effectively is encouraged to join. Topics covered include shells, environment, scripting, Makefiles, compilers, debugging tools, and version control. The last month of the course will be open to student input for remaining useful topics to cover.

Students will be expected to install Linux on their own computers for this course; CAEN computers will not be sufficient. (Don't worry, we'll teach you how :) )

Course Pre-Requisites

The only enforced pre-requisite for this course is ENGN 101, however it is advised that students have either taken or are concurrently enrolled in EECS 280. A basic understanding of programming (if/else, for, while, etc) and a passing familiarity with a compiler and command prompt is the only expected background.

Grading, Attendance, and Homework

This course is a pass/fail course. The most important element will be attendance in class. There are 13 required lectures (week before spring break is optional). Missing more than 3 lectures will result in automatic failure of the course.

There are 12 homeworks in the course. Homework is due by the beginning of lecture the week after it is assigned. Homeworks will be graded on a {0,1,2} scale:

A passing grade will require at least 18 total homework points (e.g. 6 1's and 6 2's). The homeworks are designed as practice exercises to reinforce concepts covered in lecture, they will not be very difficult.

There is no final exam for this course.

Useful Links / Resources


(dates assuming a Friday course date)

Week 1 Jan 11 Intro to Linux, distributions, etc
  • Install Linux on a personal PC
Week 2 Jan 18

Shells and environment, basic scripting

  • bash
  • $HOME, $PATH, etc
  • history, Ctrl-R, etc
  • .bashrc, alias, export
  • shell variables and functions
  • basic flow control
  • Add class homework directory to your PATH
  • Source our environment (in hw2/env.rc)
  • Build a (using hw2/tests/)
Week 3 Jan 25

File systems, permissions, AFS, SSH, Kerberos

  • ntfs vs extN vs hfs+ vs fat32
  • vs afs
  • permissions + tools
  • ssh - keygen, authorized_keys, etc
  • Figure out what filesystem(s) are in use on your machine
  • Install AFS on your machine
  • Set up SSH keys with class server
Week 4 Feb 1

Unix tools, advanced shell scripting, basic RegEx's

  • cat, head, tail, less, more, |
  • shell jobs
  • grep, sort, uniq, regex's, (awk, sed)
  • Advanced ""
  • Process the hw/data into human-readable format
Week 5 Feb 8

Effective use of text editors

  • .vimrc
  • s/foo/bar/
  • navigation
  • buffers
  • :make
  • Customize your editor's configuration file
  • List the commands to open/edit/save/quit in...
    • vi
    • emacs
    • nano
    • pico
    • EC: sed and ed
Week 6 Feb 15


  • targets, dependencies, and rules
  • implicit rules
  • variables (default and otherwise)
  • specials (PHONY, NOTPARALLEL, etc)
  • recursive make
  • Adding testbenches to Makefiles
  • Write a Makefile for any current EECS course
  • Write a Makefile hw/make_recursive/
  • EC: Write the smallest Makefile possible for hw/make_challenge
Week 7 Feb 22

Debugging tools (gdb, valgrind)

  • Compilation flags (with a quck touch on object files)
  • breakpoints, watchpoints
  • instruction/function stepping
  • backtraces and debugging with them
  • OPT: Multithreaded debugging
  • gdb vs valgrind?
  • how to use valgrind effectively (suppression, useful flags, instrumentation macros)
  • and... the judicious printf (#define DBG and other tricks)
  • Use gdb to fix the errors in hw/debugging/gdb
  • Use valgrind to fix the errors in hw/debugging/valgrind
Week 8 Mar 1 Optional Lecture: Something really cool
  • None: Enjoy break!
Spring Break
Week 9 Mar 15

Revision Control -- centralized (svn)

  • What is revision control?
  • What does 'centralized' mean?
  • Histroy, branching, merging
  • Logs, blame
  • Commit hooks
  • Checkout and commit to our repositories (ssh,afs)
  • Create a repository in your afs space, make sure the group
    has access
Week 10 Mar 22

Revision Control -- decentralized (git)

  • How is decentralized different?
    • (Is it better? What's "better"?)
  • git ideals - branch often, merges, cherry-picks
  • branches in git, remotes, tracking
  • pull vs fetch, push
  • Commit hooks
  • Checkout and commit to our repositories (ssh,afs)
  • Create a repository in your afs space, make sure the group ppannuto:298staff has access
  • EC: Submit a patch to the linux kernel (
Week 11 Mar 29

Compilers beyond gcc (clang, cross-compilers, static analyzers)

  • Why?
    • (embedded systems, smartphones, bug-checking...)
  • Why is this so hard?
    • Limited user base, testing, etc
  • Tips to make life less painful (combining previous materials)
    • Remember all that environment talk from Week 2...?
    • Then mix in some Makefile magic
    • Plus automated testing
    • Now add some commit hooks (post-commit background static analysis? Automated e-mail notifications, build-checking - Oh MY!)
  • Install any compiler other than gcc for x86/x64
  • Set up your Makefiles from last week to use this compiler
  • EC: Have your Makefile check an environment variable to pick compilers
  • EC: Show which bugs from hw/debugging/ could also have been found via static analysis
Week 12 Apr 5 Open: Guided by course interest
  • TBA
Week 13 Apr 12 Open: Guided by course interest
  • TBA
Week 14 Apr 19 Open: Guided by course interest
  • None: Good luck on exams!

(dates assuming a Friday course date)

Some suggestions for special topics lectures: