

600.101 (E) Computer Fluency
Students will become fluent with information technology through coverage of basic underlying concepts and use of common applications. Concepts will include the building blocks of computer systems and software, as well as historical perspectives and social implications. Students will learn basic and selected advanced skills with MS Office (word processing, spreadsheets, presentations, databases), as well as webpage design in HTML, with programming in JavaScript, and unix operating system basics. The goal is to empower students so that they remain skilled computer users and will have confidence and success learning and applying new technologies on their own in the future. Prerequisite: none. Note: This course is for non-CS majors only. [General]
Houlahan 4 credits fall, spring
 
600.102 (E) CS Foundations
This course is an introduction to computer science for majors and non-majors. Students are exposed to the discipline through vignettes of logic and algebra, computer systems and networks, algorithms, programming languages, computation theory, and selected applications. CS majors can only take this course in their first year of CS coursework. Prereq: 600.101 or equiv. knowledge. [General]
Froehlich 4 credits
600.103 (E) Introduction to Computer Science
(Last offered Spring 2005.) Department faculty take turns presenting their research areas to give a broad perspective on the discipline of computer science. Satisfactory/unsatisfactory only. [General]
Houlahan 1 credit
 
600.104 (H) Computer Ethics -
Theory and Practice
Students will examine a variety
of issues regarding various policy, legal, and moral issues related to the computer
science profession itself and to the proliferation of computers in all aspects of
society, especially in the era of the Internet. The course will cover general issues
related to various ethical frameworks and move to topics specifically related to
computers. The topics will include privacy issues, computer crime, intellectual property law -- specifically
copyright and patent issues, globalization, and ethical responsibilities for
computer science professionals. Short course.
Staff 1 credit
 
600.105 M&Ms: Freshman Experience
This course is required for all freshmen Computer Science majors. Transfers into the major and minors may enroll by permission only. Students will attend three 4-week blocks of meetings with different computer science professors, focused on a central theme. Active participation is required. Satisfactory/Unsatisfactory only. [General]
Houlahan 1 credit fall
600.106 (E) Pre-Programming: Algorithmic Thinking
This course is intended for novice programmers, to be taken before or in conjunction with 600.107 or 600.109. The purpose is to provide students with the abstraction and logical thinking tools necessary for writing computer programs. It will introduce students to fundamental concepts and algorithms common to many programming languages. Students will primarily do paper solutions. Short course. Satisfactory/Unsatisfactory only. [General]
Staff 1 credit
600.107 (E) Introduction to Programming in Java
This course introduces the fundamental programming concepts and techniques in Java, and is intended for all who plan to use computer programming in their studies and careers. Topics covered include control structures, arrays, functions, recursion, dynamic memory allocation, simple data structures, files, and structured program design. Elements of object-oriented design and programming are also introduced. Prerequisite: familiarity with computers. [General]
Houlahan 3 credits fall, summer
 
600.108 (E) Introduction to Programming Lab
This course is intended for novice programmers, and must be taken in conjunction with 600.107. The purpose of this course is to give novice programmers extra hands-on practice with guided supervision. Students will work in pairs each week to develop working programs, with checkpoints for each development phase. Prerequisite: familiarity with computers. Co-requisite: 600.107. Satisfactory/ Unsatisfactory only. [General]
Houlahan 1 credit
 
600.109 (E) Introduction to Programming in C/C++
(Last offered Spring 2005.) This course introduces the fundamental programming concepts and techniques in C and C++, the languages most commonly used in modern programming applications. The course is intended for all who plan to use computer programming in their studies and careers. Topics include control structures, arrays, functions, recursion, dynamic memory allocation, simple data structures, files, and structured program design. Elements of object-oriented design and programming are introduced. Students generally take only one of 600.107 or 600.109. Prerequisite: familiarity with computers. [General]
Houlahan 3 credits spring, summer
 
600.120 (E) Intermediate Programming
This course covers intermediate to advanced object-oriented programming in both C and C++. The focus of the course is on programming techniques, class design, and the use of class libraries. Topics to be covered include polymorphism, overloading, inheritance, pointers, dynamic memory allocation, templates, collections, exceptions, and others as time permits. Students are expected to learn syntax and low-level language features independently. Course work involves significant programming projects in both languages. Prerequisite: 600.107 or AP CS. [General]
Staff 4 credits fall, spring
600.145 (E) Introduction to Computer-Integrated Surgery
This course will give an introduction to the concepts and major elements of computer-integrated surgery (CIS) through clinical applications. Students will learn to ask questions and look for answers the way clinical engineers build and analyze CIS systems. Major topics will include medical imaging, image processing, surgical planning, surgical robotics, robot navigation, systems integration, and clinical validation. Optional visits to CIS laboratories and clinical experiments will also be offered. No computer programming will be necessary to complete the assignments. Pre-requisites: pre-calc required; knowledge of linear algebra helpful. Short course. [General]
Taylor 1 credit intersession
 
600.161 (E) Exploring Vision in the Real World
The course will focus on real world applications of computer vision and image processing, primarily in the areas of medicine and sports. The goal is to introduce students to computer vision concepts and explain how they are the building blocks for interesting and practical applications. One such example is the use of stereo vision to enhance micro surgery. Another example is the use of computer vision to create realistic 3D real-time video fly-through in sporting events, such as the NFL Super Bowl. The class will consist of lectures and class discussions. Students will be evaluated on weekly assignments and participation in discussions. This course is designed to introduce computer vision to interested students with or without a computer science background. An engineering background is recommended but not required. Matlab programming will be part of homeworks. Pre-calculus level math and some linear algebra is required.
1 credit intersession
600.211 (E) UNIX Systems Programming
This course covers a variety of topics in UNIX programming, including process control, signal handling, daemon processes, and interprocess communication. Participants must be familiar with using the UNIX environment and be fluent in the C programming language. Prerequisite: 600.120. [General]
Froehlich 3 credits
 
600.226 (E,Q) Data Structures
This course covers the design and implementation of data structures including collections, sequences, trees, and graphs. Other topics include sorting, searching, and hashing. Course work involves both written homework and Java programming assignments. An overview of Java will be provided. Prerequisite: 600.107. [General]
Staff 3 credits fall, spring
 
600.271 (E,Q) Automata and Computation Theory
This course is an introduction to the theory of computing. Topics include design of finite state automata, pushdown automata, linear bounded automata, Turing machines and phrase structure grammars; correspondence between automata and grammars; computable functions, decidable and undecidable problems, P and NP problems, NP-completeness, and randomization. Prerequisite: none. [General]
Kosaraju 3 credits fall, summer
 
600.315 (E) Database Systems
Introduction to database management systems and database design, focusing on the relational and object-oriented data models, query languages and query optimization, transaction processing, parallel and distributed databases, recovery and security issues, commercial systems and case studies, heterogeneous and multimedia databases, and data mining. Course work includes significant practical implementation experience. Prerequisite: 600.226. [Systems]
Yarowsky 3 credits fall
 
600.316 (E) Transaction Processing Systems
This course covers the design and implementation of transaction processing and database systems. Topics include transaction semantics, write-ahead logging, memory management, checkpoints, concurrency control, replication, restart recovery, and distributed commit protocols. The course employs examples of advanced database applications to develop this material. Examples include Internet databases, TP monitors, multidatabases, and federated databases. Course work includes a project. Prerequisites: 600.315/415 or equivalent, 600.120. [Systems]
Burns 3 credits
 
600.318 (E) Operating Systems
This course covers the fundamental topics related to operating systems theory and practice. Topics include processor management, storage management, concurrency control, multi-programming and processing, device drivers, operating system components (e.g., file system, kernel), modeling and performance measurement, protection and security, and recent innovations in operating system structure. Course work includes the implementation of operating systems techniques and routines, and critical parts of a small but functional operating system. Prerequisites: 600.120, 600.226, and 600.333; 600.211 recommended. [Systems]
Shapiro 4 credits spring
 
600.319 (E) Storage Systems
Storage systems is one of the fastest growing and most interesting research
areas in computer science. Storage systems often dominate the performance of
computer systems as a whole. Also, they are responsible for the safe-keeping of
an organization's most valuable assets -- information! The course will cover
the design and implementation of storage systems and the architecture and
characteristics of the components on which storage systems are built. Topics
will range from the device level up to distributed systems concepts. This will
include disk drive hardware and firmware, file system and database structures,
mirroring and RAID, disk array controllers, local storage interconnects,
storage area networks, capacity planning and configuration, distributed file
systems and network-attached storage, backup/restore and disaster recovery, and
security for storage. Prerequisites: 600.226 and 600.333/433. [Systems]
Burns 3 credits
600.321 (E) Object-Oriented Software Engineering
This course covers object-oriented software construction methodologies and their application. The main component of the course is a large team project on a topic of your choosing. Course topics covered include object-oriented analysis and design, UML, design patterns, refactoring, program testing, code repositories, team programming, and code reviews. Prerequisites: 600.226 and 600.120. [Systems or Applications]
Smith 3 credits fall
 
600.324 (E) Network Security
This course focuses on communication security in computer systems and networks. The course is intended to provide students with an introduction to the field of network security. The course covers network security services such as authentication and access control, integrity and confidentiality of data, firewalls and related technologies, Web security and privacy. Course work involves implementing various security techniques. A course project is required. Prerequisites: 600.226, 600.344/444 or permission; 600.120 (or equivalent) recommended. [Systems]
Monrose 3 credits fall
 
600.325 (E) Declarative Methods
Suppose you could simply write down a description of your problem, and let the computer figure out how to solve it. What notation could you use? What strategy should the computer then use? In this survey class, you'll learn to recognize when your problem is a special case of satisfiability, integer programming, rational pattern transduction, Bayesian network inference, or weighted logic programming. For each of these paradigms, you'll learn to reformulate hard problems in the required notation and apply off-the-shelf software that can solve any problem in that notation -- including many of the problems you'll see in other courses and in the real world. You'll also gain some understanding of the general-purpose algorithms that power the software. Prerequisites: 600.226, 600.271, Calc II. [Analysis]
Eisner 3 credits spring
600.328 (E) Compilers
Introduction to compiler design, including lexical analysis, parsing, syntax-directed translation, symbol tables, run-time environments, and code generation and optimization. Students are required to write a compiler as a course project. Prerequisite: 600.120 & 600.226. [Systems]
Froehlich 3 credits
600.333 (E) Computer System Fundamentals
CSF addresses the design and performance of the principal operational components of a reduced-instruction-set computing system (RISC) which supports the efficient execution of widely used instruction sets. Arithmetic and logic units, memory hierarchy designs, state-machine controllers, and other related hardware and firmware components are studied, and the qualities of their combined processing capabilities are assessed by means of execution times associated with a range of benchmark programs. Assembly language programming projects, homework problems, and exams are employed to assess a student's fundamental understanding of the tradeoffs resulting from an assortment of variations in digital system design decisions that ultimately characterize the performance of the computing system architecture that is developed. Prerequisite: 600.107. [Systems]
Masson 4 credits fall, summer
 
600.335 (E) Artificial Intelligence
Artificial Intelligence (AI) is introduced by studying knowledge representation mechanisms, automated reasoning, automatic problem solvers and planners, production systems, game playing, and machine learning. The class is recommended for all scientists and engineers with a genuine curiosity about the fundamental obstacles to getting machines to perform tasks such as deduction, learning, and planning and navigation. Prerequisite: 600.226, 550.171; linear algebra, prob/stat recommended. [Applications]
Hager, Sheppard 3 credits spring
 
600.336 (E) Algorithms for Sensor-Based Robotics
This is an introductory course presenting a series of algorithms related to the representation and use of geometric models acquired from sensor data. Course topics include: basic sensing and estimation techniques, geometric model representations, and motion planning algorithms. The course will also discuss applications in diverse areas such as mobile systems, robot manipulation, and medicine. Prerequisite: 600.226, calculus, prob/stat. [Analysis]
Hager 3 credits
 
600.337 (E) Distributed Systems
This course teaches how to design and implement protocols that enable processes to exchange information, cooperate, and coordinate efficiently in a consistent manner over a computer network. Topics include communication protocols, group communication, distributed databases, distributed operating systems, and security. The course gives hands-on experience as well as some theoretical background. Prerequisites: 600.120 and 600.226; 600.211 recommended. [Systems]
Amir 3 credits fall even years
 
600.341 (E, Q) Basics of Applied Cryptography
This course is an introduction to algorithms, cryptography and network security, meant to give students a good foundation for upper-level courses in the area. Students will learn how to implement a simple cryptographic library in C. Prerequisite: 600.120 & 600.226. [Analysis]
Ateniese 3 credits
600.344 (E) Computer Network Fundamentals
This course considers intrasystem communication issues. Topics include layered network architectures; the OSI model; bandwidth, data rates, modems, multiplexing, error detection/correction; switching; queuing models, circuit switching, packet switching; performance analysis of protocols, local area networks; and congestion control. Prerequisite: 600.333 or general knowledge of computer architecture. [Systems]
Masson, Terzis 3 credits spring
 
600.348 (E,Q) Theory of Network Communication
The course covers current topics in the area of communication in distributed systems. This includes an introduction to parallel computational models and important routing parameters and networks, as well as the presentation and analysis of strategies for broadcasting, unicasting, and multicasting in static and dynamic networks, load balancing, and distributed data management. Weekly assignments. Some knowledge of probability theory is helpful. Prerequisite: 600.344/444 or permission. [Analysis]
Scheideler 3 credits
 
600.349 (E) Internet Protocols
[Replaced by 600.450 starting Fall 2007.] This course covers the most important Internet protocols in detail. The goal is to get a solid technical understanding of the Internet's foundations and a concrete example of complete network protocol family. The course material will be taken from the textbook but the students will also be required to read the actual protocol specifications (RFCs). A major part of this course is the two group projects where students are going to implement realistic network protocols. In addition to the projects, there will be homework assignments, a midterm, and a final. Prerequisites: 600.120 and 600.344/600.444; 600.211 is recommended but not required. [Systems]
Terzis 3 credits
 
600.357 (E,Q) Computer Graphics
This course introduces computer graphics techniques and applications, including image processing, rendering, modeling and animation. Prerequisites: 600.120, 600.226, and linear algebra; or permission of instructor. [Applications]
Kazhdan 3 credits spring
 
600.359 (E) Projects in Graphics and Multimedia
Students in this course collaborate to work on a large scale project in the area of computer graphics and multi-media. From initial brainstorming to investigation of existing systems to the development of a full-scale system, students shape a project into something that may be useful to either the research community or the general public. Prerequisites: Students should have a background in computer science or in films. CS students must have completed Data Structures (600.226) and at least one 300-level course with a semester programming project (or comparable experience). Film students should provide an appropriate faculty reference to the instructor. Both CS and film students must get approval of the instructor for registration. [Applications]
Cohen 3 credits
 
600.361 (E,Q) Computer Vision
This course gives an overview of fundamental methods in computer vision from a computational perspective. Methods include computation of 3-D geometric constraints from binocular stereo, motion, texture, shape-from-shading, and photometric stereo. Edge detection and color perception are studied as well. Elements of machine vision and biological vision are also included. Prerequisites: 600.226. [Applications]
Hager 3 credits fall
 
600.363 (E,Q) Introduction to Algorithms
This course concentrates on the design of algorithms and the rigorous analysis of their efficiency. Topics include the basic definitions of algorithmic complexity (worst case, average case); basic tools such as dynamic programming, sorting, searching, and selection; advanced data structures and their applications (such as union-find); graph algorithms and searching techniques such as minimum spanning trees, depth-first search, shortest paths, design of online algorithms and competitive analysis. Prerequisite: 600.226. [Analysis]
Awerbuch 3 credits fall
 
600.371 (E,Q) Modern Complexity Theory
Topics covered will be polynomial complexity classes and beyond, complexity of logic and arithmetics, cryptography and complexity, interactive proof systems and probabilistically checkable proofs, inapproximability, and new directions including Quantum computing and complexity of evolutionary systems. Weekly assignments. Prerequisites: 600.271 or permission. [Analysis]
Scheideler 3 credits
 
600.392 (E) Senior Design Project
This course will give senior CS majors an intensive capstone design project experience. Students will work in groups with real world customers to develop a working system. Project design, management and communication skills will be emphasized. Software development methodologies may also be presented. Prerequisites: 600.120, 600.226; 600.321 recommended. [General]
Froehlich 3 credits