A design for a hypothetical undergraduate CS curriculum
A design for a hypothetical undergraduate CS curriculum
CS100: Introduction to Programming in Lua
This is the introductory programming course. In it, students are expected to learn conditionals, control structures, and the use of arrays and hash tables, as well as solve simple problems involving regular expressions. Will also cover the use of version control systems.
Textbook: Programming in Lua by Roberto Ierusalimschy.
CS101: Introduction to Programming II
In this course, students will learn to write the same imperative control structures they learned in CS101 in C, as well as how to interface C code to Lua and how to write makefiles and use standard Unix build tools.
Textbooks: Programming in Lua by Roberto Ierusalimschy, The C Programming Language by Kerninghan & Richie.
Prerequisite: CS100
CS110: Discrete Math for Computer Science
A course covering introductory number theory, introductory graph theory, symbolic and first order logic, and boolean algebra. It should also cover the concept of computability and universal turing machines.
CS200: Language Survey I
Each class will represent an introduction to a new programming language, with assignments for small but non-trivial projects in that language due by the following class. Languages covered: Brainfuck, Forth, Befunge, Scheme, APL, Replace, Unlambda, and Hyper Set Language. Cannot be waived.
Prerequisite: CS110
CS201: Language Survey II
This course follows the curriculum laid out in Seven Languages in Seven Weeks.
Textbook: Seven Languages in Seven Weeks, by Bruce A. Tate
Prerequisite: CS200
CS202: Language Survey III
This course follows the curriculum laid out in Seven More Languages in Seven Weeks.
Textbook: Seven More Languages in Seven Weeks, by Tate et. al.
Prerequisite: CS201
CS210: Databases
This course covers database design and SQL.
CS220: Topics in Computing and Ethics
This class is taught in cooperation with the philosophy department, and combines the study of historical ethical failures in computing & engineering with discussion of current events and material from moral philosophy. Must cover: the concept of virtue ethics, Kant’s moral imperative, utilitarianism and hedonism, the trolley problem, Simone de Bouvoire’s ethics of personal freedom, THERAC-25, the Challenger explosion, the ESA martian probe, the Tacoma Narrows Bridge, 5EYES, the pentagon papers leak, the christmas tree virus, the clipper chip, and the sesame credit.
CS230: Computing History
Students will learn the history of computing starting with Ramon Llul. At the same time, they will learn basic hardware concepts like the FDE cycle, the parts of a CPU, and the layout of a vonneumman machine. Projects will include designing a microcoded 4-bit CPU capable of performing simple arithmetic, building delay line and relay based multiplexed memory devices.
Textbooks: The Creeping Fungus by Karla Jennings, The Information by James Gleick, The New Hacker’s Dictionary ed. Eric S. Raymond, Turing’s Cathedral by George Dyson
CS240: Topics in generative art
Students will generate poetry and prose using generative grammars, produce interactive graphics with L-systems and cellular automata, become familiar with the use of corpus statistics tools like Word2Vec for classifying and modifying texts, and learn about the history of generative art techniques (including exquisite corpse, cutups, dissociated press, markov chains, TALESPIN, SAGA II, Racter, the demoscene, puzzle canons, and oblique strategies).
CS300: Topics in Computer Security
An overview covering symmetric vs asymmetric encryption, common vulnerabilities (such as buffer overflows and code injection), weird machines, social engineering, denial of service attacks, van eck phreaking, and fuzzing.
Prerequisites: CS202, CS210, CS220
CS310: Technical Writing for Software Engineers
A course on writing clear documentation. Will also cover public speaking.
CS320: Topics in Programming Languages
An overview of lexer and parser technologies. Final project is to write an interpreter or compiler for a student-designed language, including full documentation.
Prerequisites: CS202, CS310
CS330: Number Theory for Computer Science
A course on number theory, centered on writing proofs. Also covers automated theorem provers.
Textbook: A Friendly Introduction to Number Theory by Joseph H. Silverman
Prerequisites: CS202, CS110
CS400: Unix shell tools and system administration
Students will learn basic UNIX shell tools not used for development, and learn to write scripts of varying complexity. They will be expected to install and maintain a UNIX-like operating system.
CS410: Operating systems concepts
Students will learn about memory models, privilege levels, paging, task switching, filesystem layout, hard and soft interrupts, monolithic versus microkernel architecture, and executable headers. Final project is to write a simple multitasking operating system from scratch with managed memory.
Prerequisites: CS310, CS230, CS300
CS420: Social Topics in Computing
Students will discuss the social impact of computers from the perspective of writings by non-engineers. Final project is a twenty-page paper on one way in which a piece of software has indirectly impacted a group of people that does not use it without their knowledge.
Textbooks: Computer Lib/Dream Machines by Theodor Nelson, Interface Culture by Steven Johnson, Writing Spaaaaaace by Jay David Bolter, Track Changes by Matthew Kirschenbaum, The Gutenberg Galaxy by Marshall McLuhan
CS430: Thesis Project
A student’s thesis project must not be written wholly or primarily in a language covered during their curriculum.