# 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… * * * ### 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](https://esolangs.org/wiki/Replace), [Unlambda](https://esolangs.org/wiki/Unlambda), and [Hyper Set Language](https://esolangs.org/wiki/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. By [John Ohno](https://medium.com/@enkiv2) on [April 1, 2018](https://medium.com/p/1d776cc91b2c). [Canonical link](https://medium.com/@enkiv2/a-design-for-a-hypothetical- undergraduate-cs-curriculum-1d776cc91b2c) Exported from [Medium](https://medium.com) on September 18, 2020.