Spring 2014


Geoffrey M. Voelker (voelker@cs.ucsd.edu)
CSE 3108

Course Overview

The goal of this course is to experience the design and implementation of a large, complex software system. In taking this course, you will:

  1. Have a software development experience that is closer to what you will find in industry than with more traditional course projects.
  2. Work in large teams (six) and on a project too large to be completed by the heroics of one individual.
  3. Build software using real-world tools instead of doing everything from scratch.
  4. Build software with the stringent demands of a high-performance, real-time, distributed application.
  5. Have some fun (really).
  6. Work on a project that you can showcase to potential employers.

Over 10 weeks, you will decide what you want your project to be, specify its requirements, create a design and implementation schedule, and then implement it. Because students find the application so compelling, your project will be a distributed, real-time, 3D, multiplayer game. However, the overall goal of this course is not necessarily to learn how to write games (notice that it was not listed on the course goals?) — having the project be a game just makes the development experience challenging, exciting, and fun.

By default, we will work on Windows using DirectX and, if you prefer, OpenGL. However, this does not mean that you need prior experience with either toolkit. Remember that your project is a group effort, and only one part of the project deals with graphics. Groups in the past have also used entirely open-source cross-platform libraries as well. But, we will not be using any game development kits — you will be implementing your own game engine.

The project requires both serious commitment and ability. In terms of time commitment, it will be on the order of the compilers course or my CSE 120 operating systems course (using Nachos). In terms of ability, you will need to have excellent programming skills, significant personal initiative, a well-developed capacity for problem-solving, and a strong commitment to completing the group project. As an example, you will encounter problems that I will not know the answer to (e.g., detailed problems with DirectX). Our TA will be a veteran and a tremendous resource for tracking down problems. But you will also have to troubleshoot the problems yourself or search online (Web pages, newsgroups, other DirectX code, etc.).

This course is for more than just CSE majors. It is intended to combine the talents of students with strong programming backgrounds (CSE, ECE, Math/CS) with students with strong creative talents in digital arts and visualization (ICAM and CogSci). If you have any questions about whether the course is for you, send me email. Since the success of the project fundamentally depends upon your ability to significantly contribute to a group effort, though, this course should not be taken casually. As a result, I am only allowing students to enroll by instructor permission only. See the application procedure below for more information.


There will be a few lectures at the start of the course, and then weekly group meetings thereafter. Other than the project itself, there are no homeworks or exams, but you will produce a design specification, a development schedule, weekly status reports, and a final project writeup. Grading will be based on a combination of group and individual performance, including your ability to contribute, collaborate, and communicate successfully as part of a large group. We will be meeting and interacting closely and frequently enough that I will be able to appraise individual effort.

We will form the groups at the end of the first day of class. We'll do it in two stages. First, I will ask for two volunteers who are willing to work on the graphics engine for each game. Once we have graphics volunteers for each group, then I will ask people to choose which group they would like to be a part of. Alternatively if, after the enrollment process, you know of people you would like to be in your group just let me know via email (and cc: everyone in the group).

Application Procedure

Enrollment is by instructor permission only so that I can ensure that students have sufficient background for the course. Also, to make this kind of class manageable, I plan to limit enrollment to about 30 students. Most students successfully taking the class are in their last year and have taken all of the core classes, but this is not mandatory. Enrollment is also on an individual basis. You do not need to form a group, or be part of a proposed group, before applying and taking CSE 125. Similarly, even if you do happen to have a group in mind when applying, it is possible for some people in a proposed group to be admitted and others not (e.g., because they are not in their final year, and I gave priority to other students in their final year who applied). See "Mechanics" above for how we ultimately finalize groups for the course.

My goal is to ensure that you are not getting in over your head, and that you have the requisite programming skills, personal initiative, problem-solving ability, and commitment to a group project for the course. It does not require an outstanding GPA; I fully realize that some students are much better software problem solvers and developers than test-takers.

To apply to enroll in the course, submit the following information to me:

Simply email the info to me (voelker@cs.ucsd.edu) and I'll acknowledge that I received it.

For the Spring 2014 quarter, the deadline for submitting materials is Friday, February 28, 2014. I will notify everyone of enrollment decisions by Friday, March 7, 2014. Go ahead and enroll in courses as usual, and you can drop one afterwards if you wind up taking this course.

If you have any questions about the course, do not hesitate to send me email or drop by my office. Unless I am traveling, my office hours are Monday 3–4pm.

Geoffrey M. Voelker <voelker@cs.ucsd.edu>