Software Construction

Please see the FAQ if you have questions after reading this page

Many software systems are amongst the most complex systems ever built by humans: telephone systems, flight control systems, internet search engines, social networking sites and much more.

Two fundamental concepts central to supporting the construction and evolution of software systems are abstraction and decomposition. Building on the introduction to these concepts in CPSC 110, this course explains how these concepts manifest over and over again in different forms when building larger and larger systems.

The goals of this course are to provide students with the ability to recognize, analyze and use abstraction and decomposition to construct software systems that solve real problems. This course will use the Java programming language and will provide students the opportunity to learn practical design and programming skills.

The course is designed to be accessible and useful to a wide range of students. CPSC 110 is a pre-requisite.  



Gail Murphy (murphy AT cs DOT ubc DOT ca)
Elisa Baniassad (ebani AT cs DOT ubc DOT ca)

Please note:
    • When sending email to an instructor, please include "CS210" in the header to enable faster attention.
    • To get help with course material, do not email the instructors.  Instead...
      • post to the Piazza forum for the course. You will sign up for the forum in Lab 0.
      • visit an instructor office hour
      • visit DMP hours
      • ask your TAs in lab
    • When using Piazza, please search for your question first as it might already have been asked and answered. The Piazza forum will also be used to make announcements of various kinds about the course so please check it regularly!

Teaching Assistants

Vincent Cheng
Ben Cook
Jelena Furundzic
Anny Gakhokidze
Billy Huang
Andrew Lai
Daniel McKerricher
Aaron Mishkin
Neil Newman
Michael Przystupa
William Qi
Alfred Sin
Rachel Stiyer
Allison Tai
Bryan Tai
Napon Taratan
Scott Wang

Lecture, and Lab Hours/Locations

Lecture  Day  Time  Where  Who
Section 201 MWF 4pm - 5pm DMP310 Gail Murphy
Section 202 MWF 12pm - 1pm DMP310 Elisa Baniassad

Labs  Day  Time  Where  Who
L2A Monday 10am - 12pm ICCS 014 Rachel, Anny, Jelena
L2B Tuesday 12pm - 2pm ICCS 014 Neil, Allison, Rachel
L2CWednesday1pm - 3pmICCS 014Scott, Michael, Andrew
L2DWednesday4pm - 6pmICCS 014Aaron, Ben, William
L2EFriday 10am - 12pmICCS 014Jelena, Billy, Anny
L2FFriday1pm - 3pmICCS 014Alfred, Andrew, Neil
L2GTuesday3:30pm - 5:30pmICCS 014Scott, Aaron, Allison
L2HThursday9am - 11amICCS 014Alfred, Aaron, Scott
L2JThursday2pm - 4pmICCS 014Vincent, Bryan, Ben
L2MThursday4pm - 6pmICCS 015Anny, Napon, Ben
L2NMonday1pm - 3pmICCS 014Michael, Andrew, Dan
L2PMonday5pm - 7pmICCS 014Billy, Alfred, Vincent
L2Q Thursday4pm - 6pmICCS 014Billy, Neil, Jelena
L2RTuesday 3:30pm - 5:30pmICCS 015William, Rachel, Napon 

Office Hours

TA Office Hours  (in the DLC - ICCS X150)

 Where  When  Who
ICICS 305         Fridays 12pm-1pm 
No office hour Friday April 10
Gail Murphy
ICICS 329Mondays 1-2pmElisa Baniassad
X141 and X151Mondays 2pm - 3pmNapon
X150 - Table 4Mondays 3pm - 4pmBryan
X150 - Table 4Tuesday 10am - 11:30amAllison
X150 - Table 4Tuesdays 2pm - 3:30pmBryan
X150 - Table 4Wednesday 10:30am - 12pmNapon
X150 - Table 4Wednesdays 2pm - 4pmVincent
X150 - Table 4Thursdays 11am - 12:30pmWilliam
X150 - Table 4Thursdays 4 - 5pmVincent
X150 - Table 1Fridays 9:30am - 11amMichael



There will be an in-class quiz in late January or early February.  Details will be announced soon.


The midterm will (likely) be March 4th, from 7-9pm. The date of the midterm will be confirmed in early January.

Final Exam

Scheduled by Enrolment Services, and will be reposted here.

Labs and Project

In each lab, you will be working on assigned problems. Your solutions to those problems will be due before your next scheduled lab.  Grading of the labs will be done in the following lab: up to five times over the course of the term, your TA will meet you in the lab, look at your solution with you, and ask you questions about your work. Your overall lab grade will be the average of all the grades that you earned. Note that you will all be graded at least twice, but may be graded more often than that. Our intent in taking this approach is to assess your ability to communicate about programs and to provide you with an opportunity to get more in-depth feedback as soon as possible.

The last (approximately) six labs will involve working on a project; the very last lab (the sixth of the six devoted to the project) will be a demo of your completed project. 

Weekly programming assignments

Over the first several weeks of class, there will be five programming assignments to help you get up to speed with Java. These assignments are to be done individually. You will submit your work to an automated grader for marking. For more information, see the Assignments page.


Your grade in the course will be assessed based on exams, labs, and a project as shown in the table below. You must pass the final exam and the project to pass the course. If you do not pass the final exam or the project, the grade assigned in the course will be the minimum of 45% and the grade calculated using the below formula.  The instructors reserve the right to modify the grading scheme at any time.
Final Exam 40%
Labs 10%
Project 15%
Assignments 5%
Quiz 10%
Midterm 20%


There will be required readings (PDFs) posted on this website.  The readings will generally be available a week prior to when the material will be covered in class. The readings will be accessible from the Schedule page on this website.
There is an optional course pack available at the UBC bookstore. We will assign readings from the course pack in the last 2 or 3 weeks of term.

Some students find it useful to have a book that describes the Java programming language that is used in this course. There are many Java books available. One option is The Java Tutorial Fourth Edition: A Short Course on the Basics by S. Zakhour, S. Hommel, J. Royal, I. Rabinovitch, T. Risser and M. Hoeber. The content of this book is also available on-line- see the section entitled "Trails Covering the Basics".
For advanced topics as the course progresses, some students find it useful to consult Effective Java by J. Bloch for advanced topics.

Computing Resources

We will be doing a lot of interactive work in lecture. If you have your own laptop (with wireless access) and you feel comfortable bringing it to class, please do so. All software will be available on the department lab computers and lectures will not require each student to have a laptop with them, so do not worry if you are unable to bring a laptop to class.
We will be using the Eclipse development environment to support Java programming. We will be guiding you in the first lab on which version of Eclispse to install and how to get it. We will also be using different code examples which we will show you how to access.


For questions that are related to course material, please post to the Piazza discussion group. Instructions on how to join the group are available in Lab 0. If you have questions of a personal nature, please email your instructor.

How to Succeed in CPSC 210

As students, you likely hear the same advice in every course...keep up with the material.  Because the labs build on material from lecture and the labs form the basis of homework, this advice is especially true for CPSC 210. Here are some other ideas to help ensure you enjoy and learn the material in CPSC 210:
  • Attend lectures and labs. If you miss a lecture, find out what you missed from a fellow student.
  • Do the assigned reading. Some reading will be assigned before lecture or lab. Reading this material prior to lecture or lab will ensure you get the most out of attending and will ensure we can cover more interesting material. We do not expect you will fully understand the material prior to lecture but having read and thought about the material a bit will help you make more sense of it during lecture.
  • Take notes during lecture - this is critically important - the examples that we cover in lecture are not available anywhere else! Take notes when you are reading. Re-read the material after lecture or lab to make sure you understand the main points.
  • Allocate time to review 210 material daily. A few minutes each day is better than a long session once a week.
  • Talk with your fellow students about the material. While exams must be done individually, you can learn a lot by discussing the programs and material we cover with other students.
  • Use the discussion group to help address questions that arise after lecture or lab.
  • Come to office hours right away if you have a problem.

Academic Honesty

The Department of Computer Science has a detailed policy regarding collaboration on academic work. Please (re-)read this policy.
No collaboration of any kind is permitted for midterms or the final exam. You are allowed to collaborate on labs by discussing concepts and different approaches to solving a problem. However, the text and code deliverables that you submit for labs must be your own work.  We will post more information about collaboration on the project when the project is released.

Respectful Environment Statement

"The best possible environment for working, learning and living is one in which respect, civility, diversity, opportunity and inclusion are valued. Everyone at the University of British Columbia is expected to conduct themselves in a manner that upholds these principles in all communications and interactions with fellow UBC community members and the public in all University-related settings." from the UBC Respectful Environment Statement

Please see the UBC HR Respectful Environment site for more information.