1101. Unix and Systems Administration. Fundamentals of the Unix operating system and topics relevant to managing a Unix
1410. Introduction to Computer Science. Introduction to the design of programs and algorithms and the fundamental ideas and concepts of computer science, with emphasis on the development of problem solving strategies and good programming style using functional languages. Lists, structures, contracts, unit tests. Fall.
2102. Other Programming Languages. May be repeated. Covers programming languages such as Perl, C, C++, Ruby, Python,
etc. Prerequisite: MCS 1410.
2103. Computing Practicum. May be repeated. Topics chosen according to interests of students and instructors, e.g. debugging tools, GUI design. Prerequisite/Co-requisite: MCS 1410.
2315 -2316 . Discrete Structures I and II. The foundations of computer science: fundamental data structures and algorithms, mathematical models and methods, logic and proof. Design of structures and algorithms in an object-oriented language. Induction, recursion, and running time; combinatorics and probability; trees, lists, sets, and graphs; relational data; patterns and regular expressions; grammars and parsing. Spring (2315) and Fall (2316).
3311. Theory of Computation. Abstract models of computing machines and the data they process are developed. These
are used to study the theoretical limitations of what they can achieve. The ultimate
goal is to develop a sufficiently general model of computation where one may discover
universal laws that govern all programming languages together with the computing machines
which may be built to interpret them. The topics covered are the theory of automata,
formal languages, computability by Turing machines, and Church's thesis. Proofs are
required. Prerequisite: MCS 2316 or consent of instructor.
3312. Analysis of Algorithms. A mathematical study of the complexity of fundamental algorithms in computer science. Prerequisite: MCS 2316.
3317. Computer Organization. Hardware design methods in particular formal models of simple register machines are developed and then used to study program interpretation and compilation techniques. Some topics in storage allocation such as garbage collection and maintaining the illusion of infinite memory are also discussed. A sizable programming project is required. Prerequisite: MCS 2316.
3352. Programming Languages. Study of the fundamental principles in the design and implementation of programming languages. Study includes the mathematical theory behind these principles and students must be comfortable with proofs. Topics include the substitution model, hierarchical structures, the environment model, metalinguistic abstraction, and memory representation. Students write their own language interpreter. Prerequisite: MCS 2316.
3451. Operating Systems and Concurrent Programming. A survey of the issues involved in the design and implementation of modern timesharing,
multitasking systems. Topics covered include scheduling algorithms, synchronization
problems, memory management, and file management. Students partially write their own
operating system. Prerequisite: MCS 2316.
3V57. Internship. Graded Pass/No Pass.
4410. Compiler Design. Exploring the issues related to the design and implementation of programming language translators including formal grammars and parsing, semantic definitions and semantic processing, run-time storage management and symbol tables, error recovery, code generation, and as time permits optimization of compiled code. Students write a significant amount of a compiler on their own, a large and complex coding project.
4350. Special Topics in Computer Science.
4V43. Research in Computer Science.
4V61. Independent Studies. An opportunity for the student to examine in depth any topic within the field under the guidance of the instructor. For advanced students.