MATH 221: CS Fundamentals II

Full course for one semester. A second course in computer science, an introduction to computer systems and to advanced programming. The goal of this course is to introduce students to how programming systems are constructed. We'll survey how computer systems function by exploring digital logic, processor design, and machine-level programming. We'll explore how programming language systems are constructed by doing some "meta-programming": we write code that reasons about other programmers' code in the programming language Standard ML. We'll complete the course by examining how the cloud infrastructure works through describing concurrent, communicating processes in the Go programming language.

There will be significant programming projects exploring a number of these topics. Students are expected to be comfortable writing code in Python and will be expected to pick up the languages ML and Go, and in a computer processor's assembly language.

Prerequisite: Mathematics 121 or the equivalent.
Lecture: 2:40-4pm MW in Library 204
Laboratory:
• Section FL1 9-10:20am Tu in ETC 205
• Section FL2 10:30-11:50am Tu in ETC 205
Instructor: Jim Fix, jimfix@reed.edu, Library 314
Jim's Office Hours: 1:10-2:30pm MW, 3:10-4:30 Tu
Teaching Assistant: Alex Pan, pana@reed.edu, Library 387

Tools and Resources

Python Version 3
Unix command-line
VIM, Emacs, and Sublime Text
LogiSim
Standard ML of New Jersey
the Go programming language
the Git repository
x86 assembly

Fundamentals of Digital Logic
by Stephen Brown and Zvonko Vranesic.
For reference or as a supplement, FYI only, on library reserve.

Elements of ML Programming
by Jeffery Ullman.
Strongly recommended and on library reserve.

The Go Programming Language
Alan Donovan and Brian Kernighan.
Recommended and on library reserve.

Schedule

Part I: Circuits and machine organization. (4 weeks)
Part II: Meta-programming in Standard ML. (4 weeks)
Part III: Concurrency and communication in Go. (5 weeks)

Course Materials

Week 1
Lec1.1a course overview
Lec1.1+2 introduction to digital circuits
• a lab from an older CS systems course, FYI
• some notes on circuits from an older 121 course
laws of boolean algebra
example circuits from class
Lab/Homework 1: building circuits in Logisim