KotlinCS 124 LogoJava


CS 124 daily lessons mix text, interactive walkthroughs, video content, and small practice and homework problems.

Each one brings you one step closer to mastering the basics of computer science and programming. And the course staff will accompany you every step of the way, to ensure that you are not alone.

Spring 2024

04/26/2024: Implementing a Map


This lesson is short and fun. Let's combine what we know about hashing, arrays, and linked lists to implement our own map.




This lesson explores map-reduce-filter collection processing patterns, which are well-supported by Kotlin and useful for performing transformations on data.



This lesson explores streams, an advanced programming pattern useful for performing transformations on data.

04/24/2024: Generics

Next we introduce a language feature that allows us to write both general and type-safe code.

04/23/2024: Hashing

This lesson explores hashing, a mysterious and yet incredibly useful idea that is even included directly in our programming language!

04/22/2024: Binary Search

Let's apply some of the same ideas we've developing sorting to a new problem, search.

04/19/2024: MP3: Course Ratings

For MP3, we'll add a course rating feature to our app.

04/18/2024: Quicksort

Next we'll continue on to examine Quicksort, a new sorting algorithm with some very interesting characteristics. Then we'll review the sorting algorithms that we've learned together.

04/17/2024: Merge Sort

We'll continue in this lesson by examining Merge Sort, an interesting and efficient sorting algorithm.

04/16/2024: Sorting Algorithms

This lesson begins our examination of sorting algorithms, which represent both a conceptual and an implementation challenge.

04/15/2024: MP Debugging Part 1

As we continue with the MP, let's review additional debugging strategies that may come in handy.

04/12/2024: MP2: Course Activity

To wrap up MP2, we'll add support for viewing details about a single course to our app.

04/11/2024: Practice with Recursion

Let's get some additional practice with trees and recursion!

04/10/2024: MP Debugging Part 0

Before continuing with MP2, let's stop for some targeting MP debugging practice. We'll talk about some strategies for fixing common mistakes with your project that we'll begin expecting you to have completed before coming to the help site.

04/09/2024: MP2: API Client

Continuing with our work on MP2, we'll add support for our new course route to our API client.

04/08/2024: MP2: API Server

To begin MP2, we'll extend our data model and add a route to our API server.

04/05/2024: Trees and Recursion

Let's continue practicing with trees and recursion!

04/04/2024: Trees

This lesson introduce trees, which are both a commonly-used data structure and a great way to get practice with recursion.

04/03/2024: Recursion

This lesson introduces recursion, a powerful new problem-solving strategy.

04/02/2024: MP1: Filtering and Search

As we continue work on MP1, we'll complete a search method and use it to update the UI appropriately.

04/01/2024: MP1: Loading and Sorting

To begin MP1, we'll install the test suites, trace how data flows through our app, and fix how the courses are sorted in the UI.

03/29/2024: Lists Review and Performance

Next we'll continue discussing linked lists and implement a few list methods together.

03/28/2024: Linked Lists

Now for a different take on lists, we'll examine lists that store the position of items using reference linking.

03/27/2024: Algorithms and Lists

This lesson starts the third half of the class, our exploration of data structures, algorithms, and algorithm analysis.

03/26/2024: Continuing MP0

Let's continue MP0 and review how to submit your work.

03/25/2024: Getting Started with MP0

Today we'll begin work together on the machine project!

03/22/2024: Lambda Expressions

This lesson explores lambda expressions, a terse way of implementing interfaces using anonymous classes.

03/21/2024: Anonymous Classes

Let's dive in to the world of anonymous classes.

03/20/2024: Practice with Interfaces

This lesson continues our practice with interfaces.

03/19/2024: Implementing Interfaces

Next we'll examine how to implement interfaces on our own classes.

03/18/2024: Using Interfaces

Let's take the first step to understanding interfaces.

03/08/2024: Working with Exceptions

This lesson continues our practice with exceptions.

03/07/2024: Throwing Exceptions

Let's continue to learn about exceptions by finding out how and when to generate our own errors.

03/06/2024: Catching Exceptions

Next we'll begin learning how to work with exceptions by understanding how to handle them when they occur.

03/05/2024: References and Polymorphism

Let's combine what we know about polymorphism and references to deepen our understanding even further.

03/04/2024: References

Our focus in this lesson is on references, both generally and specifically.

03/01/2024: Data Modeling 2

Next we'll complete another data modeling exercise that pulls together everything that we've learned.

02/29/2024: Equality and Object Copying

What does it mean for two objects to be equal? And how do we copy them? In this lesson we'll find out.

02/28/2024: Polymorphism

This lesson introduces a big new word and a big new idea: polymorphism.

02/27/2024: Inheritance

Our next lesson explores the relationships between classes established through inheritance.

02/26/2024: Data Modeling 1

This lesson puts our new abilities with objects to use modeling a real-world system.


Next we'll continue understanding Kotlin objects by exploring companion objects.

Next we'll continue understanding Java objects by exploring the static keyword and its implications.

02/22/2024: Encapsulation

In this lesson we'll investigate how to enable encapsulation through visibility modifiers and setters and getters.

02/21/2024: Constructors

Our next lesson examines what happens when objects are created.

02/20/2024: Objects, Continued

Let's continue our discussion of objects by examining object methods.

02/19/2024: Introduction to Objects

This lesson begins a new topic: objects.


Let's explore a bit of programming internals, specifically your code is tranformed before it is executed in a process known as compilation.

Let's explore a bit of programming internals, specifically your code is tranformed before it is executed in a process known as compilation.

02/15/2024: Practice with Collections

Let's get a bit more practice with collections, those basic data structures that are so useful.

02/14/2024: Maps and Sets

Let's look at two more very useful collections: maps and sets.

02/13/2024: Lists and Type Parameters

Next we'll learn how to use lists, a linear data structure but one that is a bit more useful than the arrays that we've been working with so far.

02/12/2024: Imports and Libraries

This lesson may be the most important of the entire semester, since it shows you how to use other people's code!

02/09/2024: Multidimensional Arrays

This lesson expands our ability to work with sequential data into multiple dimensions!

02/08/2024: Practice with Strings

Let's reinforce what we know about strings by working with a few more problems together!

02/07/2024: null

How many problems can nothing cause? Quite a few! We'll learn more about the nothing that is a huge problem in this lesson.

02/06/2024: Algorithms and Strings

Our next lesson is on algorithms and strings, and gives us a bit more practice with both.

02/05/2024: Strings

Next we meet a new type of data and our first example of an object.

02/02/2024: Functions and Algorithms

In this lesson we'll explore the connections between functions and algorithms.

02/01/2024: Practice with Functions

Let's pause for a bit more practice with functions before we continue our journey together.

01/31/2024: More About Functions

Next we'll continue discussing functions and introduce several common algorithm patterns.

01/30/2024: Errors and Debugging

Let's examine errors, debugging, and maintaining a healthy mindset as you learn to work with computers.

01/29/2024: Functions

As we begin writing algorithms, let's stop and discuss how to organize our code into reusable units called functions.

01/26/2024: Practice with Loops and Algorithms

In this lesson we'll pause for more practice with loops and algorithms, including several chances to get practice solving real problems.

01/25/2024: Algorithms

Next we'll pull together everything we've learned so far and use our new skills to start solving real problems. Or, put another way, we'll start designing algorithms.

01/24/2024: Loops

In this lesson we'll cover our last core computer capability: the ability to repeat something multiple times, very quickly.

01/23/2024: Arrays

Let's learn about our first data structure: arrays, which put data values in order.

01/22/2024: Compound Conditionals

Next we'll examine how to make our conditional statements a bit more complex, allowing us to make more interesting decisions based on data in our programs.

01/19/2024: Conditional Expressions and Statements

One of the things that makes computers so powerful is their ability to make decisions. We'll explore that capability in our programs in this lesson.

01/18/2024: Operations on Variables

Our journey continues as we examine how we can manipulate the data stored by variables in our programs.

01/17/2024: Variables and Types

Let's begin our journey in computer science by presenting two of the basic building blocks of computer programs: variables and data types.

01/16/2024: Welcome to CS 124

Welcome to CS 124! We're excited to join you as you start your journey in computer science and programming. Today!