Java Programming Autumn 2019

Course number: 51036 Location:Ryerson 251 Time: Monday 5:30pm-8:30pm Professor: Adam Gerber, PhD, SCJP

Bitbucket: csgerber
Office: Ryerson 251
Office Hours: Mondays 8:30pm to 10:30pm - directly after class
TA: John Hadidian-Baugher, email:, bitbucket: johnhb Office hours: 5-7pm on Wednesdays at Gleacher Center Cafeteria
Grader: Jonathan Ma, email:, bitbucket: majonathany

Course Information

Content: All the course content, including; videos, slides, projects, and labs are all located here (
IDE: We will be using IntelliJ Ultimate Edition as our IDE. IntelliJ is an intuitive, feature-rich, and extremely forgiving IDE available on all major platforms. Get the keymap here: (~/content/slides/ij_keymap_mac.pdf or ~/content/slides/ij_keymap_pc.pdf).

Download/install IntelliJ here: Use your .edu address and be sure to download and install the ULTIMATE edition (not the community edition)
Local source-control: We will be using git throughout this course. Git is an outstanding, distributed source-control tool and fast becoming the de-facto standard in software development. IntelliJ has an excellent built-in git-gui tool.

Download/install Git here (
Remote source-control We will be using Bitbucket for grading your projects. Please (sign-up for and) register your bitbucket account here ( I recommend you use your .edu email address for bitbucket. Doing so will give you academic benefits including unlimited private repos. If you already have a bitbucket account under your gmail or other email, simply add your .edu address as a secondary address and you will qualify for academic benefits.
Textbook We will be using "Big Java: Late Objects" 2nd Edition by Cay Horstmann. ISBN: 978-1119330455. You may purchase this book as either a paperback textbook or as as kindle.

Slides Slides are available in powerpoint format. They are located in: content/slides/. There are directories with previous quarters' slides, so you can see what was presented in previous quarters. I don't anticipate too much change in the slides this quarter.
Labs 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 a single repository called labJava. 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.The labJava project (which contains hundreds of code snippets, programs, and examples, covering everything from primitive data conversion to concurrent programming is located here:

Projects & due dates

You will have eight evaluated projects throughout this course and they will closely follow the learning objectives from the textbook and lectures. For the final project, you will create a multi-threaded game which extends base-code that will be provided to you. The game-engine is flexible and highly extendible, and you may create a wide variety of arcade-style 2D games such as Asteroids, Missile Comand, 1941, etc. The instructions for each project is located in a file called _instructions.txt which is in the root of each directory in the proJava project. The proJava project which contains all the base-code, and everything you need to complete your homework, is located here:

So long as you clone your proJava project to your bitbucket account, 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 bitbucket 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.
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 Oct 13 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 Oct 20 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 Oct 27 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 Nov 3 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 Nov 10 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 Nov 17 at 11:59pm
_07Streams _07Streams is focused on the Java8 api, including lambdas, streams, and functional programming. Recursion is also convered in this section. Sunday Nov 24 at 11:59pm
_08Final _08Final is the final project. For your final project, you will create a multi-threaded game which extends base-code that will be provided to you. The game-engine is flexible and highly extendible, and you may create a wide variety of arcade-style 2D games such as Asteroids, Missile Comand, 1941, etc. Thursday Dec 5 at 11:59pm worth 20% of final grade

Projects evaluation criteria


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 Grade
Quarterterm exam 30 minutes Monday Oct 21st 10% of final grade
Midterm exam 60 minutes Monday Nov 11th 25% of final grade

Missed exams and late registrant policy

There are no make-up exams in this class. If you miss the quarter-term, the points are added to your midterm exam which would be worth 35% rather than 25% of final grade. If you miss your mid-term exam, the midterm-exam points are added to your final project weight making the final project worth 45% rather than 20% of the final grade. If you miss both quarter-term and mid-term exams, you can not pass this course. Late registrants may be exempt from the first one or two projects (depending upon how late they register), however those minor-project points are then added to the weight of the final-project (_08Final).


Class participation is 10% of the final grade. You can't participate if you don't show up to class. The participation evaluation will be based on: your attendance, your questions/comments during class, your posts/replies to Piazza, your willingness to help others during lab, and your presentation of project solutions when called on to do so. In addition, some finalists will be chosen to present their final-projects to the class and will compete for best game, which will be determined by vote from your peers.

Final Evaluation

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

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.

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. 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 which may mitigate in your favor when I assign final grades.

Getting Help

I will be available during office hours after class each Monday. One of the best ways to get help is to schedule an appointment with either me or John remotely. With google hangouts or skype, we can work through any problem together as we share desktops. 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.


Please feel free to post to Piazza. Piazza is the best place to get help quickly. To post to Piazza, go to: 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.

Course Software

Java SDK :