Many different institutions offer computer science education. However one thing that is almost universal is the core curriculum of computer science. If you are a bootcamp grad, a self taught programmer, or an experienced software engineer with a degree in a field other than computer science, and you’re looking to bolster your knowledge of core computer science topics, then this outline can serve as a good starting point for your studies.

In addition to the topics outlined here, a typical undergraduate student will also see many general education requirements. These classes will typically make up for around half of the entire graduation requirements for a bachelor’s degree in computer science.

## Foundations of Computer Science

The foundational computer science classes are usually taken during the first one or two years of an undergraduate computer science program. These courses cover topics that prepare students to think computationally, and build skills in computer programming that will be used more heavily in later courses.

#### Introduction to Computer Science

This is the first introduction to computer science. For students with prior programming experience, the topics in this class can seem to be very rudimentary. This class teaches students how to think computationally, such as how computers represent information, and imperative programming logic.

Students will practice these skills by writing small software programs to solve simple problems. These classes also typically serve as an introduction to the programming language that subsequent courses may utilize. It is common for a school to stick with a single programming language for the entire curriculum for courses where programming assignments are required.

View Topic: Introduction to Computer Science

#### Introduction to Computer Science II

This course serves as a continuation of Computer Science I. In this class, students continue to learn more advanced programming concepts, such as simple data structures, algorithms, and may discuss programming paradigms such as object-oriented programming, or functional programming. The programming assignments become more difficult, and serve to give the student extra practice writing software, to prepare them for the more advanced classes that will follow.

View Topic: Introduction to Computer Science II

#### Data Structures

Data structures are concepts of organizing information within a computer program, in a way that makes it easier to solve complex problems. This class introduces students to several data structures that are commonly used in the industry, and will be useful for later classes that delve into complicated algorithms. The data structures often introduced in this class include: linked lists (and arrays), trees, graphs, hashes, heaps, stacks, queues, and tries.

View Topic: Data Structures

## Advanced Topics in Computer Science

After students have completed the foundational computer science topics, they are well-prepared to start tackling the more advanced topics of computer science. These topics are the true “core” of computer science, and are the areas that self-taught programmers and bootcamp graduates tend to not spend much time on. The foundational courses teach students how to think like a computer and write software. The advanced courses teach students how to engineer software.

#### Computer Architecture

This course introduces students to the concepts of modern computer systems architecture. Students will learn about instruction sets, finite-state machines, regular languages and expressions, and memory systems. There is often little-to-no programming requirements in this course, as the material is largely theoretical in nature.

View Topic: Computer Architecture

#### Algorithms

The algorithms class is one of the most important courses for computer science students hoping to move into the industry as software engineers. This course teaches students how to solve problems algorithmically by introducing several common algorithms by using them to solve problems in programming assignments.

Students learn to see patterns and how to apply algorithms to these patterns. Another big topic for this course is algorithm analysis. Students learn how to compare algorithms by introducing a system of weighing the work they do using “Big-O” notation.

Not only does this class cover critical topics for computer science, it is often the material most often brought up in software engineering interviews. A solid understanding of algorithms and algorithm analysis is necessary in order to pass the hiring bar at most major technology companies.

View Topic: Algorithms

#### Operating Systems

In this class, students learn about the core concepts of computer operating systems. An operating system must manage a computer’s memory allocations, schedule jobs, and retrieve information. Topics include process management techniques, locks and mutexes, memory segmentation, paging and swapping, and input/output interfaces.

View Topic: Operating Systems

#### Advanced Algorithms & Data Structures

This course builds on the topics taught in the first data structures class, as well as the algorithms class. Students learn to apply advanced data structures to solve increasingly difficult problems using advanced algorithms. Students will often learn about Fast-Fourier Transformations, dynamic programming, and np-completeness.

View Topic: Advanced Algorithms & Data Structures

#### Programming Languages

Programming languages courses typically cover a few major topics: programming paradigms, language lexing and parsing, and compiler design. Students will be introduced to different programming paradigms through a variety of programming languages. For example, students will be introduced to functional programming languages through a functional language such as Lisp or Haskell. Students will be introduced to concepts of object-oriented programming through languages such as C++ or Java. Finally, students may learn about less-common paradigms such as logic programming languages through the language Prolog.

After being introduced to different programming paradigms, the material will dive into the basics of programming language design, and how interpreters and compilers work. Students may create their own formal language and an interpreter.

View Topic: Programming Languages

## Mathematics

The field of computer science sits between pure mathematics and engineering. The program often sits in a university’s science and engineering department, and thus comes with it many mathematics requirements that are shared across all engineering disciplines, such as calculus. Many of the mathematics topics are crucial to a solid understanding of computer science concepts, such as discrete mathematics and linear algebra.

#### Discrete Mathematics

Discrete mathematics is the field of mathematics devoted to structures that are “countable” (i.e., “discrete” and opposed to “continuous”). This includes the study of integers, graphs, and others, while excluding topics such as calculus. Discrete mathematics is very important to the field of computer science, as digital computers can only represent data is discrete structures. Discrete mathematics courses initially started as part of university computer science curriculums, but its importance in developing mathematical thinking in students has led to its inclusion in pure mathematics curriculums as well.

View Topic: Discrete Mathematics

#### Statistics & Probability

An entry-level statistics class is an important piece of the coursework for computer science students. Students will learn about basic counting statistics such as mean, standard deviation, and variance. Furthermore, the study of probability has many applications to the field of computer science. It is important for students to learn how to appropriately calculate and communicate the likeliness of the occurrence of events, as this topic arises frequently within the field of computer science.

View Topic: Statistics & Probability

#### Calculus

Calculus is the study of continuous change. There are two sides to calculus: differential calculus and integral calculus. Differential calculus is concerned with the rate of change while integral calculus is focused on the rate of accumulation. As the computer science curriculum is often provided by a university’s engineering school, students are often required to complete a full course of calculus, usually divided into two or three different classes.

View Topic: Calculus

#### Numerical Analysis

Numerical analysis uses numerical approximation to solve mathematical problems that are continuous in nature. Digital computers are unable to represent continuous structures, but computing often requires solving mathematical expressions that are continuous in nature. The field of numerical analysis is the study of using approximation to represent these continuous structures, which enables digital computers to provide computations in many different applications in science, engineering and more.

View Topic: Numerical Analysis

#### Linear Algebra

Linear algebra is the study of linear equations and matrices. The field of linear algebra has many applications in engineering, and especially in computer science. Linear algebra’s applications in the field of geometry make it well-suited for computing tasks such as computer graphics rendering, computer vision, and many machine learning algorithms as well.

View Topic: Linear Algebra

## Electives in Computer Science

While the core computer science classes make up the bulk and foundation of the computer science curriculum, a well-rounded education would not be complete without elective courses. In computer science, electives offer students the opportunity to dive into research, industry, and theoretical topics not deeply covered by the core curriculum. Students may choose to take deeper courses into the theoretical side of computer science, such as an upper-level class of graph theory, or they may go hands-on with a class about networking.

#### Artificial Intelligence

Artificial intelligence (AI) is the study of building computers to simulate human thinking. An artificial intelligence course will typical cover challenging topics in the field of AI such as natural language processing (NLP), logic, and reasoning. Artificial intelligence courses may touch on topics in the field of machine learning, which covers how computer algorithms operate to “learn” facts about the world. Finally, an AI course may also touch on the challenges regarding ethics as it applies to artificial intelligence systems.

View Topic: Artificial Intelligence

#### Machine Learning

The field of machine learning is the study of algorithms that “learn” facts about the world in order to make decisions about novel data. A machine learning course will typically cover many different types of machine learning algorithms such as classification algorithms and linear and logistic regression. Machine learning algorithms build models to represent observed data, and using this data, can apply rules to infer details about new input data. As computers are capable of processing large amounts of data very quickly, machine learning algorithms are able to “see” patterns in data that humans are not good at observing. However, there are also many observations that humans are able to quickly make, where computers have difficulty in assessing.

View Topic: Machine Learning

#### Ethics in Computer Science

The field of ethics in computer science is more important than other. Computer scientists build machine learning models that know more about you than you know about yourself! Every day, more and more of our lives become digital, from our banking, communication, even our employment. The study of ethics in computer science discusses the dangers and responsibilities that computer scientists face in an ever more digital world.

View Topic: Ethics in Computer Science

#### And many more!

The electives given here only begin to scratch the surface of the topics covered at a typical college or university. Many programs offer electives in fields such as computer networking, parallel computing, computer graphics, database design, web development, cyber security, software engineering, robotics, and more.