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
• Section FL1 9-10:20am Tu in ETC 205
• Section FL2 10:30-11:50am Tu in ETC 205
Instructor: Jim Fix,, Library 314
Jim's Last Office Hours:
• Thursday, December 8th, 10:30am-12pm, 2:40-4pm in Library 314
• Friday, December 9th, 10:30am-12pm, 2:40-4pm in Library 314
• Monday, December 12th, 1-4pm in Library 314
• Tuesday, December 13th, 1-4pm in Library 314
• Wednesday, December 14th, 1-4pm in Library 314
• Alex Pan,
• Ira Globus-Harris,
• Sarah Racz,
• Monday, December 12th, 7-9pm in Library 387
• Tuesday, December 13th, 8-10pm in Library 387

Tools and Resources

Python Version 3
Unix command-line
VIM, Emacs, and Sublime Text
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.


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

Week 2
Lab 2/Homework 2: circuits with state

Week 3
Lec3.1 introduction to processor design
Ha75 overview
• sample Ha programs: reverse_bits (see Lab 3 too)
• sample Ha mem programs: print sum min
PDP-11 programming guide
• Reed computer support advertisements: google "reed college pdp"
Lab 3: Ha75 programming

Week 4
Lab 4: Ha75 functions

Week 5
SML syntax
practice midterm exam
solutions to the practice midterm exam

Week 6
SML syntax with lists
SML examples
Lab 6: SML functions
midterm exam

Week 7
SML tree examples
Lab 7: more SML functions

Week 8 : Break

Week 9
solutions to the midterm exam
arithmetic expression parsing
Lab 9: SML for logic

Week 10
• the Cobra compiler with its starting code
official Go language reference
official Go package documentation
a Go syntax summary
some illustrative Go examples
Lab 10: a Go language warm-up

Week 11
a stack in Go
Lab 11: Go structs and references

Week 12
practice 2nd midterm exam
practice 2nd midterm solution
Lab 12: Go routines and channels

Week 13
• Monday: 2nd midterm exam (50 minutes, in class)
Lab 13: network routing simulation
Arcade: networked game and registry

Practice final exam
Solutions to the practice final
Review session: Sunday, December 11th, 7-9pm in Vollum 120
Final exam: Thursday, December 15th, 1-4pm in Library 204