CS100: Introduction to Programming in Lua This is the introductory programming course. In it, students are expected to learn conditionals…
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.
By John Ohno on April 1, 2018.
[Canonical link](https://medium.com/@enkiv2/a-design-for-a-hypothetical- undergraduate-cs-curriculum-1d776cc91b2c)
Exported from Medium on September 18, 2020.
Rendering context...