WEBVTT - The History of Programming Languages Part Two

0:00:04.440 --> 0:00:12.400
<v Speaker 1>Text with technology with tech Stuff from stuff works dot com.

0:00:12.440 --> 0:00:15.600
<v Speaker 1>Hey there, and welcome to tech Stuff. I am your host,

0:00:15.760 --> 0:00:19.320
<v Speaker 1>Jonathan Strickland. I'm a senior writer with how stuff works

0:00:19.360 --> 0:00:22.680
<v Speaker 1>dot com, where we try to demystify the universe one

0:00:22.760 --> 0:00:26.079
<v Speaker 1>topic at a time, and we are going to continue

0:00:26.440 --> 0:00:29.920
<v Speaker 1>our story about the history of programming languages. In our

0:00:29.960 --> 0:00:33.160
<v Speaker 1>previous episode, we looked at the history of computers leading

0:00:33.240 --> 0:00:36.559
<v Speaker 1>up to the development of two of the earliest programming languages,

0:00:36.600 --> 0:00:40.239
<v Speaker 1>for Tran and Kobol. Technically there was another language that

0:00:40.440 --> 0:00:44.360
<v Speaker 1>is considered to be the earliest or the second earliest

0:00:44.720 --> 0:00:47.880
<v Speaker 1>um and really one more that's technically earlier than both

0:00:47.920 --> 0:00:52.360
<v Speaker 1>of those as well, but it wasn't known about outside

0:00:52.360 --> 0:00:54.360
<v Speaker 1>of Germany for the longest time. We'll cover all of

0:00:54.400 --> 0:00:56.840
<v Speaker 1>that in this episode, but I'll have a slightly different

0:00:56.880 --> 0:00:58.880
<v Speaker 1>structure from the last one. So in the last one,

0:00:59.360 --> 0:01:02.840
<v Speaker 1>I try to stay on a roughly chronological path, going

0:01:02.920 --> 0:01:06.679
<v Speaker 1>year by year talking about developments as they happened in

0:01:06.720 --> 0:01:11.319
<v Speaker 1>actual history. But with programming languages that can get really confusing,

0:01:11.400 --> 0:01:13.520
<v Speaker 1>and it also requires lots of jumping back and forth

0:01:13.560 --> 0:01:18.000
<v Speaker 1>between the different families of programming languages because while certain

0:01:18.080 --> 0:01:21.600
<v Speaker 1>new ones were starting to emerge, older ones were continuing

0:01:21.640 --> 0:01:24.880
<v Speaker 1>to evolve, So I might end up saying, well, in

0:01:25.120 --> 0:01:30.720
<v Speaker 1>nineteen seven, de Bah this programming language hit its fifth version,

0:01:30.760 --> 0:01:33.479
<v Speaker 1>whereas this other one came out for the first time,

0:01:33.560 --> 0:01:36.399
<v Speaker 1>and this other one stopped being used, and it just

0:01:36.440 --> 0:01:39.440
<v Speaker 1>gets really messy. So I'm going to probably concentrate more

0:01:39.520 --> 0:01:43.000
<v Speaker 1>on specific programming languages and specific groups and follow their

0:01:43.040 --> 0:01:46.120
<v Speaker 1>paths down before making a jump back to a different language.

0:01:46.520 --> 0:01:49.559
<v Speaker 1>I'll also do my best to explain some of the

0:01:49.640 --> 0:01:54.680
<v Speaker 1>general concepts in programming. Um. There are way too many

0:01:54.720 --> 0:01:59.720
<v Speaker 1>individual programming languages to go into detail in a single episode.

0:01:59.720 --> 0:02:02.160
<v Speaker 1>It would take lots of episodes to talk about all

0:02:02.160 --> 0:02:06.600
<v Speaker 1>the different programming languages, and also considering that most of

0:02:06.640 --> 0:02:10.359
<v Speaker 1>them have multiple versions or generations of the programming language,

0:02:10.400 --> 0:02:15.760
<v Speaker 1>some of which are radically different from preceding versions, it

0:02:15.880 --> 0:02:17.760
<v Speaker 1>just would be too difficult for me to go in

0:02:17.880 --> 0:02:20.440
<v Speaker 1>for each one. So we're gonna We're gonna do our

0:02:20.480 --> 0:02:24.440
<v Speaker 1>best and cover it from a more high level perspective. Now,

0:02:24.440 --> 0:02:26.919
<v Speaker 1>in the last episode, I did mention a guy named

0:02:26.960 --> 0:02:31.480
<v Speaker 1>Conrad Zeus who developed his own computers in Germany independently

0:02:31.520 --> 0:02:33.640
<v Speaker 1>of any of the work going on anywhere else. He

0:02:33.800 --> 0:02:38.800
<v Speaker 1>also independently made his own programming language called plunka Cool,

0:02:39.400 --> 0:02:43.639
<v Speaker 1>but this was virtually unknown outside of Germany for several decades.

0:02:43.919 --> 0:02:47.760
<v Speaker 1>The programming language is remarkably prescient, but had no real

0:02:47.800 --> 0:02:50.320
<v Speaker 1>effect on the rest of the evolution of programming languages

0:02:50.400 --> 0:02:54.200
<v Speaker 1>because no one in the Western world, and really Germany's

0:02:54.200 --> 0:02:55.960
<v Speaker 1>in the western world, no one in that North America

0:02:56.040 --> 0:02:58.160
<v Speaker 1>knew about it, and that was where a lot of

0:02:58.160 --> 0:03:01.600
<v Speaker 1>this early work in programming languages was coming from. No

0:03:01.639 --> 0:03:03.480
<v Speaker 1>One in the UK knew about either, and that's where

0:03:03.480 --> 0:03:05.799
<v Speaker 1>a lot of the other work was coming from. So

0:03:06.480 --> 0:03:09.079
<v Speaker 1>it was an amazing achievement and I want to make

0:03:09.120 --> 0:03:12.640
<v Speaker 1>sure that we acknowledge it, but it's not something that

0:03:12.680 --> 0:03:16.239
<v Speaker 1>ties into the rest of our story directly. One other

0:03:16.320 --> 0:03:18.160
<v Speaker 1>thing I should mention is that in the last episode

0:03:18.160 --> 0:03:20.160
<v Speaker 1>are really led up to the development of four Tran

0:03:20.280 --> 0:03:24.160
<v Speaker 1>and Cobal, which were two important early programming languages. Four

0:03:24.200 --> 0:03:28.760
<v Speaker 1>Trand was and is still used in scientific applications, while

0:03:28.840 --> 0:03:32.040
<v Speaker 1>Cobal became the programming language of choice for businesses. But

0:03:32.040 --> 0:03:34.320
<v Speaker 1>there are other languages that also popped up around that

0:03:34.400 --> 0:03:37.240
<v Speaker 1>same time that are unrelated to either of those, so

0:03:37.320 --> 0:03:40.960
<v Speaker 1>they don't branch off from four tran or COBAL. They

0:03:41.000 --> 0:03:45.840
<v Speaker 1>are independent programming languages, and one of those is Lisp. Technically,

0:03:45.880 --> 0:03:49.280
<v Speaker 1>it was, at least by most accounts, the second programming

0:03:49.360 --> 0:03:52.040
<v Speaker 1>language if you put aside Zeus's work and you look

0:03:52.080 --> 0:03:55.160
<v Speaker 1>at four trand as being the first programming language, LISP

0:03:55.360 --> 0:03:59.600
<v Speaker 1>if you're looking at pure publication years is the second one,

0:04:00.280 --> 0:04:04.360
<v Speaker 1>and the name stands for List Processor Lisp l I

0:04:04.760 --> 0:04:08.600
<v Speaker 1>s P. It was developed by John McCarthy at Dartmouth

0:04:08.720 --> 0:04:11.840
<v Speaker 1>and M I. T in the mid nineteen fifties. The

0:04:11.920 --> 0:04:15.480
<v Speaker 1>first reference manual was published in nineteen sixty and it's

0:04:15.480 --> 0:04:19.080
<v Speaker 1>a programming language that is based on recursive functions, which

0:04:19.160 --> 0:04:22.560
<v Speaker 1>is a function that appears in its own definition, and

0:04:22.600 --> 0:04:25.320
<v Speaker 1>this sets it apart from four trand. In the Ford

0:04:25.320 --> 0:04:28.200
<v Speaker 1>Trend programming language, you can view a program as a

0:04:28.200 --> 0:04:30.880
<v Speaker 1>sequence of steps that a computer is supposed to take,

0:04:30.960 --> 0:04:33.200
<v Speaker 1>sort of like a to do list, like do this,

0:04:33.400 --> 0:04:36.000
<v Speaker 1>then do that, then do that, etcetera, etcetera, all the

0:04:36.040 --> 0:04:39.640
<v Speaker 1>way down the line. A Lisp program is a function

0:04:39.760 --> 0:04:44.160
<v Speaker 1>applied to data. It can also use its parenthetical notation

0:04:44.279 --> 0:04:48.400
<v Speaker 1>to represent actual data, which meant Lisp programs could operate

0:04:48.480 --> 0:04:51.760
<v Speaker 1>on other programs as data and it would become one

0:04:51.800 --> 0:04:55.200
<v Speaker 1>of the most important programming languages for artificial intelligence, partly

0:04:55.320 --> 0:04:59.240
<v Speaker 1>because uh, it was a a learning program that a

0:04:59.240 --> 0:05:01.520
<v Speaker 1>lot of people were using in order to do research

0:05:01.520 --> 0:05:05.080
<v Speaker 1>and development in ai UM and it was a computer

0:05:05.120 --> 0:05:08.040
<v Speaker 1>program capable of learning things that could be based on

0:05:08.040 --> 0:05:12.200
<v Speaker 1>on Lisp as a self modifying program because I had

0:05:12.240 --> 0:05:15.440
<v Speaker 1>that recursive nature. That's what allows it to be self modifying.

0:05:16.160 --> 0:05:18.719
<v Speaker 1>One interesting aspect of Lisp is that when you type

0:05:18.720 --> 0:05:22.280
<v Speaker 1>out the code, you nest functions inside of parentheses, So

0:05:22.360 --> 0:05:26.040
<v Speaker 1>you might end up having a whole mess of parentheses

0:05:26.080 --> 0:05:28.919
<v Speaker 1>housing a series of functions that would be performed on

0:05:28.960 --> 0:05:31.520
<v Speaker 1>a specific data set. And it sounds very similar to

0:05:31.520 --> 0:05:34.080
<v Speaker 1>the way I tend to write. I like parenthetical asides,

0:05:34.320 --> 0:05:38.800
<v Speaker 1>perhaps a bit too much. Lisp was a more specialized

0:05:38.920 --> 0:05:42.839
<v Speaker 1>language and more abstract than other high level languages. And

0:05:42.839 --> 0:05:45.920
<v Speaker 1>remember a high level language is one that is easier

0:05:45.960 --> 0:05:50.039
<v Speaker 1>for humans to comprehend. It is further removed from the

0:05:50.120 --> 0:05:54.200
<v Speaker 1>machine code that's actually running on the computer hardware itself,

0:05:54.680 --> 0:05:57.239
<v Speaker 1>and then you have some sort of process in between

0:05:57.279 --> 0:06:00.279
<v Speaker 1>the high level language and the machine code that makes

0:06:00.320 --> 0:06:03.720
<v Speaker 1>it understandable to the machines. So humans are not great

0:06:03.760 --> 0:06:07.000
<v Speaker 1>and understanding machine code. It is pretty hard to program

0:06:07.000 --> 0:06:11.280
<v Speaker 1>and not impossible, but very challenging, and machines can't understand

0:06:11.520 --> 0:06:15.000
<v Speaker 1>high level languages. Uh. The languages are our way of

0:06:15.040 --> 0:06:19.120
<v Speaker 1>making it easier for us to work with computers. Now,

0:06:19.560 --> 0:06:21.760
<v Speaker 1>LISP sees a great deal of application in the world

0:06:21.760 --> 0:06:25.640
<v Speaker 1>of artificial intelligence, but it's not used extensively outside of

0:06:25.640 --> 0:06:29.440
<v Speaker 1>that field. That doesn't mean that no one else uses it,

0:06:29.440 --> 0:06:32.200
<v Speaker 1>it's just not as common as other forms of programming

0:06:32.240 --> 0:06:37.200
<v Speaker 1>languages for other applications besides AI. Lisp would inspire Seymour,

0:06:37.279 --> 0:06:40.839
<v Speaker 1>Papert and m I. T Research, a researcher rather to

0:06:40.920 --> 0:06:44.840
<v Speaker 1>develop another language called Logo l O g O and

0:06:44.880 --> 0:06:47.320
<v Speaker 1>that was meant to be an accessible programming language that

0:06:47.400 --> 0:06:50.480
<v Speaker 1>kids could learn to code in. It used graphics and

0:06:50.520 --> 0:06:54.640
<v Speaker 1>a simple set of rules to encourage learning. Another offshoot

0:06:54.680 --> 0:06:57.840
<v Speaker 1>of LISP was Scheme, which is frequently used in college

0:06:57.920 --> 0:07:00.120
<v Speaker 1>level coding classes to teach some of the basic on

0:07:00.160 --> 0:07:04.320
<v Speaker 1>steps of programming. So you'll find that among programming languages

0:07:04.600 --> 0:07:08.279
<v Speaker 1>there are several that were invented specifically to help people

0:07:08.440 --> 0:07:14.440
<v Speaker 1>understand the concepts that go into various coding philosophies or paradigms.

0:07:14.680 --> 0:07:18.880
<v Speaker 1>There are different approaches to coding, and some programming languages

0:07:19.080 --> 0:07:24.360
<v Speaker 1>are are more appropriate for certain philosophies than others. Uh,

0:07:24.360 --> 0:07:26.040
<v Speaker 1>there are a lot of languages that you can use

0:07:26.240 --> 0:07:29.000
<v Speaker 1>various approaches to programming. You don't have to, you're not

0:07:29.080 --> 0:07:31.720
<v Speaker 1>nailed down to a very specific approach. But there are

0:07:31.760 --> 0:07:35.640
<v Speaker 1>some that just lend themselves better to a certain process

0:07:35.840 --> 0:07:38.760
<v Speaker 1>versus another, And a lot of them were designed by

0:07:38.880 --> 0:07:43.080
<v Speaker 1>educators who wanted to encourage people to start thinking in

0:07:43.160 --> 0:07:48.040
<v Speaker 1>ways that would develop into good programming practices, and then

0:07:48.080 --> 0:07:53.640
<v Speaker 1>they would graduate on to using more robust programming languages.

0:07:53.680 --> 0:07:56.800
<v Speaker 1>There are actually some programming languages that aren't really meant

0:07:56.920 --> 0:08:00.800
<v Speaker 1>for real world use. They're really meant just as a

0:08:00.880 --> 0:08:04.480
<v Speaker 1>means of understanding the basics of programming itself and getting

0:08:04.520 --> 0:08:08.880
<v Speaker 1>a grasp on computer science. Another programming language that emerged

0:08:09.040 --> 0:08:13.200
<v Speaker 1>shortly after Lisp for Trand and cobol was a p L.

0:08:13.720 --> 0:08:16.400
<v Speaker 1>And a p L is an acronym, and it or

0:08:16.440 --> 0:08:19.720
<v Speaker 1>initialism if you prefer. Really it's an initialism and it

0:08:19.800 --> 0:08:25.560
<v Speaker 1>stands for a programming language. It seems pretty straightforward. You'll

0:08:25.600 --> 0:08:28.040
<v Speaker 1>notice that some folks like to name their programming languages

0:08:28.800 --> 0:08:34.120
<v Speaker 1>very generic things. The creator of a p L was

0:08:34.280 --> 0:08:37.760
<v Speaker 1>Kenneth e Iverson. A p L used symbols to represent

0:08:37.840 --> 0:08:41.000
<v Speaker 1>functions and operators, and the nice thing about that is

0:08:41.040 --> 0:08:44.000
<v Speaker 1>that it helped make the code more efficient and concise.

0:08:44.080 --> 0:08:47.239
<v Speaker 1>You didn't need as much code to represent the functions

0:08:47.280 --> 0:08:50.840
<v Speaker 1>you wanted to run with any given program. So one

0:08:50.880 --> 0:08:53.640
<v Speaker 1>branch of a p L is sharp a p L.

0:08:54.600 --> 0:08:56.480
<v Speaker 1>This was a variant that was designed by the company

0:08:56.559 --> 0:08:59.880
<v Speaker 1>I P. Sharp Associates, and it added some more functional

0:09:00.200 --> 0:09:02.800
<v Speaker 1>to a p L enough to be considered its own

0:09:02.880 --> 0:09:05.880
<v Speaker 1>programming language. So not just a variation, it's really its

0:09:05.880 --> 0:09:09.920
<v Speaker 1>own language and its own right. Programmers would create other

0:09:10.040 --> 0:09:14.400
<v Speaker 1>programming languages that did not depend directly on these early ones,

0:09:14.440 --> 0:09:18.079
<v Speaker 1>but they served. These early languages served as the foundation

0:09:18.160 --> 0:09:21.960
<v Speaker 1>for several others. In some cases they inspired people to

0:09:22.040 --> 0:09:26.520
<v Speaker 1>make new programming languages, and in other cases they themselves

0:09:26.559 --> 0:09:31.360
<v Speaker 1>actually were the foundation for specific uh new implementations of

0:09:31.400 --> 0:09:35.960
<v Speaker 1>programming language. There's so many variations that I can't list

0:09:36.000 --> 0:09:38.199
<v Speaker 1>them all even in a series of podcasts unless I

0:09:38.240 --> 0:09:40.240
<v Speaker 1>were just to rattle off names, and that would have

0:09:40.320 --> 0:09:42.560
<v Speaker 1>no meaning whatsoever. So I'll focus on some of the

0:09:42.600 --> 0:09:45.720
<v Speaker 1>more prominent languages and their variants, and we'll start with

0:09:45.800 --> 0:09:49.120
<v Speaker 1>for TRAN, the programming language made it much easier to

0:09:49.120 --> 0:09:52.120
<v Speaker 1>program calculations for computers, and it removed the need to

0:09:52.160 --> 0:09:55.960
<v Speaker 1>work in machine code or assembly language. Four trans launched

0:09:56.000 --> 0:10:00.160
<v Speaker 1>in nineteen fifty seven. The basic language received several updates.

0:10:00.280 --> 0:10:03.000
<v Speaker 1>For Tran two came out in nineteen fifty eight and

0:10:03.040 --> 0:10:05.840
<v Speaker 1>introduced some new features, such as the ability of programmers

0:10:05.840 --> 0:10:09.080
<v Speaker 1>to create subroutines and functions, which meant they could use

0:10:09.120 --> 0:10:12.880
<v Speaker 1>the same code repeatedly in future programs or within the

0:10:12.920 --> 0:10:15.360
<v Speaker 1>same program, and it saved a lot of time there

0:10:15.400 --> 0:10:18.160
<v Speaker 1>was no need to reinvent the wheel with every implementation.

0:10:19.000 --> 0:10:23.400
<v Speaker 1>Other updates would follow. The first truly machine independent version

0:10:23.520 --> 0:10:26.600
<v Speaker 1>of four trand came out in nineteen sixty one. It

0:10:26.679 --> 0:10:29.400
<v Speaker 1>was four TRAN four. This was the first version that

0:10:29.400 --> 0:10:32.480
<v Speaker 1>could run on different computer architectures, so that the same

0:10:32.480 --> 0:10:36.480
<v Speaker 1>program created in four TRAN four would run across different machines.

0:10:36.760 --> 0:10:40.120
<v Speaker 1>But this wasn't yet a standardized language unrelated to any

0:10:40.160 --> 0:10:44.560
<v Speaker 1>specific type of computer. It still was limited to a

0:10:44.640 --> 0:10:48.640
<v Speaker 1>family of architectures, but that would change with the next

0:10:48.760 --> 0:10:52.439
<v Speaker 1>version of four TRAN in nineteen sixty two, you had

0:10:52.440 --> 0:10:56.319
<v Speaker 1>a group called the American Standards Association, and they created

0:10:56.400 --> 0:10:59.520
<v Speaker 1>a set of standards for the next round of programming languages,

0:10:59.720 --> 0:11:03.719
<v Speaker 1>and the goal was to make them architecture agnostic. They

0:11:03.720 --> 0:11:07.200
<v Speaker 1>didn't want programmers to have to reinvent their programs with

0:11:07.360 --> 0:11:11.880
<v Speaker 1>every different architecture of computers out there. To do so

0:11:11.960 --> 0:11:14.079
<v Speaker 1>would just mean that you would write the same program

0:11:14.160 --> 0:11:16.320
<v Speaker 1>and then have to rewrite it and rewrite it again

0:11:16.480 --> 0:11:20.839
<v Speaker 1>for every single different architecture you encountered. The language to

0:11:20.920 --> 0:11:25.040
<v Speaker 1>emerge from that process was four TRANS sixty six. Meanwhile,

0:11:25.280 --> 0:11:28.520
<v Speaker 1>other programming languages, including several I haven't mentioned yet, we're

0:11:28.880 --> 0:11:32.760
<v Speaker 1>leaving for TRAND behind because really for TRAND was still

0:11:32.840 --> 0:11:35.160
<v Speaker 1>kind of limited in what it could do. It was

0:11:35.240 --> 0:11:37.560
<v Speaker 1>good at what it could do, but it couldn't it

0:11:37.640 --> 0:11:42.520
<v Speaker 1>was it was like a very relatively narrow band of applications.

0:11:42.840 --> 0:11:46.719
<v Speaker 1>And over the course of several years, computer programmers work

0:11:46.800 --> 0:11:51.000
<v Speaker 1>to build out more functionality into four TRAN, including creating

0:11:51.040 --> 0:11:54.560
<v Speaker 1>the ability to make true block if statements and direct

0:11:54.600 --> 0:11:59.439
<v Speaker 1>access input output functions. That result was four TRANS seventy seven,

0:11:59.440 --> 0:12:03.079
<v Speaker 1>which became the most widely used programming language in the world,

0:12:03.440 --> 0:12:05.679
<v Speaker 1>and there are still examples of code written in four

0:12:05.720 --> 0:12:10.920
<v Speaker 1>trans seventy seven today. Forty years later, four Tran ninety

0:12:11.080 --> 0:12:13.400
<v Speaker 1>was the next version of Pure four Tran. It was

0:12:13.440 --> 0:12:16.800
<v Speaker 1>created to again address some of the shortcomings of Fortran

0:12:16.920 --> 0:12:19.839
<v Speaker 1>compared to other programming languages, such as the ability to

0:12:19.880 --> 0:12:23.520
<v Speaker 1>allocate memory dynamically, and it was published as a standard

0:12:23.520 --> 0:12:26.760
<v Speaker 1>by the International Standards Organization in n and there was

0:12:26.800 --> 0:12:31.000
<v Speaker 1>one more version in N called four Tran I s

0:12:31.040 --> 0:12:35.079
<v Speaker 1>O for Tran also spawned a few other languages. One

0:12:35.160 --> 0:12:38.480
<v Speaker 1>notable family was the al Goal series of languages a

0:12:38.679 --> 0:12:41.720
<v Speaker 1>l G O L. Like four Tran, al Goal founded

0:12:41.720 --> 0:12:46.280
<v Speaker 1>its greatest applications and scientific calculations, that's really where it

0:12:46.400 --> 0:12:50.040
<v Speaker 1>was used for the most part. It introduced a block

0:12:50.160 --> 0:12:53.719
<v Speaker 1>structure in which coders could insert a block of statements

0:12:54.400 --> 0:12:57.120
<v Speaker 1>for the scope of variables within the code, and it

0:12:57.200 --> 0:13:00.880
<v Speaker 1>also incorporated recursion, which is the ability of a procedure

0:13:00.920 --> 0:13:05.320
<v Speaker 1>to call upon itself. UH. It never really reached commercial success,

0:13:05.320 --> 0:13:09.120
<v Speaker 1>but it had a profound impact on people developing their

0:13:09.120 --> 0:13:12.920
<v Speaker 1>own programming languages. So in other words, it wasn't so

0:13:13.360 --> 0:13:18.239
<v Speaker 1>compelling as to get universal adoption, but it definitely inspired

0:13:18.280 --> 0:13:21.520
<v Speaker 1>a lot of programmers to give it a world and

0:13:21.600 --> 0:13:25.200
<v Speaker 1>to then incorporate some of those elements into their own

0:13:25.280 --> 0:13:29.640
<v Speaker 1>programming languages later on. Next, we've got pl slash one

0:13:29.679 --> 0:13:32.880
<v Speaker 1>PL one programming language. This was from George Raydon, a

0:13:33.200 --> 0:13:37.160
<v Speaker 1>computer scientist who held degrees from Brooklyn College, Columbia University

0:13:37.160 --> 0:13:40.120
<v Speaker 1>in the City University of New York. This was a

0:13:40.160 --> 0:13:43.280
<v Speaker 1>real hybrid language. At borrowed elements from four TRAN, from

0:13:43.360 --> 0:13:47.040
<v Speaker 1>cobol and from ALGOL. The name stands for programming language

0:13:47.480 --> 0:13:52.240
<v Speaker 1>PL one. It's pretty straightforward. IBM would take PL one

0:13:52.640 --> 0:13:55.800
<v Speaker 1>and mush mush mush it into p LS. This would

0:13:55.880 --> 0:13:58.800
<v Speaker 1>remain ibm s programming language of choice until the C

0:13:59.120 --> 0:14:02.120
<v Speaker 1>programming langue wages came along a bit later. The PL

0:14:02.240 --> 0:14:06.440
<v Speaker 1>one format allowed for more complex processes without the need

0:14:06.600 --> 0:14:09.679
<v Speaker 1>to build up an enormous amount of code, So in

0:14:09.679 --> 0:14:12.040
<v Speaker 1>other words, you could use the code to execute a

0:14:12.040 --> 0:14:15.320
<v Speaker 1>bunch of different operations rather than building each of those

0:14:15.320 --> 0:14:19.400
<v Speaker 1>operations up from more basic components. It was not only

0:14:19.520 --> 0:14:23.120
<v Speaker 1>used in scientific and business applications, but also data processing,

0:14:23.240 --> 0:14:26.160
<v Speaker 1>so we're starting to get into some more general purpose

0:14:26.240 --> 0:14:30.200
<v Speaker 1>computing at this point. Keep in mind, the computers well

0:14:30.280 --> 0:14:33.440
<v Speaker 1>before the personal computing age. They tend to be very

0:14:33.480 --> 0:14:37.760
<v Speaker 1>specific use machines. They weren't necessarily meant to do lots

0:14:37.800 --> 0:14:41.760
<v Speaker 1>of different things. They were built for specific purposes, and

0:14:41.840 --> 0:14:45.400
<v Speaker 1>therefore a lot of these programming languages were tuned to

0:14:45.440 --> 0:14:47.600
<v Speaker 1>those specific purposes. You didn't have a lot of general

0:14:47.600 --> 0:14:51.200
<v Speaker 1>purpose computing in those early days. But that's it for

0:14:51.280 --> 0:14:54.920
<v Speaker 1>the direct For trend descendants, we'll talk about Cobal just

0:14:55.000 --> 0:14:58.400
<v Speaker 1>really briefly. Like for trand Cobal would evolve over time.

0:14:58.440 --> 0:15:01.480
<v Speaker 1>There were versions like Cobal six D one and see

0:15:01.480 --> 0:15:05.480
<v Speaker 1>Cobal seventy four and see cobalight five O O or

0:15:05.680 --> 0:15:09.360
<v Speaker 1>object oriented Cobal. I'll talk about object oriented programming a

0:15:09.360 --> 0:15:12.160
<v Speaker 1>bit later in this episode to explain what that actually means.

0:15:12.720 --> 0:15:16.160
<v Speaker 1>And Cobal two thousand fourteen. According to the Gartner Group,

0:15:16.480 --> 0:15:20.640
<v Speaker 1>eighty per cent of the world's business runs off Cobal code,

0:15:21.280 --> 0:15:23.920
<v Speaker 1>so very influential, and keeping in mind it was like

0:15:24.000 --> 0:15:27.520
<v Speaker 1>the third big programming language to emerge, it's pretty impressive.

0:15:28.200 --> 0:15:31.600
<v Speaker 1>So that's the basics for the foundation of programming languages

0:15:31.680 --> 0:15:34.000
<v Speaker 1>early early on, and the next section I'm going to

0:15:34.080 --> 0:15:36.720
<v Speaker 1>look at some of the big programming languages that followed

0:15:37.200 --> 0:15:41.240
<v Speaker 1>and what those are intended to do. Why are these

0:15:41.560 --> 0:15:44.920
<v Speaker 1>programming languages in the first place, Once we established them,

0:15:44.920 --> 0:15:47.160
<v Speaker 1>why did we need more? We'll look at that in

0:15:47.160 --> 0:15:49.920
<v Speaker 1>the second but first let's take a quick break to

0:15:50.080 --> 0:15:59.800
<v Speaker 1>thank our sponsor. You know, I I noticed that I've

0:16:00.040 --> 0:16:03.160
<v Speaker 1>used the word basic to describe a lot of things

0:16:03.200 --> 0:16:05.320
<v Speaker 1>in this podcast, so I guess it's a good time

0:16:05.360 --> 0:16:10.240
<v Speaker 1>to talk about the programming language Basic. Thomas E. Kurtz

0:16:10.280 --> 0:16:14.760
<v Speaker 1>and John G. Kimeny, students at Dartmouth College that designed

0:16:14.840 --> 0:16:17.360
<v Speaker 1>the programming language, and they had the intent to create

0:16:17.400 --> 0:16:20.960
<v Speaker 1>one that was easier to code in the earlier languages.

0:16:21.360 --> 0:16:25.120
<v Speaker 1>So before Basic, most languages required a pretty strong grasp

0:16:25.280 --> 0:16:29.640
<v Speaker 1>on mathematics. So in fact, mostly early programmers and computer

0:16:29.720 --> 0:16:33.120
<v Speaker 1>scientists like Grace Hopper, you know, the person who we

0:16:33.280 --> 0:16:38.720
<v Speaker 1>credit with coining the term computer bug. She was a mathematician.

0:16:39.760 --> 0:16:42.000
<v Speaker 1>In fact, that was what her interest was in. She

0:16:42.080 --> 0:16:44.800
<v Speaker 1>didn't want to be known as a programmer. She was

0:16:44.920 --> 0:16:47.520
<v Speaker 1>interested in mathematics, and that's what a lot of the

0:16:47.560 --> 0:16:52.360
<v Speaker 1>earlier programs were. They were mathematicians. But not everyone can

0:16:52.440 --> 0:16:56.400
<v Speaker 1>have that sort of grasp on very complex mathematics. So

0:16:56.480 --> 0:16:59.160
<v Speaker 1>basics design meant that you didn't have to be a

0:16:59.200 --> 0:17:02.160
<v Speaker 1>math whiz to learn how to build a program. I'm

0:17:02.200 --> 0:17:05.320
<v Speaker 1>personally thankful for it because that's the programming language I

0:17:05.400 --> 0:17:08.679
<v Speaker 1>have the most direct experience in. The language did have

0:17:08.800 --> 0:17:11.960
<v Speaker 1>some hefty level limitations, but it wasn't designed to be

0:17:12.000 --> 0:17:14.080
<v Speaker 1>the last language you'd ever need to learn. It was

0:17:14.119 --> 0:17:18.680
<v Speaker 1>really to get you into programming. The name stands for something.

0:17:18.680 --> 0:17:20.920
<v Speaker 1>It's not just a word, it's actually again, and it's

0:17:20.960 --> 0:17:26.040
<v Speaker 1>an acronym. It's beginners all purpose symbolic instruction Code Basic.

0:17:26.880 --> 0:17:29.879
<v Speaker 1>The initial version of Basic debut in nineteen sixty four.

0:17:30.440 --> 0:17:33.920
<v Speaker 1>A decade later, Bill Gates and Paul Allen would offer

0:17:34.000 --> 0:17:36.440
<v Speaker 1>up a version of Basic as one of the first

0:17:36.440 --> 0:17:41.120
<v Speaker 1>products from a little company they founded called Microsoft. Basic

0:17:41.280 --> 0:17:44.600
<v Speaker 1>was also the language of the Apple too. That particular

0:17:44.720 --> 0:17:48.800
<v Speaker 1>variant was integer Basic, but these were all from the

0:17:48.840 --> 0:17:52.200
<v Speaker 1>same family. Basic taught students how to think in terms

0:17:52.200 --> 0:17:55.840
<v Speaker 1>of logical progression to design code that would produce a

0:17:55.840 --> 0:17:59.399
<v Speaker 1>desired result. Typically, you'd begin each line of code with

0:17:59.480 --> 0:18:02.359
<v Speaker 1>a number to designate that line, to say what order

0:18:02.760 --> 0:18:05.480
<v Speaker 1>that goes in as far as the order of operations.

0:18:05.760 --> 0:18:09.000
<v Speaker 1>So for example, I might type one zero to mark

0:18:09.080 --> 0:18:12.240
<v Speaker 1>the first line of code, and then I would follow

0:18:12.280 --> 0:18:14.000
<v Speaker 1>that with some sort of command, so would be one

0:18:14.080 --> 0:18:18.600
<v Speaker 1>zero space something for example cls, which would stand for

0:18:18.640 --> 0:18:21.240
<v Speaker 1>a clear screen. Then I could follow that with the

0:18:21.280 --> 0:18:23.680
<v Speaker 1>next line of code, which would begin with a new

0:18:23.760 --> 0:18:27.639
<v Speaker 1>number like to zero to zero. I might write print

0:18:28.160 --> 0:18:31.600
<v Speaker 1>that tells the computer that the next thing I type

0:18:31.640 --> 0:18:34.760
<v Speaker 1>in it will need to display or print out in

0:18:34.840 --> 0:18:38.800
<v Speaker 1>some way, and I might put in quotation marks hello world.

0:18:39.000 --> 0:18:42.639
<v Speaker 1>It's very common way of learning programming is doing your

0:18:42.680 --> 0:18:45.560
<v Speaker 1>first Hello World. Then I could type in one more

0:18:45.600 --> 0:18:48.200
<v Speaker 1>line of code, and I type in the number three

0:18:48.280 --> 0:18:52.080
<v Speaker 1>zero's for our third line, and type in the word

0:18:52.400 --> 0:18:55.640
<v Speaker 1>end to end that program. So if I ran that program,

0:18:55.640 --> 0:18:58.000
<v Speaker 1>it would clear the screen and then print the line

0:18:58.040 --> 0:19:01.200
<v Speaker 1>hello world, and that's all it would do. Obviously, this

0:19:01.400 --> 0:19:03.959
<v Speaker 1>is not the extent of what you can do in Basic.

0:19:04.040 --> 0:19:06.560
<v Speaker 1>If it were, it would be a pretty useless language.

0:19:07.119 --> 0:19:10.159
<v Speaker 1>You could add other elements, such as if then statements.

0:19:10.400 --> 0:19:13.120
<v Speaker 1>You might ask for an input from the user, such

0:19:13.160 --> 0:19:15.920
<v Speaker 1>as a line of code that prints the sentence would

0:19:15.920 --> 0:19:18.480
<v Speaker 1>you like to learn about tech stuff? And then another

0:19:18.560 --> 0:19:20.919
<v Speaker 1>line that presents either a yes or no option to

0:19:20.960 --> 0:19:22.919
<v Speaker 1>the user. You know, you could type a Y or

0:19:22.960 --> 0:19:26.600
<v Speaker 1>an N. Your if then statement would then have a

0:19:26.640 --> 0:19:31.240
<v Speaker 1>branching pathway. So within your code you would have different

0:19:31.720 --> 0:19:35.560
<v Speaker 1>lines that would represent what happens depending upon what the

0:19:35.680 --> 0:19:38.240
<v Speaker 1>user did. So, if the user typed in a why,

0:19:38.840 --> 0:19:42.480
<v Speaker 1>you might then have a bit of information about tech stuff,

0:19:42.480 --> 0:19:45.600
<v Speaker 1>saying it's a totally awesome podcast hosted by a groovy

0:19:45.680 --> 0:19:49.879
<v Speaker 1>dude named Jonathan Strickland. If you typed in and it

0:19:49.880 --> 0:19:52.840
<v Speaker 1>would say, what's your problem? Man? You want to know

0:19:52.880 --> 0:19:55.120
<v Speaker 1>about tech stuff? It's pretty awesome. I think you need

0:19:55.160 --> 0:19:57.560
<v Speaker 1>to know more. If you typed anything else, you might

0:19:57.600 --> 0:20:00.000
<v Speaker 1>get a message saying I'm sorry, man, I totally don't understand.

0:20:00.040 --> 0:20:02.760
<v Speaker 1>What the heck are you trying to say? Those are

0:20:02.760 --> 0:20:07.000
<v Speaker 1>those if then statements. If user types this, then go

0:20:07.280 --> 0:20:13.080
<v Speaker 1>to this other line of code. Very basic idea, no

0:20:13.200 --> 0:20:19.560
<v Speaker 1>pun intended. In programming in the late nineteen sixties, a

0:20:19.680 --> 0:20:23.960
<v Speaker 1>new programming language created a revolution in programming. And it's

0:20:23.960 --> 0:20:28.200
<v Speaker 1>an important language, though one that I think most non

0:20:28.280 --> 0:20:33.359
<v Speaker 1>programmers haven't really heard about. It's small Talk. That's something

0:20:33.400 --> 0:20:36.280
<v Speaker 1>that any computer science major has likely studied at some

0:20:36.359 --> 0:20:39.840
<v Speaker 1>time or another. But why was it so important? Well,

0:20:39.880 --> 0:20:43.119
<v Speaker 1>small Talk created a new paradigm for programming. It was

0:20:43.160 --> 0:20:46.919
<v Speaker 1>an object oriented programming language, and it began as a

0:20:47.080 --> 0:20:51.080
<v Speaker 1>project at Xerox Park. Now that's the same research and

0:20:51.080 --> 0:20:54.240
<v Speaker 1>development branch of Xerox that brought us tons of other

0:20:54.280 --> 0:20:57.760
<v Speaker 1>stuff like the graphic user interface, the Gooey or the

0:20:57.840 --> 0:21:02.440
<v Speaker 1>virtual machine or the mouse. So what exactly does it

0:21:02.560 --> 0:21:05.760
<v Speaker 1>mean to be an object oriented programming language? What is

0:21:05.960 --> 0:21:09.920
<v Speaker 1>an object in programming? Well, an object can be many things,

0:21:09.960 --> 0:21:14.280
<v Speaker 1>including a function, a data structure, a method, or a variable.

0:21:14.800 --> 0:21:18.320
<v Speaker 1>Small Talk incorporated this concept and also included a related

0:21:18.359 --> 0:21:22.720
<v Speaker 1>one called inheritance, which allows you to make a subclass

0:21:22.760 --> 0:21:25.760
<v Speaker 1>of an existing object. This is useful if you're working

0:21:25.760 --> 0:21:29.760
<v Speaker 1>with variations on the same basic structure. An inherited subclass

0:21:30.040 --> 0:21:34.400
<v Speaker 1>will initially be identical to its parent class. So let's

0:21:34.400 --> 0:21:37.960
<v Speaker 1>say you've created an object and then you create uh

0:21:38.240 --> 0:21:40.840
<v Speaker 1>and you know, use inheritance to create a subclass of

0:21:40.880 --> 0:21:42.919
<v Speaker 1>that object. At first, it's going to be identical, but

0:21:42.960 --> 0:21:47.040
<v Speaker 1>then you can make changes to the subclass that will

0:21:47.160 --> 0:21:51.480
<v Speaker 1>not change the parent class of object. And from a

0:21:51.520 --> 0:21:55.000
<v Speaker 1>programming perspective, this makes it easier to build complex code

0:21:55.119 --> 0:21:58.120
<v Speaker 1>because you don't need to rebuild the entire object each time.

0:21:58.160 --> 0:22:01.240
<v Speaker 1>You just take that you make a subclass or you

0:22:01.800 --> 0:22:07.480
<v Speaker 1>implement a subclass that you've already established. Objects have two

0:22:07.880 --> 0:22:10.240
<v Speaker 1>facets to them. They have a state and they have

0:22:10.280 --> 0:22:14.120
<v Speaker 1>a behavior. So it's easier to think about this if

0:22:14.119 --> 0:22:17.159
<v Speaker 1>we use an analogy and think about a physical object,

0:22:17.520 --> 0:22:20.040
<v Speaker 1>which can be anything. Really, the analogy can be a

0:22:20.080 --> 0:22:23.760
<v Speaker 1>little helpful. Let's let's think of a cat. First. Of all,

0:22:23.800 --> 0:22:25.720
<v Speaker 1>cats would hate it if I called them objects, but

0:22:25.960 --> 0:22:29.440
<v Speaker 1>for this purpose we're gonna refer to cats. So cats

0:22:29.480 --> 0:22:33.679
<v Speaker 1>have numerous states. One state for a cat might be

0:22:33.840 --> 0:22:36.160
<v Speaker 1>the breed of cats. So is it a tabby cat?

0:22:36.320 --> 0:22:39.239
<v Speaker 1>Is it a Persian? Is it a Siamese? That is

0:22:39.280 --> 0:22:42.760
<v Speaker 1>that cats state, and it also has a behavior like

0:22:43.040 --> 0:22:47.520
<v Speaker 1>purring or treating you with utter contempt. You can describe

0:22:47.560 --> 0:22:51.240
<v Speaker 1>this object, the cat, by its state and by its behavior,

0:22:51.400 --> 0:22:55.919
<v Speaker 1>so it is uh the same with objects and object

0:22:55.960 --> 0:22:59.120
<v Speaker 1>oriented programming. You can describe them by their states and behavior.

0:23:00.040 --> 0:23:04.280
<v Speaker 1>Objects store states and what are called fields or variables.

0:23:05.119 --> 0:23:08.280
<v Speaker 1>These include all the possible states for that object. The

0:23:08.359 --> 0:23:12.399
<v Speaker 1>behavior of objects is expressed as methods or functions, and

0:23:12.840 --> 0:23:15.440
<v Speaker 1>um when they are applied to it. The methods operate

0:23:15.560 --> 0:23:19.280
<v Speaker 1>on an objects internal state. One of the big benefits

0:23:19.280 --> 0:23:22.520
<v Speaker 1>of object oriented programming is the source code for any

0:23:22.560 --> 0:23:27.000
<v Speaker 1>given object is independent of that of all other objects.

0:23:27.000 --> 0:23:32.399
<v Speaker 1>They are their own entities. This makes objects modular, and

0:23:32.440 --> 0:23:34.840
<v Speaker 1>you can easily pass an object around a system because

0:23:34.840 --> 0:23:37.720
<v Speaker 1>it's not directly entwined with everything else. Now, in the

0:23:37.760 --> 0:23:40.680
<v Speaker 1>real world, this is easy for us to imagine. Right,

0:23:40.720 --> 0:23:43.920
<v Speaker 1>Let's say that you've got a baseball and a baseball bat. Well,

0:23:43.920 --> 0:23:46.159
<v Speaker 1>those two things are are related in the sense that

0:23:46.160 --> 0:23:48.440
<v Speaker 1>they're both used in a baseball game. But you can

0:23:48.440 --> 0:23:50.480
<v Speaker 1>pick up the baseball and leave the bat behind. You

0:23:50.520 --> 0:23:52.520
<v Speaker 1>can pick up the bat and leave the baseball behind.

0:23:52.560 --> 0:23:55.280
<v Speaker 1>They are not directly connected to each other in any

0:23:55.320 --> 0:23:58.959
<v Speaker 1>physical way. If they were directly connected, let's say the

0:23:58.960 --> 0:24:01.200
<v Speaker 1>ball is glued to the bat, then there's no way

0:24:01.240 --> 0:24:04.200
<v Speaker 1>to separate them without breaking it. You pick up the bat,

0:24:04.280 --> 0:24:07.520
<v Speaker 1>the ball comes with it, or vice versa. Well, that's

0:24:07.520 --> 0:24:10.120
<v Speaker 1>the way it is with certain types of code that

0:24:10.240 --> 0:24:14.879
<v Speaker 1>you cannot easily pick up and move blocks of code

0:24:15.320 --> 0:24:19.200
<v Speaker 1>around without affecting everything else because they're entwined. And object

0:24:19.280 --> 0:24:23.640
<v Speaker 1>oriented programming, everything is more or less self contained, and

0:24:23.720 --> 0:24:27.280
<v Speaker 1>it cleans things up extensively as a result, And there

0:24:27.320 --> 0:24:29.800
<v Speaker 1>are a lot of other details about object oriented programming

0:24:29.800 --> 0:24:32.919
<v Speaker 1>we could get into, but honestly, I'm no expert in it,

0:24:32.960 --> 0:24:35.720
<v Speaker 1>and I'd likely get as much about it wrong as

0:24:35.760 --> 0:24:38.360
<v Speaker 1>I would get right if I were lucky. So I'm

0:24:38.359 --> 0:24:42.879
<v Speaker 1>gonna leave off with this. Object oriented programming became very important,

0:24:43.119 --> 0:24:45.919
<v Speaker 1>and his remains very important, and it was used in

0:24:46.000 --> 0:24:49.480
<v Speaker 1>many different programming languages following small Talk, and there are

0:24:49.480 --> 0:24:51.760
<v Speaker 1>plenty of programmers out there who will go so far

0:24:51.800 --> 0:24:54.680
<v Speaker 1>as to say that no other programming language was as

0:24:54.720 --> 0:24:59.000
<v Speaker 1>elegant in its implementation of object oriented programming as small

0:24:59.000 --> 0:25:02.360
<v Speaker 1>Talk was. Now, I am not qualified to confirm nor

0:25:02.480 --> 0:25:05.920
<v Speaker 1>deny that assertion, but trust me, I read a lot

0:25:05.960 --> 0:25:08.919
<v Speaker 1>of different research material for this episode, and whenever I

0:25:09.040 --> 0:25:12.360
<v Speaker 1>came across anyone who considered themselves to be an expert

0:25:12.359 --> 0:25:15.080
<v Speaker 1>in small Talk, they went on and on about how

0:25:15.640 --> 0:25:19.800
<v Speaker 1>no one has ever done object oriented programming as elegantly

0:25:20.000 --> 0:25:24.080
<v Speaker 1>as the original language did. Whether or not that's true

0:25:24.200 --> 0:25:27.040
<v Speaker 1>or it's just nostalgia, I leave it for the experts

0:25:27.080 --> 0:25:31.800
<v Speaker 1>to decide, because honestly, it's beyond my understanding. Now. Another

0:25:31.840 --> 0:25:36.440
<v Speaker 1>important programming language to mention is c that actually evolved

0:25:36.440 --> 0:25:39.240
<v Speaker 1>from a language called CPL, which originally stood for a

0:25:39.280 --> 0:25:42.800
<v Speaker 1>Cambridge programming language because it was developed at Cambridge University

0:25:42.840 --> 0:25:46.080
<v Speaker 1>in the UK in the early nineteen sixties. But Cambridge

0:25:46.119 --> 0:25:51.080
<v Speaker 1>Programming Language eventually became Combined programming language. That was when

0:25:51.160 --> 0:25:54.359
<v Speaker 1>Cambridge began to partner with programmers at the University of

0:25:54.400 --> 0:25:57.640
<v Speaker 1>London and they began to collaborate on developing the language.

0:25:57.640 --> 0:26:01.960
<v Speaker 1>So Cambridge became combined and it was still CPL. From

0:26:01.960 --> 0:26:06.199
<v Speaker 1>CPL came B CPL, which was known as Bootstrap or

0:26:06.400 --> 0:26:11.199
<v Speaker 1>Basic CPL. Then came the B programming Language in nineteen

0:26:11.280 --> 0:26:14.960
<v Speaker 1>sixty nine. That was a derivative of B CPL. So

0:26:15.000 --> 0:26:18.560
<v Speaker 1>you had CPL, which spawned B CPL, which spawned B.

0:26:19.640 --> 0:26:21.960
<v Speaker 1>But this one didn't come from Cambridge or the UK

0:26:22.080 --> 0:26:26.160
<v Speaker 1>at all. Its home was Bell Labs and Ken Thompson

0:26:26.240 --> 0:26:29.840
<v Speaker 1>and Dennis Ritchie created it. We actually did a tech

0:26:29.880 --> 0:26:32.280
<v Speaker 1>Stuff episode about Dennis Ritchie a couple of years ago.

0:26:32.680 --> 0:26:35.399
<v Speaker 1>He would go on to create C based on his

0:26:35.480 --> 0:26:39.440
<v Speaker 1>work with B. The original purpose of the C programming

0:26:39.480 --> 0:26:42.840
<v Speaker 1>language was to re implement the Unix operating system. The

0:26:42.920 --> 0:26:46.160
<v Speaker 1>language was robust enough to allow programmers to rewrite most

0:26:46.240 --> 0:26:49.719
<v Speaker 1>of the Unix kernel in C, which was a remarkable thing.

0:26:49.760 --> 0:26:52.240
<v Speaker 1>At the time, most OS kernels had to be written

0:26:52.280 --> 0:26:55.600
<v Speaker 1>an assembly language, not in a programming language or a

0:26:55.680 --> 0:26:59.520
<v Speaker 1>high level programming language. C also owes a lot to

0:26:59.600 --> 0:27:03.320
<v Speaker 1>the al Ole family of languages, and C has influenced

0:27:03.440 --> 0:27:07.120
<v Speaker 1>tons of other languages, including C plus plus, Java, JavaScript,

0:27:07.160 --> 0:27:11.439
<v Speaker 1>C Sharp, Pearl, PHB, and Python, among others. Now, in

0:27:11.520 --> 0:27:15.840
<v Speaker 1>nineteen seventy, Nicholas Worth created a programming language as a

0:27:15.840 --> 0:27:18.240
<v Speaker 1>teaching tool, and he wanted to create a language that

0:27:18.320 --> 0:27:22.040
<v Speaker 1>students could easily grasp to get a handle on coding basics.

0:27:22.520 --> 0:27:26.440
<v Speaker 1>He named his language after an inventor named Blaise Pascal,

0:27:27.040 --> 0:27:29.960
<v Speaker 1>who is credited with inventing an early adding machine. So

0:27:30.000 --> 0:27:34.119
<v Speaker 1>this language is of course known as Blaze. I'm kidding,

0:27:34.160 --> 0:27:37.560
<v Speaker 1>it's actually Pascal. If you've heard of the Pascal programming language,

0:27:37.680 --> 0:27:40.320
<v Speaker 1>it's the one that Nicholas Worth made in nineteen seventy.

0:27:40.320 --> 0:27:42.480
<v Speaker 1>His goal was to teach students to think in steps

0:27:42.480 --> 0:27:47.399
<v Speaker 1>that would promote good efficient structured programming. Now, structured programming

0:27:47.520 --> 0:27:51.080
<v Speaker 1>is a specific approach to programming and involves using subroutines

0:27:51.160 --> 0:27:54.800
<v Speaker 1>and block structures to carry out instructions. It's intended to

0:27:54.840 --> 0:27:59.399
<v Speaker 1>help programmers build efficient, clean code. If you contrast this

0:27:59.480 --> 0:28:02.960
<v Speaker 1>with the aproach of Basic, which creates lots of branching

0:28:03.000 --> 0:28:07.480
<v Speaker 1>pathways with various go to statements, and in larger programs

0:28:07.760 --> 0:28:10.720
<v Speaker 1>it can become a big, tangled mess that's difficult to follow.

0:28:10.800 --> 0:28:14.000
<v Speaker 1>You know, you're tracing backward trying to find the line

0:28:14.000 --> 0:28:16.840
<v Speaker 1>of code that leads you down a rabbit trail that

0:28:16.920 --> 0:28:19.560
<v Speaker 1>eventually ends up with an error. It's tough to do

0:28:19.680 --> 0:28:22.880
<v Speaker 1>if you've got a really big program in Basic. So

0:28:23.000 --> 0:28:26.679
<v Speaker 1>Worth wanted to have a programming language that avoided that

0:28:26.800 --> 0:28:30.480
<v Speaker 1>sort of spaghetti style of coding and makes something much

0:28:30.520 --> 0:28:34.800
<v Speaker 1>more clean and efficient. Uh. You don't want to make

0:28:35.200 --> 0:28:38.200
<v Speaker 1>any mistakes when you're coding, but if you do make mistakes,

0:28:38.280 --> 0:28:40.360
<v Speaker 1>you want to be able to track down where that

0:28:40.440 --> 0:28:42.600
<v Speaker 1>mistake is so that you can correct it. And that

0:28:42.720 --> 0:28:47.880
<v Speaker 1>was worth uh motivation. I guess I should say it's

0:28:47.920 --> 0:28:50.200
<v Speaker 1>more difficult with programming languages that go all over the

0:28:50.240 --> 0:28:54.120
<v Speaker 1>place with their various jump commands structured programming approaches. Uh,

0:28:54.240 --> 0:28:57.320
<v Speaker 1>end up discouraging that kind of that kind of thing.

0:28:57.680 --> 0:29:00.200
<v Speaker 1>So in nineteen sixty three we get C plus plus,

0:29:00.240 --> 0:29:03.240
<v Speaker 1>which I alluded to earlier. There's no C plus, just

0:29:03.320 --> 0:29:07.600
<v Speaker 1>C plus plus. This is one also originated in Bell Labs.

0:29:08.120 --> 0:29:12.800
<v Speaker 1>Yarn Strausstrop whose name I am certain I am Butchering

0:29:13.200 --> 0:29:16.040
<v Speaker 1>built it by modifying the C programming language, and it

0:29:16.120 --> 0:29:18.840
<v Speaker 1>became one of the most popular programming languages in the world.

0:29:19.520 --> 0:29:21.720
<v Speaker 1>It's the code behind some of the most popular software

0:29:21.720 --> 0:29:26.400
<v Speaker 1>packages out there, like m S Office and Firefox Inn.

0:29:26.440 --> 0:29:30.240
<v Speaker 1>We got the Pearl language p e r L. Larry

0:29:30.280 --> 0:29:32.920
<v Speaker 1>Wall created it when he found limitations in the Unix

0:29:33.000 --> 0:29:37.080
<v Speaker 1>operating system. Specifically, he wanted to extract some data from

0:29:37.120 --> 0:29:39.920
<v Speaker 1>a report and discovered that Unix just couldn't really do

0:29:39.960 --> 0:29:43.120
<v Speaker 1>what he needed it to do, so he decided to

0:29:43.120 --> 0:29:45.760
<v Speaker 1>make his own programming language to make sure that sort

0:29:45.800 --> 0:29:48.560
<v Speaker 1>of thing didn't happen, which seems perfectly reasonable to me.

0:29:49.520 --> 0:29:53.000
<v Speaker 1>PEARL stands for Practical Extraction Report Language and is also

0:29:53.080 --> 0:29:57.480
<v Speaker 1>known for being utilitarian and practical. Pearl has evolved over time,

0:29:58.160 --> 0:30:00.600
<v Speaker 1>even branching so that Pearl five and ROLL six are

0:30:00.640 --> 0:30:05.360
<v Speaker 1>effectively two separate developing languages, both of which are evolving

0:30:06.640 --> 0:30:11.040
<v Speaker 1>and both trace their history back. But they're different enough

0:30:11.080 --> 0:30:14.880
<v Speaker 1>to be distinct languages. They're not not not like just

0:30:15.000 --> 0:30:19.840
<v Speaker 1>variations on each other. In n Guido van Rossum created

0:30:19.880 --> 0:30:24.400
<v Speaker 1>the Python language, named after the English comedy troupe known

0:30:24.600 --> 0:30:27.880
<v Speaker 1>as Monty Python. And some of you guys know, I

0:30:27.880 --> 0:30:31.200
<v Speaker 1>did a Monty Python reference a few episodes back, and

0:30:31.240 --> 0:30:34.160
<v Speaker 1>I was amazed at the response of how many people

0:30:34.760 --> 0:30:39.320
<v Speaker 1>immediately recognized the one I was I was making. Well

0:30:39.400 --> 0:30:43.400
<v Speaker 1>on uh, you guys. I am very pleased that you

0:30:43.440 --> 0:30:46.320
<v Speaker 1>all are Python fans, well that all the ones who

0:30:46.360 --> 0:30:49.800
<v Speaker 1>wrote into me are Python fans. And my hat is

0:30:49.840 --> 0:30:52.440
<v Speaker 1>off to you. Literally, as it turns out, I have

0:30:52.640 --> 0:30:57.000
<v Speaker 1>taken off my hat now. Van Rowsom says that Python

0:30:57.200 --> 0:31:00.440
<v Speaker 1>was largely borne out of boredom. According to the story,

0:31:00.600 --> 0:31:02.520
<v Speaker 1>he was looking for ways to fill up the time

0:31:02.600 --> 0:31:04.960
<v Speaker 1>during a Christmas holiday from work, so he sat down

0:31:05.040 --> 0:31:08.440
<v Speaker 1>create a programming language, which seems like overkill to me.

0:31:08.560 --> 0:31:10.440
<v Speaker 1>I think I could probably find other things to do,

0:31:10.920 --> 0:31:13.320
<v Speaker 1>but then again, I'm not an expert in programming by

0:31:13.360 --> 0:31:16.600
<v Speaker 1>any stretch of the imagination. Python is a general purpose

0:31:16.680 --> 0:31:20.560
<v Speaker 1>language that uses indentation to denote code blocks, and this

0:31:20.640 --> 0:31:23.360
<v Speaker 1>was to improve readability so that instead of a mass

0:31:23.400 --> 0:31:27.040
<v Speaker 1>of brackets or parentheses, you could quickly pick out code

0:31:27.040 --> 0:31:29.440
<v Speaker 1>blocks by looking at the white space that was in

0:31:29.520 --> 0:31:32.240
<v Speaker 1>the code itself. You just look for that white space

0:31:32.240 --> 0:31:35.400
<v Speaker 1>that would indicate where the block would begin. It's not

0:31:35.440 --> 0:31:38.640
<v Speaker 1>the only type of programming language that does this, but

0:31:38.880 --> 0:31:41.120
<v Speaker 1>many programmers say that Python is one of the more

0:31:41.160 --> 0:31:44.200
<v Speaker 1>readable programming languages and a good choice for beginners who

0:31:44.200 --> 0:31:47.720
<v Speaker 1>want to get into coding. Another interesting thing about Python

0:31:47.880 --> 0:31:51.480
<v Speaker 1>is that supports multiple programming philosophies, so you can code

0:31:51.560 --> 0:31:55.200
<v Speaker 1>using a procedural approach or functional programming, for example. And

0:31:55.280 --> 0:31:58.320
<v Speaker 1>Python has within it the ability to express concepts in

0:31:58.400 --> 0:32:02.240
<v Speaker 1>fewer lines of code then some other programming languages, which

0:32:02.240 --> 0:32:05.440
<v Speaker 1>makes it a little simpler to use. Well, we've got

0:32:05.520 --> 0:32:08.520
<v Speaker 1>one more block of programming languages that we need to

0:32:08.560 --> 0:32:11.440
<v Speaker 1>talk about before I do that. However, let's take a

0:32:11.520 --> 0:32:21.959
<v Speaker 1>quick break to thank our sponsor. So in you had

0:32:22.000 --> 0:32:26.640
<v Speaker 1>a fellow named Yokihiro Matsumoto who took several programming languages,

0:32:26.680 --> 0:32:30.600
<v Speaker 1>including Lisp, Pearl, small Talk, and more and effectively put

0:32:30.640 --> 0:32:34.360
<v Speaker 1>them all on a blender, hit that that super blend button.

0:32:34.640 --> 0:32:37.440
<v Speaker 1>You know, he's really shaking him up, and created a

0:32:37.520 --> 0:32:42.320
<v Speaker 1>new language he called Ruby. Now. Matsumoto said his guiding

0:32:42.320 --> 0:32:45.320
<v Speaker 1>principle was to create a programming language that made sense

0:32:45.480 --> 0:32:48.120
<v Speaker 1>and was easy for programmers to work in. He wanted

0:32:48.520 --> 0:32:52.520
<v Speaker 1>a true object oriented language and felt that Pearl four

0:32:52.640 --> 0:32:56.320
<v Speaker 1>and Python weren't measuring up in his estimation, and he

0:32:56.400 --> 0:33:00.240
<v Speaker 1>was worried that too many programming languages were being built

0:33:00.480 --> 0:33:03.840
<v Speaker 1>with the machines in mind. He was saying, these programming

0:33:03.880 --> 0:33:06.360
<v Speaker 1>languages are being designed by people who want to take

0:33:06.960 --> 0:33:10.920
<v Speaker 1>the you know, the most advantage of a machine's processing power.

0:33:10.960 --> 0:33:14.200
<v Speaker 1>They want code that's going to be fast to execute

0:33:14.640 --> 0:33:17.720
<v Speaker 1>and efficient. But he said that that kind of code

0:33:17.800 --> 0:33:20.880
<v Speaker 1>is not always the most user friendly or programmer friendly,

0:33:21.400 --> 0:33:24.400
<v Speaker 1>and that could be really difficult to program in. So

0:33:24.640 --> 0:33:27.520
<v Speaker 1>he said, you should put the programmer in mind first,

0:33:28.000 --> 0:33:31.240
<v Speaker 1>not the machine. Worry about how easy it is to

0:33:31.400 --> 0:33:36.400
<v Speaker 1>use before you worry about how quickly a processor is

0:33:36.480 --> 0:33:41.360
<v Speaker 1>going to be able to handle the programming language. Uh.

0:33:41.520 --> 0:33:44.440
<v Speaker 1>He says that otherwise your priorities are all whackadoodle, which

0:33:44.440 --> 0:33:47.920
<v Speaker 1>is me paraphrasing. He didn't actually say whackadoodle as far

0:33:47.920 --> 0:33:53.160
<v Speaker 1>as I know. Within Ruby, there is a framework that's

0:33:53.160 --> 0:33:56.920
<v Speaker 1>been used for building websites, and it is now known

0:33:56.960 --> 0:34:00.160
<v Speaker 1>by its own name. It is Ruby on Rails. This

0:34:00.240 --> 0:34:01.880
<v Speaker 1>is a set of rules meant to allow for the

0:34:01.960 --> 0:34:06.560
<v Speaker 1>quick construction of websites, and it was actually extracted by

0:34:06.800 --> 0:34:10.960
<v Speaker 1>David heine Meyer Hanson in two thousand five from a

0:34:11.000 --> 0:34:13.400
<v Speaker 1>project he had created for his work at a company

0:34:13.440 --> 0:34:17.680
<v Speaker 1>called thirty seven Signals. So there are a lot of

0:34:18.560 --> 0:34:21.200
<v Speaker 1>similarities between Ruby and Ruby on Rails, but Ruby on

0:34:21.320 --> 0:34:27.600
<v Speaker 1>Rails is typically reserved specifically for website implementations. In the

0:34:27.640 --> 0:34:30.719
<v Speaker 1>mid nineties, there was a web developer named Rasmus lard

0:34:30.880 --> 0:34:33.840
<v Speaker 1>Orf who was not happy about the Pearl scripts he

0:34:33.840 --> 0:34:36.680
<v Speaker 1>had to use in order to maintain his personal web page.

0:34:37.200 --> 0:34:39.720
<v Speaker 1>So as the mid nineties, the web was not old

0:34:39.760 --> 0:34:43.160
<v Speaker 1>at this point, and he was thinking that this this

0:34:43.320 --> 0:34:45.200
<v Speaker 1>series of Pearl scripts he had to use in order

0:34:45.239 --> 0:34:49.880
<v Speaker 1>to create the functionality he wanted, it just wasn't working

0:34:50.120 --> 0:34:52.480
<v Speaker 1>the way he wanted to. So he decided he would

0:34:52.600 --> 0:34:56.640
<v Speaker 1>make a replacement for it, and that became the PHP language,

0:34:56.640 --> 0:35:01.000
<v Speaker 1>which stood for Personal Homepage language now need to learn off.

0:35:01.040 --> 0:35:03.200
<v Speaker 1>There was never any intention on his part to make

0:35:03.280 --> 0:35:07.200
<v Speaker 1>PHP and actual programming language. It was meant to run

0:35:07.320 --> 0:35:09.920
<v Speaker 1>scripts to make it easier to maintain a web page

0:35:09.960 --> 0:35:13.840
<v Speaker 1>and that was it. But he kept on adding functionality

0:35:13.920 --> 0:35:16.959
<v Speaker 1>to it. It would get bigger and more robust, over time,

0:35:17.000 --> 0:35:19.320
<v Speaker 1>and eventually it got away from him, and he actually

0:35:19.320 --> 0:35:21.480
<v Speaker 1>once said he didn't know how to stop it from

0:35:21.520 --> 0:35:26.200
<v Speaker 1>evolving into a full programming language. So chances are it's

0:35:26.239 --> 0:35:30.960
<v Speaker 1>sky Net now. Meanwhile, over at Sun Microsystems you had

0:35:31.200 --> 0:35:34.480
<v Speaker 1>James gos Ling leading a team of programmers and developing

0:35:34.480 --> 0:35:38.320
<v Speaker 1>what would become the Java programming language. It was originally

0:35:38.320 --> 0:35:42.240
<v Speaker 1>intended as a programming language for interactive television set top boxes,

0:35:42.320 --> 0:35:46.799
<v Speaker 1>so essentially it was a web TV programming language. Now,

0:35:46.880 --> 0:35:50.560
<v Speaker 1>Java is a right once run Anywhere or war RA

0:35:50.920 --> 0:35:54.600
<v Speaker 1>programming language w o r A. That means you should

0:35:54.680 --> 0:35:57.080
<v Speaker 1>be able to build a program in Java and have

0:35:57.160 --> 0:36:00.279
<v Speaker 1>it run on any Java supported platform with out the

0:36:00.280 --> 0:36:04.279
<v Speaker 1>need to recompile it. One thing I find fascinating is

0:36:04.320 --> 0:36:07.080
<v Speaker 1>that Java is a programming language that does not get

0:36:07.120 --> 0:36:11.839
<v Speaker 1>translated into machine code. Typically that's the way these high

0:36:11.920 --> 0:36:14.279
<v Speaker 1>level languages work. You have to translate it, you have

0:36:14.320 --> 0:36:17.960
<v Speaker 1>to use a compiler translated into what a machine can

0:36:18.000 --> 0:36:21.600
<v Speaker 1>actually understand. But instead Java runs on top of a

0:36:21.719 --> 0:36:25.160
<v Speaker 1>virtual machine. Again, this was something that was first established

0:36:25.160 --> 0:36:29.760
<v Speaker 1>way back with small talk. But a virtual machine is

0:36:29.760 --> 0:36:32.120
<v Speaker 1>is what it sounds like. It's like a simulated computer.

0:36:32.200 --> 0:36:36.080
<v Speaker 1>It It in turn runs on top of actual hardware,

0:36:36.520 --> 0:36:39.839
<v Speaker 1>so Java runs on this virtual platform, not on the

0:36:39.880 --> 0:36:42.840
<v Speaker 1>hardware underneath, and the virtual platform takes care of everything.

0:36:43.440 --> 0:36:45.320
<v Speaker 1>Java tends to be used on the back end of

0:36:45.360 --> 0:36:48.360
<v Speaker 1>the web, and it powers website functionality, so it's on

0:36:48.400 --> 0:36:51.279
<v Speaker 1>the server side of the web world. And it's also

0:36:51.320 --> 0:36:54.799
<v Speaker 1>a popular programming language for Android apps. It was named

0:36:54.840 --> 0:36:58.520
<v Speaker 1>after Coffee, which I approve of. It was also designed

0:36:58.520 --> 0:37:01.239
<v Speaker 1>to make it easier for programmers to spot errors when

0:37:01.239 --> 0:37:03.680
<v Speaker 1>they happen, since mistakes are bound to be made, and

0:37:03.760 --> 0:37:07.200
<v Speaker 1>making it easy to find them speeds up the programming process.

0:37:08.040 --> 0:37:12.040
<v Speaker 1>Java is often compared to see sharp because both languages

0:37:12.200 --> 0:37:15.920
<v Speaker 1>follow a strict set of rules to discourage mistakes, so

0:37:16.800 --> 0:37:19.480
<v Speaker 1>you don't have as much flexibility. The rules are very,

0:37:19.560 --> 0:37:23.160
<v Speaker 1>very strict, but once you learn those rules and you

0:37:23.200 --> 0:37:26.439
<v Speaker 1>follow them, you're less likely to make errors that are

0:37:26.440 --> 0:37:30.960
<v Speaker 1>going to turn your program into a gigantic mess. Uh.

0:37:31.120 --> 0:37:33.319
<v Speaker 1>See Sharp, by the way, as always referred to as

0:37:33.480 --> 0:37:37.200
<v Speaker 1>or sometimes referred to rather as Microsoft's Java. It was

0:37:37.239 --> 0:37:40.400
<v Speaker 1>developed by Microsoft. It's not quite as versatile as Java

0:37:40.480 --> 0:37:42.839
<v Speaker 1>when it comes to the WARA approach. It doesn't run

0:37:42.920 --> 0:37:45.920
<v Speaker 1>on as many different platforms, as Java does. However, it

0:37:45.960 --> 0:37:50.600
<v Speaker 1>does work very well within Microsoft environments. Now, not long

0:37:50.640 --> 0:37:53.719
<v Speaker 1>after Java emerged, the world got a chance to use

0:37:53.840 --> 0:37:56.680
<v Speaker 1>Java script. And the two names make it sound like

0:37:56.800 --> 0:38:00.440
<v Speaker 1>JavaScript maybe came from Java, or that they are closely

0:38:00.520 --> 0:38:03.319
<v Speaker 1>related in some way and maybe they follow the same

0:38:03.440 --> 0:38:07.440
<v Speaker 1>rules or have the same syntax. But that's misleading. JavaScript

0:38:07.480 --> 0:38:12.040
<v Speaker 1>and Java are actually unrelated and have very different semantics.

0:38:13.080 --> 0:38:15.680
<v Speaker 1>It's an enormous headache if you're trying to explain to

0:38:15.800 --> 0:38:19.319
<v Speaker 1>someone who doesn't know anything about programming that these two

0:38:19.360 --> 0:38:22.800
<v Speaker 1>things that are named so similarly have no real connection

0:38:22.880 --> 0:38:27.000
<v Speaker 1>with one another. Now, originally JavaScript was called Mocha. Brendan

0:38:27.080 --> 0:38:31.239
<v Speaker 1>Ikes developed it over at Netscape as a client based language,

0:38:31.680 --> 0:38:34.520
<v Speaker 1>meaning this was a programming language that we run inside

0:38:34.600 --> 0:38:38.960
<v Speaker 1>web browsers rather than on the server side like PHP wood.

0:38:39.719 --> 0:38:43.239
<v Speaker 1>JavaScript was intended to make websites more dynamic and interactive,

0:38:43.560 --> 0:38:47.239
<v Speaker 1>and many web based games are programmed using JavaScript. In fact,

0:38:47.239 --> 0:38:51.279
<v Speaker 1>it's considered a core technology for the web, along with

0:38:51.480 --> 0:38:55.040
<v Speaker 1>HTML and CMS, so much so that all modern web

0:38:55.040 --> 0:38:58.920
<v Speaker 1>browsers support JavaScript without the need for an additional plug in.

0:38:59.320 --> 0:39:01.080
<v Speaker 1>So while you might need a plug in for something

0:39:01.080 --> 0:39:04.759
<v Speaker 1>like Adobe Flash, you typically don't need a plug in

0:39:04.800 --> 0:39:07.719
<v Speaker 1>for JavaScript. It's built into the web browsers themselves. That's

0:39:07.719 --> 0:39:11.200
<v Speaker 1>how important JavaScript is now. This is just a small

0:39:11.200 --> 0:39:14.120
<v Speaker 1>selection of some of the more popular programming languages out there,

0:39:14.160 --> 0:39:17.320
<v Speaker 1>and programmers are creating new ones all the time. For example,

0:39:17.400 --> 0:39:21.160
<v Speaker 1>one young programming language is Swift, which is published in

0:39:21.160 --> 0:39:25.480
<v Speaker 1>two thousand fourteen. That's an Apple based programming language intended

0:39:25.520 --> 0:39:29.440
<v Speaker 1>so that programmers can develop applications for iOS, mac os,

0:39:29.520 --> 0:39:33.200
<v Speaker 1>and other Apple operating systems and products. It's a successor

0:39:33.239 --> 0:39:36.439
<v Speaker 1>to Objective C, which is the programming language Apple had

0:39:36.480 --> 0:39:40.120
<v Speaker 1>been relying upon for its OS ten products. But that's it.

0:39:40.480 --> 0:39:42.400
<v Speaker 1>That's all I've got for today. That's it, as in

0:39:42.480 --> 0:39:44.960
<v Speaker 1>that's all I have not that's it, as in that's

0:39:45.000 --> 0:39:48.759
<v Speaker 1>all the different programming languages. Again, there are lots of

0:39:48.840 --> 0:39:51.399
<v Speaker 1>other programming languages. I touched on some of the most

0:39:51.400 --> 0:39:54.760
<v Speaker 1>popular ones, like Java and Python, but there are tons

0:39:54.920 --> 0:39:57.600
<v Speaker 1>of other ones out there. And while they can seem

0:39:57.640 --> 0:40:00.480
<v Speaker 1>intimidating to a newcomer, if you're just staring ing at

0:40:00.480 --> 0:40:03.520
<v Speaker 1>a sheet of code and you have no grounding in

0:40:03.560 --> 0:40:07.000
<v Speaker 1>it whatsoever, it's gonna look incomprehensible to you. It might

0:40:07.040 --> 0:40:09.360
<v Speaker 1>seem like, how how could this be any easier to

0:40:09.480 --> 0:40:13.720
<v Speaker 1>understand than machine code is? But honestly, all it takes

0:40:13.920 --> 0:40:16.840
<v Speaker 1>is some effort to learn the various rules and the

0:40:16.880 --> 0:40:20.560
<v Speaker 1>semantics and the syntax of these languages, and pretty soon

0:40:20.600 --> 0:40:23.560
<v Speaker 1>you're gonna be able to make your own code if

0:40:23.600 --> 0:40:26.560
<v Speaker 1>you're so inclined. So if you're interested in programming, you

0:40:26.640 --> 0:40:28.960
<v Speaker 1>really should pick up a book or two, especially on

0:40:29.200 --> 0:40:32.480
<v Speaker 1>languages that sound interesting to you, and just dive into it.

0:40:32.719 --> 0:40:34.960
<v Speaker 1>You'll learn a lot more about the various approaches to

0:40:35.040 --> 0:40:39.440
<v Speaker 1>programming and the strengths and disadvantages of each one. And

0:40:39.560 --> 0:40:42.520
<v Speaker 1>most programmers they tend to specialize in maybe one or

0:40:42.560 --> 0:40:46.520
<v Speaker 1>two or maybe maybe three languages, and beyond that they

0:40:46.560 --> 0:40:48.840
<v Speaker 1>typically have heard of and maybe worked with a couple,

0:40:48.880 --> 0:40:51.520
<v Speaker 1>but they don't have a real grounding in them. So

0:40:51.640 --> 0:40:55.200
<v Speaker 1>that's perfectly fine. It happens you you find what works

0:40:55.239 --> 0:40:59.480
<v Speaker 1>for you, what speaks to you, and go and explore it.

0:40:59.480 --> 0:41:02.520
<v Speaker 1>It's a good way to learn more about the ways

0:41:02.600 --> 0:41:05.880
<v Speaker 1>that we interact with our machines. You'll find out what

0:41:05.960 --> 0:41:08.960
<v Speaker 1>fits your style, and you'll understand all those awesome programmer

0:41:09.040 --> 0:41:11.799
<v Speaker 1>jokes that I still have to have people explain to

0:41:11.840 --> 0:41:15.320
<v Speaker 1>me now. Guys, even though that wraps up this episode,

0:41:15.320 --> 0:41:17.719
<v Speaker 1>it's not not time for me to say goodbye yet

0:41:18.000 --> 0:41:20.840
<v Speaker 1>because I have a question for you. Do you have

0:41:20.840 --> 0:41:22.600
<v Speaker 1>anything you want me to talk about, because if you do,

0:41:22.680 --> 0:41:25.200
<v Speaker 1>you need to let me know. Send me an email.

0:41:25.440 --> 0:41:28.799
<v Speaker 1>The address is tech stuff at how stuff works dot com,

0:41:28.960 --> 0:41:31.440
<v Speaker 1>or drop me a line on the Facebook's or the

0:41:31.440 --> 0:41:34.560
<v Speaker 1>twitters tex stuff hs W as the handle I use

0:41:34.600 --> 0:41:37.160
<v Speaker 1>it both of those for this show. You can watch

0:41:37.239 --> 0:41:40.040
<v Speaker 1>me live on twitch dot tv slash tech Stuff. I

0:41:40.080 --> 0:41:43.520
<v Speaker 1>record on Wednesdays and Friday's. Just go to twitch dot

0:41:43.560 --> 0:41:45.319
<v Speaker 1>tv slash tech Stuff. You'll be able to find the

0:41:45.320 --> 0:41:47.879
<v Speaker 1>schedule right there and see when you can tune in

0:41:47.920 --> 0:41:50.640
<v Speaker 1>to watch. You join the chat room. I like to

0:41:50.719 --> 0:41:53.560
<v Speaker 1>chat with my viewers and find out what's going on

0:41:53.640 --> 0:41:56.080
<v Speaker 1>in their lives, so be part of the conversation. I

0:41:56.160 --> 0:41:57.840
<v Speaker 1>look forward to seeing you and I'll talk to you

0:41:57.880 --> 0:42:07.120
<v Speaker 1>again really soon for more on this and thousands of

0:42:07.160 --> 0:42:19.080
<v Speaker 1>other topics. Because it how stuff works dot com.