WEBVTT - The History of Programming Languages Part One

0:00:04.200 --> 0:00:07.560
<v Speaker 1>Get in text with technology with tech Stuff from stuff

0:00:07.600 --> 0:00:14.320
<v Speaker 1>works dot com. Hey there, and welcome to tech Stuff.

0:00:14.400 --> 0:00:18.759
<v Speaker 1>I'm your host, Jonathan Strickland, a senior writer with health

0:00:18.800 --> 0:00:21.360
<v Speaker 1>stuff works dot com. I hope you guys are doing

0:00:21.440 --> 0:00:25.600
<v Speaker 1>well today. I'm going to start tackling a subject I

0:00:25.720 --> 0:00:30.880
<v Speaker 1>have alluded to in previous episodes, the history of programming languages.

0:00:31.800 --> 0:00:34.320
<v Speaker 1>There's a lot of it, so this will be a

0:00:34.400 --> 0:00:37.440
<v Speaker 1>two parter at the very least, and part one we're

0:00:37.440 --> 0:00:41.200
<v Speaker 1>going to be laying the groundwork for programming languages. Long

0:00:41.320 --> 0:00:43.680
<v Speaker 1>time listeners know this is kind of my m O.

0:00:44.240 --> 0:00:47.800
<v Speaker 1>I like to really make sure that we have a

0:00:47.840 --> 0:00:50.840
<v Speaker 1>foundation before I go into a topic because I feel

0:00:50.880 --> 0:00:56.360
<v Speaker 1>like context is really important. And despite our love of

0:00:56.400 --> 0:00:59.720
<v Speaker 1>stories that have a beginning, middle, and end, typically history

0:00:59.840 --> 0:01:03.040
<v Speaker 1>is not so neat and tidy. We tend to have

0:01:03.160 --> 0:01:06.319
<v Speaker 1>lots of stuff bleed into other things and so it

0:01:06.319 --> 0:01:09.760
<v Speaker 1>gets a little complicated. So before we talk about the

0:01:09.800 --> 0:01:13.360
<v Speaker 1>history of programming languages itself, let's talk about why we

0:01:13.480 --> 0:01:17.120
<v Speaker 1>need programming languages in the first place. Well, when you

0:01:17.160 --> 0:01:21.679
<v Speaker 1>get down to it, computers process machine language, or a

0:01:21.800 --> 0:01:25.240
<v Speaker 1>type of machine language. Machine language in itself is a

0:01:25.280 --> 0:01:30.640
<v Speaker 1>descriptor it is the language that machines quote unquote understand

0:01:30.920 --> 0:01:36.959
<v Speaker 1>and what they are using in order to execute various operations. Uh,

0:01:37.000 --> 0:01:42.039
<v Speaker 1>the machine language of today is the binary code zeros

0:01:42.160 --> 0:01:45.720
<v Speaker 1>and ones. All those instructions that a computer carries out

0:01:45.959 --> 0:01:50.960
<v Speaker 1>essentially boiled down to chains of zeros and ones. So

0:01:51.160 --> 0:01:55.440
<v Speaker 1>in order to really understand programming languages, at least most

0:01:55.480 --> 0:02:00.000
<v Speaker 1>of modern programming languages, we need to understand about binary

0:02:00.800 --> 0:02:04.400
<v Speaker 1>and as it turns out, the concept of using binary

0:02:04.440 --> 0:02:09.600
<v Speaker 1>arithmetic dates back quite a ways, well before the dawn

0:02:09.919 --> 0:02:14.119
<v Speaker 1>of the computer. The earliest scholarly work I could find

0:02:14.160 --> 0:02:20.640
<v Speaker 1>regarding binary arithmetic dates to seventeen o three, eighteenth century.

0:02:20.760 --> 0:02:25.240
<v Speaker 1>It was written by Gottfried Wilhelm Leibniz. The Leibniz was

0:02:25.280 --> 0:02:28.720
<v Speaker 1>a German mathematician and philosopher and one of the two

0:02:28.760 --> 0:02:34.040
<v Speaker 1>people to invent differential and integral calculus. Anyone know who

0:02:34.080 --> 0:02:39.520
<v Speaker 1>the other person was? Bueller, Bueller, I'm sure a lot

0:02:39.560 --> 0:02:41.520
<v Speaker 1>of you are shouting it out right now. It's actually

0:02:41.840 --> 0:02:48.240
<v Speaker 1>sir Isaac Newton. Newton and Leibniz were two co inventors

0:02:48.720 --> 0:02:52.000
<v Speaker 1>of calculus. They did it independently of one another. In

0:02:52.040 --> 0:02:55.560
<v Speaker 1>other words, neither of them were aware of the other

0:02:55.600 --> 0:02:58.200
<v Speaker 1>person's work, which is kind of cool when you think

0:02:58.200 --> 0:03:02.360
<v Speaker 1>about it. It's this this uh, an interesting moment in

0:03:02.440 --> 0:03:06.400
<v Speaker 1>history where you have two different brilliant people coming up

0:03:06.440 --> 0:03:09.200
<v Speaker 1>with the same idea simultaneously. And this is not the

0:03:09.240 --> 0:03:11.360
<v Speaker 1>only time this has happened. There have been quite a

0:03:11.360 --> 0:03:15.160
<v Speaker 1>few times in human history where people in different parts

0:03:15.200 --> 0:03:17.120
<v Speaker 1>of the world have come to the same sort of

0:03:17.600 --> 0:03:21.280
<v Speaker 1>amazing realization at around the same time without ever being

0:03:21.280 --> 0:03:25.480
<v Speaker 1>aware of the other person. As it turns out, they

0:03:25.520 --> 0:03:31.200
<v Speaker 1>both tried to lay claim to being the father of calculus. Uh. Really,

0:03:31.240 --> 0:03:34.639
<v Speaker 1>their followers were more rabid about it than they were.

0:03:35.000 --> 0:03:39.320
<v Speaker 1>And there's in fact, an entire fascinating story about the

0:03:39.360 --> 0:03:43.560
<v Speaker 1>battle for who should be given credit for inventing calculus.

0:03:43.920 --> 0:03:46.400
<v Speaker 1>But that's a story for another podcast. It's really not

0:03:46.480 --> 0:03:48.120
<v Speaker 1>a tech stuff story. You might be a stuff you

0:03:48.120 --> 0:03:51.440
<v Speaker 1>missed in history class story if you really want to

0:03:52.840 --> 0:03:55.920
<v Speaker 1>make some history folks go crazy about talking about, you know,

0:03:56.080 --> 0:03:59.280
<v Speaker 1>lots of maths. But let's go back to binary arithmetic.

0:04:00.080 --> 0:04:04.360
<v Speaker 1>The Leibnitz wrote about binary arithmetic in his memoir De

0:04:04.640 --> 0:04:08.520
<v Speaker 1>la Caademir Royal de san sees ha ha ha, And

0:04:08.560 --> 0:04:12.720
<v Speaker 1>I know my French is terrible. You shouldn't pop off

0:04:12.720 --> 0:04:18.640
<v Speaker 1>from Sabien and Maroisment. His work, though, was the first

0:04:18.680 --> 0:04:24.279
<v Speaker 1>to explain that arithmetic typically relies upon base ten. Makes sense.

0:04:24.360 --> 0:04:27.919
<v Speaker 1>You know your your typical person has five fingers on

0:04:27.960 --> 0:04:31.320
<v Speaker 1>each hand, five toes on each foot. Base ten makes sense.

0:04:31.360 --> 0:04:34.599
<v Speaker 1>You count one to ten with your fingers. So he

0:04:34.640 --> 0:04:37.000
<v Speaker 1>would say that base ten really ranges from the number

0:04:37.120 --> 0:04:39.800
<v Speaker 1>zero up to the number nine, and then you repeat

0:04:40.040 --> 0:04:44.320
<v Speaker 1>that sequence again, only you put a one in the

0:04:44.440 --> 0:04:48.919
<v Speaker 1>second column, you know, the really the tens column, and

0:04:48.960 --> 0:04:50.840
<v Speaker 1>then you start back at zero and work your way

0:04:50.839 --> 0:04:52.200
<v Speaker 1>back up to nine, and then you would put it

0:04:52.279 --> 0:04:54.240
<v Speaker 1>to there, and so on and so forth. So you

0:04:54.279 --> 0:04:57.600
<v Speaker 1>worked up to the one hundreds column and the one

0:04:57.640 --> 0:05:02.400
<v Speaker 1>thousand's column. But he says he found that the simplest

0:05:02.440 --> 0:05:05.000
<v Speaker 1>progression of all to be more useful in the science

0:05:05.120 --> 0:05:10.000
<v Speaker 1>of numbers. That simplest of progressions is between just two

0:05:10.120 --> 0:05:14.960
<v Speaker 1>numbers zero and one before it repeats itself. So the

0:05:15.040 --> 0:05:18.800
<v Speaker 1>number zero is zero, the number one is one. If

0:05:18.880 --> 0:05:22.159
<v Speaker 1>you wanted to represent the number two, you would write

0:05:22.360 --> 0:05:26.880
<v Speaker 1>one zero. So again it's kind of like going zero

0:05:26.920 --> 0:05:28.720
<v Speaker 1>to nine, and then you would go to ten. In

0:05:28.760 --> 0:05:30.280
<v Speaker 1>this case, you go to zero the one, then you

0:05:30.320 --> 0:05:33.200
<v Speaker 1>would go to what is effectively ten that represents the

0:05:33.279 --> 0:05:37.000
<v Speaker 1>number two. Three would be one, one or eleven if

0:05:37.000 --> 0:05:39.960
<v Speaker 1>we were using the decimal system, and a four is

0:05:40.240 --> 0:05:44.000
<v Speaker 1>one zero, zero or one, and so on and so forth.

0:05:44.200 --> 0:05:46.480
<v Speaker 1>Now by the time you get the thirty, you're looking

0:05:46.640 --> 0:05:51.839
<v Speaker 1>at one one, one, one zero, and a thirty two

0:05:52.000 --> 0:05:56.040
<v Speaker 1>is one followed by five zero, so it would be

0:05:56.080 --> 0:06:00.000
<v Speaker 1>one hundred thousand in the base ten system. Leibnitz said

0:06:00.120 --> 0:06:03.880
<v Speaker 1>that this scheme allowed for geometric progression. So if you

0:06:03.920 --> 0:06:07.080
<v Speaker 1>were to take the binary digits for four, which is

0:06:07.160 --> 0:06:10.239
<v Speaker 1>one zero, zero, and then you took the binary digits

0:06:10.240 --> 0:06:13.640
<v Speaker 1>for two, which is one zero, and then as in

0:06:14.200 --> 0:06:16.600
<v Speaker 1>the number one followed by the number zero, and then

0:06:16.640 --> 0:06:19.760
<v Speaker 1>you took the binary digit that represents the number one,

0:06:20.040 --> 0:06:22.719
<v Speaker 1>which in this case is one, and you were to

0:06:22.760 --> 0:06:24.920
<v Speaker 1>add all of those together, you'd end up with one

0:06:24.960 --> 0:06:29.760
<v Speaker 1>on one that is the binary digit for seven, which

0:06:29.800 --> 0:06:32.440
<v Speaker 1>is also what you get when you add four and

0:06:32.520 --> 0:06:36.800
<v Speaker 1>two and one together in base ten. Leimnez says this

0:06:36.839 --> 0:06:40.479
<v Speaker 1>approach allows for lots of practical applications, such as weighing

0:06:40.560 --> 0:06:43.080
<v Speaker 1>a lot of different masses with just a few different

0:06:43.080 --> 0:06:47.000
<v Speaker 1>types of weights or in coinage to allow for many

0:06:47.040 --> 0:06:50.000
<v Speaker 1>different values with just a few coins, So he was

0:06:50.080 --> 0:06:53.960
<v Speaker 1>thinking of practical applications for binary arithmetic. He also said

0:06:53.960 --> 0:06:57.400
<v Speaker 1>that expressing numbers this way allowed for easy mathematical operations

0:06:57.400 --> 0:07:02.000
<v Speaker 1>such as subtraction, multiplication, and division. Leibnitz also said that

0:07:02.120 --> 0:07:05.440
<v Speaker 1>using binary just made sense. You didn't have to memorize

0:07:05.480 --> 0:07:08.760
<v Speaker 1>facts by rote as. Everything was evident through what he

0:07:08.839 --> 0:07:12.720
<v Speaker 1>called ordinary reckoning. So in other words, you wouldn't have

0:07:12.840 --> 0:07:17.760
<v Speaker 1>to memorize things like seven plus eight is fifteen, right,

0:07:17.920 --> 0:07:20.960
<v Speaker 1>You wouldn't have to memorize these sort of ideas, or

0:07:21.000 --> 0:07:24.480
<v Speaker 1>that four times six, you know, what is that? What

0:07:24.640 --> 0:07:27.720
<v Speaker 1>is four times six? I'm asking you know it's twenty four.

0:07:28.120 --> 0:07:31.360
<v Speaker 1>So you wouldn't have to memorize these and and have

0:07:31.480 --> 0:07:35.000
<v Speaker 1>it all by rote But that with the binary approach,

0:07:35.040 --> 0:07:38.680
<v Speaker 1>because you're only working with ones and zeros, there's none

0:07:38.680 --> 0:07:42.360
<v Speaker 1>of that memorization. It's all very intuitive. Now. Granted you

0:07:42.480 --> 0:07:45.160
<v Speaker 1>then have to work out what those ones and zeros

0:07:45.160 --> 0:07:47.600
<v Speaker 1>are representing in the base ten system. That's a little

0:07:47.640 --> 0:07:53.360
<v Speaker 1>more complicated, but it works. Leibnitz Is work predates computers

0:07:53.400 --> 0:07:57.120
<v Speaker 1>by centuries, and there's some evidence to suggest that binary

0:07:57.240 --> 0:08:00.320
<v Speaker 1>counting systems were actually being used by other culture ors

0:08:00.320 --> 0:08:04.520
<v Speaker 1>well before Leibniz came along. They weren't written in scholarly journals,

0:08:04.840 --> 0:08:08.360
<v Speaker 1>but they existed. Some researchers from the University of Norway

0:08:08.400 --> 0:08:13.000
<v Speaker 1>noted that on the island of Manga Manga Riva, and

0:08:13.040 --> 0:08:15.760
<v Speaker 1>I could be completely butchering the pronunciation of that, so

0:08:15.800 --> 0:08:19.640
<v Speaker 1>I apologize. It's a island over in the South Pacific

0:08:19.720 --> 0:08:22.960
<v Speaker 1>Islanders had been using a binary system to count between

0:08:23.000 --> 0:08:26.600
<v Speaker 1>the numbers twenty through eighty. So they used base ten

0:08:27.280 --> 0:08:30.040
<v Speaker 1>for all numbers leading up to twenty, and then between

0:08:30.080 --> 0:08:33.439
<v Speaker 1>twenty and eighty they used binary digits. And they were

0:08:33.480 --> 0:08:37.160
<v Speaker 1>doing this before the fifteenth century, so before the fourteen hundreds,

0:08:37.600 --> 0:08:41.240
<v Speaker 1>the islanders didn't have a written language, which meant that

0:08:41.280 --> 0:08:43.480
<v Speaker 1>whenever they had to do math, which they started having

0:08:43.520 --> 0:08:46.720
<v Speaker 1>to do they began to trade with other islanders and

0:08:46.760 --> 0:08:50.520
<v Speaker 1>other cultures well before the fourteen hundreds. It meant that

0:08:50.559 --> 0:08:52.320
<v Speaker 1>they needed to be able to do math in their

0:08:52.360 --> 0:08:56.920
<v Speaker 1>heads easily, and binary allowed for that as opposed to

0:08:57.280 --> 0:09:02.240
<v Speaker 1>something that's in the decimal ten system. But who considered

0:09:02.480 --> 0:09:06.400
<v Speaker 1>using binary as the basis for machine language? Where did

0:09:06.440 --> 0:09:10.439
<v Speaker 1>that come from, well, that would be much much later,

0:09:11.200 --> 0:09:14.360
<v Speaker 1>And in fact, there's some other elements of programming that

0:09:14.480 --> 0:09:17.760
<v Speaker 1>pre date the decision to go with binary as the

0:09:17.880 --> 0:09:21.679
<v Speaker 1>basic language for computers. So let's look at some of

0:09:21.720 --> 0:09:25.440
<v Speaker 1>those developments because that's kind of again what led to

0:09:25.600 --> 0:09:30.079
<v Speaker 1>the rise in programming itself. So to find the thread

0:09:30.679 --> 0:09:33.240
<v Speaker 1>of this story, we have to go back to eighteen

0:09:33.320 --> 0:09:36.520
<v Speaker 1>o one, so a century after Leibniz was writing about

0:09:36.559 --> 0:09:42.240
<v Speaker 1>binary arithmetic, and that's when Joseph Mrie Jacquard introduced the

0:09:42.280 --> 0:09:47.080
<v Speaker 1>programmable loom. We've talked about this in previous episodes of

0:09:47.120 --> 0:09:51.520
<v Speaker 1>Tech Stuff. The programmable loom was a real innovation back

0:09:51.559 --> 0:09:56.280
<v Speaker 1>in the nineteenth century. The programs consisted of wooden punch cards,

0:09:56.280 --> 0:09:58.960
<v Speaker 1>So you had these large pieces of wood with holes

0:09:59.080 --> 0:10:02.719
<v Speaker 1>punched in through in a certain pattern, and what you

0:10:02.720 --> 0:10:06.160
<v Speaker 1>would do is pass threads through the holes in the

0:10:06.280 --> 0:10:10.840
<v Speaker 1>cards when you were threading up your loom, and those

0:10:10.840 --> 0:10:14.080
<v Speaker 1>holes would essentially dictate what the pattern was going to

0:10:14.160 --> 0:10:17.680
<v Speaker 1>be when you finished. So if you wanted a specific pattern,

0:10:17.800 --> 0:10:21.280
<v Speaker 1>you just put the appropriate punch card, load that up

0:10:21.320 --> 0:10:24.720
<v Speaker 1>for your loom, pass the thread through, and then weave

0:10:24.920 --> 0:10:27.080
<v Speaker 1>on the loom. So that you would get the pattern

0:10:27.120 --> 0:10:30.080
<v Speaker 1>you wanted. You needed to change it up. You just

0:10:30.400 --> 0:10:34.560
<v Speaker 1>switched out the cards that you were using. Uh, so

0:10:34.720 --> 0:10:38.800
<v Speaker 1>different patterns would use different configurations of holes. You know, obviously,

0:10:38.840 --> 0:10:40.920
<v Speaker 1>if the hole is there, then a thread can pass through.

0:10:40.920 --> 0:10:43.560
<v Speaker 1>If there's no hole in that position, then a thread

0:10:43.600 --> 0:10:47.480
<v Speaker 1>cannot pass through. It's pretty pretty intuitive now if you

0:10:47.520 --> 0:10:52.079
<v Speaker 1>think about this in an abstract way. The punch cards

0:10:52.200 --> 0:10:55.920
<v Speaker 1>are like a series of two positions switches. The holes

0:10:56.240 --> 0:10:59.000
<v Speaker 1>are the on switch because they allow a thread to

0:10:59.000 --> 0:11:02.280
<v Speaker 1>pass through, and the areas where a hole could be

0:11:02.800 --> 0:11:05.920
<v Speaker 1>but there isn't a hole is an off switch because

0:11:05.920 --> 0:11:09.160
<v Speaker 1>you cannot pass a thread through a solid piece of wood.

0:11:10.160 --> 0:11:15.319
<v Speaker 1>So Jacquard's loom sped things up and really got things

0:11:15.360 --> 0:11:18.280
<v Speaker 1>moving in the weaving business. It also ended up putting

0:11:18.280 --> 0:11:20.040
<v Speaker 1>a lot of weavers out of work in the process,

0:11:20.040 --> 0:11:22.640
<v Speaker 1>and they got very upset. But it would take a

0:11:22.679 --> 0:11:26.079
<v Speaker 1>couple of decades before someone made the mental leap that

0:11:26.360 --> 0:11:30.280
<v Speaker 1>a punch card could be something that you could use

0:11:30.280 --> 0:11:35.920
<v Speaker 1>with abstract ideas, not just physical material like thread. That

0:11:36.120 --> 0:11:40.520
<v Speaker 1>someone was Charles Babbage who first proposed a mechanical device

0:11:40.600 --> 0:11:43.640
<v Speaker 1>called the difference engine. That was a device that was

0:11:43.640 --> 0:11:46.120
<v Speaker 1>meant to compute tables of numbers, and it was a

0:11:46.160 --> 0:11:50.080
<v Speaker 1>really complicated device with lots of gears and shafts that

0:11:50.120 --> 0:11:53.079
<v Speaker 1>could rotate in different directions, and it would have used

0:11:53.080 --> 0:11:55.600
<v Speaker 1>a lot of moving parts. But Babbage was never able

0:11:55.640 --> 0:11:58.480
<v Speaker 1>to actually finish it. It took longer than what he

0:11:58.600 --> 0:12:05.840
<v Speaker 1>had predicted, and ultimately the funding dried up as various

0:12:06.040 --> 0:12:09.240
<v Speaker 1>patrons got fed up with waiting around for Babbage to

0:12:09.280 --> 0:12:12.920
<v Speaker 1>finish the thing, and they ended up stopped. They stopped

0:12:12.920 --> 0:12:16.920
<v Speaker 1>paying him. But he began to work on a new

0:12:16.960 --> 0:12:20.600
<v Speaker 1>device that he called the analytic engine. And here's where

0:12:20.679 --> 0:12:24.800
<v Speaker 1>Jacquard's work came in. Babbage realized that those punch cards

0:12:24.880 --> 0:12:29.680
<v Speaker 1>that were physically either allowing or preventing thread to pass

0:12:29.720 --> 0:12:33.080
<v Speaker 1>through could act not just as gateways for physical material

0:12:33.160 --> 0:12:36.640
<v Speaker 1>like thread, but also for abstract notions like a problem

0:12:36.760 --> 0:12:40.160
<v Speaker 1>statement or information needed to work out a problem solution.

0:12:41.080 --> 0:12:44.000
<v Speaker 1>So by changing up what could and couldn't pass through,

0:12:44.240 --> 0:12:50.240
<v Speaker 1>you could run a problem through a mechanical calculator. Essentially.

0:12:50.640 --> 0:12:54.520
<v Speaker 1>Now with Babbage's design, we're not talking about electricity. Is

0:12:54.559 --> 0:12:58.680
<v Speaker 1>still gears, mechanical parts that have to connect with one another,

0:12:58.800 --> 0:13:02.040
<v Speaker 1>and all of it is based on physical motion. So

0:13:02.080 --> 0:13:04.040
<v Speaker 1>if you've ever worked with a loud computer that had

0:13:04.080 --> 0:13:06.480
<v Speaker 1>a bad fan or something, you have a hint of

0:13:06.520 --> 0:13:09.000
<v Speaker 1>what it must have sounded like to work on this thing.

0:13:09.320 --> 0:13:13.559
<v Speaker 1>Only the analytic engine involved more clanking, or at least

0:13:13.600 --> 0:13:15.839
<v Speaker 1>I hope it involved more clanking than your computer did.

0:13:15.840 --> 0:13:18.960
<v Speaker 1>If your computer is clanking, you probably should take that

0:13:19.000 --> 0:13:22.080
<v Speaker 1>in to get a bit of an adjustment, or if

0:13:22.080 --> 0:13:24.720
<v Speaker 1>you're really handy, take a look in there, your fan

0:13:24.880 --> 0:13:28.120
<v Speaker 1>is probably out of alignment. While Babbage was working on

0:13:28.280 --> 0:13:32.680
<v Speaker 1>that first analytic engine, he was also helped by the

0:13:32.720 --> 0:13:39.120
<v Speaker 1>world's first computer programmer. Her name was Aida Lovelace, the

0:13:39.320 --> 0:13:42.800
<v Speaker 1>Enchantress of Numbers, and I've done a full episode about

0:13:42.880 --> 0:13:45.760
<v Speaker 1>Lovelace before. I Think the Stuff you Missed in History

0:13:45.800 --> 0:13:50.360
<v Speaker 1>Class podcast has done an episode on Lovelace before. She

0:13:51.520 --> 0:13:58.480
<v Speaker 1>was remarkable, an incredible person, uh, someone who I think

0:13:58.600 --> 0:14:02.640
<v Speaker 1>needs more reck ignition for her contributions to computer science.

0:14:02.880 --> 0:14:05.679
<v Speaker 1>She envisioned a world in which not only could one

0:14:05.800 --> 0:14:10.680
<v Speaker 1>create a punch card program for a calculator to run

0:14:10.679 --> 0:14:13.520
<v Speaker 1>through and give you the solution to a problem, she

0:14:13.720 --> 0:14:16.880
<v Speaker 1>was able to make another mental leap on the same

0:14:16.960 --> 0:14:21.360
<v Speaker 1>level that Charles Babbage had made. Babbage's leap was, hey,

0:14:21.400 --> 0:14:25.400
<v Speaker 1>this card that could allow or prevent thread to pass

0:14:25.440 --> 0:14:28.640
<v Speaker 1>through could also be used in a more abstract way.

0:14:29.280 --> 0:14:34.240
<v Speaker 1>Lovelace's leap was this device that is intended to solve

0:14:34.320 --> 0:14:39.400
<v Speaker 1>mathematical equations and answer those sorts of problems, could also

0:14:39.440 --> 0:14:42.600
<v Speaker 1>be used to do all sorts of other things, things

0:14:42.640 --> 0:14:45.560
<v Speaker 1>that computers today can do. But no one at the

0:14:45.600 --> 0:14:50.240
<v Speaker 1>time was even imagining. She was such a forward thinker

0:14:50.800 --> 0:14:54.320
<v Speaker 1>that she was able to envision a world where you

0:14:54.360 --> 0:14:59.160
<v Speaker 1>could encode all sorts of information and use a device

0:14:59.240 --> 0:15:03.240
<v Speaker 1>like the Analytic Engine to process it information like music

0:15:03.600 --> 0:15:09.440
<v Speaker 1>or images. So the remarkable thing is, years before, decades

0:15:09.560 --> 0:15:13.600
<v Speaker 1>before anything like that would be possible, Lovelace was imagining

0:15:14.240 --> 0:15:17.920
<v Speaker 1>that actually coming to pass. And I really wonder what

0:15:18.160 --> 0:15:21.960
<v Speaker 1>she would think of the world today from a technological standpoint.

0:15:22.000 --> 0:15:23.800
<v Speaker 1>If she was able to look around and see the

0:15:23.840 --> 0:15:27.400
<v Speaker 1>sort of things that computers could do, she might feel

0:15:27.560 --> 0:15:32.400
<v Speaker 1>very much vindicated by this vision she had back in

0:15:32.560 --> 0:15:37.480
<v Speaker 1>the nineteenth century, where electronics were not a thing yet.

0:15:37.600 --> 0:15:41.160
<v Speaker 1>No one had really harnessed electricity in a meaningful way

0:15:41.240 --> 0:15:44.080
<v Speaker 1>at the time that they were working on the analytic engine.

0:15:44.840 --> 0:15:51.600
<v Speaker 1>So it's a really phenomenal thinker. I cannot imagine being

0:15:51.640 --> 0:15:55.360
<v Speaker 1>in a world where I'm able to project ahead that

0:15:55.480 --> 0:15:58.640
<v Speaker 1>far and think of something so abstract and to be

0:15:58.800 --> 0:16:03.480
<v Speaker 1>so right on the money. Really well. The next step

0:16:03.640 --> 0:16:07.040
<v Speaker 1>along the path to programming happened in eighteen nineties, so

0:16:07.080 --> 0:16:09.800
<v Speaker 1>we're getting to the end of the nineteenth century, and

0:16:09.840 --> 0:16:13.680
<v Speaker 1>that was a census year in the United States. So

0:16:13.840 --> 0:16:17.480
<v Speaker 1>in the US we hold a census every decade, and

0:16:17.520 --> 0:16:20.920
<v Speaker 1>the purpose of the census is to determine the representation

0:16:20.960 --> 0:16:23.880
<v Speaker 1>of states in the House of Representatives, that is a

0:16:23.920 --> 0:16:27.000
<v Speaker 1>group in Congress in the legislative branch that is dependent

0:16:27.120 --> 0:16:30.520
<v Speaker 1>upon state populations. So we have the Senate. Every state

0:16:30.560 --> 0:16:33.680
<v Speaker 1>gets to senators, but then we have the House of Representatives,

0:16:33.680 --> 0:16:36.280
<v Speaker 1>and the number that we have is dependent upon the

0:16:36.320 --> 0:16:39.800
<v Speaker 1>population of the various states, which means we occasionally have

0:16:39.880 --> 0:16:42.480
<v Speaker 1>to check and see what the populations are. If they

0:16:42.600 --> 0:16:46.600
<v Speaker 1>changed dramatically, then the number of representatives will again change

0:16:46.680 --> 0:16:49.160
<v Speaker 1>to reflect that. But the U s had hit a

0:16:49.240 --> 0:16:52.440
<v Speaker 1>problem by the end of the nineteenth century. There were

0:16:52.440 --> 0:16:55.480
<v Speaker 1>just too many dang people to count. It was just

0:16:55.560 --> 0:16:58.320
<v Speaker 1>taking really long to count them all by hand. So

0:16:58.360 --> 0:17:02.880
<v Speaker 1>in seventeen nine century earlier. They was also the very

0:17:02.920 --> 0:17:06.359
<v Speaker 1>first year that we held a census. It took nine

0:17:06.640 --> 0:17:10.520
<v Speaker 1>months to count up all the different responses for the

0:17:10.600 --> 0:17:16.679
<v Speaker 1>United States Census. By eight the census, the previous census,

0:17:16.680 --> 0:17:19.000
<v Speaker 1>the one that just happened before. They were trying to

0:17:19.000 --> 0:17:22.040
<v Speaker 1>figure out a new method. It took them seven and

0:17:22.080 --> 0:17:26.159
<v Speaker 1>a half years to tally all the results. Seven and

0:17:26.200 --> 0:17:28.399
<v Speaker 1>a half years to count up the results of the

0:17:28.400 --> 0:17:31.119
<v Speaker 1>previous census. That meant that you were two and a

0:17:31.160 --> 0:17:33.959
<v Speaker 1>half years away from having to do it all over again.

0:17:34.600 --> 0:17:38.200
<v Speaker 1>And so the Census Bureau held a contest, and they

0:17:38.240 --> 0:17:41.720
<v Speaker 1>called for inventors to come up with some way of

0:17:41.880 --> 0:17:45.840
<v Speaker 1>tallying the census responses much more quickly so that they're

0:17:45.840 --> 0:17:50.640
<v Speaker 1>not wasting so much time and money just counting how

0:17:50.640 --> 0:17:56.720
<v Speaker 1>many people are in each state. Enter Herman Hollerith, who

0:17:56.400 --> 0:17:59.920
<v Speaker 1>invented a solution in response to the US Census Bureau

0:18:00.080 --> 0:18:04.840
<v Speaker 1>and offered he won the prize that the bureau was offering. Holly.

0:18:04.960 --> 0:18:08.320
<v Speaker 1>Rith created what he called a card reader. So again

0:18:08.359 --> 0:18:10.520
<v Speaker 1>we get to punch cards, very similar to what was

0:18:10.560 --> 0:18:14.640
<v Speaker 1>being used by Babbage and then previously by Jacquard. This

0:18:14.880 --> 0:18:18.760
<v Speaker 1>red cards by sensing holes that were punched into the cards,

0:18:19.480 --> 0:18:21.800
<v Speaker 1>and it also had a gear mechanism to help keep

0:18:21.840 --> 0:18:26.240
<v Speaker 1>count of all the different things that needed to count

0:18:26.280 --> 0:18:29.320
<v Speaker 1>all the demographic information, and had a panel of dials

0:18:29.359 --> 0:18:32.160
<v Speaker 1>that would track the various counts so that you could

0:18:32.200 --> 0:18:34.600
<v Speaker 1>just look at the different dials and you would get

0:18:34.640 --> 0:18:39.720
<v Speaker 1>a summary of all the different responses. Each card had

0:18:39.760 --> 0:18:42.359
<v Speaker 1>positions on it that would indicate different data about the

0:18:42.400 --> 0:18:47.080
<v Speaker 1>citizen it represented, and his invention meant the eighteen nineties

0:18:47.080 --> 0:18:50.240
<v Speaker 1>census could be tabulated in three years, so less than

0:18:50.359 --> 0:18:53.320
<v Speaker 1>half the time of the previous census, the one that

0:18:53.359 --> 0:18:56.440
<v Speaker 1>had happened in eighteen eighty. It's still a good long

0:18:56.480 --> 0:18:58.880
<v Speaker 1>while to have to count that up, but much much

0:18:58.920 --> 0:19:01.560
<v Speaker 1>faster and more efficient it than the previous census was.

0:19:02.680 --> 0:19:05.760
<v Speaker 1>Hall Earth would go on to found a company called

0:19:05.840 --> 0:19:09.480
<v Speaker 1>the Tabulating Machine Company. That company, by the way, is

0:19:09.520 --> 0:19:13.080
<v Speaker 1>still around today, but its name has changed because the

0:19:13.119 --> 0:19:18.720
<v Speaker 1>Tabulating Machine Company would evolve into International Business Machines, which

0:19:18.720 --> 0:19:25.000
<v Speaker 1>today we know as IBM. So IBM had in its history,

0:19:25.280 --> 0:19:30.720
<v Speaker 1>the original purpose of it was to uh tabulate punch cards,

0:19:30.800 --> 0:19:33.360
<v Speaker 1>and those punch cards were originally used for the eight

0:19:33.720 --> 0:19:36.960
<v Speaker 1>nineties census in the United States. Kind of cool little

0:19:37.080 --> 0:19:39.640
<v Speaker 1>bit of trivia. So if you're ever at pub trivia

0:19:39.800 --> 0:19:42.360
<v Speaker 1>and they're asking where IBM came from, now you know.

0:19:43.200 --> 0:19:45.080
<v Speaker 1>And you also know that the person who's running the

0:19:45.119 --> 0:19:48.600
<v Speaker 1>trivia is a total geek who may also listen to

0:19:48.640 --> 0:19:51.879
<v Speaker 1>the show, So hey, shout out to you, Mr or

0:19:52.000 --> 0:19:56.400
<v Speaker 1>Mrs Trivia Master. Those punch cards would become an important

0:19:56.440 --> 0:20:00.280
<v Speaker 1>part of programming later on now. Arguably the first person

0:20:00.320 --> 0:20:03.720
<v Speaker 1>to build a general purpose computer was a man named

0:20:03.800 --> 0:20:08.680
<v Speaker 1>Conrad Zeussa who designed and built the Z one computer

0:20:08.880 --> 0:20:13.439
<v Speaker 1>in the late nineteen thirties. His device combined electronic and

0:20:13.560 --> 0:20:17.359
<v Speaker 1>mechanical parts, so it wasn't a purely electronic computer. It

0:20:17.440 --> 0:20:19.879
<v Speaker 1>still had some moving parts to it, and he had

0:20:19.920 --> 0:20:23.439
<v Speaker 1>decided to go with binary processing as the basis for

0:20:23.560 --> 0:20:25.880
<v Speaker 1>his computer. It makes it simple because you only need

0:20:25.880 --> 0:20:29.000
<v Speaker 1>to switch with two positions on or off for each

0:20:29.040 --> 0:20:33.119
<v Speaker 1>of your little processors and or gates if you prefer,

0:20:33.760 --> 0:20:37.280
<v Speaker 1>and he thought that made more sense than decimal processing.

0:20:37.440 --> 0:20:42.720
<v Speaker 1>And he used discarded film as his medium to send

0:20:43.480 --> 0:20:46.800
<v Speaker 1>commands to the computer. He wasn't using card stock, he

0:20:46.880 --> 0:20:49.959
<v Speaker 1>wasn't using paper tape, he didn't have access to it,

0:20:49.960 --> 0:20:53.880
<v Speaker 1>but he did use discarded film from various film houses

0:20:53.880 --> 0:20:56.440
<v Speaker 1>in Germany, and he would just punch holes in that

0:20:56.720 --> 0:21:01.399
<v Speaker 1>to be the instructions for his machine. His Z three machine,

0:21:01.440 --> 0:21:03.600
<v Speaker 1>which he built in nineteen forty one, might have been

0:21:03.600 --> 0:21:07.560
<v Speaker 1>the first general purpose programmable digital computer, but it was

0:21:07.640 --> 0:21:11.679
<v Speaker 1>destroyed during a bombing raid in World War Two. Only

0:21:11.760 --> 0:21:14.520
<v Speaker 1>his Z four device was able to make it through

0:21:14.560 --> 0:21:19.359
<v Speaker 1>the war, and for years Zeus's work remained in obscurity.

0:21:19.520 --> 0:21:22.560
<v Speaker 1>No one knew that he had made these things, and

0:21:22.600 --> 0:21:25.640
<v Speaker 1>he had done it again independently of anyone else. So

0:21:25.920 --> 0:21:28.720
<v Speaker 1>you would see the rise of computer science in other

0:21:28.960 --> 0:21:33.720
<v Speaker 1>countries disconnected from his work, and in turn, his work

0:21:33.760 --> 0:21:37.800
<v Speaker 1>was disconnected from their's. Again, another example of these two

0:21:37.880 --> 0:21:43.000
<v Speaker 1>different places with the same ideas coming into shape. He

0:21:43.160 --> 0:21:46.120
<v Speaker 1>arrived at his designs independently of all the other pioneers

0:21:46.160 --> 0:21:49.040
<v Speaker 1>and computer science. We'll talk a little bit about his

0:21:49.119 --> 0:21:53.199
<v Speaker 1>programming language in our next episode, because while he was

0:21:53.760 --> 0:21:58.400
<v Speaker 1>creating a programming language earlier than almost anyone else, it

0:21:58.440 --> 0:22:03.919
<v Speaker 1>didn't become known to most computer scientists until the nineteen seventies. Well,

0:22:03.920 --> 0:22:05.600
<v Speaker 1>I've got a lot more to talk about in the

0:22:05.680 --> 0:22:08.879
<v Speaker 1>history of programming languages, but before I jump into the

0:22:08.920 --> 0:22:12.560
<v Speaker 1>next section. Let's take a quick break to thank our sponsor.

0:22:19.880 --> 0:22:26.680
<v Speaker 1>All Right, during World War Two we get the term computers.

0:22:27.040 --> 0:22:31.679
<v Speaker 1>But here's the interesting thing. Computers were not machines. For

0:22:31.760 --> 0:22:34.400
<v Speaker 1>the most part. In World War two computers the word

0:22:34.440 --> 0:22:39.159
<v Speaker 1>computers referred to people. It applied to human beings, and

0:22:39.200 --> 0:22:44.320
<v Speaker 1>their job was to compute various equations, specifically relating to

0:22:44.560 --> 0:22:49.359
<v Speaker 1>artillery and gunnery when it first started. By World War two,

0:22:49.400 --> 0:22:53.359
<v Speaker 1>our war machines had reached incredible amounts of power and

0:22:53.400 --> 0:22:56.040
<v Speaker 1>you could fire upon positions that were well out of you.

0:22:56.640 --> 0:22:59.040
<v Speaker 1>But it meant that you needed to understand exactly what

0:22:59.080 --> 0:23:01.600
<v Speaker 1>a shell was owing to do when you fired it.

0:23:02.359 --> 0:23:04.960
<v Speaker 1>In other words, based on the power of the gun,

0:23:05.440 --> 0:23:10.760
<v Speaker 1>the weight of the shell, wind, other factors. If you

0:23:10.840 --> 0:23:14.560
<v Speaker 1>fire at a certain elevation, if a certain angle from

0:23:14.600 --> 0:23:17.720
<v Speaker 1>the ground, where is that show going to go? It's

0:23:17.760 --> 0:23:21.000
<v Speaker 1>really important if you want to hit, say, an enemy

0:23:21.280 --> 0:23:29.680
<v Speaker 1>encampment versus just countryside or a town. Well, it meant

0:23:29.760 --> 0:23:32.600
<v Speaker 1>that they needed people who were really good at maths.

0:23:32.640 --> 0:23:36.680
<v Speaker 1>So the army started to hire math majors. But that

0:23:36.720 --> 0:23:40.960
<v Speaker 1>meant that they were looking primarily at women, because the

0:23:41.000 --> 0:23:44.520
<v Speaker 1>men were already drafted into the armed forces, and they

0:23:44.560 --> 0:23:51.160
<v Speaker 1>were serving as soldiers and other frontline personnel. So women

0:23:52.040 --> 0:23:56.360
<v Speaker 1>were predominantly the computers of World War two. These were

0:23:56.359 --> 0:24:00.760
<v Speaker 1>women who were studying mathematics, and we're breaking round in

0:24:00.800 --> 0:24:04.080
<v Speaker 1>the areas of math. So they would work out all

0:24:04.160 --> 0:24:06.760
<v Speaker 1>of these different equations to figure out how things like

0:24:06.840 --> 0:24:10.400
<v Speaker 1>muscle velocity or wind effects or atmospheric drag and other

0:24:10.480 --> 0:24:14.840
<v Speaker 1>factors affected shells, and they created what we're called firing

0:24:15.000 --> 0:24:18.440
<v Speaker 1>tables for various types of weaponry. But there was more

0:24:18.520 --> 0:24:22.000
<v Speaker 1>work than they had manpower or maybe I should say

0:24:22.000 --> 0:24:25.879
<v Speaker 1>woman power to do. So they needed some way to

0:24:26.040 --> 0:24:31.080
<v Speaker 1>do this work more quickly and efficiently, especially where you're

0:24:31.200 --> 0:24:35.800
<v Speaker 1>just taking small changes in a variable in order to

0:24:36.040 --> 0:24:38.959
<v Speaker 1>create another table, because otherwise you just have to run

0:24:39.000 --> 0:24:41.639
<v Speaker 1>all those different equations again. If you could do something

0:24:41.640 --> 0:24:44.520
<v Speaker 1>where you could just make a small change and run

0:24:44.560 --> 0:24:48.160
<v Speaker 1>that same problem and get the answer quickly, it would

0:24:48.840 --> 0:24:51.400
<v Speaker 1>save a lot of time. So there was a need

0:24:51.440 --> 0:24:54.920
<v Speaker 1>for computational engines that could do this work faster. Now

0:24:54.960 --> 0:24:59.359
<v Speaker 1>over at Harvard, engineers built a machine called the Mark one.

0:25:00.160 --> 0:25:03.359
<v Speaker 1>This was the first programmable digital computer made in the

0:25:03.440 --> 0:25:07.920
<v Speaker 1>United States, but one it was not a purely electronic machine.

0:25:08.359 --> 0:25:11.600
<v Speaker 1>It had some mechanical parts to it, including a large

0:25:11.640 --> 0:25:14.359
<v Speaker 1>central shaft that had to be turned by a an

0:25:14.400 --> 0:25:19.280
<v Speaker 1>actual motor and about uh, you know, five horsepower, and

0:25:19.359 --> 0:25:22.800
<v Speaker 1>it also had clutches and relays. It weighed five tons

0:25:22.960 --> 0:25:26.480
<v Speaker 1>and had five hundred miles of wiring inside of it.

0:25:26.800 --> 0:25:29.360
<v Speaker 1>The computer itself was eight feet tall and fifty one

0:25:29.400 --> 0:25:32.119
<v Speaker 1>ft long, and it read instructions on a reel of

0:25:32.160 --> 0:25:35.359
<v Speaker 1>paper tape with holes punched into it. So this was

0:25:35.400 --> 0:25:39.960
<v Speaker 1>like one really long punch card this roll of paper tape.

0:25:40.600 --> 0:25:43.479
<v Speaker 1>And it solved the problem that some other early computer

0:25:43.520 --> 0:25:46.320
<v Speaker 1>programmers ran into, which is, if you have a stack

0:25:46.400 --> 0:25:49.880
<v Speaker 1>of punch cards, and especially if you failed to number

0:25:50.080 --> 0:25:53.439
<v Speaker 1>your stack of punch cards and you dropped that stack,

0:25:54.200 --> 0:25:56.719
<v Speaker 1>then your program was completely out of order and it

0:25:56.760 --> 0:25:58.879
<v Speaker 1>was useless. In fact, it might be easier for you

0:25:58.960 --> 0:26:02.160
<v Speaker 1>to go back and e program using a fresh new

0:26:02.240 --> 0:26:04.520
<v Speaker 1>stack and a hole puncher. Then it would be to

0:26:04.520 --> 0:26:08.720
<v Speaker 1>try and figure out what order the cards had been in. Uh.

0:26:08.800 --> 0:26:11.840
<v Speaker 1>The moral of that story was always number your cards.

0:26:12.000 --> 0:26:15.000
<v Speaker 1>Although very few people have to worry about working with

0:26:15.040 --> 0:26:17.639
<v Speaker 1>punch cards these days, but if you do, always number

0:26:17.680 --> 0:26:20.159
<v Speaker 1>your cards. That way, if you do drop them, then

0:26:20.200 --> 0:26:22.880
<v Speaker 1>you just have to get them in the right sequence again. Uh,

0:26:22.920 --> 0:26:26.679
<v Speaker 1>and it's not as big of a headache. One of

0:26:26.720 --> 0:26:30.399
<v Speaker 1>the programmers of the Mark one was a woman named

0:26:30.520 --> 0:26:36.360
<v Speaker 1>Grace Hopper, who is also credited with creating the term debugging. Now,

0:26:36.359 --> 0:26:38.879
<v Speaker 1>the word bug had been in use for a while

0:26:39.240 --> 0:26:43.560
<v Speaker 1>to designate the idea of a design error or flaw

0:26:43.640 --> 0:26:47.640
<v Speaker 1>that needs to be corrected, whether it's in calculating machine

0:26:47.720 --> 0:26:52.119
<v Speaker 1>or something else. So bugs as a term for something

0:26:52.160 --> 0:26:55.280
<v Speaker 1>that's not right have been around for a while, but

0:26:55.560 --> 0:26:58.880
<v Speaker 1>Grace Hopper got the credit for debugging. She was involved

0:26:58.880 --> 0:27:02.680
<v Speaker 1>in a literal d bugging in which programmers pulled a

0:27:02.760 --> 0:27:08.040
<v Speaker 1>moth out of relay number seventy in the Mark two system.

0:27:08.200 --> 0:27:11.679
<v Speaker 1>We'll talk more about Grace Hopper in a little bit now.

0:27:12.520 --> 0:27:15.680
<v Speaker 1>Around the same time as the Mark one was being

0:27:15.720 --> 0:27:19.159
<v Speaker 1>put together over in the UK, scientists were building another

0:27:19.200 --> 0:27:24.960
<v Speaker 1>machine called the Colossus. This machine was a more specific

0:27:25.359 --> 0:27:28.879
<v Speaker 1>computational device. It wasn't a general purpose computer. It was

0:27:28.960 --> 0:27:33.080
<v Speaker 1>made specifically to break the cryptographic codes sent by German

0:27:33.200 --> 0:27:37.800
<v Speaker 1>officers during World War Two, including codes that were created

0:27:37.960 --> 0:27:44.280
<v Speaker 1>using the Enigma Machine, a fiendishly clever cryptographic device. Now

0:27:44.320 --> 0:27:47.600
<v Speaker 1>I have done a full episode about the Enigma, so

0:27:47.640 --> 0:27:49.640
<v Speaker 1>I'm not going to dwell on it very much here.

0:27:50.359 --> 0:27:55.080
<v Speaker 1>It is a fascinating gadget, and again, Colossus was a

0:27:55.080 --> 0:27:58.199
<v Speaker 1>specific purpose machine. It could not be reprogrammed to do

0:27:58.320 --> 0:28:01.720
<v Speaker 1>really anything else. So while it was fascinating, it also

0:28:01.800 --> 0:28:05.720
<v Speaker 1>had limitations by its very design. But we see here

0:28:05.760 --> 0:28:12.000
<v Speaker 1>that each individual piece of information can come in various forms, right,

0:28:12.080 --> 0:28:17.160
<v Speaker 1>and so especially with punch cards, is essentially on or off. Now,

0:28:17.160 --> 0:28:20.400
<v Speaker 1>the mechanical computer didn't take over the world, and digital

0:28:20.400 --> 0:28:23.880
<v Speaker 1>computers wouldn't really emerge until the nineteen forties and fifties,

0:28:23.920 --> 0:28:27.440
<v Speaker 1>and truly digital electronic computers wouldn't be there till the

0:28:27.480 --> 0:28:31.480
<v Speaker 1>nineteen forties and fifties. But many of the earliest computers

0:28:31.480 --> 0:28:34.200
<v Speaker 1>would use physical switches that you would set before you

0:28:34.240 --> 0:28:37.280
<v Speaker 1>would run any sort of program. So you didn't have

0:28:37.359 --> 0:28:41.239
<v Speaker 1>like a processor. You had all these these banks and

0:28:41.320 --> 0:28:43.360
<v Speaker 1>banks of switches, so you'd have to make sure that

0:28:43.400 --> 0:28:46.320
<v Speaker 1>each switch is in the correct position and all the

0:28:46.400 --> 0:28:49.760
<v Speaker 1>wires are plugged into the correct ports before you would

0:28:49.800 --> 0:28:55.120
<v Speaker 1>run a problem through the calculation machine. Now, if the

0:28:55.240 --> 0:29:01.080
<v Speaker 1>switches had two positions, that's essentially programming in binary zeros

0:29:01.120 --> 0:29:05.440
<v Speaker 1>and ones or or off and on, so that only

0:29:06.000 --> 0:29:09.920
<v Speaker 1>uh counts if the switches have just two positions. If

0:29:09.920 --> 0:29:12.600
<v Speaker 1>you put multiple positions for the switches, then you're not

0:29:12.720 --> 0:29:16.640
<v Speaker 1>using binary, you're using a different system. Uh. But a

0:29:16.720 --> 0:29:21.320
<v Speaker 1>lot of those early machines were using two position switches,

0:29:21.520 --> 0:29:23.760
<v Speaker 1>so they were binary machines. And it makes sense in

0:29:23.800 --> 0:29:26.760
<v Speaker 1>the digital world where on and off are the only

0:29:26.800 --> 0:29:30.959
<v Speaker 1>discrete values, and so in the beginning, programmers built code

0:29:31.120 --> 0:29:35.000
<v Speaker 1>in binary. For the most part, not every machine is

0:29:35.040 --> 0:29:38.480
<v Speaker 1>like this, but a lot of them were. In this world,

0:29:38.480 --> 0:29:41.640
<v Speaker 1>a single unit of information is the bit that is

0:29:41.680 --> 0:29:44.720
<v Speaker 1>either a zero or a one. And I'm sure you've

0:29:44.720 --> 0:29:47.680
<v Speaker 1>heard that eight bits are a bite. Now, that was

0:29:47.720 --> 0:29:51.440
<v Speaker 1>not arbitrarily chosen. There was a reason for eight bits

0:29:51.480 --> 0:29:55.600
<v Speaker 1>to make a bite, and it wasn't the only strategy

0:29:55.840 --> 0:29:59.320
<v Speaker 1>of making bites. There were other versions of the bite

0:29:59.400 --> 0:30:02.479
<v Speaker 1>that were six bits long or twelve bits long. So

0:30:02.520 --> 0:30:06.720
<v Speaker 1>how did eight bits becoming a bite become the standard? Well, honestly,

0:30:06.760 --> 0:30:08.960
<v Speaker 1>that part of our story happens a little bit later.

0:30:09.200 --> 0:30:12.160
<v Speaker 1>So in part two of Programming Languages, we are going

0:30:12.160 --> 0:30:16.920
<v Speaker 1>to revisit bits and bytes to explain why eight bits

0:30:17.040 --> 0:30:20.480
<v Speaker 1>make a byte. But I'm going to talk a lot

0:30:20.480 --> 0:30:23.600
<v Speaker 1>about binary in this particular episode, so that's why I

0:30:23.600 --> 0:30:26.440
<v Speaker 1>had to bring it up here. The next computer I'm

0:30:26.440 --> 0:30:31.000
<v Speaker 1>going to chat about, however, was not dependent upon binary.

0:30:31.240 --> 0:30:34.640
<v Speaker 1>It was dependent upon the decimal system that that base

0:30:34.800 --> 0:30:39.480
<v Speaker 1>ten system. And that computer was one that I mentioned

0:30:39.600 --> 0:30:43.840
<v Speaker 1>recently on a different episode of of Tech Stuff. It

0:30:43.960 --> 0:30:46.480
<v Speaker 1>was in the Weather Models episode. That would be the

0:30:46.520 --> 0:30:51.600
<v Speaker 1>Electronic Numerical Integrator and Computer or ANIAC. It's a very

0:30:51.600 --> 0:30:54.040
<v Speaker 1>early computer, one that I talked about in that Weather

0:30:54.080 --> 0:30:57.560
<v Speaker 1>Models episode just just previously, and it was the brainchild

0:30:57.680 --> 0:31:01.600
<v Speaker 1>of John Mauchley, and several other people worked on it

0:31:01.640 --> 0:31:05.120
<v Speaker 1>as well, obviously, but Marchley was the one who proposed

0:31:05.240 --> 0:31:09.000
<v Speaker 1>an all electronic calculating machine back in nineteen forty two,

0:31:09.520 --> 0:31:12.360
<v Speaker 1>ended up taking a few years to build. The United

0:31:12.360 --> 0:31:16.200
<v Speaker 1>States government, specifically the military, was very interested in this

0:31:16.320 --> 0:31:19.800
<v Speaker 1>because they wanted to have a more uh efficient machine

0:31:19.880 --> 0:31:23.160
<v Speaker 1>to do things like figure out those those firing tables.

0:31:24.160 --> 0:31:27.480
<v Speaker 1>But the ENIAC was not completed until after the conclusion

0:31:27.480 --> 0:31:30.480
<v Speaker 1>of World War Two in nineteen forty five. It was

0:31:30.520 --> 0:31:35.360
<v Speaker 1>the first fully electronic computer with no mechanical parts. The

0:31:35.400 --> 0:31:38.760
<v Speaker 1>electronic nature meant it could complete a calculation in a

0:31:38.880 --> 0:31:41.760
<v Speaker 1>fraction of the time it took the Mark one. So,

0:31:41.880 --> 0:31:45.120
<v Speaker 1>for example, a calculation with the mark one might take

0:31:45.280 --> 0:31:48.240
<v Speaker 1>six seconds for it to complete because it actually involves

0:31:48.440 --> 0:31:52.800
<v Speaker 1>moving physical pieces around in order to get to that calculation. However,

0:31:52.880 --> 0:31:56.360
<v Speaker 1>the ENIAC could do the same calculation in two point

0:31:56.440 --> 0:32:00.640
<v Speaker 1>eight thousands of a second. Then againting yet could only

0:32:00.640 --> 0:32:04.000
<v Speaker 1>store twenty numbers at a time, so there were limitations,

0:32:04.600 --> 0:32:08.280
<v Speaker 1>and for the first ten years of its existence, the

0:32:08.520 --> 0:32:14.120
<v Speaker 1>ENIAC ran more calculations than the totality of all calculations

0:32:14.160 --> 0:32:19.120
<v Speaker 1>performed by human beings before the ENIAC was built. So

0:32:19.280 --> 0:32:25.680
<v Speaker 1>from the dawn of time up to nine humans did

0:32:25.720 --> 0:32:28.680
<v Speaker 1>a certain number of calculations that were dwarfed by the

0:32:28.760 --> 0:32:33.760
<v Speaker 1>first ten years of Niac's operations. However, then it got

0:32:33.760 --> 0:32:37.120
<v Speaker 1>struck by lightning, which reminds us we probably shouldn't get

0:32:37.160 --> 0:32:40.320
<v Speaker 1>too cocky about this sort of thing. We might anger

0:32:40.440 --> 0:32:45.160
<v Speaker 1>thor So. NIAC didn't have a CPU like a modern computer.

0:32:45.280 --> 0:32:48.240
<v Speaker 1>To run a program through NIAC to have it solve

0:32:48.400 --> 0:32:51.160
<v Speaker 1>a problem, you would have to set physical switches that

0:32:51.280 --> 0:32:54.800
<v Speaker 1>had ten positions, and you'd had to plug wires into

0:32:54.800 --> 0:32:59.400
<v Speaker 1>specific ports Before running your calculation. So ANIAC was a big,

0:32:59.440 --> 0:33:02.240
<v Speaker 1>big machine, so big it was a hundred fifty feet

0:33:02.280 --> 0:33:07.440
<v Speaker 1>wide that's forty six meters wide, and it weighed thirty tons,

0:33:08.040 --> 0:33:09.720
<v Speaker 1>and it kind of looked like one of those old

0:33:09.760 --> 0:33:12.880
<v Speaker 1>timey phone operator banks where you'd pull a plug out

0:33:12.880 --> 0:33:15.400
<v Speaker 1>of one socket and place it into another. And some

0:33:15.480 --> 0:33:18.400
<v Speaker 1>of you probably still have no clue what I'm talking about,

0:33:18.480 --> 0:33:22.760
<v Speaker 1>but just imagine a big panel of sockets into which

0:33:23.200 --> 0:33:27.560
<v Speaker 1>you can insert cable plugs, and on one problem, you

0:33:27.600 --> 0:33:31.560
<v Speaker 1>would have a sample configuration of plugs in some of

0:33:31.600 --> 0:33:34.720
<v Speaker 1>those sockets. But let's say you want to run another problem.

0:33:34.720 --> 0:33:37.680
<v Speaker 1>That would mean having to unplug those first cables, plug

0:33:37.720 --> 0:33:41.280
<v Speaker 1>them into different sockets. Each problem would look totally different,

0:33:41.360 --> 0:33:44.840
<v Speaker 1>so you would have to change those physical connections as

0:33:44.880 --> 0:33:50.280
<v Speaker 1>well as the physical orientations of those ten position switches

0:33:50.360 --> 0:33:55.520
<v Speaker 1>that were there. Any act also could not store problems.

0:33:56.440 --> 0:34:00.440
<v Speaker 1>It didn't have a programmed storage capability. It was a

0:34:00.480 --> 0:34:05.440
<v Speaker 1>collection of electronic adding machines and other arithmetic units which

0:34:05.480 --> 0:34:08.760
<v Speaker 1>were originally controlled by a web of large electrical cables.

0:34:08.800 --> 0:34:11.680
<v Speaker 1>According to David Alan Greer in the Annals of the

0:34:11.840 --> 0:34:16.800
<v Speaker 1>History of Computing, the original programmers of ENIAC were Jene

0:34:17.000 --> 0:34:24.560
<v Speaker 1>Jennings Bartek, Francis Betty Snyder Holberton, Kathleen McNulty, Mauchley, Anton Nelly,

0:34:25.840 --> 0:34:31.840
<v Speaker 1>Marlon West, Scoff Meltzer, Ruth Lichtmann, Title Bomb, and Francis

0:34:32.120 --> 0:34:38.080
<v Speaker 1>Bilas Spence. In other words, the first programmers for ENIAC

0:34:38.239 --> 0:34:43.480
<v Speaker 1>were six women, the first programmers of the first fully

0:34:43.600 --> 0:34:48.720
<v Speaker 1>electronic computer. And I think it's really important to drive

0:34:48.760 --> 0:34:52.640
<v Speaker 1>that home because the very history of computer science is

0:34:52.680 --> 0:34:59.200
<v Speaker 1>reliant upon the contributions of women, and frequently, far too frequently,

0:34:59.400 --> 0:35:04.560
<v Speaker 1>in the world of computers, women are are disregarded or

0:35:04.760 --> 0:35:10.839
<v Speaker 1>thought of as being incapable of uh any real meaningful contribution,

0:35:11.080 --> 0:35:15.440
<v Speaker 1>when in fact, the very foundation of computation is on

0:35:15.520 --> 0:35:19.240
<v Speaker 1>the backs of women. Um As as for these six,

0:35:19.360 --> 0:35:25.799
<v Speaker 1>for years the Army failed to acknowledge their contributions. For

0:35:25.880 --> 0:35:29.919
<v Speaker 1>one thing, NIAC was classified and still is to this day,

0:35:30.040 --> 0:35:35.600
<v Speaker 1>classified information, and so their contributions weren't acknowledged as a

0:35:35.640 --> 0:35:39.160
<v Speaker 1>matter of national security for quite some time. But since

0:35:39.200 --> 0:35:42.600
<v Speaker 1>then they have been acknowledged, and I'm glad their story

0:35:42.680 --> 0:35:44.560
<v Speaker 1>is now available for people to hear. It's a pretty

0:35:44.560 --> 0:35:48.239
<v Speaker 1>incredible one and maybe someday I'll do a more specific

0:35:48.320 --> 0:35:52.359
<v Speaker 1>episode about ENIAC and the men and women who were

0:35:52.440 --> 0:35:58.600
<v Speaker 1>instrumental in getting it going. But clearly they're programming didn't

0:35:58.680 --> 0:36:01.600
<v Speaker 1>involve much of a programming language, at least not in

0:36:01.640 --> 0:36:04.680
<v Speaker 1>the way we think of programming languages today. They were

0:36:04.800 --> 0:36:08.719
<v Speaker 1>all looking at the very complicated decimal systems. They were

0:36:08.719 --> 0:36:11.840
<v Speaker 1>setting things up for running a single problem. If you

0:36:11.840 --> 0:36:13.799
<v Speaker 1>wanted to change the problem, you had to change that

0:36:14.080 --> 0:36:18.359
<v Speaker 1>entire set up, that physical setup of the computer. Now,

0:36:18.400 --> 0:36:22.000
<v Speaker 1>the ENIAC team invited another person, John von Neuman, over

0:36:22.120 --> 0:36:23.839
<v Speaker 1>to take a look at it, and I talked about

0:36:23.920 --> 0:36:27.359
<v Speaker 1>von Neuman in the Weather Models episode as well, and

0:36:27.640 --> 0:36:31.840
<v Speaker 1>together the ani ACT team and von Neuman were able

0:36:31.920 --> 0:36:35.719
<v Speaker 1>to kind of come up with the the premise for

0:36:35.760 --> 0:36:39.960
<v Speaker 1>the successor to ani ACT. This would become the EDVAC,

0:36:40.360 --> 0:36:44.239
<v Speaker 1>which was the first stored program computer. EDVAC stands for

0:36:44.360 --> 0:36:49.640
<v Speaker 1>Electronic discrete variable automatic computer, and the stored program aspect

0:36:49.640 --> 0:36:52.279
<v Speaker 1>meant you didn't have to change the physical wiring of

0:36:52.320 --> 0:36:55.640
<v Speaker 1>the device itself. The program would be stored inside the computer,

0:36:56.040 --> 0:37:00.080
<v Speaker 1>not in the arrangement of all its components, and unlike NIA,

0:37:00.520 --> 0:37:03.480
<v Speaker 1>ed VAC would be based on the binary system instead

0:37:03.520 --> 0:37:07.439
<v Speaker 1>of the decimal system. The binary system simplified things because

0:37:07.480 --> 0:37:10.920
<v Speaker 1>you only needed a switch with two positions. And again,

0:37:10.960 --> 0:37:13.960
<v Speaker 1>the decimal based machine meant that you needed switches with

0:37:14.000 --> 0:37:18.719
<v Speaker 1>ten positions. Since you can represent numbers using binary, then

0:37:19.360 --> 0:37:23.760
<v Speaker 1>you know, Leibnitz showed us that centuries earlier, it made

0:37:23.840 --> 0:37:27.120
<v Speaker 1>sense to go with that system. Now, one person who

0:37:27.160 --> 0:37:32.400
<v Speaker 1>realized this and who really nailed it was Claude Shannon,

0:37:32.680 --> 0:37:36.000
<v Speaker 1>another mathematician and someone that I will probably do a

0:37:36.000 --> 0:37:38.680
<v Speaker 1>full episode on again in the future. I actually do

0:37:38.760 --> 0:37:42.160
<v Speaker 1>have a Claude Shannon episode in the archives as well.

0:37:42.440 --> 0:37:47.279
<v Speaker 1>Shannon wrote The Mathematical Theory of Communication in nine to

0:37:47.320 --> 0:37:50.880
<v Speaker 1>set the foundation for the theoretical limits of communication between

0:37:50.920 --> 0:37:54.759
<v Speaker 1>humans and machines. The identified the bit as the fundamental

0:37:54.920 --> 0:37:58.760
<v Speaker 1>unit of information and thus the basic unit of computation.

0:37:59.160 --> 0:38:01.719
<v Speaker 1>For this, Shannon is often cited as one of the

0:38:01.760 --> 0:38:06.000
<v Speaker 1>fathers of computer science. Since the computers could be reprogrammed

0:38:06.000 --> 0:38:08.759
<v Speaker 1>without making physical changes to the machine, it meant that

0:38:08.800 --> 0:38:12.359
<v Speaker 1>you had to do that reprogramming through code, and so

0:38:12.400 --> 0:38:15.799
<v Speaker 1>we finally get into some of the programming languages. Now.

0:38:15.800 --> 0:38:19.839
<v Speaker 1>One of the earliest was called shortcode, originally known as

0:38:19.920 --> 0:38:23.000
<v Speaker 1>brief code, and proposed by Mauchley, you know, was the

0:38:23.280 --> 0:38:27.239
<v Speaker 1>one of the guys behind Eniac. So how is shortcode

0:38:27.239 --> 0:38:31.400
<v Speaker 1>a programming language different from machine code, the language computers

0:38:31.440 --> 0:38:36.560
<v Speaker 1>actually quote unquote understand. Well, we'll find out after we

0:38:36.680 --> 0:38:46.480
<v Speaker 1>take a quick break to thank our sponsor. Alright, So

0:38:46.680 --> 0:38:51.120
<v Speaker 1>how was shortcode different from machine code? Well, shortcode allowed

0:38:51.160 --> 0:38:55.480
<v Speaker 1>programmers to work out problems using mathematical expressions instead of

0:38:55.640 --> 0:38:59.280
<v Speaker 1>machine instructions, so you didn't have to just have everything

0:38:59.320 --> 0:39:01.799
<v Speaker 1>out in zero and ones in binary. You could take

0:39:01.840 --> 0:39:06.280
<v Speaker 1>a couple of shortcuts. It was developed for the UNIVAC computer,

0:39:06.440 --> 0:39:09.040
<v Speaker 1>the first mass produced computer, and also the work of

0:39:09.080 --> 0:39:14.319
<v Speaker 1>Eckert and Mauchley of NIAC fame. This removed programmers from

0:39:14.400 --> 0:39:17.319
<v Speaker 1>the same level of language as the one that the

0:39:17.360 --> 0:39:20.359
<v Speaker 1>machines were using. So you have machine level language that

0:39:20.440 --> 0:39:24.240
<v Speaker 1>refers to the specific language the machine itself quote unquote

0:39:24.320 --> 0:39:28.680
<v Speaker 1>understands the language it uses to process the problems that

0:39:28.719 --> 0:39:34.359
<v Speaker 1>you submit to it. So you can program machines at

0:39:34.400 --> 0:39:37.840
<v Speaker 1>the machine level. But it's hard to do. It tends

0:39:37.920 --> 0:39:41.480
<v Speaker 1>to be tedious and difficult, and it's really easy to

0:39:41.600 --> 0:39:45.400
<v Speaker 1>introduce an error into the programs because it's not very intuitive,

0:39:45.400 --> 0:39:49.000
<v Speaker 1>particularly if you're talking about programming in binary. If you're

0:39:49.000 --> 0:39:52.240
<v Speaker 1>just looking at a bunch of zeros and ones, very quickly,

0:39:52.320 --> 0:39:55.520
<v Speaker 1>you can lose track of what it actually represents. And

0:39:55.600 --> 0:39:58.000
<v Speaker 1>if you put in a zero or a one where

0:39:58.040 --> 0:40:00.360
<v Speaker 1>it should have been the other, everything turns to popsy

0:40:00.400 --> 0:40:03.040
<v Speaker 1>turvy and you've got bugs in your program. You have

0:40:03.080 --> 0:40:04.960
<v Speaker 1>to go back and figure out where the mistake is,

0:40:05.360 --> 0:40:07.239
<v Speaker 1>and then you have to fix it, and that one

0:40:07.320 --> 0:40:09.879
<v Speaker 1>fix may not be enough. You may have to end

0:40:09.960 --> 0:40:12.560
<v Speaker 1>up going down the line and fixing everything that comes

0:40:12.600 --> 0:40:17.640
<v Speaker 1>after it. Beyond machine level languages are things like short code.

0:40:18.000 --> 0:40:21.760
<v Speaker 1>That's that next step up. It's a very very small

0:40:21.840 --> 0:40:26.359
<v Speaker 1>step up. It's actually a low level programming language, which

0:40:26.400 --> 0:40:29.040
<v Speaker 1>means the level of the language is not that far

0:40:29.120 --> 0:40:33.960
<v Speaker 1>off from the machine code itself. It's easier for humans

0:40:34.000 --> 0:40:36.360
<v Speaker 1>to use than pure machine code, but it's not that

0:40:36.440 --> 0:40:41.960
<v Speaker 1>far removed from actual machine code. Another low level programming

0:40:42.040 --> 0:40:45.560
<v Speaker 1>language would be an assembly language, and there are many

0:40:45.600 --> 0:40:52.759
<v Speaker 1>assembly languages. These use simple mnemonic instructions. Assemblers translate this

0:40:52.840 --> 0:40:57.680
<v Speaker 1>into machine code, and because different machines rely on different architectures,

0:40:58.040 --> 0:41:02.400
<v Speaker 1>there are many assembly language is. Essentially, each architecture needs

0:41:02.400 --> 0:41:06.120
<v Speaker 1>its own assembly language. The program that turns that is

0:41:06.320 --> 0:41:09.240
<v Speaker 1>of course called the assembler. The assembly language into machine

0:41:09.239 --> 0:41:13.360
<v Speaker 1>code is your assembler. So in the old days, we

0:41:13.400 --> 0:41:18.280
<v Speaker 1>didn't have a common architecture across computer systems. Computer systems

0:41:18.320 --> 0:41:23.960
<v Speaker 1>were very specifically designed by different manufacturers and often for

0:41:24.080 --> 0:41:30.480
<v Speaker 1>very specific purposes, so there was no compatibility across different machines,

0:41:31.040 --> 0:41:33.920
<v Speaker 1>and your assemblers had to be peculiar to whatever the

0:41:34.000 --> 0:41:38.319
<v Speaker 1>architecture was of that machine that you were working on.

0:41:38.280 --> 0:41:42.480
<v Speaker 1>One ninety two, Grace Hopper, you remember her well. She

0:41:42.600 --> 0:41:45.759
<v Speaker 1>built the first compiler, and it was called the a

0:41:46.040 --> 0:41:50.160
<v Speaker 1>dash O compiler. A compiler's job is to take code

0:41:50.160 --> 0:41:53.560
<v Speaker 1>that's written in a programming language and convert it into

0:41:53.680 --> 0:41:56.560
<v Speaker 1>machine codes. It's sort of like a translator. It takes

0:41:56.600 --> 0:42:00.359
<v Speaker 1>the programming language something that humans can work with, and

0:42:00.400 --> 0:42:03.799
<v Speaker 1>turns it into machine code, something that machines can work with.

0:42:04.360 --> 0:42:07.520
<v Speaker 1>Hopper's compiler was pretty simple and was an effective way

0:42:07.520 --> 0:42:11.400
<v Speaker 1>for Hopper too, As she once said, be lazy. She

0:42:11.480 --> 0:42:14.680
<v Speaker 1>wanted to stop being a programmer and returned to being

0:42:14.719 --> 0:42:17.719
<v Speaker 1>a mathematician, so she wanted to find ways that she

0:42:17.760 --> 0:42:22.040
<v Speaker 1>could generate sort of shortcuts to doing very basic tasks.

0:42:22.080 --> 0:42:26.560
<v Speaker 1>And that's when she built this basic compiler. Copper took

0:42:26.560 --> 0:42:29.400
<v Speaker 1>all these subroutines that she had been using over the years,

0:42:29.480 --> 0:42:31.840
<v Speaker 1>and she put them on a reel of paper tape,

0:42:32.239 --> 0:42:36.040
<v Speaker 1>labeling each subroutine with a call number. Then when she

0:42:36.080 --> 0:42:39.080
<v Speaker 1>needed to run a specific subroutine, she could refer to

0:42:39.120 --> 0:42:41.839
<v Speaker 1>it by the appropriate call number, and the machine could

0:42:41.880 --> 0:42:45.239
<v Speaker 1>find the corresponding section on the paper tape and run

0:42:45.320 --> 0:42:49.160
<v Speaker 1>the subroutine. Now, according to Hopper, people didn't realize the

0:42:49.239 --> 0:42:52.520
<v Speaker 1>significance of her contribution right away. Many people were still

0:42:52.560 --> 0:42:56.320
<v Speaker 1>thinking of computers as glorified calculators, so these were machines

0:42:56.360 --> 0:42:59.760
<v Speaker 1>that could do math, but not much else. Hopper says,

0:42:59.760 --> 0:43:03.239
<v Speaker 1>she you foresaw more complicated programs, but they would need

0:43:03.280 --> 0:43:06.600
<v Speaker 1>things like compilers to offload some of that laborious work

0:43:06.680 --> 0:43:10.239
<v Speaker 1>to make those programs practical. So Hopper was saying, what

0:43:10.280 --> 0:43:13.359
<v Speaker 1>I'm doing here is opening up new opportunities for us

0:43:13.400 --> 0:43:16.319
<v Speaker 1>to use computers. And she said she ran into a

0:43:16.360 --> 0:43:19.120
<v Speaker 1>lot of resistance where people just didn't see it that way.

0:43:19.160 --> 0:43:22.160
<v Speaker 1>They had been used to programming these things by hand,

0:43:22.360 --> 0:43:26.680
<v Speaker 1>working either at machine code level or just barely above

0:43:26.760 --> 0:43:30.480
<v Speaker 1>machine code level, and so it was too complicated to

0:43:30.520 --> 0:43:33.319
<v Speaker 1>consider using it for anything other than just crunching some

0:43:33.440 --> 0:43:36.880
<v Speaker 1>numbers and running some equations. Well, she and her colleagues

0:43:37.200 --> 0:43:41.719
<v Speaker 1>worked on improving this approach and two generations of compilers later.

0:43:42.120 --> 0:43:45.200
<v Speaker 1>With the A two compiler, it became one of the

0:43:45.200 --> 0:43:47.960
<v Speaker 1>first compilers to get extensive use in the computer world,

0:43:48.280 --> 0:43:50.879
<v Speaker 1>and that is what laid the foundation for higher level

0:43:50.960 --> 0:43:56.200
<v Speaker 1>programming languages that fell along that same pathway. At this stage,

0:43:56.200 --> 0:44:00.840
<v Speaker 1>computer languages were mostly reliant on symbols, not on words,

0:44:01.200 --> 0:44:03.480
<v Speaker 1>and Hopper saw need to change that as well. She

0:44:03.520 --> 0:44:06.160
<v Speaker 1>wanted to create a system which programs could be written

0:44:06.200 --> 0:44:10.600
<v Speaker 1>in English. Letters, she reasoned, were really just symbols, so

0:44:10.640 --> 0:44:12.960
<v Speaker 1>they should be something that could be interpreted by a

0:44:12.960 --> 0:44:17.080
<v Speaker 1>compiler and then converted into machine code. So she made

0:44:17.120 --> 0:44:20.360
<v Speaker 1>further adjustments to the compiler she had created, and she

0:44:20.440 --> 0:44:24.920
<v Speaker 1>built something called the flow Matic compiler f L O

0:44:25.280 --> 0:44:29.239
<v Speaker 1>W DASH M A t I C. The flow Matic. Well,

0:44:29.280 --> 0:44:32.360
<v Speaker 1>this set the stage for an important programming language called Cobal.

0:44:32.800 --> 0:44:36.960
<v Speaker 1>But before Cobal, we have to talk about four tran

0:44:37.840 --> 0:44:41.600
<v Speaker 1>So over at IBM, there was a programmer named John

0:44:41.680 --> 0:44:44.759
<v Speaker 1>Backus who was leading a group who are designing a

0:44:44.800 --> 0:44:47.880
<v Speaker 1>programming language and their group had a lofty goal. They

0:44:47.880 --> 0:44:50.960
<v Speaker 1>wanted to create a high level programming language. So in

0:44:50.960 --> 0:44:53.400
<v Speaker 1>other words, they wanted a language that's much closer to

0:44:53.640 --> 0:44:57.080
<v Speaker 1>how we humans tend to communicate with each other, rather

0:44:57.160 --> 0:45:01.040
<v Speaker 1>than the types of languages that machines rely on. Assembly

0:45:01.120 --> 0:45:04.440
<v Speaker 1>language is a low level language, and it's still pretty

0:45:04.440 --> 0:45:06.759
<v Speaker 1>close to machine code, and it's best used for low

0:45:06.840 --> 0:45:10.399
<v Speaker 1>level applications. IBM one is something that would be much

0:45:10.560 --> 0:45:13.560
<v Speaker 1>easier to use from a programming perspective, something that's much

0:45:13.640 --> 0:45:18.000
<v Speaker 1>more robust. For TRAN was the solution, and it stands

0:45:18.080 --> 0:45:23.040
<v Speaker 1>for formula translation. Some folks call it a scientific language.

0:45:23.040 --> 0:45:26.520
<v Speaker 1>It's largely used in the scientific field. For TRAN was

0:45:26.640 --> 0:45:29.799
<v Speaker 1>machine independent as well, which meant that it could run

0:45:29.800 --> 0:45:33.680
<v Speaker 1>on different computers and not just a single type. So

0:45:33.960 --> 0:45:36.280
<v Speaker 1>it wasn't that they had developed this for a particular

0:45:36.320 --> 0:45:38.719
<v Speaker 1>type of IBM computer and that's the only thing it

0:45:38.719 --> 0:45:41.160
<v Speaker 1>would run on. It was meant to run on different

0:45:41.160 --> 0:45:43.600
<v Speaker 1>types of machines, and it was also meant to be

0:45:43.680 --> 0:45:47.280
<v Speaker 1>easy to learn and suitable for a wide variety of uses.

0:45:47.920 --> 0:45:51.840
<v Speaker 1>The tradeoff for high level languages is that it takes

0:45:51.880 --> 0:45:56.279
<v Speaker 1>longer to compile them into machine code, so it's it

0:45:56.360 --> 0:46:01.520
<v Speaker 1>creates a delay in executing the code. You end up

0:46:01.520 --> 0:46:05.000
<v Speaker 1>making it easier to build the code for humans, but

0:46:05.120 --> 0:46:08.360
<v Speaker 1>it's harder for the machine itself to read the code.

0:46:08.400 --> 0:46:13.160
<v Speaker 1>The compiler has to translate more and more, so if

0:46:13.160 --> 0:46:16.080
<v Speaker 1>the language is easier to program in, you can make

0:46:16.200 --> 0:46:20.799
<v Speaker 1>up the gap of that decrease in efficiency for executing

0:46:20.880 --> 0:46:23.719
<v Speaker 1>the code, and that was the case with Fortran. The

0:46:23.840 --> 0:46:27.480
<v Speaker 1>high level nature increased the execution time by about twenty

0:46:28.080 --> 0:46:32.920
<v Speaker 1>so it added more time for it to execute the

0:46:33.000 --> 0:46:37.680
<v Speaker 1>code using the compiler, but it increased the efficiency of

0:46:37.719 --> 0:46:44.640
<v Speaker 1>actual programmers by five percent, so programmers were writing programs

0:46:43.680 --> 0:46:48.480
<v Speaker 1>faster than they were before. They were making up way

0:46:48.520 --> 0:46:51.880
<v Speaker 1>more time because of the ease the relative ease of

0:46:51.920 --> 0:46:55.560
<v Speaker 1>programming and for tran as opposed to programming and say

0:46:55.920 --> 0:46:59.600
<v Speaker 1>assembly language, so it took longer to execute the code,

0:47:00.000 --> 0:47:01.760
<v Speaker 1>but that was more than balanced out by how quickly

0:47:01.800 --> 0:47:05.799
<v Speaker 1>programmers could actually write code. So while back Is Group

0:47:05.840 --> 0:47:08.799
<v Speaker 1>developed for Trand in nineteen fifty four, it wasn't until

0:47:08.880 --> 0:47:12.520
<v Speaker 1>nineteen fifty seven they got a commercial release for Trand

0:47:12.560 --> 0:47:15.399
<v Speaker 1>would become the programming language for the scientific community, which

0:47:15.440 --> 0:47:18.279
<v Speaker 1>is why it's still used in weather modeling applications, as

0:47:18.360 --> 0:47:22.240
<v Speaker 1>I mentioned in our previous episode. Alright, so back to COBAL.

0:47:22.600 --> 0:47:25.600
<v Speaker 1>The development of COBAL took place right around the time

0:47:25.680 --> 0:47:29.160
<v Speaker 1>the third generation of four trand was being developed. COBAL

0:47:29.239 --> 0:47:32.560
<v Speaker 1>would become important because it helped unify efforts in programming.

0:47:32.640 --> 0:47:35.680
<v Speaker 1>Up to that point, all those computers were pretty much

0:47:35.760 --> 0:47:38.800
<v Speaker 1>using their own specific methods of programming. So you couldn't

0:47:38.800 --> 0:47:41.440
<v Speaker 1>build a program meant for one system and poured it

0:47:41.480 --> 0:47:45.520
<v Speaker 1>directly over to another. You'd have to go about rebuilding

0:47:45.520 --> 0:47:49.560
<v Speaker 1>your entire program following the architecture and constraints of your

0:47:49.640 --> 0:47:54.440
<v Speaker 1>new machines architecture UM or design, I should say. And

0:47:54.480 --> 0:47:56.839
<v Speaker 1>so in the late nineteen fifties, some computer scientists set

0:47:56.880 --> 0:47:59.000
<v Speaker 1>out to create a programming language that could run on

0:47:59.040 --> 0:48:03.840
<v Speaker 1>different computers, and that group was then Conference on Data

0:48:03.920 --> 0:48:08.160
<v Speaker 1>Systems Languages or CODACILL c O d A S y L.

0:48:09.320 --> 0:48:13.040
<v Speaker 1>Members of the group included government employees, computer science experts

0:48:13.040 --> 0:48:17.279
<v Speaker 1>from various universities, and members of various industries. So by

0:48:17.280 --> 0:48:19.520
<v Speaker 1>the end of nineteen fifty nine they had settled on

0:48:19.560 --> 0:48:22.880
<v Speaker 1>the specifications of their programming language, and they called it

0:48:22.960 --> 0:48:27.800
<v Speaker 1>the Common Business Oriented Language or COBAL for short. It

0:48:27.800 --> 0:48:31.360
<v Speaker 1>would officially be published in January nineteen sixty after receiving

0:48:31.400 --> 0:48:35.360
<v Speaker 1>approval from an executive committee. How the Department of Defense

0:48:36.040 --> 0:48:38.880
<v Speaker 1>was really behind the effort. They were really pushing for

0:48:38.920 --> 0:48:41.239
<v Speaker 1>it because they were one of the few agencies in

0:48:41.280 --> 0:48:45.760
<v Speaker 1>the world that actually possessed computer systems from different manufacturers,

0:48:45.760 --> 0:48:48.200
<v Speaker 1>So they were running into this problem of having all

0:48:48.239 --> 0:48:50.759
<v Speaker 1>these different computer systems that were incompatible with each other.

0:48:51.120 --> 0:48:54.600
<v Speaker 1>Most other places didn't have that problem because they didn't

0:48:54.640 --> 0:48:57.880
<v Speaker 1>have the money to own that many different systems. They

0:48:57.920 --> 0:49:01.600
<v Speaker 1>were all in with a single system, but a unifying

0:49:01.680 --> 0:49:04.520
<v Speaker 1>language would mean they could run programs on multiple machines

0:49:04.560 --> 0:49:09.480
<v Speaker 1>to handle lots of boring stuff like data management, tracking

0:49:09.520 --> 0:49:14.919
<v Speaker 1>information for inventory, payroll administration, and other tasks. The US

0:49:15.000 --> 0:49:19.480
<v Speaker 1>government would eventually require that all computers sold or least

0:49:19.600 --> 0:49:23.719
<v Speaker 1>to government agencies had to be able to run COBOL software,

0:49:23.960 --> 0:49:27.880
<v Speaker 1>which ensured the languages adoption. It's very sad that was

0:49:27.960 --> 0:49:32.120
<v Speaker 1>Cobal and not Cobold's the little critters from Dudgeons and

0:49:32.200 --> 0:49:36.279
<v Speaker 1>Dragons that end up being low level monsters, but such

0:49:36.280 --> 0:49:40.239
<v Speaker 1>as life now. The custodian of COBAL is the American

0:49:40.320 --> 0:49:44.719
<v Speaker 1>National Standards Institute, which develops and publishes new COBAL standards.

0:49:45.000 --> 0:49:48.160
<v Speaker 1>COBAL saw the most use in government and business applications,

0:49:48.160 --> 0:49:53.319
<v Speaker 1>whereas for TRAN was being used in scientific applications. Now,

0:49:53.320 --> 0:49:56.000
<v Speaker 1>with COBAL and for TRAN, we are in the earliest

0:49:56.120 --> 0:49:58.840
<v Speaker 1>days of computer programming, and I think this is a

0:49:58.880 --> 0:50:02.600
<v Speaker 1>good place for us to include today's episode. In our

0:50:02.640 --> 0:50:05.920
<v Speaker 1>next episode, we're gonna look at how those programming languages

0:50:05.960 --> 0:50:09.319
<v Speaker 1>and a couple of others arose over the years and

0:50:09.360 --> 0:50:13.040
<v Speaker 1>gave birth to different programming languages. We're gonna look at

0:50:13.160 --> 0:50:16.480
<v Speaker 1>how these different languages are different, why are they different,

0:50:16.600 --> 0:50:18.880
<v Speaker 1>what is it that they are able to do because

0:50:18.920 --> 0:50:23.160
<v Speaker 1>of those differences, and kind of explain the various families

0:50:23.239 --> 0:50:26.799
<v Speaker 1>of programming languages and why they exist. So make sure

0:50:26.800 --> 0:50:29.000
<v Speaker 1>you tune into the next episode to learn more. And

0:50:29.000 --> 0:50:32.520
<v Speaker 1>then we're gonna turn our glance to some other form

0:50:32.560 --> 0:50:37.680
<v Speaker 1>of technology, something that doesn't involve supercomputers and programming languages,

0:50:37.719 --> 0:50:41.799
<v Speaker 1>at least not on the technical end, because eventually I

0:50:41.840 --> 0:50:44.439
<v Speaker 1>gotta stop talking about math or my brains will leak

0:50:44.480 --> 0:50:47.520
<v Speaker 1>out of my ears. If you guys have suggestions for

0:50:47.600 --> 0:50:50.200
<v Speaker 1>future episodes of tech Stuff, you should let me know

0:50:50.560 --> 0:50:53.520
<v Speaker 1>by sending me an email. You could scream out the window,

0:50:54.040 --> 0:50:57.279
<v Speaker 1>but I often can't hear you. The email address for

0:50:57.320 --> 0:51:00.000
<v Speaker 1>our show is tech Stuff at how stuffworks dot com

0:51:00.080 --> 0:51:02.280
<v Speaker 1>um or you can drop us a line on Twitter

0:51:02.480 --> 0:51:04.759
<v Speaker 1>or Facebook. The handle it both of those is tech

0:51:04.800 --> 0:51:08.200
<v Speaker 1>Stuff hs W. Remember you can go to twitch dot

0:51:08.239 --> 0:51:11.920
<v Speaker 1>tv slash tech stuff and watch me record these shows live.

0:51:12.320 --> 0:51:15.960
<v Speaker 1>Every Wednesday and Friday, I go live and I record

0:51:16.080 --> 0:51:18.120
<v Speaker 1>episodes of tech Stuff. You get to talk with me,

0:51:18.400 --> 0:51:20.880
<v Speaker 1>I chat with the chat room. We have a grand

0:51:20.920 --> 0:51:22.560
<v Speaker 1>old time, and you also get to see all the

0:51:22.560 --> 0:51:25.799
<v Speaker 1>outtakes that don't make it into the final version. So

0:51:25.880 --> 0:51:28.160
<v Speaker 1>go to twitch dot tv slash tech stuff to check

0:51:28.160 --> 0:51:29.480
<v Speaker 1>out the schedule, and I hope to see you in

0:51:29.520 --> 0:51:38.680
<v Speaker 1>there and I'll talk to you again really soon for

0:51:38.840 --> 0:51:41.160
<v Speaker 1>more on this and thousands of other topics. Because it

0:51:41.239 --> 0:51:51.640
<v Speaker 1>has staff works dot com