Computer Science - Major - Minor - Courses - Academic Program Skip Navigation

Computer Science

(For 2013–2014 academic year)

Professors
Mulry (Chair), Nevison
Associate Professors A.D. Nakhimovsky, Ramachandran, Sommers
Assistant Professor Hay
Laboratory Instructor Cucura

Computer science is the study of algorithmic processes and the machines that carry out these processes. Computer science is a mix of theory, application, design, and experiment. Theory addresses questions about the nature and limits of computation, the abstract properties of machine models, the complexity of algorithms, and the formalization of programming languages. Applications include machine and systems design, the design and implementation of programming languages, artificial intelligence, networks, graphics, and simulation. An important aspect of computer science is the development of methods for the systematic and accurate design of large systems in hardware and software. Both applications and theoretical issues must be tested experimentally.

The computer science major prepares students either for graduate study in computer science or for computer-intensive professional careers. The computer science minor and the major in computer science/mathematics prepare students for professions in which computer science overlaps significantly with another discipline. COSC 100, 121, 122, 123, 130, and 150 provide opportunities for non-majors to learn about computer applications in the liberal arts and to survey, at an introductory level, some topics in computer science.

Major Program in Computer Science

The prerequisite for beginning a major in computer science is COSC 101, Introduction to Computing, which should be taken in the first year. Students may bypass COSC 101 by obtaining Advanced Placement credit or demonstrating equivalent experience.

The following computer science courses are required for the major: 102, 201, 290, 301, 302, 304, and two electives from the 400-level courses. In addition, the cognate course MATH 111 is required. A minimum GPA of 2.00 in the courses chosen to meet the major requirements is necessary to satisfy the major.

Minor Program in Computer Science

The minor program consists of COSC 102, 201, 290, and two additional 300- or 400-level courses. A minimum GPA of 2.00 in the courses chosen to meet the minor requirements is necessary to satisfy the minor.

Honors and High Honors in Computer Science

Students who graduate with a 3.20 overall average and a 3.40 average in the major program will receive department honors. Each fall the department may, at its discretion, invite one or more seniors who meet the honors requirements to submit a proposal for senior thesis research. Students whose proposals are accepted and who complete satisfactory theses will be awarded high honors.

Awards

See Honors and Awards: Computer Science in Chapter VI.

Advanced Placement and Transfer Credit

The department grants advanced placement and credit to students who perform satisfactorily on the College Entrance Examination Board Advanced Placement (AP) exam for computer science as follows: students receiving scores of 4 or 5 on the A exam receive credit for COSC 101. Other students with sufficient secondary school background in computer science may receive advanced placement without credit after consultation with the department chair. Transfer credit for a computer science course taken at another college or university will be granted only by the approval of the department.

Major Program in Computer Science/Mathematics

Preparation for this major consists of MATH 111 and 112 and COSC 101 and 102. The following courses are required for the major: MATH 113, 250; COSC 201, 290, and 304; either MATH 320 or 323, and one additional mathematics course at the 300 level; either COSC 302 or 450, and one additional computer science course at the 300 or 400 level.

Honors and High Honors in Computer Science and Mathematics

A student who graduates with an average of 3.4 in courses required for the major will receive honors. A student with an average of 3.7 in the major courses may submit a senior research thesis.

A committee of three members of the faculty, including at least one from each department, will evaluate the thesis. Students completing distinguished theses will receive high honors.

Study Groups

Colgate sponsors two study-abroad programs in the natural sciences and mathematics, one at the University of Wales in Cardiff and the other at the University of Wollongovng in Australia. See “Off-Campus Study Group Programs” in Chapter VI.

Course Offerings

COSC courses count toward the Natural Sciences and Mathematics area of inquiry requirement, unless otherwise noted.

All credit-bearing laboratories carry 0.25 course credits unless noted otherwise. Please see the “Academic Credit” section in Chapter VI for additional information and restrictions.

100/100L  Computers in the Arts and Sciences
A.D. Nakhimovsky
This course introduces students to the inner workings of computers, the Internet, the Web, the Cloud, and Web applications such as Google search, Google maps, e-commerce, and social networks. The course also teaches skills: create a Web page; add a Google map to it; build a Website; add interactive features by writing a few short pieces of code; analyze a small social network. Apart from Web-related material, students discuss the notions of data modeling and analysis, and complete lab work building simple but useful financial models; in the process, the course covers the basics of financial literacy. There are several lab assignments in the course: a short paper on the issues of privacy and security and two group projects, one to build a Website on the subject of your choice, the other to analyze a social network. The required credit-bearing laboratory COSC 100L must be taken concurrently with COSC 100. No computer experience is required. The course does not count toward the major. This course is crosslisted as CORE 126S.

101/101L  Introduction to Computing I
Staff
This course is an introduction to computer science through the study of programming utilizing the programming language Python. Topics include program control, data structures, arrays, classes and objects, recursion, inheritance and polymorphism, data abstraction, and modular design. A weekly two-hour laboratory provides the opportunity to develop programming and design skills. The required credit-bearing laboratory COSC 101L must be taken concurrently with COSC 101. This course, or its equivalent, is a prerequisite to the computer science major. It is recommended also for students in other disciplines who desire a rigorous introduction to computers and programming.

102/102L  Introduction to Computing II
Staff
This course is a continuation of COSC 101 and is the first course in the major. It develops advanced programming topics such as abstract data types and algorithms and their analysis. Abstract data structures introduced include stacks, queues, lists, and binary trees; algorithms include search and sort procedures. The concepts of information hiding, data abstraction, and modular design are emphasized. Object-oriented programming is used throughout the course. Laboratories include the design and implementation of programs that illustrate the topics of the course. There are three lectures and a two-hour laboratory each week. The required credit-bearing laboratory COSC 102L must be taken concurrently with COSC 102. Prerequisite: COSC 101.

121  Introduction to Biology-Inspired Algorithms
Staff
This course is an introduction to computer methods, cellular automata, genetic algorithms, and neural networks, inspired by biological processes. Cellular automata are used to simulate population growth as well as other physical phenomena such as fluid flow. Genetic algorithms are used to find optimal solutions, for example in portfolio maximization, using Darwinism. Neural networks are used in learned pattern matching, such as in handwriting recognition and portfolio analysis. A number of variations of these methods are covered. Students use existing tools to explore models simulated or solved using these methods. No programming experience is necessary; however, students are expected to be proficient in using a word processor and web browser. The course does not count toward the major.

122/122L  Introduction to Computer Graphics and Animation
C. Nevison
This course provides an introduction to the fundamentals of computer graphics, animation, and algorithms that are the basis for image processing. The course also introduces a programming system that provides an object-oriented approach with tools for animations of three-dimensional graphics. The course includes a weekly two-hour laboratory where students gain practice in testing and implementing the concepts introduced in class. No prior programming experience is required. The required credit-bearing laboratory COSC 122L must be taken concurrently with COSC 122. The course does not count toward the major.

130  Measuring the Internet
J. Sommers
This course introduces students to the principles and algorithms used in the everyday operation of the internet, as well as concepts and practical problems in network and system security. Students also examine the ethical, social, and political aspects of the technical topics raised in class. To make concepts concrete, students engage in collecting and analyzing data measured from internet paths and systems, and examine how these concepts relate to contemporary experience. No prior programming experience is necessary. This course does not count toward the major. Not open to students who completed Core Scientific Perspectives, The Underside of the Internet.

150  Contemporary Issues in Computer Science
P. Mulry, V. Ramachandran
Computing, broadly interpreted, has radically altered academic, political, social, artistic, environmental, and religious institutions. This course provides an introduction to contemporary concepts, models, and issues in computer science. Topics are chosen from the nature of computation, algorithms and their applications, data centers and cloud computing, software engineering, logic and system design, programming languages, security, big data and data mining, mobile computing, and others. These topics relate to contemporary experience by examining issues such as privacy, software reliability, information access, politics and social networks, e-commerce, electronic piracy, globalization, hacking, ownership of bits, copyright, and patent infringement. Class format includes lecture, class discussion, contributions to a class blog, student projects, and presentations. The course does not count toward the major. This course is crosslisted as CORE 142S.

201/201L  Computer Organization
C. Nevison
This course is a study of the fundamental concepts of computer architecture. Topics include the representation of information, components of the computer and how they interact, microarchitecture and microprogramming, conventional machine and assembly language, and advanced architectures. Several types of computer design are reviewed; a RISC architecture is the subject of detailed study. The laboratory is used to examine how different components of a computer’s architecture can affect its performance. Three lectures and a two-hour laboratory each week. The required credit-bearing laboratory COSC 201L must be taken concurrently with COSC 201. Prerequisite: COSC 101. Offered in the fall only.

202/202L  Introduction to Symbolic Programming
A.D. Nakhimovsky
This course teaches symbolic computation in a functional programming environment, while providing a general introduction to programming languages and computer science. The emphasis is on alternative modes of algorithmic expression, program design, data abstraction, and skillful use of recursion. Topics include recursive and higher-order procedures, functional programming in contrast with imperative programming, performance analysis of algorithms, data abstraction and abstract data types (including infinite data types), data-directed and object-oriented programming, constraint propagation, and logic programming. Laboratory assignments build simple versions of well-known AI and simulation programs. There are three lectures and a two-hour lab each week. The required credit-bearing laboratory COSC 202L must be taken concurrently with COSC 202. Offered in the spring only.

290/290L  Discrete Structures
P. Mulry
This course introduces concepts and methods in discrete structures with various applications to computer science. Topics include sets, logic, relations, functions, induction, and recursion; order relations and structures such as posets, lattices, and Boolean algebras; algebraic structures such as semigroups, monoids, products, and quotients; trees, languages, and finite-state machines. Methods are tested and implemented in a weekly laboratory component. The required credit-bearing laboratory COSC 290L must be taken concurrently with COSC 290. Prerequisite: COSC 102. Offered in the spring only.

301/301L  Operating Systems
J. Sommers
This course introduces students to the study of operating systems. Topics include the hardware/software interface, scheduling, resource allocation, memory and storage management, the scope and nature of services provided to applications, and system performance evaluation. The required credit-bearing laboratory COSC 301L must be taken concurrently with COSC 301. Previous completion of COSC 201 is strongly recommended. (Formerly COSC 440/440L.)

302/302L  Analysis of Algorithms
V. Ramachandran
This course provides a conceptual framework within which both theoretical and concrete analyses of computer algorithms may be developed. Topics to be covered include: number-theoretic algorithms; graph algorithms; problem-solving techniques including divide-and-conquer, greedy algorithms, and dynamic programming; linear programming; and intractability. The required credit-bearing laboratory COSC 302L must be taken concurrently with COSC 302. Pre– or co–requisite: COSC 290 or permission of instructor. (Formerly COSC 460/460L.)

304/304L  Theory of Computing
P. Mulry
This course introduces the theory of computing and includes such topics as automata and their relationship to formal grammars, Turing machines and other models of computing, undecidable problems, and computational complexity. The required credit-bearing laboratory COSC 304L must be taken concurrently with COSC 304. Previous completion of COSC 290 is strongly recommended. Offered in the fall only.

420/420L  Programming Languages
P. Mulry
This course surveys the salient features of diverse programming languages and examines the foundations and principles of language design. Topics include formal description of language syntax, ambiguity, storage allocation, parameter linkage, and current issues in language design. The required credit-bearing laboratory COSC 420L must be taken concurrently with COSC 420. Prerequisites: COSC 304 or permission of instructor.

425/425L  Compiler Design
V. Ramachandran
An exploration of the principles by which high-level programs and their data structures are analyzed and mapped into corresponding low-level implementations and representations. Topics include regular expressions and symbol tables for lexical analysis, attribute grammars and tree manipulations for syntactic/semantic analysis, continuations, unification-based inference of data types, and graph-theoretic algorithms for program optimization. The required credit-bearing laboratory COSC 425L must be taken concurrently with COSC 425. Prerequisites: COSC 201 and 304, or permission of instructor.

430/430L  Artificial Intelligence
A.D. Nakhimovsky
This seminar investigates how computers can be made to behave “intelligently.” Particular topics include the programming language LISP, natural language processing, computer vision, search techniques, AI databases, story comprehension, medical diagnosis, and problem-solving. The emphasis is on writing small versions of classic AI programs. The required credit-bearing laboratory COSC 430L must be taken concurrently with COSC 430. Prerequisite: COSC 302 or permission of instructor.

435/435L  Computer Graphics
Staff
This seminar is an introduction to the concepts and techniques of interactive computer graphics. A broad spectrum of subjects including computational geometry, picture generation and display, illumination models, ray tracing, and the design of user interfaces are discussed. A special independent project based on individual study and normally involving a substantial working program is expected of each student. The required credit-bearing laboratory COSC 435L must be taken concurrently with COSC 435. Prerequisite: COSC 302 or permission of instructor.

440/440L  Principles of Design for Large Systems
C. Nevison
This course surveys the tools and techniques for the design and implementation of large systems on computers, both local and distributed. The organizational and communications problems associated with large system design are discussed, as well as methods for overcoming these problems. This course includes a laboratory component in which students work in teams to design part or all of a large system. The required credit-bearing laboratory COSC 440L must be taken concurrently with COSC 440. Prerequisites: COSC 301 or COSC 302 or permission of instructor. (Formerly COSC 303/303L.)

445/445L  Parallel and Distributed Computing
C. Nevison
This course surveys the field of parallel and distributed computing, covering hardware design and architecture, interconnection networks, and parallel algorithms. In addition to the broad survey, students concentrate on the implementation of message-passing parallel computers and algorithms. This aspect of the course includes laboratory work using the parallel computer laboratory. The required credit-bearing laboratory COSC 445L must be taken concurrently with COSC 445. Prerequisite: COSC 302 or permission of instructor

450/450L  Advanced Theory
P. Mulry
This course addresses topics in the theory of computation and the semantics of programming languages. Topics include axiomatic, denotational, and operational semantics, type theory, and categorical models of computation. Students work collectively, presenting and implementing various issues raised in the course. The required credit-bearing laboratory COSC 450L must be taken concurrently with COSC 450. Prerequisite: COSC 304 or permission of instructor.

465/465L  Computer Networks
J. Sommers
This course introduces the fundamental concepts in computer networks. Topics include layered network architecture, error detection and correction, medium access control, routing, congestion control, and internetworking. If time permits, the following advanced topics may also be included: network security, multimedia, multicast, and wireless networking. Students complete weekly laboratory assignments in which they build network applications and implement increasingly complex network protocols in order to gain a deeper understanding of topics covered in class. The required credit-bearing laboratory COSC 465L must be taken concurrently with COSC 465. Prerequisites: COSC 301 or permission of instructor. Some knowledge of differential calculus and elementary probability and statistics is helpful.

480/480L  Topics in Computer Science
Staff
A seminar offered occasionally as an alternate to others in the department. Topics vary depending upon needs of students and interests of the instructor. Students interested in the specific content of this course as offered in a particular term should consult the instructor. The required credit-bearing laboratory COSC 480L must be taken concurrently with COSC 480. This seminar is counted toward completion of the major requirement. Prerequisites:  completion of two 300-level COSC courses or permission of instructor.

491  Independent Study
Staff
An independent study of a theoretical or experimental nature chosen from the computer science or applications area. Open to majors by invitation of the department