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 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
Tutors:
• Alex Pan, pana@reed.edu
• Ira Globus-Harris, irglobush@reed.edu
• Sarah Racz, raczs@reed.edu
Tutoring:
• Monday, December 12th, 7-9pm in Library 387
• Tuesday, December 13th, 8-10pm in Library 387
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
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
Finals
• 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