We built computers to expand our brains.
Originally scientists build computers to solve arithmetic
but they turned at being incredibly useful for many other things as well
running the entire internet, lifelike graphics, artificial brains or simulating the Universe.
如网络运行 呈现逼真图片 人造大脑或宇宙仿真
but amazingly, all of it boils down to just flipping zeros and ones.
Computers have become smaller and more powerful at an incredible rate.
There’s more computing power in your cellphone
than there was in the entire world in the mid 60s.
And the entire Apollo moon landing could have been run on a couple of Nintendos.
Computer science is the subject that studies what computers can do.
It’s a diverse and overlapping field but I’m going to split it into three parts.
The fundamental theory of computer science, computer engineering and Applications.
We’ll start with the father of theoretical computer science: Alan Turing.
who formalised the concept of a Turing machine
which is a simple description of a general purpose computer.
People came up with other designs for computing machines
but they are all equivalent to a Turing machine
which makes it the foundation of computer science.
A Turing machine contains several parts: An infinitely long tape
that split into cells containing symbols
There is also a head that can read and write symbols to the tape, a state register that
stores the state of the head and a list of possible instructions.
In todays computers, the tape is like the working memory or RAM
the head is the central processing unit
and the list of instructions is held in the computer’s memory.
Even though a Turing machine is a simple set of rules, it’s incredibly powerful.
This is essentially what all computers do nowadays
though our computers obviously have a few more parts
like permanent storage and all the other components.
Every problem that is computable by a Turing machine is computable using Lambda calculus
which is the basis of research in programming languages.
Computability Theory attempts to classify what is and isn’t computable.
There are some problems that due to their very nature, can never be solved by a computer.
A famous example is the halting problem
where you try to predict whether a program will stop running or carry on forever.
There are programs where this is impossible to answer by a computer or a human.
Many problems are theoretically solvable
but in practice take too much memory
or more steps than the lifetime of the Universe to solve.
And computational complexity attempts to categorise these problems
according to how they scale.
There are many different classes of complexity
and many classes of problem that fall into each type.
There are a lot of real world problems that fall into these impossible to solve categories
but fortunately computer scientists have a bunch of sneaky tricks
where you can fudge things and get pretty good answers
but you’ll never know if they are the best answer.
An algorithm is a set of instructions independent of the hardware or programming language
designed to solve a particular problem.
It is kind of like a recipe of how to build a program
and a lot of work is put into developing algorithms
to get the best out of computers.
Different algorithms can get to the same final result
like sorting a random set of numbers into order
but some algorithms are much more efficient than others
this is studied in algorithmatic complexity.
Information theory studies the properties of information
and how it can be measured, stored and communicated.
One application of this is how well you can compress data,
making it take up less memory while preserving all or most of information
but there are lots of other applications.
Related to information theory is coding theory.
Cryptography is obviously very important for keeping information sent over the internet secret.
There are many different encryption schemes which scramble data
and usually rely on some very complex mathematical problem
to keep the information locked up.
These are the main branches of theoretical computer science
although there are many more I didn’t have time to go into Logic, Graph Theory,
不过还有许多我来不及讲 如逻辑 图论
Computational Geometry, Automata Theory, Quantum Computation,
计算几何 自动机理论 量子计算
Parallel Programming, Formal Methods and Datastructures.
but lets move on to computer engineering.
Designing computers is a challenge
because they have to do so many different things.
Designers need to try and make sure
that they are capable of solving many different kinds of problems as optimally as possible.
Every single task that runs on the computer goes through the core of the computer: the CPU
When you are doing lots of different things at the same time,
the CPU needs to switch back and forth between these jobs
to make sure everything gets done in a reasonable time.
This is controlled by a scheduler
which chooses what to do and when and tries to get through tasks in the most efficient way
which can be a very difficult problem.
Multiprocessing helps speed things up
because the CPU has several cores that can execute multiple jobs in parallel.
But this makes the job of the scheduler even more complex.
Computer architecture is how a processor is designed to perform tasks
and different architectures are good at different things.
CPUs are general purpose, GPUs are optimised for graphics
and FPGAs can be programmed to be very fast at a very narrow range of task.
On top of the raw hardware there are many layers of software,
written by programmers using many different programming languages.
A programming language is how humans tell a computer what to do
and they vary greatly depending on the job at hand
for coding websites and apps.
In general, the closer a language is to the hardware,
the more difficult it is for humans to use.
At all stages of this hierarchy
the code that programmers write needs to be turned into raw CPU instructions
and this is done by one or several programs called compilers.
Designing programming languages and compilers is a big deal,
because they have the tool that software engineers use to make everything
so they need to be as easy to use as possible but also versatile enough
to allow the programmers to build their crazy ideas.
The operating system is the most important piece of software on the computer
as it is what we interact with
and it controls how all of the other programs are run on the hardware.
And engineering a good operating system is a huge challenge.
This brings us to software engineering:
writing bundles of instructions telling the computer what to do.
Building good software is an art form
because you have to translate your creative ideas into logical instructions
in a specific language
make it as efficient as possible to run and as free of errors as you can.
So there are many best practices and design philosophies that people follow.
Some other important areas are getting many computers
to communicate and work together together to solve problems.
Storing and retrieving large amounts of data.
Determining how well computer systems are performing at specific tasks,
and creating highly detailed and realistic graphics.
Now we get to a really cool part of computer science,
getting computers to solve real world problems.
These technologies underlie a lot of the programs, apps and websites we use.
When you are going on vacation
and you want to get the best trip for the money
you are solving an optimisation problem.
Optimisation problems appear everywhere
and finding the best path or most efficient combination of parts
can save businesses millions of dollars.
This is related to Boolean Satisfiability
where you attempt to work out if a logic formula can be satisfied or not.
This was the first problem proved to be NP-complete
and so widely considered to be impossible to solve,
but amazing development of new SAT solvers
means that huge SAT problems are solved routinely today
especially in artificial intelligence.
Computers extend our brains multiply our cognitive abilities.
The forefront of computer science research is developing computer systems
that can think for themselves: Artificial Intelligence.
There are many avenues that AI research takes
the most prominent of which is machine learning
which aims to develop algorithms and techniques
to enable computers to learn from large amounts of data
and then use what they’ve learned to do something useful
like make decisions or classify things.
And there are many different types of machine learning.
Closely related are fields like computer vision,
trying to make computers able to see objects in images like we do,
which uses image processing techniques.
Natural language processing aims to get computers
to understand and communicate using human language
or to process large amounts of data in the form of words for analysis.
This commonly uses another field called knowledge representation
where data is organised according to their relationships
like words with similar meanings are clustered together.
Machine learning algorithms have improved
because of the large amount of data we give them.
Big data looks at how to manage and analyse large amounts of data
and get value from it
and will get even more data from the Internet of Things
adding data collection and communications to everyday objects.
Hacking is not a traditional academic discipline but definitely worth mentioning.
Trying to find weaknesses in computer systems,
and take advantage of them without being noticed.
Computational Science uses computers to help answer scientific questions
from fundamental physics to neuroscience
and often makes use of Super Computing
which throws the weight to the worlds most powerful computers at very large problems
often in the area of Simulation.
Then there is Human Computer Interaction
which looks at how to design computer systems to be easy and intuitive to use.
Virtual reality, augmented reality and teleprescence
enhancing or replacing our experience of reality
And finally Robotics which gives computers a physical embodiment,
from a roomba to trying to make intelligent human like machines.
So that is my Map of Computer Science
a field that is still developing as fast as it ever has
despite the fact that the underlying hardware is hitting some hard limits
as we struggle to miniaturise transistors any more.
So lots of people are working on other kinds of computers
to try and overcome this problem.
Computers have had an absolutely huge impact on human society
so it is gonna be interesting to see where this technology goes
in the next a hundred years.
Who knows, perhaps one day, we’ll all be computers.
As per usual if you want to get hold of this map as a poster
I have made it available so check in the description below for some links.
and also if you want to find out more about computer science
I recommend you check out the sponsor for this video brilliant dot org.
People often ask me how to go about learning more about
the kinds of subjects I covered in these videos.
And as well as watching videos
a really great way is to get down and solve some real problems
And Brilliant does and excellent job at this.
It’s a really cool website and also an app
which helps you learn by getting you to solve interesting problems
in science, mathematics and computer science.
And each of the courses starts off kind of easy and fun
and then gets more and more challenging as you master the concepts.
If you want to learn specifically about computer science
they have got whole courses built around topics in this video
like logic, algorithms, machine learning, artificial intelligence.
比如 逻辑 算法 机器学习 人工智能
so if you want to check that out just type in brilliant dot org slash dos,
or even better click the link in the description below
because that lets them know that you have come from here.
So thanks again for watching, and I’ll be back soon with a new video.
We built computers to expand our brains.