Topics and Goals

This course is intended to be an intensive programming experience that integrates core concepts in Computer Science and familiarizes students with a variety of programming/development tools and techniques. Students will primarily work in small teams on month-long projects emphasizing different specializations within computer science. The course focuses on honing good programming techniques to ease code integration, reuse, and clarity. The primary goal for this class is to have students emerge with strong programming skills, able to address both individual and team programming challenges competently. The class is meant to allow students to improve their programming skills through significant practice.

Among the topics to be covered in lecture periods are:

  • Style considerations in writing code.
  • Design of software systems and APIs.
  • Coding beyond the single component.
  • Design for portability, performance, testability.
  • Specification and documentation.
  • Basic software tools and their use.
  • Subject-specific topics related to the team projects (DB, AI, HCI)

Though many topics will overlap, this course is not intended to be as in-depth or comprehensive as a standard software engineering course, which focuses more on project management - students may take the software engineering class after taking this class.

Prerequisites

This class is intended for students who have completed CSCE 314 - Programming Languages or CSCE 350, and are concurrently taking (or have previously taken) CSCE 313 - Intro to Computer Systems. It is meant to be somewhat of a "capstone" course for the lower-level computer science courses, before taking courses in the upper-level tracks. You should already be comfortable with basic programming.

Class Meetings

The course is listed as a 2-hour per week lecture, and 2-hour per week lab, however it has been intentionally scheduled for 3 hours per week of lecture (along with the lab). We will meet a total of 28 lecture periods over the course of the semester. The idea is to "front-load" these lectures in the earlier part of the semester, to cover material that might be useful when working on the programming projects, and spend less lecture time during the project periods themselves. The specific list of days we will meet will be provided on the course web page.

There is a final exam time reserved for this class. The final exam time might be reserved for final project presentations. You should hold both the exam time for the course and the one for the lab as possible final project presentation times. We will aim to decide the specific schedule approximately 1 month before the final exam time, at which point one or both of those times might become free. The reading day may be an alternative for presentations. Note, though, that there will not be an actual final exam in the course.

Grading

Grading will come from 3 components of the class:

Team Projects:

Three major team projects, 26% of grade each, for 78% total. Specific grading practices for each project will be announced when that project is given out, but the grade may include factors such as evaluation of code clarity, teamwork, etc., in addition to actual performance of the code. Peer evaluation (maily with-in teams and in some cases from outside) will be used as a significant contributing factor to these grades.

Individual Project:

12% of the grade will be due to an individual project, which will be done prior to the team projects. The project will involve significant coding, and will be graded both on correctness and on style of code. Peer evaluation will be used to judge coding style. The peer evaluation process may also figure into the grade of the student.

Others:

Quizzes, participation, and small assignments: 10% of the grade. Throughout the semester, there will be small individual quizzes taken in-class and/or online, attendance evaluations in lab and/or class, etc. These will combine to form 10% of the grade. The value as a part of this 10% for any quiz or evaluation will be stated when it is given.

The grading scale expected to be used is:

A >= 90% > B >= 80% > C >= 70% > D >= 60% > F

In addition to this, the instructor reserves the right to provide a relative or absolute curve to the final class grade (note that such a curve has not always been applied, and should not be assumed). Also, the instructor may raise the grades of any students very near a borderline based on a subjective evaluation of class participation and effort.

Required Textbook

We will be using the following textbook:

Code Complete, 2nd edition, by Steve McConnell, Microsoft Press, 2004.

Despite being more than 10 years old, this is a useful textbook, that even many professional programmers find valuable. If you are going into any form of software development after graduation, you should still find much of this book useful. There is a PDF version of the book available here

The nature of this class is that no single textbook will cover all of the material needed in the course. There are a wide variety of books out there related to software development, and we might draw material from or reference several of them during the course of the class. References to these other books will be provided when possible, but some material might be provided only in class lectures.