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 interesting, accessible and useful to a wide range of students. CPSC 110 is a pre-requisite (CPSC 111 may be considered upon discussion with the instructor).  CPSC 210 will be considered equivalent to CPSC 211, providing students access to other second and third year courses.

Students are asked to read the information on this page in its entirety before the first class.


Gail Murphy (Instructor)
Meghan Allen (Lab Instructor)
Thomas Fritz (TA)

Lecture, Labs and Office Hours

   T     R    Lecture (201)
DMP 201
 M             Lab (L2A)
 10:00-12:00 ICCS 014
   T        Lab (L2B)
 11:00-13:00 ICCS 014

Please drop by Gail's office anytime, if I'm not with someone I'd be happy to speak with you. Or email Gail if you want to see her.

We'll decide the first week if/when convenient times are for office hours.

Lab will be held the first week, starting January 4, 2010. Given the timing of the labs, you will attend lab before lecture. The first lab will help to ensure you have access to the appropriate computing resources for the course.


Mid-term #1: One class the week of February 1-5, 2010
Mid-term #2: One class the week of March 22-26, 2010


Required readings for the course will be from course notes.  The notes for a given week will be posted by midnight Saturday the week before. The notes will be in PDF and will be accessible from the Schedule and Materials link on the navigation sidebar.
A recommended 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.

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 news navigator on this web page for course announcements. A google group will be available for asking questions; details on how to sign-up for this group are available in Lab 0.

Labs and Project

In the labs, you will be working on assigned problems. Your solutions to those problems will be due the Saturday following the lab at 23:59 (i.e., midnight). Upto four times over the course of the term, you will be marked on those solutions during a following lab. When you are selected for marking, you will be asked to describe to a TA in the lab your answers to the previous week's lab. Our intent in taking this approach is to get you the best feedback as fast as possible.

The last five labs will involve working in a pair to complete a project; the very last lab (the fifth of the five 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 to pass the course. If you do not pass the final exam, the grade assigned in the course will be the minimum of 45% and the grade calculated using the below formula.

 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.
  • Takes notes during lecture. Takes 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 some other assignments must be done individually, you can learn a lot about discussing the programs and material we cover.
  • Use the discussion groups 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 mid-terms or the final exam.
we will post more information on collaboration in labs and on projects.