Abstract
Online computer programming courses place unique requirements on the course delivery system. For example, the system should ensure that the source and executable code files submitted by students correspond, it should ensure that student source code is submitted in a consistent, readable format, and it should enforce coding standards for student source code. A general-purpose web-based course delivery system such as Blackboard is not designed to handle these unique requirements. Web-based course delivery systems have general limitations also, such as no capability for users to write simple programs to automate course content updates. This paper describes a custom Java online course delivery system that satisfies requirements specific to computer programming courses as well as requirements common to all courses, such as handling of grades. The system includes a course database and Java applications to handle assignments, exams, review exercises, and grades. The system integrates with Blackboard but is not web-based. It is being used to teach online Java programming courses at William Rainey Harper College.
Keywords: Java, online, delivery system
System Development and Requirements
The system began as a set of Java programs to improve and automate the delivery of classroom Java programming courses. System requirements and the system were refined incrementally over several years to include new features and support for online courses. Requirements for the current system include:
    1. Handle assignments, exams, review exercises, and grades as an integrated system rather than standalone programs. There must be a programmable database that defines the tasks for each course and grading rules. The database must be used by all system components and must control their functioning.
    2. Support multiple courses. The system must be usable for any Java programming course, with some restrictions. The functioning of each system component must be determined by database contents not "hard-coded" functionality. 
    3. Ensure proper submission of programming assignments. It must impossible for a student to submit an assignment with missing files, with the wrong name, to the wrong place, or in the wrong format. This can be a problem for computer programming courses since an assignment may involve multiple files in specific formats. The system must enforce a set of steps for submitting an assignment and each step must not provide any way for a student not to follow the process.
    4. Maintain coding standards. The system must check a student assignment for Java coding standards errors before the assignment is submitted, so the student can fix the errors before submitting the assignment.
    5. Support composition exams. It must be possible to give exams not limited to true/false and multiple choice questions. It must be possible to have questions that involve explanation of concepts, reading of code, and writing of code.
    6. Provide full-featured grading rules. The system must support unrestricted grouping of tasks into categories, automatic task weighting by points possible, automatic tossing out of a specified number of lowest-scored assignments, manual tossing out of selected tasks, specified percent reductions for late assignments, and curving. The system also must be capable of limiting a student's course grade based on the grade for a specific task category, for example, limiting the grade to no more than one letter grade better than the grade based on exams alone.
    7. Minimize instructor overhead. As much as possible, the operations required by the instructor must be automated, not manual. The instructor must be able to perform repetitious operations by running a program. For example, the number of times the instructor must manually copy files must be minimized. 
    8. Maintain student privacy. The system must control access to student information by id and password.
    9. Not depend on Blackboard features. The system must not depend on any feature specific to Blackboard. 
    10. Use only Java. All components of the system must be written entirely in Java. This is a pedagogical requirement not a technical requirement. It is important for Java students to see, to the fullest extent possible, what can be done with the language. Course assignments and textbook programs do not do this since they are focused on specific topics and have limited functionality.
System Components
Figure 1 shows the system schematically. The components are:
    1. File Transfer Protocol (FTP) server. This is a standard FTP server used for submitted assignments, graded assignments, exams to be taken, graded exams, and exam solutions. The server is completely transparent to students.
    2. Blackboard. It has all programming assignments and all programs a student must install on his workstation. Students only obtain files from Blackboard; they never submit files to Blackboard. With this design Blackboard could be replaced by a course website.
    3. Database Manager. The instructor uses this program to define courses, such as the name, type, points possible, and due date of each assignment and exam, to maintain student scores, and to calculate course grades. This program produces a database file that is put on the FTP server and used by all other components.
    4. Assignment Manager. A student uses this program to build and submit programming assignments and to retrieve graded assignments. Figure 2 is a program screen capture. The user interface is simple, primarily pushbuttons, but the program forces a student to go through the proper steps to submit an assignment. A student retrieves graded assignments by pushbutton also. The program has full help with step-by-step 
Figure 2. Assignment Manager

       instructions and screen captures. The Assignment Manager and Database Manager are the two most complex components of the system and are discussed more later in this paper.
    5. Exam Manager. A student uses the program to obtain and submit exams and to retrieve graded exams and exam solutions. Each exam is a Microsoft Word document. The student uses one pushbutton to obtain an exam, another to submit a completed exam, and another to retrieve a graded exam and its solution. The program has full help with step-by-step instructions and screen captures. The Exam Manager imposes a time limit on exams and keeps the student informed of time remaining. It also prevents errors such as a student overwriting a completed exam by downloading it again. 
    6. Exercise program. A student uses this program to do true/false and multiple choice review exercises. If the student answers a question incorrectly, it is displayed in red. A student can take an exercise any number of times. The exercises are defined as course tasks in the database, and the exercises a student sees are based on course and date. The instructor defines the exercises in Extended Markup Language (XML).
    7. Assignment Solution Viewer. A student uses this program to view assignment solutions. Figure 3 is a program screen capture. The solutions a student sees are based on course and date. The instructor builds an assignment solution by running the Assignment Manager program on his own code. This design ensures that the instructor’s code is passed through the Assignment Manager just like student code and is displayed in the same format as student code. 
Figure 3. Assignment Solution Viewer

    8. Grades Viewer. A student uses this program to view his assignment and exam scores and course grade. 
    9. File synchronization program. The instructor uses this program to upload files to the FTP server and download files from the server. The program synchronizes the contents of a folder on the FTP server with a folder on the instructor's workstation, including all subfolders. This program eliminates the need for the instructor to manually copy any files to and from the server and minimizes “wrong file” errors.
Database Manager
The Database Manager uses a simple, custom programming language consisting of commands. There is no Graphical User Interface (GUI). A set of commands can be defined and maintained using any text editor, such as Microsoft Windows Notepad. This approach makes the system code simpler and provides automation not possible with a GUI. By rerunning command files, the instructor can do repeated processing without having to do repeated GUI selections. Figure 4 shows the commands to define one Java programming course. Among the functions provided by the Database Manager are:
    1. Create courses. A course consists of a set of student tasks organized into categories. Typical categories would be “assignment”, “review”, and “exam”. For each category the instructor can assign a weight for course grade, can specify the number of tasks to be dropped automatically when computing course grade, and can specify whether the grade from that category is the maximum grade the student can receive regardless of scores in other categories. For each task the instructor can specify number of points, number of bonus points, due date, and whether the task counts for course grade.
    2. Create sections. A section is one instance of a course. For each section the instructor can specify course, year, semester, identifier, and all students in that section. Each student is identified by name and id. 
    3. Enter task results. For each task the instructor can enter the score, late penalty, and weight for each student. The weight can be used to ignore an assignment for a specific student. The instructor can also apply curve points to each task.
    4. Compute, display, and print grades. For each student the display shows the grade percentage for each category, the overall grade percentage, and course grade, including how the grade is calculated. The printed report is an Adobe PDF file formatted for distribution to students; the student gets a record of all assignments and exams as well as course grade calculation.
    5. Organize multiple databases. Using command files the instructor can organize courses and sections into databases in any combination. For example, there could be one database for each semester or one database for all courses for all years. 
The database manager is used for all courses, not just Java online courses.
Assignment Manager
A Java assignment from a student consists of two related items: the source Java code written by the student and the corresponding executable Java code. The source code and executable code each may consist of multiple files. The Java development tools used by the student do not necessarily ensure that these files match, that they are formatted in a standard or readable way, or that they follow a set of coding standards. The primary function of the assignment manager is to build a single file that contains matching source and executable code, where the source code has been formatted in a consistent way and coding standard errors have been marked. The steps performed by the student and the processing done by the Assignment Manager are:
    1. The student selects all his assignment source code files. The program reads these files, analyzes them, and displays a formatted listing that includes all files, with coding standard errors marked. To build this listing the program analyzes the student's source code line by line to identify specific items, such as variables. This is the most complex processing done by the system. The program also checks whether the student’s files are consistent. For example, the student can select a source code file only if there is a matching executable file. 
    2. If there are coding standard errors, the student corrects them using his Java editor and clicks an Assignment Manager button to repeat the analysis and listing display.
    3. When there are no more coding standard errors, the student clicks an Assignment Manager button to build his assignment. This button is enabled only if the listing has been built successfully; the student must follow the procedure step by step. The program combines the formatted listing and executable code into a single executable program file, then runs this program for the student. This gives the student a final opportunity to check that his program executes correctly. The Assignment Manager uses the database information and current date to name the program file according to the assignment name; there is no opportunity for the student to give the file a wrong name.
    4. When the single file has been built, the student clicks an Assignment Manager button to submit the file as his assignment. The program saves the file in the student’s folder on the FTP server. The student neither names his assignment nor puts it in a specific place. 
    5. To grade assignments, the instructor runs the synchronization program to get the student assignment files from the server, then starts the Assignment Manager in an instructor mode not available to students. For each student the instructor opens the assignment file and puts grading markups into another file created by the Assignment Manager. The instructor then runs the synchronization program to put the graded files on the server. When the student later runs the Assignment Manager, he clicks a button to download all his graded assignments and view them. All graded assignments are available with one button click.
Results
The system has performed successfully for students and the instructor. Students have not had problems installing the system, submitting assignments, getting or submitting exams, doing review exercises, or getting grades. The system has been at least as easy for students to use as Blackboard alone. This likely is a consequence of the full online help for the system components and their user interfaces, where a student can perform operations simply by button clicks. For the instructor the system is a pleasure to use. The command files and synchronization program eliminate many manual GUI operations that would be required with Blackboard. For example, to update an assignment solution the instructor only has to copy the file to the correct location on his computer and run the synchronization program. There is no need to login to Blackboard and manually edit a file link. Since the system is not web-based, operations are faster than with Blackboard. The synchronization program can upload or download a set of files in less time than it takes to login to Blackboard and do the operations manually. Once student files have be downloaded to the instructor's workstation, they can be accessed faster since they are local, not on the network server. Overall, for Java programming courses the system provides many more features than Blackboard alone, is easy for students to use, and saves instructor time.
Some design changes have been made since the original deployment, to prevent possible errors or make the system more general. For example, the system components were changed to use Internet date and time rather than the date and time from the student's computer. This prevents errors caused by wrong date and time. Currently the only system change being considered is improving the code formatting done by the Assignment Manager.
