## 2 WebTasks: Programming Tasks Database  
Testing the programs written by students for syntactic and semantic correctness, functionality or style is common today. Some of the established systems for accomplishing this include Boss [20], CourseMarker [21], and Web-CAT [22]. In 2006, we were looking for a system that supports students with little to no previous programming experience in learning to solve simple Java programming tasks. At the same time, we wanted to have a large pool of possible tasks covering the spectrum from \"extremely easy\" to \"moderately difficult\", in order to address both novice programmers and those with some previous exposure, but perhaps in a different programming language. At this stage, we did not yet expect students to be able to write their own tests, so that the test-driven development approach supported by Web-CAT did not apply to our students. In fact, we do not expect our students be able to write a full-fledged Java class including a _main_ method: most tasks only require students to fill in the body of a prepared method. At the same time, the system was supposed to assist, not assess, students. For example, the results of a student's submission are not taken into account for measuring the same student's accomplishments in the CS 1 course. While we encourage our students to use the system to get some hands-on practice in solving simple Java tasks, their submissions are not monitored and the use of the system is completely voluntary. Plagiarism or \"cheating\" are thus also not seen as a concern, as the students cannot benefit from this, but only succeed in cheating themselves. To further lower the barrier in using the system, the system was supposed to run completely in the web browser, without requiring any software installation or even a Java SDK on the students' computers. For these reasons, the established systems such as Boss [20], CourseMarker [21], and Web-CAT [22] did not perfectly match our expectation. We instead used a competitive programming lab to develop our own solution, called _WebTasks_, based on the best of four competing systems. WebTasks [23] runs as a set of JSP pages on an Apache Tomcat server. As the contents mainly cover comparatively simple tasks, the target audience typically consists of students attending courses such as CS 1. No special algorithmic knowledge is required by most tasks, only a basic understanding of the Java programming language. WebTasks currently contains 118 Java programming tasks. Only six of these tasks require the user to upload a complete class file, while the others require only that the body of a prepared method is implemented correctly. In this way, the student's workload is reduced, and many potentially problematic issues, such as the correct use of the Java main method, can be avoided. This also makes using WebTasks significantly easier for novices to Java, while at the same time improving the control we have over the submissions. Figure 1 shows a typical example of a programming task. Note that parts of this web page are in German, as the system was developed to support our local students; however, some tasks including the one shown here have been translated into English. Additionally, an internationalization of the user interface would not be difficult to do. The task shown requires the student to implement a variation on the Pascal triangle, where two initial values are passed in as an array of size 2. The student has to compute the \(n^{th}\) step of a Pascal triangle based on this initial input, and return it as an array of int values. The difficulty level of the task is indicated by a colored difficulty bar. The task in Figure 1 is thus ranked as rather difficult, based on the assumed programming skills of an average student in the first year of CS. Figure 2 presents the basic work flow for a student working with WebTasks. The student will first pick an assignment and submit a solution proposal. This will be compiled by the server, and, if the compilation was successful, it will automatically be tested for correctness.