# Computer Science

CS studies the structure of problems—why are some solutions easy but others so hard?

## Courses

Take a guided, problem-solving based approach to learning Computer Science. These compilations provide unique perspectives and applications you won't find anywhere else.

### Computer Science Fundamentals

As a computer scientist or programmer, you need to solve problems efficiently. In the digital world, that means making thoughtful decisions about how to organize information (data) so that it can be efficiently stored and analyzed.

In Computer Science Fundamentals, we'll start with the basics (like arrays and sorting) and build up to more complex data types and structures. Along the way, we'll discover algorithms that can be used to extract answers from data.

Whether you are looking to dive into theoretical computer science, practical programming, or just want to be a more thoughtful problem solver, these fundamentals will serve you well!

### Artificial Neural Networks

How can a computer distinguish between pictures of dogs and cats? Or learn to play great chess? We just need some inspiration from the human brain, linear algebra, and a bit of calculus.

This course dives into the fundamentals of artificial neural networks, from the math to the basic models to applications and more complicated models. Most importantly, you’ll gain an intuition for why these models work - not just a bunch of formulas.

### Computer Science Algorithms

An algorithm is a step-by-step process to achieve some outcome. Consider the problem of finding the fastest driving route between two places. Not only are there many possible routes to check, but there are changing parameters such as real-time traffic too. How would you handle this efficiently?

When algorithms involve a large amount of input data, complex manipulation, or both, we need to construct clever algorithms that a computer can work through quickly. We'll also need methods to measure and compare performance. This course will help you master these fundamental problems in algorithms.

### Computer Memory

Memory is a fundamental piece in software programming. When writing programs, our code allocates, uses, and frees memory.

How is the memory managed in the running program? How does the OS manage it when multiple programs are running? What are the memory related features that the CPU provides? This course will guide you through understanding memory management, layer by layer, so that you can answer the questions above and write efficient programs.

### Machine Learning

People are great at finding patterns. Whether it’s identifying pictures, sorting information, or estimating values, humans can do it all without even realizing that it’s difficult. But everyone has limits, and when there are three hundred variables to keep track of and thousands of elements to process, something new is needed.

Machine learning swoops in where humans fail. This course develops the mathematical basis needed to truly understand how problems of classification and estimation work. We'll develop the techniques needed to analyze data and apply these techniques to real-world problems

Sharpen your skills with these quizzes designed to check your understanding of the fundamentals.