CES 203 - Programming Practicum


Spring, 2014

Syllabus Index

General Information

Professor: George Mobus Phone: 692-5894
email: gmobus@u.washington.edu
Office: Cherry Parkes 227
Hours: TBD, or by appoint.
Class: Time: MW 8:00-10:05 
Location: CP 206D 
Textbook: C Programming Language Kernighan & Ritchie

Catalog description

Deepens and develops the programming knowledge and skills through more complex projects done in teams. Includes an introduction to a true object oriented language (e.g. C++, Objective C, or Java) and focuses on how the language architecture and syntax support the OOP semantics learned in CES 202. Introduces advanced project management tools, advanced debugging and testing methods. Prerequisites: TCES202.

What You Need to Know Beforehand

Students entering this course need mastery over the following:

  • Basic knowledge and skills in programming environment tools, including an IDE, debugging techniques and unit testing
  • Knowledge of ADT/Object Oriented design principles and semantics
  • Ability to implement classes using ADT design methods in a procedural language (preferably C)
  • Ability to write moderately scaled applications using multiple object modules

What To Expect From the Computer Programming Sequence of Courses (201, 202, & 203)

The overall objective of this sequence of courses is to get you ready for the many problem solving situations in computer engineering that involve general purpose programming in a high-level language. In the third course you will learn oneor more object-oriented languages as well as the basic language (C) that will prepare you for most of the courses ahead in CES.

By the end of the sequence you should be able to write fairly large programs (> 1,000 lines of code) starting from a functional description (or requirements, telling what the program should do). You will learn how to generate functional specifications (specifying HOW the program will meet its functional requirements), external and internal documentation, and program design and implementation.

What To Expect From 203

This course will prepare you to understand true Object-Oriented Programming (OOP) to which you will be introduced in 203 in the form of C++ and Java. By the end of 203 you will be prepared to tackle any and all of the engineering programming problems you will encounter in multiple languages.

Student Learning Goals

In addition to the knowledge aspects of programming discussed above, the overall learning goals for students include being able to:

  • Management of large-scale programming projects
    • Understanding the problems and methods for bringing hardware and software components together
    • Using version management tools
    • Developing typical documentation requirements for such projects
    • Working in a team environment on a complex project
  • Understanding of large-scale applications in engineering problems and/or computer modeling
  • Capability to program in an object oriented language (C++ and Java)

Program Learning Outcomes

Learning outcomes are the capabilities that you will acquire here and take with you into the workplace. They are program-specific learning outcomes reinforced in most of the other courses. These and many more are developed in all of your courses in the CES program. The ones that we will focus on in this class are:

  • an ability to apply knowledge of computing and mathematics appropriate to the discipline;
  • an ability to analyze a problem, identify and define the computing requirements appropriate to its solution;
  • an ability to design, implement and evaluate a computer-based system, process, component, or program to meet desired needs.

Ground Rules

The following course policies will be observed.


Grades will be based on a percentage of total points acquired through a variety of exams, in-class assignments, programming assignments and possibly quizzes.

Assessment of Learning Objectives

  • Short programming assignments in C++ (3 weeks of course) 15%
    • In-class, pair programming exercises
    • Homework, short programs
  • A large multi-staged, team-based, programming project to integrate their previously learned skills. work will be evaluated continually in terms of associated learning objectives such as proper documentation, module designs, etc. (six weeks) 40%
  • One midterm exam covering concepts 25%
  • Final on Object-Oriented Language concepts 20%

Topics Covered

  • New architecture and syntax of OO languages
  • Analysis and implementation of large-scale application programs
  • Methods for managing team efforts, division of labor and cooperation
  • Methods for documenting design and implementation of multiple module programs
  • Introduction to code version management tools
  • Practice in new OO language
  • Implementation Practice

Target Schedule

This schedule will be refined and posted on the Moodle site. Please refer to that site often as subjects may change based on class progress.

  • Introduction to large-scale programming and system integration (1 week)
  • Introduction to OO language C++ (1 week)
    • Class, objects, constructors, etc. in C++
    • Basic layout of C++ modules
  • Problem definition (example a simulation model of a computer) (1 week)
  • Team management and version control (1 week)
  • Implementation, integration, testing, and deployment of application (6 weeks)
  • Introduction to Java (concurrent with last 2 weeks)

Test make-ups

I will give make-up midterm exams only with prior permission or written excuse.

Academic Honesty

Unless otherwise indicated, homework assignments are to be completed on an individual basis. Academic dishonesty is any act of turning in work that is not your own, but representing it as your own. This includes program code, homework and exam answers. I also consider any act of providing others with your work so that they can copy it as an act of dishonesty. Any such act will result in an automatic failing grade on the assignment/exam. Any subsequent repeats may result in a failing grade for the course and reporting of the incident to administration.

You should feel comfortable discussing topics, including general approaches to assignments, in a collaborative atmosphere. Discussing concepts and methods to be applied to problems is often a tremendous aid to studying. But when it is time to sit down and write down answers or program code, you should work on your own.

Course Mechanics


In this class lectures are short talks to cover principles regarding language constructs and programming practices. They will be followed by exercises (some graded, some not) so total lecture time is kept short compared with practice time. However, based on the subject matter times can vary.

Attendance is not mandatory. However, there will be graded exercises on occassion during classes and if you miss these and do not have a medical or other legitimate excuse you will not be able to make them up.

Office Hours

I maintain regular office hours (see above), but have a general open door policy. If my door is open (even if only cracked open) I am in and willing to take walk-in visits. If my door is closed, even if you know I am in my office, I am not available at that time, so please do not knock.

I sincerely encourage all students to drop by several times during the quarter even if you don't have a specific problem or question. It is good to get to know one another. But if you are having problems you need to come see me for certain. Don't be shy. I really don't bite.

Moodle Web Site

Currently we use Moodle for course management (https://moodle.insttech.washington.edu/). Please be sure to check in frequently as most information on the course and all assignments will be made through that site.

There will also be a collaborative forum set up for students to participate with questions and answers as well as sharing interesting programming information and web site links. You are encouraged to use this forum for communications outside of class time.

Textbook Resources

The C Programming Language, Brian W. Kernighan, Dennis M. Ritchie

Support for students with disabilities

Institute Resources

  • Lab Facilities
  • Mentors web site for information about when the mentors are in the labs and other information. A word of caution however. Most of the mentors are Java proficient but not many know C/C++ so you would be advised to not seek mentor help unless you know for sure that the mentor is a C/C++ programmer. In truth, I would prefer you try to get ahold of me for problems.