Computers are core to modern life. They encrypt our digital information; they help control our cars and planes; they allow people to collaborate across the globe nearly instantly. Computer science explores the theory behind these mechanisms and the practical details needed to build them.
ADTs classify data structures based on usage and behavior, providing an understanding of the interface and responses.
This is putting your ducks in a row, Computer Science style. Some of the simplest but most useful data structures are linear. Dive in to build your foundational toolkit!
These data structures exploit hashing functions to structure data for rapid lookup or verification. Some are probablisitic in nature, meaning they sacrifice absolute guarantees for speed.
Whether you're working with a road map or just some numerical data, organizing data in trees allows for an efficient representation of connections and hierarchies.
Storing data in a way that allows efficient access and changes is critical in Computer Science. Binary Search Trees are a fundamental tree-like structure that you'll want in your toolkit!
Whether you're finding the shortest path between two locations or modeling a social network, graphs are are a critical tool for storing data and exploring connections.
Strings are basically "words in computers". As an ordered set of characters, these are the building blocks that allow us to do things from searching filesystems to decrypting ciphers.
A fast algorithm is most useful - you don't want the answer to your question in 10 years, do you? Runtime analysis studies how long an algorithm will take to complete, on average or in the worst case.
You don't want to repeat yourself when trying to be efficient. Dynamic programming is the art of keeping track of results you've already computed that are useful in later computations.
Highly-organized data can be critical for many algorithms, and often you want your data ordered from least to greatest. The art of getting your data in order is trickier than you might think!
Computers are being used more and more to solve geometric problems, like modeling physical objects such as brains and bridges.
From robots to radar, signals and systems allow computers to make decisions based on taking in the information around them.
Take a number and return its prime factors. Take a URL and return the text on the page. Take a code and output the hidden message. Functions make generalized tasks like these possible.
When you need to do a repetitive task, like working through all elements in a list to find a prime or searching a map until you've found all of the gold, loops are a go-to tool.
If you're tired, then sleep. Else, if you're hungry, then eat. Else, you've got some time to expand your logical programming skills by checking out conditionals!
This is objectively one of the most fundamental ideas in Computer Science. Explore how objects allow you to write great code that efficiently manages complexity.
Functional programming can be especially functional when performing lots of different operations on data that with a known amount of variation. See how by diving into this collection.
Whether for breaking codes in WWII, keeping your credit card info safe, or just cracking codes for fun, cryptography is a confluence of computer science and math that encrypts our most important data.
When a problem is computationally or mathematically difficult, a simulation can help get an approximate answer. Want to find the value of pi? Just throw a lot of (virtual) darts at a square!