Kotlin
Java

Innovations

What makes CS 124 truly special is our staff community. But we also put technology to work to create a unique interactive educational experience. Here's what makes CS 124 the best CS1 course around.

All of the systems and components described below are unique to CS 124.

Staff

Did we mention we have the best course staff around? That bears repeating!

Daily Lessons

Since Fall 2020 CS 124 has been structured around a set of daily lessons, each containing interactive content and a homework problem. Programming is a skill, and best learned through regular practice. Our students get the small amount of reinforcement they need every day to keep learning.

We are also preparing Kotlin lessons as we prepare to integrate Kotlin alongside Java starting Fall 2021.

Playgrounds

Our lessons are filled with playgrounds like the one above that allow students to run, edit, experiment, and generally play with code. They help make programming more fun.

Our playgrounds support both Java and Kotlin:

And our Java playgrounds support snippet mode, allowing us to mix top-level code and methods with class and interface declarations into more compact examples than Java normally allows:

interface Speak {
void speak();
}
class Dog implements Speak {
public void speak() {
System.out.println("Woof");
}
}
class Cat implements Speak {
public void speak() {
System.out.println("Meow");
}
}
// Snippet mode also supports top-level method declarations...
public void talk(Speak speaker) {
speaker.speak();
}
// And top-level (or loose) code
talk(new Dog());
talk(new Cat());

For longer examples like the one above, editor contents are saved across sessions and across devices for logged-in users.

Walkthroughs

Our daily lessons combine text, code, videos, and a new interactive walkthrough component developed exclusively for CS 124. Walkthroughs combine audio with an animated code editor to create live coding examples that are fully interactive.

Students can pause the walkthroughs, experiment with the code themselves, and then resume where they left off.

Walkthroughs are recorded directly in the browser, making it easy to add explanations and for others to contribute. CS 124 course staff can and do contribute their own explanations, strengthening our materials and diversifying the voice with which the course speaks. (All walkthroughs are fully captioned using Otter.ai.)

Here's an overview of how interactive walkthroughs work on the site and how easy it is for staff to record them:

Homework

Each daily lesson concludes with a small homework problem. Like this one:

You could also solve it in Kotlin!

Our large and growing library of Java and Kotlin small problems is created and maintained using a novel tool that automatically generates a testing strategy from a reference solution. This eliminates the need to write or maintain test cases. For example, the grader for the problem above was generated entirely using the only following code:

Our autograder generator also supports grading problems on object-design:

More complex imperative programming questions:

And questions using more complex Java features, like lambda functions:

Code Quality

In addition to correctness, our novel autograder provided by BeyondGrader also provides feedback on multiple aspects of code quality. We can't read each of your submissions by hand, but we still want to help you learn to write code that is not only correct, but also good: properly formatted, not inefficient, idiomatic, and so on.

BeyondGrader currently provides automated feedback on the following aspects of code quality for every submission to every homework problem on our site:

  • Style and formatting: we use checkstyle (Java) and ktlint (Kotlin) to ensure that you learn to write properly-formatted and readable code.
  • Cyclomatic complexity: this measure of complexity counts the number of code paths in your submission. Submissions with far too many paths are harder to understand and are usually the result of some kind of conceptual misunderstanding.
  • Execution efficiency: we count the number of lines executed and the memory allocated as your code solve each problem, and encourage you to correct and improve submissions that are highly inefficient.
  • Dead code detection: dead code refers to parts of your submission that are never executed during testing, and usually indicate some misunderstanding of the problem.
  • Source line length: although this is a fairly limited metric, submissions that contain far too many lines of source code than our solution usually suffer from some problem or another, and can be improved.

We're continuing to work on code quality checks, which we'll deploy here to help you learn to write high quality code.

Stumpers

Stumpers are debugging problems created from our huge and growing set of student solutions to our small homework problems. For each solution, we apply source-level mutation to create incorrect examples. Then students have the chance to solve them, but with a limit on how many lines they can modify to prevent them from simply rewriting the code with their own solution. This both provides debugging practice while also allowing students to view code submitted by other students, and get practice modifying code written by others.

These problems are super fun! Try a few yourself below.

Quiz System

CS 124 has its own online quiz system designed to meet the challenges of online assessment during the pandemic. It is designed to integrate with Zoom proctoring, providing proctors with a great deal of control over the exam session while automating common tasks like enforcing time limits and handling accommodation requests. It also incorporates several basic exam security features on the student side to make it more difficult for students to remove materials from the exam.

Help Site

CS 124 makes it easy for students to get help with their code. By integrating Jitsi with a custom queueing system, we make it easy for students to get help and efficient for staff to work with large numbers of students.

Machine Project

Unlike other CS1 courses where students work on a series of small assignments, CS 124 students complete a longer project broken into multiple checkpoints. This not only provides them with the opportunity to create something more substantial—a complete Android app—but also encourages them to understand more about the entire codebase and consider the impact of their design decisions on their ability to complete future project challenges.

Here is a demo of the complete working app from Fall 2020: