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, 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 approximately 2/3 of the 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 5 components of the class:

Team Projects:

Two major projects, each one worth 25% of grade each, for 50% 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 (mainly with-in teams and in some cases from outside) will be used as a significant contributing factor to these grades. In addition, team projects will include instructed and evaluated writing components that will contribute to the written component, as described below. These will include a total of 3 or more large written reports that receive separate individual grades, as detailed below.

Midterm Exam:

15% of the grade will be due to the midterm exam. The exam will cover material discussed in class and in assigned readings.

Written Report:

20% of the grade will be due to a larger written report, performed in the context of one of the team projects. There will be a total of at least 3 longer reports, and for each, one team member will be assigned to write that report for the team. The written report will require the student to produce the initial draft, collect formative feedback from the team members, and then revise to produce the final version. The process would than repeat for the subsequent writing pieces, each time authored by a different team member. As a result, through the course, every team member gets the opportunity to author a report of her own and revise it based on peer-feedback. The report may be used in determining the team grade for the project, but will count as an individual grade for the single student submitting it.

Individual Project:

10% 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 in the form of written reports will be used to judge coding style, naming, and quality. Each student will be required to submit 100-word peer reviews for each of 3 other students’ projects. The peer evaluation process will also figure into the grade of the student.

Attendance and Participation:

5% of the grade will be due to Attendance and participation. The purpose of this grade is to ensure students stay engaged and active throughout the course, and may be based on attendance, short quizzes, or short lab assignments that ensure students are following the readings and supporting the teamwork portion of the class. Attending all lectures and labs will result in additional points being awarded and missing a class or lecture in more than half the weeks will result in no points awarded for this grade.

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.