(For 2016–2017 academic year)
Professors Mulry, Nevison
Associate Professors Ramachandran (Chair), Sommers
Assistant Professors Fourquet, Gember-Jacobson, Hay, Smith
Visiting Assistant Professor Strash
Instructor Gember-Jacobson, M. Smith
Laboratory Instructors Cucura, Lyboult
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, 122, 130, 140, 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.
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.
International Exam Transfer Credit
Transfer credit and/or placement appropriate to academic development of a student may be granted to incoming first year students who have achieved a score on an international exam (e.g., A-Levels, International Baccalaureate) that indicates a level of competence equivalent to the completion of a specific course in the department. Requests should be directed to the department chair. Any such credit may not be used to fulfill the university areas of inquiry requirement, but may count towards the major.
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.
Colgate sponsors two study-abroad programs in the natural sciences and mathematics, one at Cardiff University in Wales and the other at the University of Wollongong in Australia. See “Off-Campus Study” in Chapter VI.
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
This course introduces students to the inner workings of computers, the Internet, the Web. Students learn to create a well-designed web page; build a website; perform regression analysis; analyze a small social network; etc. Students spend two weeks on the notion of data modeling, build simple but useful financial models, and in the process learn the basics of financial literacy. There are several lab assignments and two group projects, one to build a website on the subject of 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
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
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 or permission of instructor.
122/122L Introduction to Computer Graphics and Animation
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
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.
140/140L Developing Web Applications
The goal of this course is to introduce students to how modern web applications are designed and created. Through lecture, discussion, and programming assignments, student learn programming constructs in Python, including variables and types, control flow, objects and classes; web front-end technologies such as HTML and CSS; and the Django web application framework. In addition to core software engineering and design topics, this course considers issues related to accessibility, sensitivity to culture and locale, and security and privacy. A weekly two-hour laboratory provides the opportunity to develop practical programming and design skills. The required credit-bearing laboratory COSC 140L must be taken concurrently with COSC 410. No prior programming experience is required. This course does not count toward the major.
150 Contemporary Issues in Computer Science
P. Mulry, V. Ramachandran
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 and is crosslisted as CORE 142S.
201/201L Computer Organization
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.
290/290L Discrete Structures
This course introduces discrete computational structures, methods, and concepts utilized throughout computer science. Topics include types, relations, functions, equivalence and congruence relations, recursion, order relations, partially ordered sets, lattices, Boolean algebras, logic, semi-groups, monoids, morphisms, languages, graphs, trees, and finite state machines. Concrete and abstract data types, circuits, syntactic and semantic program structures provide standard motivating examples and applications. The required credit-bearing laboratory COSC 290L must be taken concurrently with COSC 290. Prerequisite: COSC 102.
301/301L Operating Systems
A. Gember-Jacobson, 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.
302/302L Analysis of Algorithms
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. Prerequisite: COSC 102. Previous completion of COSC 290 is strongly recommended.
304/304L Theory of Computing
This course introduces the different models of computation and focuses attention on the relative strength of each model and the relationship of one model to another. Concepts introduced include type theory, finite automata, regular expressions and languages, context-free grammars, push-down automata, Turing machines and their schema, diagonalization arguments, Church’s Thesis, the Halting problem, 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
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.
435/435L Computer Graphics
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
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.
445/445L Parallel and Distributed Computing
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 Theory Seminar
This course introduces in depth a current topic of interest in computer science theory. Past seminars have focuses on a wide variety of topics in the theory of computation and the semantics of programming languages. These have included denotational semantics, type theory, category theory, operational semantics, and advnaced functional programming. During the second half of the term, students work in teams on various projects related to the seminar topic and present their findings at the end of the term. The required credit-bearing laboratory COSC 450L must be taken concurrently with COSC 450. Prerequisite: COSC 304 or permission of instructor.
460/460L Database Management Systems
This course introduces the principles underlying modern database systems. These principles guide how information is represented as structured data, how computations on the data are expressed in query languages, and how systems are designed to enable efficient computation on large data sets. Topics include database design, data models, query languages, query processing and optimization, data storage and access, transaction management, and advanced topics as time permits. The required credit-bearing laboratory COSC 460L must be taken concurrently with COSC 460. Prerequisites: COSC 290 or permission of the instructor; additionally, COSC 302 is recommended.
465/465L Computer Networks
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
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
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.