CPSC 211: Introduction to Software Development
Course Information



General description
Academic conduct

Course Description

Course Objectives

When you complete this course, you should be able to:

  • move from personal software development methodologies to professional standards and practices
    • design software following standard principles and formalisms
    • create programs that interact with their environment (files etc.) and human users according to standard professional norms
    • develop effective software testing skills
  • given an API, write code that conforms to the API to perform a given task
  • identify and evaluate trade-offs in design and implementation decisions for systems of an intermediate size
  • read and write programs in Java using advanced features
    • collections, exceptions, etc.
  • extend your mental model of computation from that developed in CPSC111
    • recursion, concurrency, etc.
  • work with an existing codebase, including reading and understanding given code, and augment its functionality [in assignments]



Section 101 : Kimberly Voll

  • Office: ICICS/CS 241
  • Email: kvoll at cs dot ubc dot ca
  • Office Hours:  Tuesday, Friday, 9:30-11

Graduate Teaching Assistants

  • Shathel Haddad (shathel.haddad at gmail.com)
  • Nima Hazar (nhazar at cs.ubc.ca)

Undergraduate Teaching Assistants

  • Chris Thompson (chris at christhompson.ca)
  • Myles Shepherd (myshep at interchange.ubc.ca)

Course Structure


  • Section 202: M W F, 12:00-1:00, DMP 110


Here is the lab schedule for this term.

Each lab is 2 hours long:









13:00 - 15:00





16:00 - 18:00





9:00 - 11:00





12:00 - 14:00





10:00 - 12:00



You must attend the lab section in which you are registered. If you wish to switch, you must register in that lab section officially and inform your TAs that you have switched.

Labs are an important part of this course. Each lab is designed to give you the opportunity to apply the concepts learned in the lectures to small but realistic projects. Labs will also provide you with the practical knowledge and skills required for the completion of your course assignments-- they are essential!

Each lab session is supervised by a teaching assistant (TA), who will explain the problem you are going to work on in that session, provide instructions for the tasks to be done, and answer questions. There will be a document on the web that will describe the activities you need to perform during each lab session. For each lab, the document will contain a "Pre-Lab" and a "During the Lab" part. You must complete the pre-lab exercises and prepare any questions you may have before you attend your lab, so you will be ready to participate in the discussions that will take place during the lab session. The mark for the labs is based mainly on participation, but your TA may also ask you questions during the lab to evaluate your progress.

You are allowed to skip one lab during the term without penalty for any reason - no documentation will be required. However, if you skip a lab, you must ensure that you complete the work on your own time as material presented in labs could appear on examinations. If you skip more than one lab, you will receive a zero on the additional labs that you miss unless there are extenuating circumstances such as significant illness, in which case a doctor's note is required.

You must pass the lab component of your final grade in order to pass the course.


Your grade in this course will be based on the following activities:

  • lab participation
  • in-class exercises
  • four assignments to be done on your own
  • a midterm examination
  • a final examination

Your final mark will be calculated using the following formula:

  • 5% for the labs
  • 5% for the in-class exercises/participation
  • 25% for the assignments
  • 20% for the midterm
  • 45% for the final examination

To pass this course, you must obtain a 50% overall mark and, in addition, you must:

  • pass the assignments, AND
  • pass the labs, AND
  • pass the final examination.

Students who fail the assignments or the labs or the final exam will be assigned, as final grade in the course, the minimum of 45% and the grade computed using the above formula. The instructors reserve the right to modify the course grading scheme at any time.


The assignments are designed to help you become familiar with the concepts of inheritance, basic collections, basic file I/O and some aspects of graphical user interfaces. The assignments will provide opportunities for you to explore and learn some of the advanced features of Java and use some of the data structures you learn in the course and are available in the standard Java system. They will also help you acquire some project management skills appropriate for single-person programming projects and practical skills in debugging and testing small systems.

All assignments will be submitted electronically. There will be a short document on the web which will explain the hand in procedure you should follow. Your work must be submitted by the specified due date otherwise a late penalty may be applied.

The assignments are to be done in groups of two students ( or individually for students who prefer that way). Each group is expected to create and produce their own work. Please read the section on Academic Conduct.

Note that assignments are a mandatory component of this course. You must obtain a passing average grade in the assignments in order to pass the course.

If you have been unable to complete an assignment due to illness, you must present to the instructor a note from your physician, detailing the period during which you were ill, in order not to be penalized (i.e., receive a grade of 0) for that particular course work. The instructor will then tell you the course of action to follow regarding the missed assignment.

Lateness Policy

Unless otherwise stated, the lateness policy for all assignment will be as follows:

  • 10% if the assignment is no more than 24 hours late
  • 30% if the assignment is no more than 48 hours late
  • 100% if the assignment is more than 48 hours late

Note. If you submit an assignment before the deadline, you will not be able to re-submit the assignment after the deadline is past. However, you may submit your assignment as many times as you like before the assignment deadline. If you have not submitted anything by the time of the deadline, you may submit your late assignment exactly once after the deadline has past. Also note that the system will close precisely 48 hours after the deadline and no further assignments will be accepted.

General Notes

  • If you don't understand something covered in class, ask about it right away. The only silly question is the one which is not asked.
  • If you get a poor mark in a lab or the midterm, find out why right away. Don't wait a month before asking!
  • This course is challenging both in the level and quantity of work involved. You will, however, get as much out of the course as you put into it. It is therefore, advisable to start working early and not fall behind.


There will be one midterm, and a final examination. Each exam will be closed-book.

The final exam will be scheduled by the university during the December exam period. The midterm will be held on:

  • Wednesday, February 23, in class.

Do not write an examination if there is a medical factor which might significantly impair your performance. If you are unable to write the midterm due to illness, you must inform your instructor immediately and present a note from your physician as soon as possible, detailing the period during which you were ill, in order not to be penalized (i.e., receive a grade of 0). The instructor will then tell you the course of action to follow regarding the missed midterm.

If you have been or will be unable to write the final examination due to illness, you should contact the Science Undergraduate Advising office as soon as possible (within 48 hours of the exam).

Course Resources


The textbook material for the course is:

  • Cay Horstmann, Big Java (4th edition), John Wiley & Sons, Inc. 2010

For further reading, you can use the following reference books:

  • Kathy Sierra & Bert Bates, Head First Java; I especially recommend this book if you had difficulties in 111... it covers just about everything from 111 through 211 in an excellent and accessible manner.
  • Paul T. Tymann & G. Michael Schneider, Modern Software Development Using Java, 2nd Edition, Cengage Learning, 2007.
  • Any book on "Data Structures in Java" could be useful for the topics related to data structures.

Online Resources

The course material is available on the course web site: http://www.ugrad.cs.ubc.ca/~cs211, or from the CPSC 211 Matygo site found at:


The Matygo site also contains the course bulletin board and the student grades for the various course activities. To access the Matygo site you need to use your Campus Wide Login (CWL) id and password. The course home site is accessible without any password.

Please see the note on the main page re. Matygo!


The following is a tentative outline of the topics covered in the lectures and labs of this course. The order in which the topics will be presented may change.

  • Class Design
    • Designing class attributes and methods
    • Designing methods with preconditions, postconditions and class invariants
    •  Overloading equals, clone, etc.
  • Exception handling
  • Testing
    • Unit testing
    • Basic Black-box testing
  • Object Oriented Design
    • Principles of class design
    • Discovering classes and their relationships
    • Realizing class relationships
    • Inheritance, interfaces and polymorphism
    • Types of inheritance
    • Inheritance vs delegation
  • Java's Collections
    • Algorithmic complexity and big-O notation
    • Generic types
    • Collections and iterators
    • Sets and lists
    • Maps
    • Sorted collections
    • Stacks and queues
  • Graphical User Interfaces
    • GUI components
    • Containers and layouts
    • Events and listeners
  • Multithreading
    • Threads
    • Thread scheduling and priorities
    • Synchronization
  • Recursion
    • Single and multi-branch recursion
    • Recursion vs iteration
  • I/O Streams  
    • Basic byte and character streams

Academic Conduct

Unless otherwise stated, all work in this course is to be done on an individual basis. Students who do not do their own work ultimately cheat themselves the most. Submitting the work of another person as your own (i.e., plagiarism) constitutes academic misconduct, as does communication with others (either as donor or recipient) in ways other than those specified by the instructor. Such actions will not be tolerated. In this course, students may collaborate on assignments by discussing algorithms with each other. After such discussion, engagement in a mind-emptying activity (such as watching episodes of Gilligan's Island) for at least an hour is required before students continue to work on their own assignment. This ensures that each student has a thorough understanding of the concepts as a result of the collaboration. Although collaboration on algorithms is allowed, the line is drawn when students start to work on code. All code must be written alone. If any part of the code is based on someone else's work, this must be acknowledged by inserting comment statements noting the beginning and end of the relevant section of code. Students should be particularly careful when hiring a tutor. It is not permitted to submit code for an assignment or lab that was written in whole or in part by a tutor. All offences will be reported to the Department of Computer Science.

As a student at UBC you should be familiar with the "Student Discipline" policies outlined in the "Academic Regulations" section of the UBC Calendar. As a Computer Science student, you are also expected to be familiar with the Computer Science Department Lab policies and responsibilities found at:

The standard UBC regulations regarding misconduct will apply to all work submitted for grading in this course. It is sincerely hoped that there will be no need to invoke this policy.

The penalties for engaging in academic misconduct at UBC are very high - even for a first offence. Don't do it!

January 2, 2010