When students are learning to program in introductory computer science (CS) courses, many struggle to apply the foundational concepts. Cay Horstmann, CS professor at SJSU, wanted to help students practice programming on their own so they could improve their skills more quickly. Unfortunately since coding problems were often reused year after year, students could easily look up the solutions online. Professor Horstmann needed a way to provide more practice without making it easy to see the answers.
San José State University supports students teaching themselves programming basics
Facing limited virtual machine capacity, SJSU's Computer Science Department needed a way to expand resources in order to facilitate unlimited programming exercises for computer science students.
"On Sunday night when students are working on their homework, there might be 20 virtual machines running, so as the workload changes, machines automatically spin up and down."
Cay Horstmann, Computer Science Professor, San José State University
Enabling hands-on, real world training for all students
Creating a system for students to teach themselves has become more important as students from non-CS fields, such as biology and law, become interested in programming as a way to help with their research or become more productive. Programming is no longer simply for aspiring developers.
“CS departments need to prepare for this shift in appetite for programming skills,” says Horstmann. “General students are taking computer science classes to help them be more effective in their own field. Since there’s a shortage of CS instructors, students need to be able to learn through a self-taught practice.”
Cay heard about the Google Cloud Education Grants program through the Special Interest Group on Computer Science Education (SIGCSE) and applied for a research grant to receive Google Cloud credits. He was awarded the credits to use for any Google Cloud product. He used the tools to develop the autograder, CodeCheck, with hundreds of exercises for students to practice programming.
CodeCheck is a web-based program designed to help teach students how to program in any of multiple languages. Professors can customize the programming problems, so students have to create their own solutions and can’t merely find answers online. Because the Computer Science Department's servers were running at capacity already, Cay built CodeCheck using Google Compute Engine, virtual machines with unlimited computing power. He chose Stackdriver for monitoring, logging and diagnostics, and Cloud SQL for its scalability and convenience.
“On Sunday night when students are working on their homework, there might be 20 virtual machines running, so as the workload changes, machines automatically spin up and down,” Horstmann says.
Now, CS professors at SJSU can use cloud computing tools to teach programming without having to worry about the school servers’ capacity. This makes it easier to accommodate a greater number of students, including those pursuing other degrees besides computer science. Students learn about managing a remote system, scaling workloads, logging, and automated deployment.
Encouraging students to teach themselves
CodeCheck gives students real-time feedback on their coding, so they instantly know if their solution has passed or failed. CodeCheck doesn’t tell students what they did wrong—they must discover it on their own. In the past, students didn’t get feedback on their work until weeks after they submitted it. By that time, they’d often forgotten the process they followed to arrive at the answer.
Survey results show that students find it valuable to have an online practice resource. They aren’t embarrassed if they make a mistake and don’t feel pressured to finish in a specific amount of time.
According to Horstmann, CodeCheck also improves students’ learning and test performance. In a Java for non-majors course with two sections, the section using CodeCheck performed 50 percent higher than that of the control group. In a programming languages class, the section using CodeCheck scored 20 percent higher on Scheme programming questions than the control group. For one question that wasn’t covered in the practice questions, the two groups scored the same. In a C++ class for transfer students, where all students had to do practice problems, the average number of attempts per problem went down by one-third between the beginning and the end of the course, and the average time to completion was cut in half.
Teaching programming to everyone
Students are becoming native cloud users, and educational tools need to evolve to serve students pursuing CS as well as those in other disciplines. For example when students advance from basic picture-based problems to creating loops, there’s a huge conceptual jump since the loop has to work for all inputs. Many students understand the concept, but applying it is much harder. Once they learn a pattern, they begin to understand how to apply the concept to code.
With the autograder, students can start small with five lines of code. When students need to write 200 lines of code for a class assignment, five lines might seem very little, but the goal is to have students learn in small increments and gradually apply what they learn to more complex assignments.
“Programming is a 21st-century skill for business people, scientists, lawyers, journalists... anyone who works with data,” Horstmann says. “If we have huge failure rates teaching our CS majors with the traditional lecture-lab-homework model, it's not going to work with students who aren't majors. That's why I use the time-tested ‘teach by repetition’ approach.”
"Programming is a 21st-century skill for business people, scientists, lawyers, journalists... anyone who works with data."
Cay Horstmann, Computer Science Professor, San José State University
Running autograder with seamless backend operations
Stackdriver provides powerful monitoring and diagnostic capabilities that allow Cay to troubleshoot problems and ensure students are using the autograder properly. For example, if a student tries to run a program that erases other programs or shuts the machine down, the autograder is hardwired to block such a command. In the past, Cay sometimes spent hours debugging programs to uncover the cause of a problem.
The main goal of CodeCheck is to reduce the friction for all students who want to practice programming. Students don’t have to register or login to use the autograder. Professors can integrate CodeCheck into the learning management system (LMS). Students work directly in the LMS and the autograder delivers students’ scores. Cloud SQL keeps track of how long a student worked on the assignment and automatically backs that up. This integration makes it so students can click “Record my score” to submit an assignment, making program submission convenient for professors and students.
“As programming becomes a skill for the future rather than a skill for developers, computer science departments need to adapt so students can learn at their own pace,” Horstmann says. “With CodeCheck, students can challenge themselves to continue learning outside the classroom.”