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. 


Meghan Allen (meghana AT cs DOT ubc DOT ca)  (sec 202 and bcs)
Paul Carter (pcarter AT cs DOT ubc DOT ca) (sec 201)

Please note:
  • When sending mail to instructors, please include "CS210" in the header to enable faster attention.
  • Please use Piazza for non-personal 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 January 6, 2014. 

    Lecture  Day  Time  Where  Who
    sec 201
    TuTh                  14:00-15:30 DMP 310 Paul Carter

    sec 202/BCS
    MWF               12:00-13:00 DMP 310 Meghan Allen

    L2A Mondays            10:00-12:00 ICICS 014 Jelena Furundzic, Jomar Santos/Robin Newhouse, Albert Thompson

    L2B Tuesdays       12:00-14:00 ICICS 014           Perry Liu, Jacob Madrid, Caitlin Matthew
     L2C  Wednesdays               13:00-15:00  ICICS 014      Yingsai Dong, David Hsiao, Stefan Kheraj
     L2D  Wednesdays         16:00-18:00  ICICS 014  Sisi Guo, Jackson Qiu, Caitlin Matthew

     L2E  Fridays          10:00-12:00  ICICS 014  Jelena Furundzic, Jacob Madrid/Perry Liu, Albert Thompson/Yingsai Dong

     L2F  Fridays         13:00-15:00  ICICS 014  Yingsai Dong, Stefan Kheraj, Evelyn Kim
     L2G  Tuesdays        15:30-17:30  ICICS 014  David Hsiao, Anders Linn, Jomar Santos
     L2H  Thursdays       09:00-11:00  ICICS 014  Christy Choi, Jelena Furundzic, Jomar Santos

     L2J  Mondays       15:00-17:00  ICICS 014  Tucker Buchy, Evelyn Kim, Jackson Qiu
     L2K  Thursdays       

     14:00-16:00  ICICS 014  Albert Thompson/Christy Choi, Yingsai Dong, Jomar Santos
     L2M  Fridays    
     15:00-17:00  ICICS 014  Christy Choi, Anders Linn, Robin Newhouse
     L2N Thursdays     16:00-18:00   ICICS 014   Tucker Buchy, Christy Choi, David Hsiao
     L2P Mondays     13:00-15:00   ICICS 014   Stefan Kheraj, Jacob Madrid, Caitlin Matthew

    Office Hours

    Meghan's Office Hours (in ICCS 243):

    Mondays 1:30-2:30pm
    Thursdays 4-5pm

    Paul's Office Hours  (in ICCS 391)

    Mondays 10-11

    Wednesdays 11-12

    Fridays 12-1

    TA Office Hours  (in the DLC - ICCS X150)

     Where  When  Who
     DLC  Mon 11:00-12:00  Tucker Bucky
     DLC  Tue 10:00-12:00  David Hsiao 
     DLC Wed 10:00-11:00 Caitlin Matthew
     DLC Wed 11:00-12:00    
     Perry Liu
     DLC    Thu 12:00-14:00 Perry Liu
     DLC Fri 9:00-11:00 Sisi Guo


    Midterm 1: Thursday, February 6, 2014 18:30-20:30

    If you're writing with your laptop:
    Section 201, last names that start with A through H in DMP 301
    Section 201, last names that start with I through Z in DMP 310
    Section 202/BCS, last names that start with A through L in Wood 1
    Section 202/BCS, last names that start with M through Z in Wood 5

    If you're writing on a lab computer please meet in ICCS 008.

    Midterm 2: Tuesday, March 11, 2014 19:00-21:00

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

    If you're writing with your laptop:
    Section 201: CIRS 1250
    Section 202/BCS: ESB 1013

    If you're writing on a lab computer please meet in ICCS 008.


    Final Exam: April 30, 12:00pm (Location still to be announced by UBC)


    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 on a project; the very last lab (the sixth of the six devoted to the project) will be a demo of your completed project. The project is split into two phases. The first phase is to be done alone while the second is to be completed in pairs.  More details will be provided as term progresses. 

    Weekly programming assignments

    Over the first seven or eight 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. 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






     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.

    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.