>> SPRING 2015 | [ SCHEDULE ] | [ PDF ] | [ GitHub ]
Instructor: Andrew Cencini (acencini@bennington.edu)
Credits: 4
Meeting Time: Tu 2:10pm - 6:00pm
Location: CATLab (Dickinson 233)
Office Hours: TBD, Dickinson 211
Course Web Site: http://cs.bennington.edu/courses/s2015/cs4153.01/

In this course, students will learn the principles and practice of object-oriented programming. While much introductory computer science coursework focuses on the fundamentals of programming (program structure, loops, conditionals, design), this course will dig deeper into working in the object-oriented paradigm. Students will learn to program in an object-oriented programming language (starting with Java, moving towards C++), and will work on a group software project, in order to solidify skills. This class is a natural next step for those who have taken an introductory programming course, and is also highly recommended for advanced students as a way of increasing their skills and perspective as computer scientists.


  • Object-oriented programming paradigm and principles.
  • Intermediate/advanced program design.
  • Java. May include: networking, swing (UI), database, threads, servlets, Android.
  • Introduction to C++ and memory management.
  • Design patterns and their use cases.
  • Intermediate/large-sized software project management.
  • Unit/functional/stress testing and analysis.
  • Technical communication.


  • Brendon Walter
  • Jack Gerrard
  • John Lewtas
  • Linh Hoang
  • Logan Traynor
  • Mirza Becevic
  • Morgan Mills
  • Nate Guevin
  • Nayeem Aquib
  • Nidesh Chitrakar
  • Pixel West
  • Rohail Altaf
  • Roi Karlinsky
  • Sashank Aryal
  • Torrent Glenn

Our class meets once per week for a 4-hour period. There will usually be a short break about halfway through the class.

The class will be structured as a workshop - we will start by becoming acclimated to the tools and language constructs associated with Java, and then will set out to solve progressively larger and more complex problems.

After approximately 4 class sessions, students will be expected to divide into 3-4 groups (of up to 4 students apiece). These groups will be expected to choose or propose a project topic and develop and execute on a plan to build this project by the end of the class.

Once project work has begun, most classes will be divided in half - one half will be project work, while the other half will cover a given topic. Topics will include basic object modeling, design patterns, debugging, testing, and an introduction to C++.

This class may require additional meeting time outside of the usual classroom sessions. Additionally, the class will require group collaboration, which will require small group meetings in addition to class time.

Every effort will be made to achieve a moderately consistent workload for this class; however, depending on student choices as part of the group project, workload may vary as the project is developed and tested. It is fully expected that students will spend, on average, 10-12 hours per week on this class - including class sessions, homework, reading, experimentation and group meetings.

How you structure your time is up to you; however, in my experience, devoting a few larger contiguous chunks of time to classwork is more efficient, as opposed to dividing your time across a larger number of small fragments.

In no case should any student adopt the practice of waiting until the night before an assignment is due to begin working on that assignment. This is a terrible habit to get in, often results in incomplete (hence: failed) work, and can make you miserable in the process.

There are two books for this class - both will be used extensively, and are also really great references to have even once the class is over. I hope you enjoy them, and find them useful in the future as well.

  • Eckel, Bruce. "Thinking in Java" (4th Edition). A 3rd Edition of this book is available for free from Eckel's web site.
  • Gamma, et. al. "Design Patterns: Elements of Reusable Object-Oriented Software". ("Gang of Four"/GOF).

All of the development tools used in this class are installed on the Linux side of all CATLab machines, and are also available at no cost. They are the same tools used by many professionals in the technology industry. If you have your own laptop or desktop computer, you are free to install these tools, though it is up to you to self-support your installation.

  • IntelliJ 14.0.3 Community Edition - Java development environment. Available for Windows, MacOS and Linux. Download
  • Eclipse Luna SR1 for Java Developers - An alternate development environment that is also widely used. Available for Windows, MacOS and Linux. Download
  • Code::Blocks 13.12 - C++ Development Environment. Available for Windows, MacOS and Linux. Download
  • Eclipse Luna SR1 IDE for C/C++ Developers - An alternate C/C++ development environment that shares look and feel with the Java Eclipse IDE. Available for Windows, MacOS and Linux. Download
  • JetBrains cLion EAP Build - A promising IDE for C++, with some platform restrictions. Available for Windows, MacOS, Linux (64-bit only). Not installed on CATLab machines. Download
You will also want to ensure you have a Java SDK installed - we will use the Java SE 1.7 SDK, which can be downloaded from:

Oracle JDK 7 Download

Java SE JDK 1.8 will replace the 1.7 version, so you can also use JDK 1.8 if you want. Try not to use anything older than JDK 1.7.

On CATLab machines, Java SE 1.7 JDK is installed.

Additionally, all CATLab machines have gcc/g++ and related command-line Unix C++ compile/build tools, as well as a number of command-line and visual editors.

We will also use GitHub as our source control system for the class. The core repo for class is:


All students must have a GitHub account (free) for this class – send me your username if I do not have it, so I can add you to our repo.


  • You will be a productive and positive collaborator with your colleagues, and will contribute to an environment in which all students feel welcome and comfortable.
  • You will attend every class. More than two absences (excused or unexcused) will jeopardize your standing in the course.
  • You will check-in all required assignments prior to the start of the class in which they are due.
  • You will be an attentive and positive contributor to class discussion and activities.
  • You will seek out help promptly if you are struggling or falling behind.
  • You will submit your own ideas and work. Academic dishonesty will not be tolerated, and will be passed along without exception to college authorities.


  • Class participation and attendance (35%).
  • Assignments and exercises (15%).
  • Group project (50%).
I strongly advise all students nervous about grades to take this class Pass/Fail. While you will "get out what you put in" to the class, programming can be difficult under time and grade pressure - in essence, exponentially increasing that feeling of pressure. Working on a group software project is also an acquired skill, as well. Taking this class pass/fail will allow you to feel relaxed and confident as you work through concepts and problems.

If you are struggling in class, or would like to investigate a topic in greater depth, come see me. My office hours are listed on the top of this syllabus. I enjoy and look forward to meeting with you - some general guidance on making sure we are able to meet:

  • I strongly prefer email (acencini@bennington.edu). I am on it way too much, so you’ll likely get a prompt reply unless I am extremely busy, or if it is a weekend or holiday period.
  • If you would like to meet with me, please consult my schedule (located at http://cs.bennington.edu/people/acencini) and propose a date and time that is not generally booked.
  • If you plan to drop by during my office hours, I strongly recommend that you email in advance – I like to know if you are planning to show up, and can also let you know if there might be a wait.
  • If you need to meet me outside of my office hours, I need at least a day’s advance notice so I can ensure we can find the best time to meet.

Subject to change. Readings and assignments will be disseminated in class.

Week 0x00 (2/24):  Java.  Assignment 1.

Week 0x01 (3/3):  Java.  Assignment 2.

Week 0x02 (3/10):  Java.  Assignment 3.

Week 0x03 (3/17):  Java.  Assignment 4.

Week 0x04 (3/24):  Java.  Teams and initial proposals due.

Week 0x05 (3/31):  Java. Assignment 5.  Team check-in.

Week 0x06 (4/7):  Design Patterns.  Assignment 6.  Team check-in.

Week 0x07 (4/14):  Design Patterns.  Assignment 7.  Team check-in.

Week 0x08 (4/21):  Design Patterns.  Assignment 8.  Team check-in.

Week 0x09 (4/28):  Design Patterns.  Team check-in.

Week 0x0a (5/5):  C++.  Assignment 9.  Team check-in.

Week 0x0b (5/12):  PLAN DAY NO CLASS

Week 0x0c (5/19):  C++.  Assignment 10.  Team check-in.

Week 0x0d (5/26):  C++.  Team check-in.

Week 0x0e (6/2):  Project Day/Tearful Goodbye.