design

Choosing your first CS course

Cornell's CS program offers courses in a wide variety of exciting academic areas including courses in graphics and animation, artificial intelligence and robotics, internet systems and technology, game design, security, hardware development, data modeling, biotechnology, databases and digital libraries, and computer vision.

CS is not just programming...

As just mentioned, computer science courses are available in a variety of areas. This section includes a list of introductory CS courses that are not centered around programming. CS 1610/ENGRI 1610 attempts to unravel some of the mysteries going on inside software used for arts and music. CS 1620/ENGRI 1620 introduces the concepts and ideas behind computer imaging and computer graphics, both software and hardware. CS 2850 (crosslists with ECON, INFO, and SOC) is an interdisciplinary course examining how each of the computing,economic, sociological and natural worlds are connected and how the structure of these connections affects each of these worlds. CIS 3000 investigates the theory and practice of developing computer games from a blend of technical, aesthetic, and cultural perspectives.

Advice on choosing your first Cornell programming course ...

When shopping for a "first programming course" to take in computer science, first evaluate your current programming expertise. As a general rule, don't be concerned about which programming language is used in your first programming course; the language is simply a vehicle used to present programming concepts,

If you haven't taken a programming course before, CS 111x is usually the appropriate starting point. We offer several variants.

If you already have programming experience at the AP level or equivalent and are looking to explore computer science in more depth, perhaps as a major or a minor, you may want to take CS 2110 or the honors version, CS 2112. Please note that AP credit is equivalent to CS 1110. Students with substantial experience beyond that may be permitted to enroll in CS 3110 after consultation with the Director of Undergraduate Studies.

For those who already have substantial programming experience and are looking for brief introductions to other programming languages, we offer a few "short" courses: CS 2022 (Intro to C) and CS 2024 (C++ Programming). For those wanting experience working in a Unix environment, we offer CS 2043 (Unix Tools and Scripting). Students seeking web design experience should consider CS 1300 (Introductory Design and Programming for the Web).

Introductory programming course overview

Note to Engineering students: In order to fulfill the introductory programming requirement; select one course from each of the two columns - with the caveat that you can only take one of the two low time requirement courses.

Time Requirement

Java

Matlab

Low

1130

1132

Medium

1110

1112

Honors

----

1114

Possible first courses are CS 1109 , CS 111x, CS 1130 and CS 1132, CS 1300, CS 1610, CS 1620, CS 1710, CS 2022, CS 2024, CS 2043, CS 2110, CS 2112,CS 2850, CS 3110, CIS 3000.

CS 1109 - Fundamental Programming Concepts

This is a 2-credit S/U course in programming offered in the summer only. An appropriate high-level programming language is used. CS 1109 is intended for students who plan to take CS 111x but want to work on their problem solving skills and who want some exposure to programming before entering CS 111x. CS 1109 open only to students who intend to go on to CS 111x.

CS 1110 - Introduction to Computing Using Java

Programming and problem solving using Java. Emphasizes principles of software development, style, and testing. Topics include object-oriented concepts, procedures and functions, iteration, arrays, strings, algorithms, exceptions, GUIs (graphical user interfaces). Weekly labs provide guided practice on the computer, with staff present to help. Assignments use graphics and GUIs to help develop fluency and understanding. Assumes basic high school mathematics (no calculus) but no programming experience.

CS 1112 - Introduction to Computing Using Matlab

Programming and problem solving using Matlab. Emphasizes the systematic development of algorithms and programs. Topics include iteration, functions, arrays, and Matlab graphics. Assignments are designed to build an appreciation for complexity, dimension, fuzzy data, inexact arithmetic, randomness, simulation, and the role of approximation. Assumes student is comfortable with math (at level of one semester of calculus) but has no prior programming experience.

CS 1114 - Introduction to Computing Using Matlab and Robotics

Honors-level introduction to computer science using camera-controlled robots. Emphasis is on modular design of programs and fundamental algorithms. Example projects include controlling a robot by pointing a light stick and making a robot recognize simple colored objects. Programming in Matlab only. Requires programming experience (any language is acceptable), or permission of instructor.

CS 1130 - Transition to Object-Oriented programming

Introduction to object-oriented concepts, using Java. Assumes programming knowledge in a language like Matlab, C, C++, or Fortran. Students who have learned Java but were not exposed heavily to OO are welcome.

CS 1132 - Transition to MATLAB

Introduction to Matlab and scientific computing. Covers the Matlab environment, assignment, conditionals, iteration, scripts, functions, arrays, scientific graphics, and vectorized computation. Assumes programming knowledge in a language like Java, C, C++, or Fortran.

CS 1300 - Introduction to Programming Web Applications

The World Wide Web is both a technology and a pervasive and powerful resource in our society and culture. To build functional and effective web sites, students need technical and design skills as well as analytical skills for understanding who is using the web, in what ways they are using it, and for what purposes. In this course, students develop skills in all three of these areas through the use of technologies such as XHTML, Cascading Stylesheets, and PHP. Students study how web sites are deployed and used, usability issues on the web, user-centered design, and methods for visual layout and information architecture. Through the web, this course provides an introduction to the interdisciplinary field of information science.

CS 1610 - Computing in the Arts (also ENGRI 1610)

Over the centuries, artists in a wide variety of media have employed many approaches to the creative process, ranging from the philosophical to the mechanical and the virtual. This course unravels some of the mysteries going on inside software used for art and music. We look at ways of breaking things apart and sampling and ways of putting things together and resynthesizing, and we explore ideas for creation. There are no formal course prerequisites (in particular, no course in programming, calculus, or probability), although a good comfort level with computers and some of the arts is helpful. This course does not teach software packages for creating art and music. The course complements ART 1701 and MUSIC 1421.

CS 1620 - Visual Imaging in the Electronic Age (also ENGRI 1620)

The course introduces the concepts and ideas behind computer imaging and computer graphics, both software and hardware. Topics include perspective representations, display technology, how television works, bandwidth concepts, digital photography, computer graphics modeling and rendering, matting and compositing, color perception, data acquisition, and volumetric imaging. Historical precedents, primarily from the art world, are used throughout. Other models of imaging are discussed, including laser scanning, ultrasound, x-rays, and magnetic resonance, each of which is important to medical practice. This is not a course on how to use any particular graphics/imaging program, but rather an explanation of the underlying principles.

CS 1710 - Introduction to Cognitive Science (also COGST 1101, LING 1170, PHIL 1910, PSYCH 1102)

Surveys the study of how the mind/brain works. Examines how intelligent information processing can arise from biological and artificial systems. Draws primarily from five disciplines that make major contributions to cognitive science: philosophy, psychology, neuroscience, linguistics, and computer science. The first part of the course introduces the roles played by these disciplines in cognitive science. The second part focuses on how each of these disciplines contributes to the study of five topics in cognitive science: language, vision, learning and memory, action, and artificial intelligence.

CS 2022 - Introduction to C

A brief introduction to the C programming language and standard libraries. Unix accounts will be made available for students wishing to use that system for projects, but familiarity with Unix is not required. (Projects may be done using any modern implementation of C). CS 213 (C++ Programming) includes much of the material covered in 113. Students planning to take CS 213 normally do not need to take 113.

CS 2024 - C++ Programming

An intermediate introduction to the C++ programming language and the C/C++ standard libraries. Topics include basic statements, declarations, and types; stream I/O; user defined classes and types; derived classes, inheritance, and object-oriented programming; exceptions and templates. Recommended for students who plan to take advanced courses in computer science that require familiarity with C++ or C. Students planning to take CS 2024 normally do not need to take CS 2022; 2024 includes most of the material taught in 2022.

CS 2043 - Unix Tools and Scripting

UNIX and UNIX-like systems are increasingly being used on personal computers, mobile phones, web servers, and many other systems. They represent a wonderful family of programming environments useful both to computer scientists and to people in many other fields, such as computational biology and computational linguistics, in which data is naturally represented by strings. This course takes students from shell basics and piping, to regular-expression processing tools, to shell scripting and Python. Other topics to be covered include handling concurrent and remote resources, manipulating streams and files, and managing software installations.

CS 2110 - Object-Oriented Programming and Data Structures (also ENGRD 2110)

Intermediate programming in a high-level language and introduction to computer science. Topics include program structure and organization, modules (classes), program development, proofs of program correctness, recursion, data structures and types (lists, stacks, queues, trees), object-oriented and functional programming, and analysis of algorithms. Java is the principal programming language.

CS 2112 - Object-Oriented Design and Data Structures - Honors (also ENGRD 2112)

Honors version of CS 2110/ENGRD 2110; credit is given for only one of CS 2110 and CS 2112. Corrective transfer between CS 2110 and 2112 (in either direction) is encouraged during first three weeks. Intermediate software design and introduction to key computer science ideas. Topics are similar to those in CS 2110 but are covered in greater depth, with more challenging assignments. Topics include object-oriented programming, program structure and organization, program reasoning using specifications and invariants, recursion, design patterns, concurrent programming, graphical user interfaces, data structures as in CS 2110, sorting and graph algorithms, asymptotic complexity, and simple algorithm analysis. Java is the principal programming language.

CS 2850 - Networks (also ECON 2040, INFO 2040, SOC 2090)

This interdisciplinary course examines network structures and how they matter in everyday life. The course examines how each of the computing, economic, sociological and natural worlds are connected nd how the structure of these connections affects each of these worlds. Tools of graph theory and game theory are taught and then used to analyze networks. Topics covered include the web, the small world phenomenon, markets, neural networks, contagion, search and the evolution of networks.

CS 3110 - Data Structures and Functional Programming

An advanced programming course that emphasizes functional programming techniques and data structures. Programming topics include recursive and higher-order procedures, models of programming language evaluation and compilation, type systems, and polymorphism. Data structures and algorithms covered include graph algorithms, balanced trees, memory heaps, and garbage collection. Also covered are techniques for analyzing program performance and correctness.

CIS 3000 - Introduction to Computer Game Design

Investigates the theory and practice of developing computer games from a blend of technical, aesthetic, and cultural perspectives. Technical aspects of game architecture include software engineering, artificial intelligence, game physics, computer graphics, and networking. The writing component of the course can be used to satisfy the Engineering College Technical Writing requirement through a petition. Aesthetic and cultural aspects of design include art and modeling, sound and music, history of games, genre analysis, role of violence, gender issues in games, game balance, and careers in the industry. Programmers, artists, musicians, and writers collaborate to produce an original computer game.