CS 125 daily lessons mix text, interactive walkthroughs, video content, and small 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.

Let's look back at the semester, at how hard you worked, and how hard the staff worked to help you.

What could be better than Java? Maybe an entirely new language that addresses many of Java's limitations!

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

Today we introduce a feature of Java that allows us to write both general and type-safe code.

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

Let's review sorting algorithms and runtimes.

Next we'll continue on to examine Quicksort, a new sorting algorithm with some very interesting characteristics.

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

Today's lesson begins our examination of sorting algorithms, which represent both a conceptual and a programming challenge.

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

Let's continue practicing with trees and recursion!

Today we'll introduce trees, which are both a commonly-used data structure and a great way to get practice with recursion.

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

Today's lesson continues our practice with Java exceptions.

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

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

Today's lesson introduces maps, one of the most useful data structures you'll encounter in computer science.

This lesson explores hashing, a mysterious and yet incredibly useful idea that is even included directly in the Java language.

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

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

We'll continue our discussion of lists by examining lists that use an array to store their items.

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

Today's lesson explores lambda expressions, a terse way of implementing interfaces using anonymous classes.

Let's get some additional practice with testing!

Let's explore the world of software testing by writing some of our own!

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

Today's lesson continues our practice with interfaces.

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

Let's take the first step to understanding interfaces.

Let's get more practice with reverse engineering.

Today's homework problem introduces you to the process of reverse engineering.

Our lesson today focuses on how to convert objects to strings and back again, a process known as serialization.

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

Let's take another journey into Java internals and explore how Java manages memory.

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

Our focus today is on references, both generally and in Java specifically.

Today's homework provides even more practice with class design.

Today's homework problem provides some practice in class design.

Today we'll complete another data modeling exercise that pull together everything that we've learned.

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

Today's lesson introduces a big new word and a big new idea: polymorphism.

Our lesson today explores the relationships between Java classes established through inheritance.

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

Today's homework problem has you complete some class design.

Flip and flop your way to a solution on today's homework problem.

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

Today's we'll investigate how Java enables encapsulation through visibility modifiers and setters and getters.

Our lesson today examines what happens when Java objects are created.

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

Today we begin a new topic: objects.

Working with data is one of the more fun things that you can do with your new programming abilities. Let's see how!

Today's homework problem introduces you to a simple form of encryption.

Today is our last lesson on imperative programming, so we'll introduce a few new features before discussing testing.

Today's lesson continues our discussion of how Java works and introduces a new Java feature just added recently.

Let's explore a bit of Java internals, specifically how Java transforms your code before running it in a process known as compilation.

Today we'll take our exploration of arrays and algorithms to the next dimension!

Today's weekend homework is straightforward. Don't overthink it!

Ready for a tricky weekend homework problem? Let's rotate a string!

Today's lesson expands our ability to work with sequential data into multiple dimensions!

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

Today's lesson is on algorithms and strings, and gives us a bit more practice with both.

Today we meet a new type of data and our first example of a Java object.

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

Today's homework problem involves both functions and arrays.

Today's weekend homework problem is on printing, in reverse!

Today we'll focus on staying sane in CS, both through debugging and maintaining a healthy mindset as you learn to work with computers.

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

Today 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.

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

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

Today's weekend homework is all about time!

Today's weekend homework is all about location!

Today 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.

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

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

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

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