Java Programming Spring 2017

This is a fast-paced first course in Java for students with some prior programming experience, though not necessarily Java or any other object-oriented language. A strong emphasis will be placed on understanding basic fundamentals of OO design--inheritance, polymorphism, composition, programming to interfaces. and more generally on applying sound principles of contemporary software engineering and tools to real-world problems. In the latter half of the course, we will cover threads, OO design patterns, data structures like maps, collections, and trees, as well as Java libraries such as java.util.concurrent, and javax.swing. The course format is both lecture and lab. We will use be using Git to facilitate our learning and to manage our projects. By the end of the quarter, students will have a working knowledge of Git and know how to manage both local and remote repositories.

See the schedule for details.

Course Staff


Lamont Samuels
Office hours: Saturday 11am-12:30pmn in CSIL


Casey McCanna
Office: Thursday 5:30-8:30 at the Gleacher Center, downtown.

Ryan Landek

Course Information

Lectures Monday 5:30pm–8:30pm, Ryerson 277
Communication We'll use Piazza for general discussion and questions about course material.
Piazza is the best place to get help quickly. The TA's and I will monitor Piazza
as frequently as possible and often be able to answer immediately. Students
are encouraged to help their peers on Piazza by contributing when it is convenient.
Textbook We will be using "Big Java: Late Objects" by Cay Horstmann. ISBN: 978-1-118-08788-6.
You may purchase this book as either a paperback textbook or as an eBook.


In either case, Wiley has made advanced online chapters available to us

Course Software Java SDK (8):



Getting Help I will be available during office hours after class each Monday. The pace of this course is rapid,
so please email me or come to office hours if you feel you're falling behind or need help.


You will have eight evaluated projects throughout this course and they will closely follow the learning objectives from the textbook and lectures. All projects are packaged together into a single project called proJava. The proJava project will be placed on your GitLab repository and the there is nothing further you need to do to submit, aside from pushing your commits as you complete them. A chron script will be triggered at 11:59pm on the due date which will fetch your proJava project from your private remote GitLab repository. Your project directory (e.g. 01control) will be graded according to the state your project directory was in when the chron script ran. No exceptions. The master branch is the only branch that will be graded, and any commits after the deadline will be ignored.

Short descriptions and due dates for each project is as follows:

Project Short Description Due Date
_01Control _01Control is a collection of solutions to simple canonical problems related to flow control
and implemented using the command-line.
Sunday April 2 at 11:59pm
_02Arrays _02Arrays is similar to proControl, but requires you to use single and multi-dimensional arrays
to solve the problems. This project is also implemented using the command-line.
Sunday April 9 at 11:59pm
_03Objects _03Objects is an introduction to Objects and Classes in Java. You will use the tools to create
object-oriented programs.
Sunday April 16 at 11:59pm
_04Interfaces _04Interfaces is an introduction to interfaces and polymorphism. You will create several programming
projects to demonstrate your knowledge of these concepts.
Sunday April 23 at 11:59pm
_05Dice _05Dice is a dice game that you will implement using Swing. You will use both Swing and object-oriented
programming to complete it.
Sunday April 30 at 11:59pm
_06Design _06Design is focused on Object-Oriented Analysis and Design. We will look at the procedures for writing
the specification for a Java program, and then program several projects.
Sunday May 7 at 11:59pm
_07BlackJack _07BlackJack is a black-jack game that you will implement using Swing and will be similar to proDice only
more difficult.
Sunday May 14 at 11:59pm
_08Final _08Final is the final project. More information about your final project will be coming shortly. Sunday June 4 at 11:59pm

Projects evaluation criteria

Evaluations are Final and Non-negotiable:

Project evaluations are final and non-negotiable. The TA and grader for this course are both experienced and fair. Please do not ask me to intervene to change your grade if you are dissatisfied with a project evaluation. The only way I would intervene is if there was a gross miscarriage of process, e.g. the TA/grader fails to evaluate any assignments at all, or moves to isolated island with no internet connection and never comes back. If you are dissatisfied with an evaluation, you may appeal to me, describing why you feel you were not treated fairly, and I will note your dissatisfaction in the gradebook. This may mitigate in your favor when I assign final grades.


There will be two exams in this course. Each exam will be a mixture of multiple choice questions and short-answer questions.

Exam Length Exam Date
Midterm exam 60 minutes Monday April 24th
Final exam 60 minutes Monday May 22nd

Missed exams and late registrant policy

There are no make-up exams in this class. Exceptions will only be made in case of a medical emergencies.


During labs, we will use the course tools to create applications together in class. All the source code that you will need to follow along during labs will be available in your repository before the lecture. The lecture hall will be outfitted with power-strips, and you are required to bring your own laptop and follow-along during labs. Labs are not evaluated. Solutions to the labs will also be provided on the course schedule page.

Final Evaluation

The final grade is determined as follows:
_01Control 5%
_02Arrays 5%
_03Objects 5%
_04Interfaces 5%
_05Dice 5%
_06Design 5%
_07BlackJack 5%
_08Final 20%
Midterm exam 20%
Midterm exam 20%
Class participation 5%

Class participation

The participation evaluation will be based on: your questions/comments during class, your posts/replies to the Piazza, your willingness to help others during lab, and your presentation of project solutions when called on to do so.

Possible Curve

Be advised that MPCS policy dictates that no more than 30% of the students in any MPCS course may receive an A. In most cases, I will curve the raw scores up to award as many A's as possible. An A is defined as 93% or higher. In rare cases, I will curve the raw scores grades down to conform to school policy. This policy is in place to protect students from grade inflation.


I would like to greatly thank Adam Gerber for developing this syallbus and providing a large majority of the course content and projects.
I would also like to thank, J. Alex Halderman, for allowing me to adapt his web site design for this course.