We've previously talked about how computers run
a bunch of basic instructions really fast. These instructions
look like this, a bunch of zeros and ones. We call these zeros and ones binary. Thing is, the computer doesn't literally
look at binary. We just use zeros and ones
as shorthand to represent high and low voltage
inside of the machine. We do this because it's easier
to work with zeros and ones instead of thinking about voltages
directly. When we think in terms of concepts
instead of what's in reality, we call this abstract thinking. We call the concepts
we use: An Abstraction. Abstractions are just lies. Stories we tell ourselves
because they're easier to understand then thinking about what's actually happening
all of the time. When you drive a car, you want the wheels
to turn left and right. You could imagine a device that lets you set the wheel direction
from the center. The further from the center
it goes, the more the wheels turn. Or you could have a device
where you point a laser on the road and the car sets the wheels
towards the laser. And, of course,
you could just have a wheel that you turn in the direction
you'd like the wheels to go. All of these are different abstractions,
possibly dumb ones, for setting the wheel direction
in the same way the zeros and ones are an abstraction
for low and high voltages. The physical circuits of the computer
react to these voltages, not zeros and ones. Still working with zeros and ones
directly would be very challenging and time consuming. To make programing computers easier Computer scientists have created
another abstraction. The programing language. there are many programing languages
out there, but most of them contain
English words alongside some symbols. Reading and writing this is a lot easier
than trying to decipher binary. We call the text of the language code. The code is then used to build a program,
a bunch of binary that the computer runs in this series will be learning
to program in a language called C. C programing language is widely used. If you use an iPhone, Android,
Windows, Mac or Linux, you're using some software
which has been in part written in C. This pervasiveness make C a great language
to learn, since once you learn it, you have the flexibility
to build all sorts of things. when talking about languages,
we tend to think about them in terms of higher
level languages and lower level languages. Higher and lower here
refers to the amount of abstraction. Higher level languages
are typically easier to use because their whole goal is about enabling humans
to express their intent effectively. But as you move to lower level languages,
the languages get more and more constrained
to how the computer actually works, which on the plus side
gives you a lot more control because the language
is getting out of the way. But with more control, it means that you need to know more
about how the computer really works. C is a pretty low level language. It doesn't have very many frills And you do need to learn a bit about how
computers work under the hood to use it. But this is great for three reasons. First, it gives you a lot of control. This is why things like triple-A games,
high performance computing, simulation and Real-Time Systems
use lower level languages like C. because you can tell the computer
exactly what to do. The second is,
since you're forced to learn how computers truly work, it lets you dig up and down
these levels pretty easily. You’ll start to understand why higher level languages do what they do
and why they're designed that way. And if you do need to dig down and start dealing with hardware development
or OS level stuff, you have a really
good foundation to work from. And third C is forever. Other dead and dying languages
have come and gone, but C has stayed. I think a lot of it is probably
how un opinionated the language is. They never change C so C is immune to
any fads and programing language design. C is definitely not
the easiest language to learn, but if you master it, it makes learning
all other languages easy. If you did the experiments
from last week's video to help Gary find Lorenzo, you were
programing in a low level language because the instructions were very basic and were closer to how a computer
actually works under the hood. To get a sense of how programing languages
look for this video's experiments. I give you some Gary programs and ask you to pick the matching program
in a different language. You don't need to fully understand
the languages you're looking at. The goal here is to try to decipher
how the low level instructions match up to the higher level languages. In the next video, we'll be working on getting you
the tools to get you started with C.