HONORS: An Honors Program in computer science is offered for qualified students.
Not open to students with previous credit in computer science.
An overview of the discipline of computer science achieved through an introductory-level survey of a number of major areas of computer science. Topics include algorithms used for computer solutions of important practical problems, computer programming, digital logic applied to computer circuitry, computer architecture, data representation and organization, Web page basics, computer networks, and theoretical limits of computation. Lectures and formal laboratories. (FM, GE5b)
Computer Science 102 (4)—Introduction to Computational Modeling
This course provides a hands-on understanding of the computational methods that support science and technology now and that will be essential for success in the science, engineering, and business worlds of the near future. The central theme of the course is building computational models of the processes that surround us every day, from the effects of drugs on the body to the formation of galaxies in the universe to the interactions of nations in the global economy. Classroom lectures and textbook readings are supplemented with lab exercises implementing the models using state-of-the-art software tools. (FM, GE5c)
Computer Science 111 (4)—Fundamentals of Programming I
A disciplined approach to programming with Python. Emphasis is on problem-solving methods, algorithm development, and object-oriented concepts. Lectures and formal laboratories. (FM, GE5b)
Computer Science 112 (4)—Fundamentals of Programming II
Prerequisite: Computer Science 111.
A continuation of Computer Science 111. Emphasis is on the use and implementation of data structures, introductory algorithm analysis, and object-oriented design and programming with Python. Laboratory course. (SC, GE5c)
Computer Science 121 (4)—Scientific Computing
Not open to students who have taken Computer Science 211 or higher.
An introduction to computer programming for scientific applications and a survey of the main methodological areas of scientific computation. The course provides the tools needed for students to use computers effectively in scientific work, whether in physics, chemistry, mathematics, economics, biology, psychology, or any field involving quantitative work. Programming in Matlab, a scientific-computing software package, with a focus on topics relevant to students’ major fields of study. Lectures and formal labs. (FM, GE5b)
Computer Science 196 (3)—Special Topics in Computer Science for Non-Majors
Special topics of current or general interest chosen on the basis of interest to faculty and students. Topics taught vary from year to year and are announced in advance of registration. (SC, GE5c)
Computer Science 199 (3)—Special Topics in Computer Science for Non-Majors
Special topics of current or general interest chosen on the basis of interest to faculty and students. Topics taught vary from year to year and are announced in advance of registration. (This course does not satisfy FDR or GE requirements.)
Computer Science 209 (3)—Software Development
Prerequisite: Computer Science 112.
An examination of the theories and design techniques used in software development. Topics include the software life cycle, design patterns, the Unified Modeling Language, unit testing, refactoring, rapid prototyping, and program documentation.
Computer Science 210 (3)—Computer Organization
Prerequisite: Computer Science 111.
Multilevel machine organization studied at the levels of digital logic, microprogramming, conventional machine, operating system, and assembly language.
Computer Science 211 (3)—Algorithm Design and Analysis
Prerequisites: Computer Science 112 and Mathematics 121 or 301.
Methods for designing efficient algorithms, including divide-and-conquer, dynamic programming, and greedy algorithms. Analysis of algorithms for correctness and estimating running time and space requirements. Topics include advanced data structures, graph theory, network flow, and computational intractability.
Computer Science 250 (3)—Introduction to Robotics
Prerequisite: Computer Science 111 or 121 or permission of the instructor.
This course combines readings from the contemporary robotics literature with hands‑on lab experience building robots with the popular Lego Mindstorms toolkit (provided). The lab experience culminates with a peer‑judged competition of robot projects proposed and built during the second half of the course. (SC, GE5c)
Computer Science 251 (4) —iPhone Application Programming
Prerequisite: CSCI 112 or equivalent programming background approved by the instructor.
In this course, students learn how to develop programs for the iPhone / iPod Touch, the most popular smart-phone platform in use today. Classroom lectures on the Objective-C language and CocoaTouch development environment are supplemented by extensive hands-on programming assignments, leading to an independent application project of the student's devising. The course culminates with a presentation of each student's application, and an optional upload to the iPhone App Store to see how well the application sells. (SC, GE5c)
Computer Science 252 (3)—Neural Networks and Graphical Models
Prerequisite: Computer Science 112.
A survey of the major developments in neural and belief networks, from the early perceptron models of the 1940s through the probabilistic Bayesian networks that are a “hot topic” in artificial intelligence today. Topics include the back-propagation algorithm, simple recurrent networks, Hopfield nets, Kohonen’s Self-Organizing Map, learning in Bayesian networks, and Dynamic Bayesian Networks, with readings from both popular textbooks and the scholarly literature. A major focus of the course is on writing programs to implement and apply these algorithms.
Computer Science 253 (3)—Genetic Algorithms
Prerequisite: Computer Science 112.
A survey of the major developments in genetic/evolutionary algorithms, from the Simple Genetic Algorithm through modern multiobjective optimization methods. Topics include fitness landscapes, the Schema and Building Block Hypotheses, learning and the Baldwin Effect, and genetic programming, with readings from both popular textbooks and the scholarly literature. A major focus of the course is on writing programs to implement and apply these algorithms.
Computer Science 295 (1-3)—Language Laboratory
Prerequisite: Permission of the instructor.
Introduction to a computer language, which will be chosen according to needs of students and of other computer science courses. Typical languages include Smalltalk, LISP, PROLOG. May be repeated once for degree credit with permission and if the languages are different. May only be used once toward the major requirements.
Computer Science 297 (3)—Topics In Computer Science
Prerequisite: Permission of the instructor.
readings and conferences for a student or students on topics agreed upon by the directing staff. May be repeated for degree credit with permission and if the topics are different. A maximum of six credits may be used toward the major requirements.
Computer Science 312 (3)—Programming Language Design
Prerequisites: Computer Science 112 and 210, Mathematics 121.
Formal language description tools; semantic concepts and syntactic constructs appropriate to diverse applications. Comparison of several high-level languages, such as Scheme, Java, ML, and PROLOG, and their implementations of these syntactic and semantic elements. Students learn the Scheme programming language and how to use it to write interpreters for other programming paradigms (object-oriented, logic-oriented, and type-inferencing).
Computer Science 313 (3)—Theory of Computation
Prerequisites: Computer Science 112, Mathematics 121, and either Mathematics 102 or 122.
A study of the principles of computer science embodied in formal languages, automata, computability, and computational complexity. Topics include context-free grammars, Turing machines, and the halting problem.
Computer Science 315 (3)—Artificial Intelligence
Prerequisite: Computer Science 209.
Basic concepts of heuristic search, game playing, natural language processing, and intelligent systems, with a focus on writing programs in these areas. Course combines a discussion of philosophical issues with hands-on problem solving.
Computer Science 317 (3)—Database Management
Prerequisite: Computer Science 209.
Database design with the entity-relationship model, the relational database model including normal forms and functional dependencies, SQL database query language, serverside scripting for Web access to databases. A major project to design and implement a database using a commercial package.
Computer Science 320 (3)—Parallel Computing
Prerequisites: Computer Science 209 and 210.
A survey of parallel computing including hardware, parallel algorithms, and parallel programming. The programming projects emphasize the message-passing paradigm.
Computer Science 321 (3)—Computer Networks
Prerequisite: Computer Science 209.
Intended as a first course in communication networks for upper-level students. Covers concepts and protocols underlying modern computer networks. Topics include network architecture and layering, routing and switching, the TCP/IP protocol and network applications. Theory and programming.
Computer Science 330 (3)—Operating Systems
Prerequisites: Computer Science 209 and 210.
Procedure initiation, environment construction, reentrancy, kernel functions, resource management, input/output, file structures, security, process control, semaphores and deadlock, and recovery procedures. The laboratory includes the opportunity to examine and modify the internals of an operating system.
Computer Science 332 (3)—Compiler Construction
Prerequisites: Computer Science 210, 211, 312, and 313.
Lexical analysis, parsing, context dependence, translation techniques, optimization. Students are expected to produce a compiler for a suitably restricted language.
CSCI 335 (4) —Software Engineering through Web Applications
Prerequisite: CSCI 209 or permission of instructor.
In this course, students learn to develop high-performance software for Web applications using advanced software engineering techniques. The concepts of client-server computing, theories of usable graphical user interfaces, models for Web-based information retrieval and processing, and iterative development are covered.
Computer Science 340 (3)—Interactive Computer Graphics
Prerequisite: Computer Science 209.
In this course we develop, step by step, a reasonably complete 3D computer-graphics system with the ability to generate a photo-realistic image given a specification of shapes, poses, lighting, textures, and material properties, and camera parameters and perspective. Final projects consist of using your system to produce your own computer-animated short or interactive graphics application. The necessary mathematical background is developed during the course.
Computer Science 341 (3)—Digital Image Processing
Prerequisite: Computer Science 209.
A survey of topics in the acquisition, processing and analysis of digital images, with much of the necessary mathematical background developed in the course. Topics in image processing include image enhancement and restoration, compression, and registration/alignment. Topics in image analysis include classification, segmentation, and more generally statistical pattern recognition. Throughout the course, human vision and perception motivate the techniques discussed.
Computer Science 395 (1), 396 (2), 397 (3)—Seminar
Prerequisite: Permission of the instructor.
Readings and conferences for a student or students on topics agreed upon with the directing staff. May be repeated for degree credit with permission and if the topics are different. A maximum of six credits may be used toward the major requirements.
Computer Science 401 (1), 402 (2), 403 (3)— Directed Individual Study
Prerequisite: Permission of the department.
Individual conferences. May be repeated for degree credit with permission and if the topics are different.
Computer Science 493 (3-3)—Honors Thesis
Prerequisites: Senior standing and honors candidacy.