Skip to main content

Course Information


CS 2112/ENGRD 2112 is an honors version of CS 2110/ENGRD 2110. Credit is given for only one of 2110 and 2112. Transfer between 2110 and 2112 (in either direction) is encouraged during the first three weeks. We cover intermediate software design and introduce some key computer science ideas. The topics are similar to those in 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, sorting and graph algorithms, asymptotic complexity, and simple algorithm analysis. Java is the principal programming language.

Time & Place


  • Tuesdays and Thursdays, 10:10-11am, Gates G01 (ground floor, below the main entrance).


  • Mondays 12:20-1:10pm, Hollister 206 or
  • Mondays 7:30-8:20pm, Upson 206 or
  • Wednesdays 7:30-8:20pm, Upson 206


  • Tuesdays 12:20-1:10pm, Hollister 206 or
  • Wednesdays 1:25-2:15pm, Hollister 206 or
  • Wednesdays 3:35-4:25pm, Hollister 372

You are expected to attend all lectures, one lab, and one discussion each week.

Course Staff

Placeholder for staff

Office Hours Weekly Chart

Day Name Time Location
Monday Richard 11am-12pm Gates G17
Olivia 1-2pm Gates G15
Sixian 4-5pm Gates G15
Gautam 6-7pm Gates G11
Cameron 8:30-9:30pm Gates G17
Tuesday Dexter 11am-12pm Gates 406
Travis 1:30-2:30pm Gates G17
Jane 4:30-5:30pm
4-5pm (9/19 only)
Gates G15
Wilson 7:30-8:30pm Gates G11
Wednesday Kenneth 2:30-3:30pm Gates G19
Talha 4:30-5:30pm Gates G19
Yiteng 6-7pm Gates G19
Thursday Kevin 9-10am Gates G15
Dexter 11:15am-12pm Gates 310
Jacob 1-2pm Gates G15
Shiyu 6-7pm Gates G19
Friday Albert 11am-12pm Gates G19
Alan 12-1pm (starting 9/8) Gates G13
John 1-2pm Gates G15
Aidan 2:30-3:30pm Gates G17
Lucas 3:30-4:30pm Gates G15
Sunday Newton 8-9pm Gates G15


Very good performance in CS 1110 or CS 1130 or an equivalent course, or permission of the instructor. If you are unsure whether CS 2110 or CS 2112 is the right course for you, please talk to the instructor of either course. Both courses cover similar material and satisfy the same requirements, but CS 2112 covers material in more depth and has more challenging assignments. It is aimed at computer science majors.


You are required to read the course notes posted on the web site. These will often contain more detail than what was presented in lecture.

There is a recommended textbook, which is also the textbook for CS 2110. It is useful especially for examples of how to implement various data structures.

See also the companion website for additional material.

Other Sources

These titles are on reserve in the Engineering library, Carpenter Hall.

The CS 2110 website has many online learning aids and tutorial videos, including introductory videos on Java and Eclipse.


We will be using Piazza as an online discussion forum. You are encouraged to post any questions you might have about the course material. The course staff monitor Piazza fairly closely and you will usually get a quick response. If you know the answer to a question, you are encouraged to post it, but please avoid giving away any hints on the homework or posting any part of a solution—this is considered a violation of academic integrity.

By default, your posts are visible to the course staff and other students, and you should prefer this mode so that others can benefit from your question and the answer. However, you can post privately so that only the course staff can see your question, and you should do so if your post might reveal information about a solution to a homework problem. You can also post anonymously if you wish. If you post privately, we reserve the right to make your question public if we think the class will benefit.

Piazza is the most effective way to communicate with the staff and is the preferred mode of interaction. Please reserve email for urgent or confidential matters. Free-ranging technical discussions are especially encouraged. Broadcast messages from the course staff to students will be sent using Piazza and all course announcements will be posted there, so check in often.


We will be using the course management system CMS for managing assignments, exams, and grades. Everyone who preregistered for the course should be entered, but if you did not preregister, you are probably missing. Please login here and check whether you exist. There will be a list of courses you are registered for, and CS 2112 should be one of them. If not, please send your full name and Cornell netId to the Administrative Assistant or so that you can be registered.

You can check your grades, submit homework, and request regrades in CMS. Please check your grades regularly to make sure we are recording things properly. The system also provides some grading statistics. There is a help page with instructions.

Please do not repost course materials released on CMS publicly. These materials are intellectual property and are meant for participants in the course. They are not free to the public.

Announcements and Handouts

Announcements will be posted to Piazza. Homework and exam solutions will be available in CMS. Check frequently for new postings.


There will be seven assignments, mostly involving programming but also some written problems. These assignments will make up 40% of your score. The first three assignments will be done alone. The last four assignments are parts of a single project, which will be done with a partner.

Unless otherwise specified, assignments may be turned in late with a deduction of 10% per day up to a maximum of four days.

Extensions are granted in case of illness or other acceptable excuse.


There will be one evening prelim and a final exam. Please check the schedule page for times and locations. The prelim will be 20% of your score and the final will be 35%.


Graded homework will be available on CMS. Graded exams will be available in the handback room, 216 Gates.

Homework regrade requests can be submitted electronically in CMS. Exam regrades should be handwritten and submitted to the course staff. Please include a description of the grading error with your regrade request.

Academic Integrity

The utmost level of academic integrity is expected of all students. Under no circumstances may you submit work done with or by someone else under your own name or share detailed proofs with anyone else except your partner. However, general questions regarding proof techniques or the requirements of the assignment are permissible.

You must cite all sources, including Internet sources. You must acknowledge by name anyone whom you consulted. You may not give nor receive assistance from anyone else during an exam. You may not give any hints or post any material that might be part of a solution publicly on Piazza. If your question necessarily includes such material, post privately.

If you are unsure about what is permissible and what is not, please ask.

Academic Integrity Resources:

Special Needs

We will provide appropriate accommodations for students with special needs and/or disabilities. Requests for accommodations are to be made during the first three weeks of the semester and must be accompanied by official documentation. Please register with Student Disability Services in 110 Ho Plaza (Cornell Health Building), Level 5 to document your eligibility.

Placeholder for schedule


Course notes

Course notes for individual lectures and recitations can be found on the course schedule. The notes are also available as a single printable document.


Java is one of the most widely used object-oriented programming languages, and programming skill in the Java language is in high demand. Nevertheless, this is not a course about Java. Java is simply a good vehicle for explaining many of the ideas on data structures, algorithms, and software engineering that will be covered in the course. Most of the ideas you will be exposed to in this course, and the skills you will develop, will transfer to other programming languages.

Online Resources

Brushing Up

Review the introductory chapters in the textbook and the Java reference books listed on the course info page. For students with C++ experience, check out this Wikipedia page comparing C++ with Java.

Java version

We will be using the Java 8 Standard Edition (Java SE 8) platform, which consists of the Java Development Kit (JDK) and the Java Runtime Environment (JRE). If you are using Java 7 or earlier, please upgrade.

To find out which version of the JRE you are running, open a command window (in Windows, Start > Run... and type cmd, and in Mac OS, Applications > Utilities > Terminal) and type java -version at the command prompt:

$ java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

This says I have version 8 installed (8 and 1.8 are synonymous).

If you are on a PC running Windows and have never installed a version of the Java Development Kit (JDK) on your machine, you probably don't have it. If you are on a Mac, you probably do. To find out, type javac -version:

$ javac -version
javac 1.8.0_144

If you get an error message or the version is earlier than 1.8, you must (re)install the JDK.

Installing the JDK

The JDK is already installed in CIT and ACCEL labs. However, installing it own your own machine will greatly facilitate your work.

To download the JDK, visit Oracle's Java web site and download and install the appropriate version of the JDK 8 for your platform.

Compiling and Running from the Command Line

Compiling:  Say your main class is MyProgram and it is contained in the source file If it is not in a package, navigate to the folder containing and type javac If it is in a package (say myPackage), the source should be in a folder called myPackage. Navigate to the folder containing myPackage and type javac myPackage/

Running:  From the same folder you compiled from, type java MyProgram <program arguments> if it is not in a package, and java myPackage.MyProgram <program arguments> if it is.

Specifying a Classpath:  Sometimes you may need to inform Java where to find auxiliary classes. You can do this with the -cp option to the java command. Supply a sequence of folders telling Java where to look for classes, separated by : (Mac) or ; (Windows).

Local Software

Some Java libraries have been developed for use in CS 2110 and CS 2112 assignments. Feel free to use them.

EasyIO: Support for easy console input and output, and for scanning input from a file or string (like java.util.Scanner, but more powerful). [ doc | jar | source ]

cs2110: Various types of queues, including a priority queue supporting in situ adjustment of priorities; a DelimitedStringBuilder similar to one found in OCaml; a module that runs an external script that takes a string on stdin and writes a string to stdout; and a module for easy access to a text resource file. [ doc | jar | source ]


IDE stands for integrated development environment. The use of an IDE is the best way to develop Java programs. IDEs provide many valuable aids such as syntax checking, debugging, and refactoring that can save you a lot of effort.

There are many good IDEs. We recommend Eclipse, but you may use any one that you like, or none at all. Eclipse is installed in all the labs, along with some others. Early recitation sections will get you started with Eclipse if you are not familiar with an IDE.

Here are some links:

For consistency, the course staff use Eclipse with a common Java style. You should follow this style guide. You can download the Eclipse style template here.

Computer Labs

CIT Labs

Cornell Information Technologies (CIT) runs several computer labs across campus for all members of the Cornell community. The JDK and Eclipse are installed on these machines. Check here for locations and times of operation.


You can also find the course software in the Academic Computing Center (ACCEL), located in the Engineering Library in Carpenter Hall. Any CS student may register for an account.

Support Services

Academic Excellence Workshops

The Academic Excellence Workshops (AEW) offer an opportunity for students to gain additional experience with course concepts in a cooperative learning environment. Research has shown that cooperative and collaborative methods promote higher grades, greater persistence, and deeper comprehension. The material presented in the workshop is at or above the level of the regular course. We do not require joining the AEW program, but do encourage students to join if they are seeking an exciting and fun way to learn. The AEW carries one S/U credit based on participation and attendance. The time commitment is two hours per week in the lab. No homework will be given. This is a wonderful opportunity for students to seek extra help on course topics in a small group setting.

Your fellow undergraduate students, who are familiar with the course material, teach the sessions with material that they prepare. The course staff provide guidance and support but do not actually teach the AEW course content or any session. A representative from the AEW program will be speaking about the program and registration procedures in lecture.

One of your TAs will be designated as the AEW liaison for CS 2112. Watch the announcements to find out who.

See the AEW webpage for further information.

Other Support Services

Registrar's Office General services for the Cornell community.
Engineering College Support services for Engineering students.
Arts College Support services for Arts students.
CIT Services offered by Cornell Information Technologies (CIT), including computer training.
Cornell Health The Cornell University Health Service Center. For all health related concerns and counseling services.
Learning Styles Not everyone learns the same way. If you are curious about how you learn, check out this collection.