Software Construction

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 will explain 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)
Norm Hutchinson (norm AT cs DOT ubc DOT ca)

Graduate TAs:
Bruno da Silva (bnds AT cs DOT ubc DOT ca)
Julius Davies (juliusd AT cs DOT ubc DOT ca)
Nuray Dindar (nudindar AT cs DOT ubc DOT ca)
Rahul Jiresal (jiresal AT cs DOT ubc DOT ca)

Undergraduate TAs:
Alexander Boyd
William Bredefeld
Maverick Chan
Akshat Divekar
Michael Enescu
Quinlan Jung
Dennis Tsang

Lecture, Lab and Office Hours

 Sec 101 M, W, F  11:00-12:00 DMP 110 Gail Murphy
 Sec 102
 M, W, F  14:00-15:00 DMP 110
 Norm Hutchinson
 L1A M           14:00-16:00 ICCS 014
 Dindar, Divekar, Chan
 L1B T            14:00-16:00 ICCS 014 Dindar, Boyd, Enescu
 L1C T            12:00-14:00 ICCS 014 da Silva, Divekar, Tsang
 L1D W           08:00-10:00
 ICCS 014
 Jiresal, Boyd
 L1E   W           10:00-12:00
 ICCS 014
 Davies, Bredefeld, Chan
 L1F W           12:00-14:00
 ICCS 014
 Davies, Tsang, Jung
 L1G F            09:00-11:00
 ICCS 014
 Dindar Bredefeld, Chan
 L1H F            15:00-17:00 ICCS 014
 Dindar, Bredefeld, Jung
 L1J T            16:00-18:00 ICCS 014
 Jiresal, Divekar, Boyd

Note: Labs start on Monday, September 12th!  Note that you are expected to do Lab 0 on your own before formal labs begin.  See the description of the labs.

Gail's Office Hours (in ICCS 305):

Thu Dec 4, 2010: 11:30-12:30pm (or email for an appointment)
Thu Dec 15, 2012: 12:00-1:00pm (or email for an appointment)

Norm's Office Hours (in ICCS 319):

Wed: 15:00-16:00 (or email for an appointment) (except not Wed Dec 7)

Review Sessions Prior to Final (in DMP 110):

        Wednesday December 14, 2-4pm
        Friday December 16, 1-3pm

TA Office Hours

This first week, TAs will be available at the following times in the Demco Learning Centre to help you with Lab 0 (which you are supposed to finish before the end of the week).

 Thursday September 8th  
 09:00 - 11:00
 da Silva
 Thursday September 8th    13:00 - 14:00
 Friday September 9th    09:00 - 11:00
 da Silva
 Friday September 9th    12:30 - 14:00
 Friday September 9th    15:00 - 16:00
 da Silva

During the rest of the term, TAs will be available in the Demco Learning Centre (DLC) as shown in the following calendar. 

CPSC 210 2011W1 DLC Calendar


Midterm #1: Wednesday, October 5, 19:00-21:00
Midterm #2: Wednesday, November 9, 19:00-21:00

The location of the midterm will be announced later.


Additional required readings for the course will be from course notes posted on this website.  The notes for a given week will generally be posted the week before. The notes will be in PDF and will be accessible from the Schedule page on the navigation sidebar.
An optional book 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. This content is also available on-line - see the section entitled "Trails Covering the Basics".

As the course progresses, you might find it useful to sometimes consult Effective Java by J. Bloch. 

Computing Resources

We will be doing a lot of interactive work in lecture. If you have your own laptop and you feel comfortable bringing it to class, please do so. It will be helpful for you to have wireless on a computer you bring to class. 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 Eclipse to install and how to get it. We will also be using different code examples which we will show you how to access.

Course Announcements

Watch the Announcements page on this web page - you are responsible for knowing the information contained in any announcement posted to this page.  


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.

Labs and Project

In the labs, you will be working on assigned problems. Your solutions to those problems will be at the beginning of your next scheduled lab.  Grading of the labs will be done in the following lab; up to four 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.  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 six labs will involve working (likely as part of a pair) on a project; the very last lab (the sixth of the six devoted to the project) will be a demo of your completed project.


Your grade in the course will be assessed based on exams, labs, a project and class participation 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 instructor reserves the right to modify the grading scheme at any time.  

Final Exam






Midterm #1


Midterm #2


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.
  • 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 and the term project 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.