Computer Science Department

Colgate University

McGregory Hall, 3rd Floor

13 Oak Drive

Hamilton, NY 13346

(tel) 315.228.7719

(fax) 315.228.7009

department@cs.colgate.edu

COSC100: Computers in the Arts and Sciences

This course introduces students to the fundamentals of computers and information technology. It aims to provide the understanding needed to effectively utilize technology and assess its impact on our lives and careers. The course includes an overview of how computer systems and networks work, including the principles and methods behind the operation of the Internet and World Wide Web. Students learn to compose web pages using XHTML. Other computer applications, such as spreadsheets and databases, are also studied. A gentle introduction to algorithmic and programming concepts using JavaScript is included. In the weekly two-hour laboratory, students acquire experience in writing websites, using computer applications, and programming.

Prerequisites: None

COSC101: Intro to Computing I

Applications of computers and software are everywhere. Inside your mobile phone, your car, and quite possibly your toaster software programs enable and mediate instant communication, global financial networks, a smoothly running engine, an interactive graphical display, and a perfectly browned slice of sourdough. Writing software to instruct computers to do even simple tasks can be challenging, fun, and creative. In COSC 101/101L students are introduced to program design, algorithms, and problem solving using the programming language Python. Through lecture, discussion, in-class activities, and programming assignments basic programming concepts and constructs (variables and types, control flow, conditionals, iteration), elementary data structures, input and output, graphics, objects and classes, recursion, and testing and debugging will be covered. A weekly two-hour laboratory provides the opportunity to develop practical 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 concentration. The course has no prerequisites and is recommended for students in other disciplines desiring an introduction to programming, algorithms, and problem solving.

Prerequisites:
None

Staff:
Valerie Cucura (vcucura@-xyznospamcolgate.edu),
Elodie Fourquet (efourquet@-xyznospamcolgate.edu),
Michael Hay (mhay@-xyznospamcolgate.edu),
Matt Lyboult (mlyboult@-xyznospamcolgate.edu),
Vijay Ramachandran (vramachandran@-xyznospamcolgate.edu),
Joel Sommers (jsommers@-xyznospamcolgate.edu),
John Stratton (jstratton@-xyznospamcolgate.edu)

COSC102: Intro to Computing II

This course is a continuation of COSC 101 and is the first course in the concentration. It develops advanced programming topics such as abstract datatypes, algorithms and their analysis, recursion, inheritance, and polymorphism. 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. Three lectures and a two-hour laboratory each week. The required credit-bearing laboratory COSC 102L must be taken concurrently with COSC 102.

Prerequisites:
COSC101 (Intro to Computing I)

Staff:
Elodie Fourquet (efourquet@-xyznospamcolgate.edu)

COSC122: Computer Graphics and Animation

Computer graphics and animations are all around us: on television, in commercials, in movies, in video games. How are these done? This course introduces the fundamentals of computer graphics and animation and the programming concepts needed to develop them. The course includes hands-on work with a graphics and animation system. No programming experience is needed. Not open to students who have taken COSC 102. The course does not count toward the concentration.

Prerequisites:
None

Staff:
Chris Nevison (chris@-xyznospamcs.colgate.edu)

COSC150: Contemporary Issues in Computer Science

Computing, broadly interpreted, has radically altered our academic, political, social, artistic, environmental and religious institutions. This course provides an introduction to contemporary concepts, models, and issues in computer science. Topics will be 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 will 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.

Prerequisites:
None

Staff:
Philip Mulry (pmulry@-xyznospamcolgate.edu)

COSC201: Computer Organization and Architecture

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.

Prerequisites:
COSC101 (Intro to Computing I)

Staff:
Chris Nevison (chris@-xyznospamcs.colgate.edu),
John Stratton (jstratton@-xyznospamcolgate.edu)

COSC290: Discrete Structures

This course introduces discrete computational structures, methods and concepts utilized throughout computer science. Topics include sets, relations, functions, equivalence and congruence relations, induction and 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. In the required credit-bearing weekly two-hour laboratory, students acquire concrete experience experimenting with and implementing the concepts and structures introduced in the lecture.

Prerequisites:
COSC102 (Intro to Computing II),
or
consent of the instructor

Staff:
Philip Mulry (pmulry@-xyznospamcolgate.edu)

COSC301: Operating Systems

A brief historical review of computer operating systems serves as an introduction to a detailed consideration of the machine and language features required to support a complex time-sharing operating system. The ideas and techniques of interrupts, concurrent processing - including deadlock, paging, scheduling, reentrant procedures, and various memory management and protection schemes are studied. In the weekly two-hour laboratory, students will analyze some of the methods discussed in class and acquire experience in systems programming.

The prerequisite course (COSC 201: Computer Organization) is recommended but not required for registration. However, students are strongly encouraged to take COSC 201 before or concurrently with COSC 301.

Prerequisites:
COSC201 (Computer Organization and Architecture)

Staff:
Joel Sommers (jsommers@-xyznospamcolgate.edu)

COSC302: 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 the lecture.

COSC 290: Discrete Structures is recommended but not required for registration. However, students are strongly encouraged to take COSC 290 before or concurrently with COSC 302.

Prerequisites:
COSC102 (Intro to Computing II)

Staff:
John Stratton (jstratton@-xyznospamcolgate.edu)

COSC304: Theory of Computing

This course is an introduction to the modern theory of computing. The course introduces students to different models of computation and focuses on the relative strength of each model, and the relationship of one model to another. Concepts introduced include sets and relations, data types, finite automata, regular expressions and languages, context-free grammars, push-down automata, Turing machines and Turing machine schema, diagonalization arguments, Church's Thesis, the Halting Problem, and computational complexity. In the required credit-bearing weekly two-hour laboratory, students acquire concrete experience experimenting with and implementing the concepts and computational strategies introduced in the lecture.

Prerequisites:
COSC290 (Discrete Structures)

Staff:
Philip Mulry (pmulry@-xyznospamcolgate.edu)

COSC420: 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: COSC304 (Theory of Computing)

COSC425: Compiler Design

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: COSC304 (Theory of Computing)

COSC430: Artificial Intelligence

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.

Note: For Spring 2014, there is a topics version of this course being offered by Prof. Hay, COSC 480.

Prerequisites:
COSC302 (Analysis of Algorithms)

Staff:
Michael Hay (mhay@-xyznospamcolgate.edu)

COSC435: 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.

Prerequisites:
COSC302 (Analysis of Algorithms)

Staff:
Elodie Fourquet (efourquet@-xyznospamcolgate.edu)

COSC440: 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.

Note: Only one of the prerequisite courses is required, i.e., students should have had at least one 300-level course before enrolling in COSC 440.

Prerequisites:
COSC301 (Operating Systems),
COSC302 (Analysis of Algorithms),
or
consent of the instructor

Staff:
Chris Nevison (chris@-xyznospamcs.colgate.edu)

COSC445: 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.

Prerequisites:
COSC301 (Operating Systems)

Staff:
John Stratton (jstratton@-xyznospamcolgate.edu)

COSC450: Advanced Theory

The COSC 450 course is a seminar that introduces in depth some topic in computer science theory. Past seminars have focused on a wide variety of topics in the theory of computation and the semantics of programming languages. Past topics have included: denotational semantics, type theory, category theory, operational semantics, and advanced functional programming. Throughout the second half of the semester students work in teams on various projects related to the seminar topic, and present their findings at the end of the term. In the required credit-bearing weekly two-hour laboratory, students acquire experience experimenting with and implementing the concepts introduced in the lecture.

Prerequisites:
COSC304 (Theory of Computing)

Staff:
Philip Mulry (pmulry@-xyznospamcolgate.edu)

COSC455: Distributed Web Applications

This course addresses theoretical, methodological, and practical aspects of creating distributed web applications. It introduces students to meta-languages, such as XML and related technologies, and in the process builds on their theoretical background in formal languages and grammars, parsing, and interpretation. The emphasis is on distributed systems consisting of components interacting over standard interfaces, frequently using XML as a standard format for data interchange and presentation. The course includes a group project. The required credit-bearing laboratory COSC 455L must be taken concurrently with COSC 455.

Prerequisites: COSC302 (Analysis of Algorithms)

COSC465: 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:
COSC301 (Operating Systems)

Staff:
Joel Sommers (jsommers@-xyznospamcolgate.edu)

COSC480: Topics in Computer Science

Topics vary depending upon needs of students and interests of the instructor. Students interested in this course should consult the instructor. The required credit-bearing laboratory COSC 480L must be taken . The seminar is counted toward completion of the concentration requirement.

Prerequisites: consent of the instructor

COSC480: Economic Reasoning and Computational Design

This seminar-style topics course examines the application of game theory to the design of algorithms for rational agents, i.e., participants who are neither honest and obedient nor arbitrarily malicious, but instead are driven by self-interest. The course begins with an introduction to game theory and techniques to model rational agents. Students will learn about recent results in a variety of fields, selected from the following list, mostly containing optimization problems in some type of distributed setting: auction design, network formation and network routing, cost sharing, recommendation and peer-to-peer systems, cryptographic game theory, and sponsored search. Specific topics will be chosen based on student background and interest, and background material from relevant areas of computer science, mathematics, and economics will be covered as necessary.

Prerequisites:
COSC302 (Analysis of Algorithms)

Staff:
Vijay Ramachandran (vramachandran@-xyznospamcolgate.edu)

COSC480: Topics in Computer Security

This course studies the theoretical foundations of security and their use in analyzing both individual cryptographic operations and protocols that (claim to) provide security for communication over insecure networks. One part of this course will cover the mathematical underpinnings and properties of the cryptographic building blocks---such as algorithms for encryption (both symmetric and asymmetric/public-key) and digital signatures---that are used in security protocols. Another part of this course will cover the formal analysis of communication protocols built from such operations; this includes the formalization of protocol properties such as secrecy and authentication, the study of attacks on communication protocols, and proofs that certain protocols do provide the properties they claim to. Among other activities, the laboratory component of this course will make use of automated tools (such as ProVerif) to formalize protocols and analyze their security.

Prerequisites:
COSC302 (Analysis of Algorithms),
COSC304 (Theory of Computing),
or
consent of the instructor

Staff:
Aaron D. Jaggard (ajaggard@-xyznospamcolgate.edu)

COSC480: 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, and transaction management. If time permits, the

course will move to advanced topics such as data mining and the NoSQL

movement.

Prerequisites:
COSC302 (Analysis of Algorithms)

Staff:
Michael Hay (mhay@-xyznospamcolgate.edu)

COSC480: Software Engineering for the Cloud

This course introduces students to Agile software development in the context of

building a software-as-a-service (SaaS) application to deploy in the cloud (the

Internet). We will examine challenges, opportunities, and open problems of SaaS

applications as compared with "shrink-wrapped software". An integral part of

the course will be for students to take a SaaS project from conception through

planning, development, testing, and deployment. The project will be developed

using the Ruby on Rails framework, which is a Ruby programming language-based

platform for developing SaaS applications and websites (for example, Twitter

and Hulu are developed using Ruby on Rails, as are many other high-traffic

sites). Through the course and project, students will use Agile development

methodologies and tools, including user stories, behavior- and test- driven

development, version control for team-based development, and cloud-based

environments for deployment. Moreover, students will learn and apply

fundamental programming constructs and techniques including design patterns for

software architecture, higher-order functions, metaprogramming, and reflection,

to improve the maintainability, modularity and reusability of their code.

Prerequisites:
COSC301 (Operating Systems),
or
consent of the instructor

Staff:
Joel Sommers (jsommers@-xyznospamcolgate.edu)

COSC491: Independent Study

An independent study of a theoretical or experimental nature chosen from the computer science or applications area. Open to concentrators by invitation of the department.

Prerequisites: consent of the instructor

UNST360: Technology and Disruption

“Technology and Disruption” is a half-semester course to be initially held in the second part of the Spring 2013 semester. The course will focus on how current technological developments (e.g., social media, digital content, big data) have disrupted and will continue to affect our society and the structure of the economy. Among the issues to be examined are who benefits (and suffers) from disruption, the prospects for “brick-and-mortar” institutions (including universities), and possible future patterns of disruption. Some evidence will be drawn from previous examples of technological disruption (e.g., railroads).

Students who participate in the course are expected to spend the summer in Palo Alto, CA working in a paid internship that Colgate will arrange and attending occasional lectures.

Because the course will study patterns of technological disruption in various areas of society and the economy, it provides a broad foundation for understanding the types of changes induced by digital-era entrepreneurship. However, the internship provides a unique opportunity for students to experience the process of disruption in real time. By working in Silicon Valley, students will be immersed in a culture of entrepreneurship, able to take part in creative and strategic development of technology. During the internship, students will be able to recognize relevant technologies and patterns of disruption studied in the course. Thus, the course and internship go hand-in-hand. Students will work with Career Services to obtain an appropriate placement for the summer, tailored to individual interests as much as possible.

Prerequisites:
consent of the instructor

http://news.colgate.edu/2012/11/colgate-students-to-examine-entrepreneurship-through-interdisciplinary-academic-inquiry.html

Staff:
Vijay Ramachandran (vramachandran@-xyznospamcolgate.edu)

A total of nine courses is required, and a minimum average GPA of 2.0 in the courses chosen to to satisfy the major. A prerequisite for any course in the major is COSC 101, and a cognate course of MATH 111 (Calculus I) is required. The required courses for the major are:

- COSC 102--Introduction to Computing II
- COSC 201--Computer Organization
- COSC 290--Discrete Structures
- COSC 301--Operating Systems
- COSC 302--Analysis of Algorithms
- COSC 304--Theory of Computing
- Two (2) electives from 400-level courses.

A total of five courses is required, and a minimum average GPA of 2.0 in the courses chosen to satisfy the minor. A prerequisite for courses in the minor is COSC 101. The required courses for the minor are:

- COSC 102--Introduction to Computing II
- COSC 201--Computer Organization
- COSC 290--Discrete Structures
- Two additional 300- or 400-level courses.

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, and
- Either COSC 302 or 450, and one additional computer science course at the 300 or 400 level.

A typical CS major course schedule is:

- Year 1: COSC 101 and COSC 102,
- Year 2: COSC 201 and COSC 290,
- Year 3: COSC 301, COSC 302, and COSC 304, and
- Year 4: Two more 400-level courses.

A number of our students don't "discover" computer science until their sophomore year. Also, many students choose to study abroad for one semester. In those cases, an alternate schedule can be crafted with the help of a faculty adviser. Just talk to one of our faculty: we can help you sort things out!

We frequently offer courses in the CORE curriculum, and there are great introductory-level courses that can fulfill "Areas of Inquiry" requirements. Specifically with regard to the latter category, the following courses are ideal for non-majors who are interested in taking a COSC course: COSC 100, COSC 101, COSC 122, and COSC 150.

Those students who may be interested in taking further courses in CS (for either a minor or major, or just out of interest) should consider taking COSC 101, which is a prerequisite for taking any courses in the major.