Course Offerings

Computer Science (2012 - 2014)

Nonmajor Courses

Computers in Society
CSCI-UA 1 No prior computing experience is assumed. Note: This course is not intended for computer science majors. Offered in the spring. 4 points.
Addresses the impact of the digital computer on individuals, organizations, and modern society as a whole, and the social, political, and ethical issues involved in the computer industry. Topics change to reflect changes in technology and current events. Guest lecturers from various fields are invited to speak in class.

Introduction to Computer Programming
CSCI-UA 2 Prerequisite: three years of high school mathematics or equivalent. No prior computing experience is assumed. Students with any programming experience should consult with the computer science department before registering. Students who have taken or are taking Introduction to Computer Science (CSCI-UA 101) will not receive credit for this course. Note: This course is not intended for computer science majors, although it is a prerequisite for students with no previous programming experience who want to continue into CSCI-UA 101. Offered every semester. 4 points.
A gentle introduction to the fundamentals of computer programming, which is the foundation of computer science. Students design, write, and debug computer programs. No knowledge of programming is assumed.

Introduction to Web Design & Computer Principles
CSCI-UA 4 Prerequisite: three years of high school mathematics or equivalent. No prior computing experience is assumed. Students with computing experience should consult with the computer science department before registering. Offered every semester. 4 points.
Introduces students to both the practice of web design and the basic principles of computer science. The practice component of the course covers not only web design but also current graphics and software tools. The principles section includes an overview of hardware and software, the history of computers, and a discussion of the impact of computers and the In ternet.

Database Design and Web Implementation
CSCI-UA 60 Prerequisites: Introduction to Computer Programming (CSCI-UA 2) and Introduction to Web Design & Computer Principles (CSCI-UA 4). Offered in the spring. 4 points.
Introduces principles and applications of database design. Students learn to use a relational database system, learn web implementations of database designs, and write programs in SQL. Students explore principles of database design and apply those principles to computer systems in general and in their respective fields of interest.

Web Development and Programming
CSCI-UA 61 Prerequisites: Introduction to Computer Programming (CSCI-UA 2) and Introduction to Web Design & Computer Principles (CSCI-UA 4). Offered in the fall and spring. 4 points.
Provides a practical approach to web technologies and programming. Students build interactive, secure, and powerful web programs. Covers client and server side technologies for the web.

Topics of General Computing Interest
CSCI-UA 380 Topics determine prerequisites. 4 points.
Detailed descriptions available when topics are announced. Typical offerings include Computing in the Humanities and Arts and Introduction to Flash Programming. Note: This course cannot be used for credit toward the major sequence.


Major Courses

Introduction to Computer Science
CSCI-UA 101 Prerequisite: Introduction to Computer Programming (CSCI-UA 2) or departmental permission assessed by placement exam. Offered in the fall and spring. 4 points.
How to design algorithms to solve problems and how to translate these algorithms into working computer programs. Experience is acquired through programming projects in a high-level programming language. Intended primarily as a first course for computer science majors but also suitable for students of other scientific disciplines. Programming assignments.

Data Structures
CSCI-UA 102 Prerequisite: Introduction to Computer Science (CSCI-UA 101). Offered in the fall and spring. 4 points.
Use and design of data structures, which organize information in computer memory. Stacks, queues, linked lists, binary trees: how to implement them in a high-level language, how to analyze their effect on algorithm efficiency, and how to modify them. Programming assignments.

Computer Systems Organization
CSCI-UA 201 Prerequisite: Data Structures (CSCI-UA 102). Offered in the fall and spring. 4 points.
Covers the internal structure of computers, machine (assembly) language programming, and the use of pointers in high-level languages. Topics include the logical design of computers, computer architecture, the internal representation of data, instruction sets, and addressing logic, as well as pointers, structures, and other features of high-level languages that relate to assembly language. Programming assignments are in both assembly language and other languages.

Operating Systems
CSCI-UA 202 Prerequisite: Computer Systems Organization (CSCI-UA 201). Offered in the fall and spring. 4 points.
Covers the principles and design of operating systems. Topics include process scheduling and synchronization, deadlocks, memory management (including virtual memory), input/output, and file systems. Programming assignments.

Basic Algorithms
CSCI-UA 310 Prerequisites: Data Structures (CSCI-UA 102) and Discrete Mathematics (MATH-UA 120). Offered in the fall and spring. 4 points.
Introduction to the study of algorithms. Presents two main themes: designing appropriate data structures and analyzing the efficiency of the algorithms that use them. Algorithms studied include sorting, searching, graph algorithms, and maintaining dynamic data structures. Homework assignments, not necessarily involving programming.

Numerical Computing
CSCI-UA 421 Prerequisites: Computer Systems Organization (CSCI-UA 201) and Linear Algebra (MATH-UA 140). Offered in the spring. 4 points.
Introduction to numerical computation: the need for floating-point arithmetic, the IEEE floating-point standard. Importance of numerical computing in a wide variety of scientific applications. Fundamental types of numerical algorithms: direct methods (e.g., for systems of linear equations), iterative methods (e.g., for a nonlinear equation), and discretization methods (e.g., for a differential equation). Numerical errors: How can you tell if you can trust your answers? The use of graphics and software packages such as Matlab. Programming assignments.

Computer Architecture
CSCI-UA 436 Prerequisites: Computer Systems Organization (CSCI-UA 201) and Discrete Mathematics (MATH-UA 120). Offered in the fall. 4 points.
A first course in the structure and design of computer systems. Basic logic modules and arithmetic circuits. Control unit design of computers and structure of a simple processor; speed-up techniques. Storage technologies and structure of memory hierarchies; error detection and correction. Input/output structures, busses, programmed data transfer, interrupts, DMA, and microprocessors. Discussion of various computer architectures; stack, pipeline, and parallel machines; and multiple functional units.

Introduction to Database Systems
CSCI-UA 444 Prerequisites: Computer Systems Organization (CSCI-UA 201) and Basic Algorithms (CSCI-UA 310). Offered in the spring. 4 points.
Modeling the information structure of an enterprise. Logical design and relational database implementation using a tool such as Visio. Relational algebra and SQL as implemented in representative systems, such as Microsoft Access and Oracle. Normalization and denormalization. Introduction to online analytical processing, physical design, query processing and optimization, recovery and concurrency.

Theory of Computation
CSCI-UA 453 Prerequisite: Basic Algorithms (CSCI-UA 310). Offered in the fall. 4 points.
Takes a mathematical approach to studying topics in computer science, such as regular languages and some of their representations (deterministic finite automata, nondeterministic finite automata, regular expressions)
and proof of nonregularity. Context-free languages and pushdown automata; proofs that languages are not context-free. Elements of computability theory. Brief introduction to NP-completeness.

UNIX Tools
CSCI-UA 468 Prerequisite: Computer Systems Organization (CSCI-UA 201). 4 points.
Examines UNIX as an operating system and covers the sophisticated UNIX programming tools available to users and programmers. Shell and Perl scripting are studied in detail. Other topics include networking, system administration, security, and UNIX internals.

Object-Oriented Programming
CSCI-UA 470 Prerequisite: Computer Systems Organization (CSCI-UA 201). Offered in the fall. 4 points.
Object-oriented programming has emerged as a significant software development methodology. This course introduces the important concepts of object-oriented design and languages, including code reuse, data abstraction, inheritance, and dynamic overloading. Covers in depth those features of Java and C++ that support object-oriented programming and gives an overview of other object-oriented languages of interest. Significant programming assignments stressing object-oriented design.

Artificial Intelligence
CSCI-UA 472 Prerequisites: Computer Systems Organization (CSCI-UA 201) and Basic Algorithms (CSCI-UA 310). 4 points.
Many cognitive tasks that people can do easily and almost unconsciously have proven extremely difficult to program on a computer. Artificial intelligence tackles the problem of developing computer systems that can carry out these tasks. Focus is on three central areas in AI: representation and reasoning, machine learning, and natural language processing.

Software Engineering
CSCI-UA 474 Prerequisites: Operating Systems (CSCI-UA 202) and Object-Oriented Programming (CSCI-UA 470), or permission of the department. Offered in the spring. 4 points.
An intense hands-on study of practical techniques and methods of software engineering. Topics include software processes and management, requirements engineering, software evolution and configuration management, advanced object-oriented design, design patterns, code construction techniques, verification and validation techniques, and code optimization and tuning. All topics are integrated and applied during the semester-long group project. The aim of the group project is to prepare students for dynamics in a real workplace. Members of the group meet on a regular basis to discuss the project and to assign individual tasks. Students are judged primarily on the final project.

Applied Internet Technology
CSCI-UA 476 Prerequisite: Computer Systems Organization (CSCI-UA 201). 4 points.
Covers applied Internet technologies and programming for the web. Students build secure, interactive, and powerful Internet/web applications. Discusses important topics such as Java Servlets, JavaServer Pages, databases and JDBC, XML, web services, and related standards, including SOAP, WSDL, and UDDI.

Introduction to Cryptography
CSCI-UA 478 Identical to MATH-UA 243. Prerequisite: Basic Algorithms (CSCI-UA 310). 4 points.
Provides an introduction to the principles and practice of cryptography and its application to network security. Topics include symmetric-key encryption (block ciphers, modes of operations, AES), message authentication (pseudorandom functions, CBC-MAC), public-key encryption (RSA, ElGamal), digital signatures (RSA, Fiat-Shamir), authentication applications (identification, zero-knowledge), and others, time permitting.

Special Topics in Computer Science
CSCI-UA 480 Topics determine prerequisites. Note: This course may be taken for credit in the major sequence more than once as long as the topics covered are different. Offered in the fall and spring. 4 points.
Covers topics in computer science at an advanced level. Detailed course descriptions are available when topics are announced for a semester. Typical offerings include, but are not limited to, Bioinformatics, Building Robots, Computer Graphics, Machine Learning, Network Programming, Computer Vision, and Multimedia for Majors.

Undergraduate Research
CSCI-UA 520, 521 Prerequisite: permission of the department. 4 points per term.
The student performs computer science research supervised by a faculty member actively engaged in research, possibly leading to results publishable in the computer science literature. A substantial commitment to this work is expected of the student. The research project may be one or two semesters, to be determined in consultation with the faculty supervisor. Students taking this course for honors credit are required to write an honors thesis. All other students need to submit a write-up of the research results at the conclusion of the project.


Independent Study

Independent Study
CSCI-UA 997, 998 Prerequisite: permission of the department. Does not satisfy major elective requirement. 2 to 4 points per term.
Students majoring in the department are permitted to work on an individual basis under the supervision of a full-time faculty member in the department if they have maintained an overall GPA of 3.0 and a GPA of 3.5 in computer science and have a study proposal that is approved by the director of undergraduate studies. Students are expected to spend about three to six hours a week on their project.


Graduate Courses Open to Undergraduates

A limited number of graduate courses are open to undergraduate students who have maintained a GPA of 3.5 or better in computer science, subject to permission of the director of undergraduate studies. These may be reserved for graduate credit if the student is pursuing the accelerated master's program or substituted for undergraduate elective credit. Consult the department's website.