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)  (sec 101)
Ivan Beschastnikh (bestchai AT cs DOT ubc DOT ca) (sec 102)

Please note:
  • When sending mail to instructors, please include "CS210" in the header to enable faster attention by the instructors.
  • Please use Piazza for non-sensitive questions having to do with assignments/labs/project.

    TBD (AT cs DOT ubc DOT ca)

    Lecture, and Lab Hours/Locations

    Note: Labs start the week of September 9, 2013. Lab 0 is to be done on your own the first week (Sept 4-6, 2013).

    Lecture  When  Where  Who
    sec 101
    MWF            12:00-13:00     DMP 310 Gail Murphy

    sec 102
    MWF            14:00-14:50  DMP 110 Ivan Beschastnikh

    L1A Thursdays      9:00-11:00    ICICS 014/015Billy HuangCaitlin Matthew, David Hsiao, Stefan Kheraj and Napon Taratan
    L1B Tuesdays      14:00-16:00ICICS 014          Tom Jin, Lily Guo and Daniel Lim
     L1C         Tuesdays      12:00-14:00            ICICS 014     Tom Jin, Caitlin Matthew and Bryan Tai

     L1D Wednesdays   8:00-10:00     ICICS 014 Albert Thompson, Napon Taratan, David Hsiao

     L1E     Wednesdays 10:00-12:00 ICICS 014 Albert Thompson, Athena Chang and Bryan Tai

     L1F Wednesdays 12:00-14:00 ICICS 014 Nodir Kodirov, Paul Rhee, Caitlin Matthew

     L1G Fridays           9:00-11:00 ICICS 014 Fred Tung and Nodir Kodirov, David Hsiao (9-10), Athena Chang(10-11)

     L1H Fridays         15:00-17:00 ICICS 014/015  Billy Huang, Fred Tung, Brian Chau, Lily Guo and Paul  Rhee

     L1J Tuesdays     16:00-18:00 ICICS 014 Nodir Kodirov, Billy Huang and Stefan Kheraj

     L1K Tuesdays       9:00-11:00

     ICICIS 014 Caitlin Matthew, Brian Chau and Athena Chang
     L1M Thursdays    14:00-16:00
     ICICS 014 Nodir Kodirov, Perry Liu and Daniel Lim

    Office Hours

    Gail's Office Hours (in ICCS 305):

    Mondays 16:00-17:00 or by appointment (send email to murphy AT cs DOT ubc DOT ca for an appointment)

    Extra office hours:
    • Wednesday November 13, 4:30-5:30
    • Friday November 15 1-2
    • Thursday November 21 12-1
    • Friday November 22 1-2

    Ivan's Office Hours  (in ICCS 327)

              Wednesdays 16:00-17:00 or by appointment (send email to bestchai AT cs DOT ubc DOT ca for an appointment)

              No office hours on September 4th/18th, October 9th, and November 6th.

    TA Office Hours  (in the DLC - ICCS X150)

     Where When Who
     Table 2Monday          3pm-4pm Tom Jin
     Table 1Tuesday          12pm-1pm Lily Guo
     Table 2Tuesday          4pm-5pm Bryan Tai
     Table 2Wednesday     4pm-5pm Napon Taratan
     Table 4Thursday         11-12pm Paul Rhee 
     Table 2Thursday         2pm-3pm Caitlin Matthew
     Table 1Thursday        4pm-5pmPerry Liu
     Table 3Friday            4pm-5pm David Hsiao


    Midterm 1: Wednesday October 9, 2013 18:30-20:00 (location to be announced later)
    Midterm 2: Wednesday November 6, 2013 18:30-20:00 (location to be announced later)

    Notify your instructor as soon as possible, but definitely at least two weeks in advance of your midterms, if you have a conflict.


    Final Exam: December 06 at 08:30 AM.


    Most 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.

    There is also a required coursepack available at the UBC bookstore. We will assign readings from the coursepack in the last 2 or 3 weeks of class.
    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 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 Eclipse 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.

    Labs and Project

    In the labs, you will be working on assigned problems. Your solutions to those problems will be due at the beginning of 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 six labs will involve working (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. More details will be provided as term progresses. 

    Weekly programming assignments

    Over the first seven weeks of class, there will be five "weekly" programming assignments to help you get up to speed with Java. These assignments are to be done on your own. You will submit your work to an automated grader for marking. We will not have a weekly assignment the week of Midterm #1 or Thanksgiving. 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 TBD and the grade calculated using the below formula.  The instructors reserve the right to modify the grading scheme at any time.  

    Final Exam






     Weekly assignments

    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. 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.

    Professor Tamara Munzner has written a very good document titled:
    "Cheating: The List of Things I Never Want To Hear Again".  It is well worth reading.

    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.