Over the course of my studies, I've taken so many classes: over 240 credit hours throughout
my bachelors, masters, and PhD.
That's like 80 classes.
Was it all necessary?
Perhaps not all of it, but I've learned many useful things taking those classes.
In this mini-series, we're going to talk about some of those fundamental courses that many
universities offer in their Computer Science & Engineering programs.
We will talk about what these classes are about and what you should expect from them.
Let's start with math classes.
How much math do you need for computer science?
Do you even need it at all?
Is it even relevant to computer science?
The short answer is yes, it is relevant.
Discrete math, for example, focuses on some of the fundamental concepts in Computer Science,
such as set theory, graph theory, algorithm complexity, combinatorics, logic, and so on.
Many computer programs run in a deterministic way, which means that no matter how many times
you run a program you should expect the same results.
Logic deals with such deterministic systems.
However, not everything in computer science is deterministic, especially when you are
building machines that make decisions based on noisy real-life data.
That's where probability and statistics come into play.
Probability theory provides a set of rules to infer likelihoods rather than inferring
whether a statement is true or false.
Machine learning and data science heavily rely on probability theory.
Probability and statistics are useful in general, but they are a must-know if you are interested
in AI research.
Speaking of AI, you should definitely have at least a basic understanding of linear algebra
if you want to develop deep learning algorithms.
Even if you are not interested in AI, linear algebra is essential for understanding many
other subfields of computer science.
Are you interested in game development and computer graphics?
Computer graphics make heavy use of linear algebra.
When you play a video game or render a 3D model, what happens in the backend is a bunch
of matrix multiplications.
That's why GPUs are very good at matrix multiplications.
And that's how GPUs powered artificial intelligence as a byproduct.
Many machine learning models do a lot of matrix multiplications until they learn to extract
useful information from large-scale data.
If you are curious to know more about how this learning happens, check out my earlier
deep learning crash course series.
How about calculus?
Well, as far as I know, it's a required course everywhere.
So you'll have to take it anyway.
But in general, basic knowledge of limits, differentials, and integrals is useful in
general and may come in handy in many situations when you try to solve a technical problem.
For example, if you are building a controller to keep your room at a particular temperature,
your algorithm will need to compute the derivative and integral of your room temperature over
time.
Another example: to train an artificial neural network, you need to compute the derivative
of the error with respect to the weights.
Luckily, you don't need to do this by hand, but it's still good to know how it's done
to have a better understanding of what your algorithm actually does.
Speaking of derivatives, it's very common in computer science to compute derivatives
and integrals numerically.
That's where numerical analysis comes in handy.
When you work with discrete data, integration becomes calculating the cumulative sum, and
differentiation becomes subtracting consecutive numbers.
Even if you work with continuous data, it might still be more computationally feasible
to approximate the result of a mathematical function using an iterative process than deriving
it analytically.
How about game theory?
It must have something to do with video games, right?
Well, not really!
Or, a second thought, it actually is used in some video games.
Game theory models interactions between rational decision makers.
Therefore, you can use it to model the behavior of non-player characters.
For example, to program a chess-playing agent, you can use the minimax algorithm, which minimizes
the possible loss for the worst case.
Last but not least, information theory also has a big role in many branches of computer
science and engineering.
Arguably, the most important concept in information theory is the concept of entropy which measures
how much information is present in a signal.
The lower the entropy, the more compressible a signal becomes.
Information theory is used in data compression, communication, and storage, as well as statistics
and machine learning.
You might ask is this all necessary for computer science?
Well, it depends on what you want to do.
Perhaps you don't need to master all of this but in any case, I would say at least a basic
understanding of these concepts is necessary.
There's a misconception that computer science and programming are the same things.
In fact, programming is a tool, whereas computer science is a field of study.
You can very well work as a full-stack developer and implement well-defined problems without
having to know any math.
But to specialize in a topic, or to do research, and to find optimal solutions to novel problems,
you will certainly need at least some math.
Some experienced programmers might disagree and say they do all of this without having
to know any math.
If you are such an experienced programmer, perhaps you have already internalized the
math behind the algorithms in a practical way without explicitly studying them.
Alright, that's all for today.
In the next video, we will talk about the core computer science and engineering classes
such as data structures and algorithms.
If you liked this video, please subscribe for more videos.
And as always, thanks for watching, stay tuned, and see you next time.