WEBVTT

00:00:00.000 --> 00:00:01.980
Welcome to the Deep Dive, where we unpack your

00:00:01.980 --> 00:00:04.480
source material and find the insights that matter

00:00:04.480 --> 00:00:07.459
most. Today we're diving deep into the life and

00:00:07.459 --> 00:00:11.400
the monumental legacy of a figure who not only

00:00:11.400 --> 00:00:15.240
defined modern computing, but then in this amazing

00:00:15.240 --> 00:00:18.140
twist of intellectual honesty, spent his later

00:00:18.140 --> 00:00:21.260
years trying to undo the very constraints he

00:00:21.260 --> 00:00:23.960
himself helped create. We're talking about John

00:00:23.960 --> 00:00:26.480
Bacchus. That's exactly right. Our sources paint

00:00:26.480 --> 00:00:28.300
this really compelling picture of a man whose

00:00:28.300 --> 00:00:30.719
career had, you know, three profound and very

00:00:30.719 --> 00:00:34.719
distinct acts. Act one, inventing the first widely

00:00:34.719 --> 00:00:37.700
used high -level language, Fortran. And this

00:00:37.700 --> 00:00:39.640
just instantly brought computing out of these,

00:00:39.659 --> 00:00:41.880
like, specialized labs and into the hands of

00:00:41.880 --> 00:00:43.880
scientists and engineers. Right, for the masses.

00:00:44.020 --> 00:00:46.479
So the scientific masses, yeah. Then act two,

00:00:46.659 --> 00:00:48.979
formalizing how we even describe a language's

00:00:48.979 --> 00:00:50.939
structure through the notation we now know as

00:00:50.939 --> 00:00:53.780
Bacchus -Nor form or BS. that really cemented

00:00:53.780 --> 00:00:55.859
the intellectual foundations of the field. And

00:00:55.859 --> 00:00:59.100
then act three, delivering this fundamental philosophical

00:00:59.100 --> 00:01:02.140
critique of the entire programming paradigm he

00:01:02.140 --> 00:01:04.299
helped establish, that sequential procedural

00:01:04.299 --> 00:01:07.390
von Neumann style. So our mission today is to

00:01:07.390 --> 00:01:09.989
understand not just these three influential contributions,

00:01:10.230 --> 00:01:13.790
but how they all connect. I mean, how the necessities

00:01:13.790 --> 00:01:16.709
of the 1950s led to a revolution. Which then

00:01:16.709 --> 00:01:18.969
demanded a formal structure. And then that structure,

00:01:19.049 --> 00:01:21.109
I guess, revealed its own limitations, which

00:01:21.109 --> 00:01:24.909
led to a philosophical overhaul. Exactly. And

00:01:24.909 --> 00:01:27.209
Bacchus wasn't just foundational. He was heavily

00:01:27.209 --> 00:01:29.920
decorated. We're talking about a recipient of

00:01:29.920 --> 00:01:32.799
the National Medal of Science in 1975 and the

00:01:32.799 --> 00:01:36.040
ultimate prize in computing, the ACM Turing Award

00:01:36.040 --> 00:01:39.799
in 1977. And that Turing Award specifically recognized

00:01:39.799 --> 00:01:42.700
his, quote, profound and lasting contributions

00:01:42.700 --> 00:01:45.579
to the design of practical high level programming

00:01:45.579 --> 00:01:48.400
systems, which is Fortran. Right. And then for

00:01:48.400 --> 00:01:50.920
the formal procedures he created for specifying

00:01:50.920 --> 00:01:53.260
programming languages. That's the BNF part. It's

00:01:53.260 --> 00:01:55.840
this extraordinary recognition of both a practical

00:01:55.840 --> 00:01:58.969
system builder and, you know, a deep. theoretical

00:01:58.969 --> 00:02:01.810
formalist. A builder and a thinker. Yes. But

00:02:01.810 --> 00:02:03.969
what's truly fascinating and what our sources

00:02:03.969 --> 00:02:06.409
really highlight is that before all the accolades,

00:02:06.450 --> 00:02:08.669
before the global scientific impact, his path

00:02:08.669 --> 00:02:11.449
was, well, it was anything but straight. Yeah,

00:02:11.490 --> 00:02:14.030
this isn't the story of some childhood prodigy.

00:02:14.050 --> 00:02:16.150
Not at all. It's the story of delayed genius,

00:02:16.310 --> 00:02:18.870
if anything. Okay, let's unpack this and start

00:02:18.870 --> 00:02:22.330
right at the beginning. The surprisingly circuitous

00:02:22.330 --> 00:02:25.789
route John Bacchus took to even find his way

00:02:25.789 --> 00:02:28.139
into computer science. If you track his early

00:02:28.139 --> 00:02:30.319
academic record, it's honestly just striking

00:02:30.319 --> 00:02:33.080
how much he struggled to find any kind of focus.

00:02:33.560 --> 00:02:37.000
He was born in 1924, grew up in Wilmington, Delaware,

00:02:37.199 --> 00:02:39.199
and he started at the Hill School in Pennsylvania

00:02:39.199 --> 00:02:42.319
where he did not exactly thrive. Right. He later

00:02:42.319 --> 00:02:44.180
said he was just terrible at keeping track of

00:02:44.180 --> 00:02:46.240
things. Which is pretty ironic for the guy who

00:02:46.240 --> 00:02:48.460
would later invent the formal notation for language

00:02:48.460 --> 00:02:50.680
grammar, right? Struggled is definitely putting

00:02:50.680 --> 00:02:53.620
it politely. I mean, the sequence of events right

00:02:53.620 --> 00:02:57.129
after high school, it looks... Less like a path

00:02:57.129 --> 00:02:59.830
to greatness and more like a young man just running

00:02:59.830 --> 00:03:01.689
away from any kind of structure. Oh, completely.

00:03:01.930 --> 00:03:04.169
He enters the University of Virginia to study

00:03:04.169 --> 00:03:07.090
chemistry, and that lasts less than a year. Why?

00:03:07.719 --> 00:03:09.979
What happened? The records show he was expelled

00:03:09.979 --> 00:03:12.379
for poor attendance. So we're talking about a

00:03:12.379 --> 00:03:14.199
mind that would later design these systems for

00:03:14.199 --> 00:03:16.699
ultimate efficiency. And at first, he couldn't

00:03:16.699 --> 00:03:19.599
grasp the simple efficiency of, you know, showing

00:03:19.599 --> 00:03:22.759
up to class. And this was the mid -1940s, so

00:03:22.759 --> 00:03:25.560
World War II is in full swing. That expulsion

00:03:25.560 --> 00:03:28.800
leads directly to conscription. It does. And

00:03:28.800 --> 00:03:30.960
for a lot of intellectually restless young men

00:03:30.960 --> 00:03:33.960
at the time, that proved to be a surprising and

00:03:33.960 --> 00:03:36.860
I think necessary reset button. But it wasn't

00:03:36.860 --> 00:03:39.500
an immediate jump into high tech. No. He starts

00:03:39.500 --> 00:03:41.860
as a corporal in the U .S. Army, commanding an

00:03:41.860 --> 00:03:44.419
anti -aircraft battery down at Fort Stewart,

00:03:44.560 --> 00:03:47.979
Georgia. It's a very gritty, mechanical, command

00:03:47.979 --> 00:03:50.500
and control kind of role. But it's during his

00:03:50.500 --> 00:03:52.460
time in the service that his actual aptitude

00:03:52.460 --> 00:03:54.860
starts to surface, right? Absolutely. He scores

00:03:54.860 --> 00:03:57.219
remarkably high on one of those military aptitudes.

00:03:57.229 --> 00:03:59.389
tests, you know, the ones designed to sort personnel.

00:03:59.669 --> 00:04:02.469
And that score convinces the army to completely

00:04:02.469 --> 00:04:04.870
shift his path. They saw this raw, high -level

00:04:04.870 --> 00:04:07.710
processing capability and sent him to study engineering

00:04:07.710 --> 00:04:10.169
at the University of Pittsburgh. So the military

00:04:10.169 --> 00:04:13.189
basically recognized this latent talent and gave

00:04:13.189 --> 00:04:15.030
him the structure he couldn't impose on himself.

00:04:15.310 --> 00:04:17.949
But even after that, he's still not in computer

00:04:17.949 --> 00:04:20.779
science. The search continues. It does. From

00:04:20.779 --> 00:04:23.680
Pittsburgh, he moves again. He transfers into

00:04:23.680 --> 00:04:25.800
a pre -medical program at Haverford College.

00:04:26.199 --> 00:04:28.399
He's still searching for that field that would

00:04:28.399 --> 00:04:31.800
engage his unique blend of practical problem

00:04:31.800 --> 00:04:34.779
-solving and abstract thought. And this is where

00:04:34.779 --> 00:04:37.139
his biography takes a really unusual turn. The

00:04:37.139 --> 00:04:39.459
health crisis. A major personal health crisis.

00:04:39.720 --> 00:04:41.220
And the way he responded to it, I mean, it's

00:04:41.220 --> 00:04:43.660
such a strong indicator of the engineer he was

00:04:43.660 --> 00:04:46.399
about to become. It really is. During a hospital

00:04:46.399 --> 00:04:48.720
internship, he's diagnosed with a cranial bone

00:04:48.720 --> 00:04:52.079
tumor. It was serious, life -threatening, but

00:04:52.079 --> 00:04:54.360
it was successfully removed, and the procedure

00:04:54.360 --> 00:04:56.720
resulted in a metal plate being installed in

00:04:56.720 --> 00:04:59.459
his head. After recovering, he tries medical

00:04:59.459 --> 00:05:01.819
school at Flower and Fifth Avenue Medical School,

00:05:01.899 --> 00:05:04.839
but, you know, much like his attempt at chemistry,

00:05:05.100 --> 00:05:07.060
he just found it uninteresting. He dropped out

00:05:07.060 --> 00:05:09.779
after only nine months. So his mind just couldn't

00:05:09.779 --> 00:05:11.879
tolerate the rote memorization, it sounds like.

00:05:12.000 --> 00:05:14.279
I think so. especially after the intellectual

00:05:14.279 --> 00:05:17.180
challenges of war and recovery. So, yeah, he's

00:05:17.180 --> 00:05:19.220
failed out of one college, dropped out of two

00:05:19.220 --> 00:05:21.879
subsequent programs, and he's had major brain

00:05:21.879 --> 00:05:25.000
surgery. That's a really disruptive period. And

00:05:25.000 --> 00:05:27.199
then comes the second operation. This is the

00:05:27.199 --> 00:05:29.459
anecdote that I think just perfectly demonstrates

00:05:29.459 --> 00:05:32.420
his mindset. It is perfect. He needed the original

00:05:32.420 --> 00:05:34.899
plate replaced. But instead of just accepting

00:05:34.899 --> 00:05:38.189
the standard surgical solution, What does he

00:05:38.189 --> 00:05:40.490
do? He designs the replacement himself. He designed

00:05:40.490 --> 00:05:42.730
it himself. He ultimately had a metal plate of

00:05:42.730 --> 00:05:45.290
his own design installed in his head. It's the

00:05:45.290 --> 00:05:48.629
perfect metaphor. He was innately a system designer,

00:05:48.829 --> 00:05:51.470
solving a problem of necessity with custom engineering,

00:05:51.689 --> 00:05:54.110
even when the system was his own body. Exactly.

00:05:54.310 --> 00:05:56.810
He received an honorable medical discharge from

00:05:56.810 --> 00:05:59.990
the Army in 1946. And after that, he moves to

00:05:59.990 --> 00:06:02.069
New York City and initially trains as a radio

00:06:02.069 --> 00:06:04.889
technician. And that's the spark, that hands

00:06:04.889 --> 00:06:08.259
-on technical work. That seems to be it. It illuminated

00:06:08.259 --> 00:06:10.579
the underlying principles, the mathematics of

00:06:10.579 --> 00:06:13.100
systems. And that's what finally captivated him.

00:06:13.220 --> 00:06:15.920
He fell in love with pure math. And through that,

00:06:16.000 --> 00:06:18.339
he found his field. So he enrolls at Columbia.

00:06:18.480 --> 00:06:20.620
He enrolls at Columbia University, earns his

00:06:20.620 --> 00:06:23.699
bachelor's in 49 and his master's in 1950, both

00:06:23.699 --> 00:06:26.600
in mathematics. He joined IBM that same year,

00:06:26.720 --> 00:06:29.720
1950. And that's when his life as a revolutionary

00:06:29.720 --> 00:06:32.819
truly begins. And once he was at IBM, the...

00:06:33.800 --> 00:06:36.519
The raw, demanding nature of early computing

00:06:36.519 --> 00:06:39.519
just forced him to address the biggest practical

00:06:39.519 --> 00:06:42.620
problem facing the entire industry, usability.

00:06:42.800 --> 00:06:46.019
It did. And that brings us to Section 2, all

00:06:46.019 --> 00:06:48.779
about Fortran. And to really appreciate its impact,

00:06:48.899 --> 00:06:51.319
you have to ask, what was programming even like

00:06:51.319 --> 00:06:54.600
when Backus joined IBM in 1950? I think we, you

00:06:54.600 --> 00:06:56.699
know, in the modern age, we just take compilers

00:06:56.699 --> 00:06:58.759
and high -level languages for granted. But the

00:06:58.759 --> 00:07:00.699
difference between what we do and what Backus

00:07:00.699 --> 00:07:03.290
was doing. It's almost impossible to really grasp.

00:07:03.470 --> 00:07:06.029
It was unbelievably difficult. His early work

00:07:06.029 --> 00:07:08.589
involved the Selective Sequence Electronic Calculator,

00:07:08.610 --> 00:07:11.149
the SSCC. It was a marvel of electromechanical

00:07:11.149 --> 00:07:13.970
computing. And his first major project was this

00:07:13.970 --> 00:07:16.829
practical, high -stakes, but just painstakingly

00:07:16.829 --> 00:07:18.910
difficult task. Calculating the moon's position.

00:07:19.209 --> 00:07:21.029
Calculating the positions of the moon, which,

00:07:21.050 --> 00:07:23.389
you know, required continuous, accurate data.

00:07:23.610 --> 00:07:25.810
So the reality of doing that was just manual,

00:07:25.949 --> 00:07:28.800
tedious labor. You were writing code directly

00:07:28.800 --> 00:07:31.180
in machine language or, you know, assembly at

00:07:31.180 --> 00:07:34.259
best. You aren't writing A, F, E, plus C. No,

00:07:34.300 --> 00:07:36.379
not at all. You were writing instructions for

00:07:36.379 --> 00:07:39.079
register management, for memory fetches, for

00:07:39.079 --> 00:07:42.819
carry operations. You had to have this intimate,

00:07:42.860 --> 00:07:45.079
deep knowledge of the hardware architecture.

00:07:45.459 --> 00:07:47.720
Down to the specific memory cell. Right. Down

00:07:47.720 --> 00:07:51.100
to which memory cell held which variable and

00:07:51.100 --> 00:07:54.459
how to sequence every single tiny operation through

00:07:54.459 --> 00:07:57.379
the accumulator. The programmer's job was fundamentally

00:07:57.379 --> 00:07:59.939
mechanical. It was just translating mathematical

00:07:59.939 --> 00:08:03.360
logic into this excruciating sequence of hardware

00:08:03.360 --> 00:08:06.410
specific instruction. It was slow. error -prone

00:08:06.410 --> 00:08:09.129
incredibly error -prone and it required immense

00:08:09.129 --> 00:08:11.350
amounts of time just to translate the math into

00:08:11.350 --> 00:08:13.910
something the machine could understand the computer's

00:08:13.910 --> 00:08:16.290
efficiency was completely bottlenecked by the

00:08:16.290 --> 00:08:18.430
programmer's ability to communicate with it manually

00:08:18.430 --> 00:08:20.829
so the computer could calculate in microseconds

00:08:20.829 --> 00:08:23.089
but it would take a programmer weeks to just

00:08:23.089 --> 00:08:25.209
manually lay out the instructions for a single

00:08:25.209 --> 00:08:28.129
complex problem that's it exactly the translation

00:08:28.129 --> 00:08:31.389
time just defeated the speed of the machine and

00:08:31.389 --> 00:08:34.049
this inherent difficulty was the bottleneck it

00:08:34.049 --> 00:08:36.620
was preventing computer from becoming truly useful

00:08:36.620 --> 00:08:40.019
scientific tools. And Backus saw this. He saw

00:08:40.019 --> 00:08:42.899
it clearly. And his first step towards solving

00:08:42.899 --> 00:08:45.580
it was a language called speed coding. The stepping

00:08:45.580 --> 00:08:49.500
stone to Fortran. In 1953, yeah, he developed

00:08:49.500 --> 00:08:53.169
speed coding for the IBM 701 computer. Our sources

00:08:53.169 --> 00:08:55.309
note this was the first high -level language

00:08:55.309 --> 00:08:58.269
created for an IBM machine. It wasn't FORTRAN

00:08:58.269 --> 00:09:00.610
yet, but it was this critical proof of concept.

00:09:00.870 --> 00:09:03.169
What did it do? It introduced basic forms of

00:09:03.169 --> 00:09:05.730
abstraction. It essentially let programmers write

00:09:05.730 --> 00:09:08.029
code that was interpreted by a layer of software

00:09:08.029 --> 00:09:10.809
into the necessary machine instructions. It just

00:09:10.809 --> 00:09:12.649
immediately showed there was a huge need for

00:09:12.649 --> 00:09:15.009
this. It proved abstraction was possible. And

00:09:15.009 --> 00:09:17.970
by 1954, the difficulty of low -level programming

00:09:17.970 --> 00:09:21.389
was becoming a real crisis for IBM, commercially

00:09:21.389 --> 00:09:23.860
and intellectually. This is the inflection point.

00:09:23.940 --> 00:09:26.080
This is it. This is where Backus assembles the

00:09:26.080 --> 00:09:28.779
team to define and develop FORTRAN. Formula translation.

00:09:29.120 --> 00:09:31.460
Formula translation designed specifically for

00:09:31.460 --> 00:09:35.120
the new IBM 704 computer, which was significantly

00:09:35.120 --> 00:09:38.679
more powerful than the 701. And Backus's mandate

00:09:38.679 --> 00:09:41.059
was revolutionary. He had to create a language

00:09:41.059 --> 00:09:44.059
that was easy to write, that looked like algebraic

00:09:44.059 --> 00:09:46.980
notation. And this is the key part. That could

00:09:46.980 --> 00:09:49.840
produce code nearly as efficient as handwritten

00:09:49.840 --> 00:09:51.899
assembly. That was the fundamental challenge.

00:09:51.919 --> 00:09:54.440
If the compiled code was too slow, scientists

00:09:54.440 --> 00:09:56.539
would just ignore it and go back to the old hard

00:09:56.539 --> 00:09:59.279
way. So Fortran wasn't just about making programming

00:09:59.279 --> 00:10:02.480
easier. It was about creating an efficient compiler

00:10:02.480 --> 00:10:04.879
that could manage all the hardware logistics

00:10:04.879 --> 00:10:07.940
better than a human could do it manually. That

00:10:07.940 --> 00:10:10.220
is the structural significance. Fortran became

00:10:10.220 --> 00:10:12.720
the first widely used high -level programming

00:10:12.720 --> 00:10:14.940
language because it solved that efficiency problem.

00:10:15.279 --> 00:10:18.000
Think about something like array indexing. In

00:10:18.000 --> 00:10:21.179
assembly, if you wanted to access AIJ, you had

00:10:21.179 --> 00:10:23.899
to manually calculate the memory offset based

00:10:23.899 --> 00:10:26.639
on the array's starting address, the column size,

00:10:26.960 --> 00:10:30.500
and the indices, I and J. It was tedious. And

00:10:30.500 --> 00:10:32.539
Fortran handled all that for you? All of it,

00:10:32.559 --> 00:10:34.779
automatically. And the compiler did it optimally.

00:10:34.860 --> 00:10:38.450
That's the real revolution. computer accessibility

00:10:38.450 --> 00:10:41.669
by abstracting the machinery away. Programmers

00:10:41.669 --> 00:10:44.149
could write formulas that looked like x, y, plus

00:10:44.149 --> 00:10:47.590
z, i, plus 2 .0, and let the compiler worry about

00:10:47.590 --> 00:10:50.669
the registers, the memory allocation, all of

00:10:50.669 --> 00:10:52.970
it. So suddenly computers were practical for

00:10:52.970 --> 00:10:54.789
the people who actually had the problems to solve.

00:10:55.120 --> 00:10:58.539
physicists, chemists, structural engineers. This

00:10:58.539 --> 00:11:01.679
single innovation unlocked computing for scientific

00:11:01.679 --> 00:11:04.379
and engineering research globally. It shifted

00:11:04.379 --> 00:11:07.179
the entire bottleneck from how do I talk to the

00:11:07.179 --> 00:11:10.559
hardware to what mathematical process do I need

00:11:10.559 --> 00:11:12.720
to automate? And that paradigm shift was recognized

00:11:12.720 --> 00:11:15.379
pretty quickly. The success of Fortran led to

00:11:15.379 --> 00:11:18.340
Bacchus getting the W .W. McDowell Award in 1967.

00:11:18.759 --> 00:11:21.480
Yes, it did. But as soon as high level languages

00:11:21.480 --> 00:11:24.019
were successful, they created a new, deeper,

00:11:24.200 --> 00:11:27.039
more philosophical problem. Definition. Definition.

00:11:27.039 --> 00:11:29.559
Exactly. Once you have a powerful tool like Fortran

00:11:29.559 --> 00:11:31.840
and then dozens of other languages following

00:11:31.840 --> 00:11:33.460
its lead, you need a way to make sure everyone

00:11:33.460 --> 00:11:35.360
agrees on what the rules of that language actually

00:11:35.360 --> 00:11:37.500
are. Which leads us directly into act two of

00:11:37.500 --> 00:11:40.460
his career. This is section three, defining the

00:11:40.460 --> 00:11:42.799
language of languages. the Bacchus Narriform,

00:11:43.100 --> 00:11:46.659
or BNF. So once these languages emerged, the

00:11:46.659 --> 00:11:49.139
technical community needed a precise, universal

00:11:49.139 --> 00:11:52.639
dictionary for the grammar. Before this, descriptions

00:11:52.639 --> 00:11:54.539
were just written in English, which is... you

00:11:54.539 --> 00:11:56.860
know, inherently ambiguous. Disastrously ambiguous.

00:11:57.019 --> 00:11:59.360
And the catalyst for standardization came from

00:11:59.360 --> 00:12:01.759
an international context, mostly around the development

00:12:01.759 --> 00:12:04.279
of the Algeol family of languages. And Backus

00:12:04.279 --> 00:12:06.259
was a central figure in that. A central figure.

00:12:06.399 --> 00:12:08.620
He served on the international committees that

00:12:08.620 --> 00:12:11.700
developed both Algeol 58 and then the highly

00:12:11.700 --> 00:12:14.500
influential Algeol 60. And it's important to

00:12:14.500 --> 00:12:17.269
stress Algeol 60. didn't achieve the commercial

00:12:17.269 --> 00:12:19.830
dominance of Fortran. Not even close. But it

00:12:19.830 --> 00:12:22.250
became the de facto standard for publishing algorithms

00:12:22.250 --> 00:12:24.429
just because of its clean, structured design.

00:12:24.690 --> 00:12:26.950
And that design elegance was a direct result

00:12:26.950 --> 00:12:29.710
of the clarity of its formal definition, which

00:12:29.710 --> 00:12:32.649
was entirely due to Backus's invention. In the

00:12:32.649 --> 00:12:35.929
context of the UNESCO report on Algeol 58, Backus

00:12:35.929 --> 00:12:38.909
invented the notation we now know as BNF. So

00:12:38.909 --> 00:12:41.700
what exactly is BNF? For someone who hasn't done

00:12:41.700 --> 00:12:45.120
a deep dive into compiler theory, it sounds esoteric,

00:12:45.120 --> 00:12:47.860
but it's foundational. It is. BNF is a formal

00:12:47.860 --> 00:12:50.019
notation that can describe the syntax of pretty

00:12:50.019 --> 00:12:52.399
much any context -free programming language.

00:12:52.679 --> 00:12:55.620
To understand how revolutionary it was, think

00:12:55.620 --> 00:12:58.139
about what came before. If I used English to

00:12:58.139 --> 00:13:00.600
define a loop, I might write, a loop starts with

00:13:00.600 --> 00:13:03.759
DO, then a variable, an equal sign, an initial

00:13:03.759 --> 00:13:06.899
value, the word TO, a final value, and so on.

00:13:06.980 --> 00:13:09.399
Right, which sounds... Clear enough. But then

00:13:09.399 --> 00:13:11.220
you get into all the edge cases. What if the

00:13:11.220 --> 00:13:13.539
variable has to be an integer? What if the initial

00:13:13.539 --> 00:13:16.500
value can be a complex expression? Angular just

00:13:16.500 --> 00:13:18.940
gets messy with footnotes and exceptions. It

00:13:18.940 --> 00:13:21.799
gets messy immediately. BNF provides a set of

00:13:21.799 --> 00:13:23.840
concise production rules that just eliminate

00:13:23.840 --> 00:13:27.059
all ambiguity. For instance, a simplified BNF

00:13:27.059 --> 00:13:30.610
rule might look like this. Expression. Term expression

00:13:30.610 --> 00:13:32.909
plus term. Okay, break that down. It's defining

00:13:32.909 --> 00:13:35.090
an expression recursively. It says an expression

00:13:35.090 --> 00:13:37.830
is either a single term or it's another valid

00:13:37.830 --> 00:13:40.029
expression followed by a plus sign and another

00:13:40.029 --> 00:13:42.490
term. It's a mathematical definition of grammar.

00:13:43.049 --> 00:13:45.289
So it takes all the ambiguity of natural language

00:13:45.289 --> 00:13:47.409
and just replaces it with mathematical certainty.

00:13:47.610 --> 00:13:50.129
And that precision is why BNF matters so much

00:13:50.129 --> 00:13:52.950
for compiler development. The ability to formally

00:13:52.950 --> 00:13:55.490
specify the language allowed for the eventual

00:13:55.490 --> 00:13:58.190
automation of building the compiler itself. The

00:13:58.190 --> 00:14:01.389
translator. Yes. And that's why BNF was explicitly

00:14:01.389 --> 00:14:04.649
cited in his Turing Award. It established the

00:14:04.649 --> 00:14:07.340
theoretical bedrock for the field. Instead of

00:14:07.340 --> 00:14:10.000
a compiler writer having to interpret some ambiguous

00:14:10.000 --> 00:14:12.519
English manual, they could just read the mathematical

00:14:12.519 --> 00:14:15.440
grammar in BNF and program their compiler to

00:14:15.440 --> 00:14:17.740
recognize tokens according to those exact rules.

00:14:17.980 --> 00:14:21.649
It was transformative. It introduced rigor. Now,

00:14:21.669 --> 00:14:23.230
there were some other approaches. You know, our

00:14:23.230 --> 00:14:25.049
sources mentioned Lisp and APL had their own

00:14:25.049 --> 00:14:27.990
notations. But by the 1970s, the Bacchus -Narr

00:14:27.990 --> 00:14:30.629
context -free specification had become the industry

00:14:30.629 --> 00:14:33.149
standard. And that standardization was critical

00:14:33.149 --> 00:14:36.269
because it enabled automated tools. Things like

00:14:36.269 --> 00:14:40.129
YAC, yet another compiler. Tools like YAC let

00:14:40.129 --> 00:14:42.789
developers feed a BNF description of a language

00:14:42.789 --> 00:14:45.509
to a program, and that program would automatically

00:14:45.509 --> 00:14:48.470
generate a huge chunk of the necessary parsing

00:14:48.470 --> 00:14:52.360
code for a compiler. This just massively accelerated

00:14:52.360 --> 00:14:54.840
the creation of new languages. So this lets us

00:14:54.840 --> 00:14:57.279
connect the dots perfectly. Fortran solved the

00:14:57.279 --> 00:14:59.779
problem of writing programs efficiently. Making

00:14:59.779 --> 00:15:02.340
computing practical. Right. And then BNF solved

00:15:02.340 --> 00:15:04.340
the problem of defining programs rigorously,

00:15:04.480 --> 00:15:07.600
which made language design systematic. It really

00:15:07.600 --> 00:15:09.720
formalized computer science as a discipline.

00:15:09.980 --> 00:15:12.320
He had basically given the world its first great

00:15:12.320 --> 00:15:15.460
high -level language and then the mechanism to

00:15:15.460 --> 00:15:17.360
define every language that would come after it.

00:15:17.440 --> 00:15:20.159
And if he had retired right then... In 1970,

00:15:20.440 --> 00:15:22.539
he'd be remembered as one of the greats. One

00:15:22.539 --> 00:15:24.620
of the all -time greats. But he wasn't finished.

00:15:25.200 --> 00:15:28.779
In the late 1970s, he enters Act III, a phase

00:15:28.779 --> 00:15:31.000
that involves a deep, self -imposed critique

00:15:31.000 --> 00:15:33.419
of everything he had helped build. And this is

00:15:33.419 --> 00:15:36.259
where his career becomes truly fascinating. In

00:15:36.259 --> 00:15:38.259
the late 70s, after achieving all this fame for

00:15:38.259 --> 00:15:40.779
creating the dominant programming paradigm, this

00:15:40.779 --> 00:15:44.200
sequential procedural style, he pivots to critique

00:15:44.200 --> 00:15:46.980
it fundamentally. It shows a mind that just wasn't

00:15:46.980 --> 00:15:49.940
interested in resting on past achievements. He

00:15:49.940 --> 00:15:52.539
was constantly striving for a more elegant, more

00:15:52.539 --> 00:15:55.419
expressive form of computation. And the public

00:15:55.419 --> 00:15:59.000
declaration of this pivot was his 1977 Turing

00:15:59.000 --> 00:16:01.580
Award lecture. The lecture that shook the industry.

00:16:01.940 --> 00:16:04.879
Can programming be liberated from the von Neumann

00:16:04.879 --> 00:16:08.100
style? That title is the whole thesis. He was

00:16:08.100 --> 00:16:10.360
railing not against Fortran specifically, but

00:16:10.360 --> 00:16:12.679
against the foundational hardware architecture

00:16:12.679 --> 00:16:16.190
that Fortran was forced to obey. The von Neumann

00:16:16.190 --> 00:16:18.470
architecture. Okay, we need to define the von

00:16:18.470 --> 00:16:21.370
Neumann style clearly because it basically defines

00:16:21.370 --> 00:16:23.710
almost every computing device we use today. It

00:16:23.710 --> 00:16:26.210
does. The von Neumann architecture dictates that

00:16:26.210 --> 00:16:28.009
the computer operates through a single channel

00:16:28.009 --> 00:16:30.230
connecting the CPU where the processing happens

00:16:30.230 --> 00:16:33.210
and memory where data and instructions are stored.

00:16:33.370 --> 00:16:35.450
And the CPU just executes instructions one after

00:16:35.450 --> 00:16:37.690
another, sequentially. Sequentially. Constantly

00:16:37.690 --> 00:16:40.409
fetching data from memory, processing it, storing

00:16:40.409 --> 00:16:43.509
the results back, one word at a time. Backus

00:16:43.509 --> 00:16:46.710
called this the von Neumann. Because the CPU

00:16:46.710 --> 00:16:49.950
spends most of its time just waiting for data

00:16:49.950 --> 00:16:52.309
to be shuffled back and forth across this narrow

00:16:52.309 --> 00:16:55.659
channel. Yes. And Backus argued that our programming

00:16:55.659 --> 00:16:58.220
languages evolved to just mirror this mechanical

00:16:58.220 --> 00:17:01.519
process. Procedural languages like Fortran, C,

00:17:01.700 --> 00:17:04.420
Pascal, they were all designed around the fundamental

00:17:04.420 --> 00:17:07.400
concept of the assignment statement. The assignment

00:17:07.400 --> 00:17:09.799
statement being, you know, X plus one. Exactly.

00:17:09.839 --> 00:17:11.980
And that statement is nothing more than saying,

00:17:12.019 --> 00:17:15.500
go to this specific memory location, X, fetch

00:17:15.500 --> 00:17:18.519
the value, do an operation like plus one, and

00:17:18.519 --> 00:17:20.799
then store the new result back in that same location.

00:17:21.589 --> 00:17:24.069
So he's saying that by making Fortran successful,

00:17:24.650 --> 00:17:27.650
they had basically institutionalized a constraint

00:17:27.650 --> 00:17:29.950
that was imposed by the hardware. That's the

00:17:29.950 --> 00:17:32.349
core of his critique. He argued that this style

00:17:32.349 --> 00:17:34.789
was fundamentally limited because it forces the

00:17:34.789 --> 00:17:37.890
programmer to focus on mechanical, low -level

00:17:37.890 --> 00:17:40.190
details of data movement, what he called word

00:17:40.190 --> 00:17:42.509
-at -a -time programming, rather than the high

00:17:42.509 --> 00:17:44.269
-level mathematical structure of the problem

00:17:44.269 --> 00:17:46.230
itself. So he believed programmers were being

00:17:46.230 --> 00:17:48.369
forced to think like the machine's memory fetcher,

00:17:48.470 --> 00:17:51.529
not like a pure mathematician. Yes, a loss of

00:17:51.529 --> 00:17:54.630
expressive power and elegance. He saw the entire

00:17:54.630 --> 00:17:57.690
industry as being trapped in an imperative morass

00:17:57.690 --> 00:17:59.970
where programs were just a sequence of state

00:17:59.970 --> 00:18:02.789
changes rather than clean mathematical transformations.

00:18:03.309 --> 00:18:05.829
And this lecture is sometimes seen as his apology

00:18:05.829 --> 00:18:08.660
for creating Fortran. Is that accurate? It was

00:18:08.660 --> 00:18:10.960
misinterpreted. It wasn't an apology. It was

00:18:10.960 --> 00:18:13.720
an intellectual evolution. The problem was that

00:18:13.720 --> 00:18:16.380
his proposed solution, function level programming

00:18:16.380 --> 00:18:20.480
or FLP, was often mistakenly confused with existing

00:18:20.480 --> 00:18:23.599
functional languages like Lisp. Which used lambda

00:18:23.599 --> 00:18:26.539
calculus. Right. And Backus was aiming for something

00:18:26.539 --> 00:18:29.319
different, something algebraically cleaner. His

00:18:29.319 --> 00:18:31.660
antidote was to move toward a style that focused

00:18:31.660 --> 00:18:34.200
entirely on combining functions to transform

00:18:34.200 --> 00:18:37.220
data rather than assigning values to variables.

00:18:37.680 --> 00:18:39.559
And to explore this idea, he designed a language

00:18:39.559 --> 00:18:42.880
called FP. FP for function -level programming.

00:18:43.220 --> 00:18:45.759
It was his direct attempt to embody these ideas,

00:18:45.880 --> 00:18:48.079
and it was heavily, heavily influenced by Kenneth

00:18:48.079 --> 00:18:50.380
Iverson's APL. A programming language. Yeah.

00:18:50.420 --> 00:18:52.359
Which was already pretty radical. Very radical.

00:18:52.440 --> 00:18:55.180
It was focused on array processing and used this

00:18:55.180 --> 00:18:58.480
non -standard character set to denote these powerful,

00:18:58.579 --> 00:19:01.200
primitive operations that worked on entire arrays

00:19:01.200 --> 00:19:04.980
at once. FP inherited that spirit. So how did

00:19:04.980 --> 00:19:07.670
it work? No variables? No loops? No. It operated

00:19:07.670 --> 00:19:10.269
using a small set of combinators, which are functions

00:19:10.269 --> 00:19:12.450
that take other functions as arguments and combine

00:19:12.450 --> 00:19:15.109
them to create more completes functions. The

00:19:15.109 --> 00:19:17.809
key is the programmer never directly interacts

00:19:17.809 --> 00:19:20.009
with variables or assignment statements. So if

00:19:20.009 --> 00:19:22.089
you wanted to sum a list of numbers. You wouldn't

00:19:22.089 --> 00:19:24.369
write a loop and assign the running total to

00:19:24.369 --> 00:19:26.650
a variable. You compose a function that maps

00:19:26.650 --> 00:19:29.150
an addition operator across the entire data structure

00:19:29.150 --> 00:19:32.450
at once. It was an algebra of programs. That

00:19:32.450 --> 00:19:35.430
sounds incredibly rigorous, but also a huge departure

00:19:35.430 --> 00:19:38.279
from the mainstream. How was its adoption? Adoption

00:19:38.279 --> 00:19:41.140
was niche. An FP interpreter was distributed

00:19:41.140 --> 00:19:44.299
with the 4 .2 BSD Unix operating system, which

00:19:44.299 --> 00:19:46.140
is interesting, but implementations were few.

00:19:46.240 --> 00:19:48.160
It was used mostly for educational purposes.

00:19:48.539 --> 00:19:50.960
The conceptual leap was just too big. Too big

00:19:50.960 --> 00:19:53.740
for an industry already so heavily invested in

00:19:53.740 --> 00:19:56.940
procedural C and Fortran. But Backus didn't give

00:19:56.940 --> 00:19:59.799
up. He spent the latter part of his career trying

00:19:59.799 --> 00:20:02.359
to refine this concept, creating a successor

00:20:02.359 --> 00:20:05.769
language called FL. FL. For function level. Right.

00:20:05.930 --> 00:20:08.309
What was the fate of this second attempt? FL

00:20:08.309 --> 00:20:11.009
was a long -term intensive internal research

00:20:11.009 --> 00:20:13.910
project at IBM. Backus was focused on making

00:20:13.910 --> 00:20:16.490
it even more rigorous so that you could mathematically

00:20:16.490 --> 00:20:19.789
manipulate programs the way a mathematician manipulates

00:20:19.789 --> 00:20:22.809
equations. But unlike Fortran, which IBM pushed

00:20:22.809 --> 00:20:26.069
globally, FFL just stayed internal. Unfortunately,

00:20:26.109 --> 00:20:28.539
yes. Development stopped when the research project

00:20:28.539 --> 00:20:30.599
finished, and the source code for the compiler

00:20:30.599 --> 00:20:33.140
was never made public. Only a few documenting

00:20:33.140 --> 00:20:35.359
papers are left. Why do you think it failed to

00:20:35.359 --> 00:20:37.640
gain traction when the original was such a colossal

00:20:37.640 --> 00:20:39.559
success? It was a collision of philosophy and

00:20:39.559 --> 00:20:42.599
timing. By the 1980s, when FL was being developed,

00:20:42.740 --> 00:20:44.359
functional programming was gaining traction,

00:20:44.599 --> 00:20:46.920
but it was centered around lambda calculus and

00:20:46.920 --> 00:20:50.319
static typing languages like ML or what would

00:20:50.319 --> 00:20:53.380
become Haskell. And FL was different. FL, following

00:20:53.380 --> 00:20:56.579
that APL lineage, was philosophically... distinct.

00:20:56.700 --> 00:20:59.279
It focused on the concatenation of primitive

00:20:59.279 --> 00:21:02.559
operations using these powerful array centric

00:21:02.559 --> 00:21:05.960
operators. It felt alien to the academic functional

00:21:05.960 --> 00:21:08.619
movement. So his vision was kind of caught between

00:21:08.619 --> 00:21:10.720
two worlds. Exactly. It was caught between the

00:21:10.720 --> 00:21:13.759
highly practical procedural world he was critiquing

00:21:13.759 --> 00:21:16.279
and the mathematically rigorous lambda calculus

00:21:16.279 --> 00:21:18.240
world, which he didn't fully embrace either.

00:21:18.420 --> 00:21:21.789
But the ideas didn't die. Not at all. The legacy

00:21:21.789 --> 00:21:24.630
of FL is seen clearly in later versions of the

00:21:24.630 --> 00:21:27.410
J programming language, which is Iberson's successor

00:21:27.410 --> 00:21:31.430
to APL. J is a modern, powerful array processing

00:21:31.430 --> 00:21:33.390
language that carries many of the structural

00:21:33.390 --> 00:21:36.410
insights and the mathematical elegance that Backus

00:21:36.410 --> 00:21:39.490
was searching for in FP and FL. So his critique,

00:21:39.650 --> 00:21:42.029
if not his specific language, was enduringly

00:21:42.029 --> 00:21:44.789
relevant. It was. His core philosophical drive

00:21:44.789 --> 00:21:47.329
continued to influence that entire lineage of

00:21:47.329 --> 00:21:49.750
array processing languages. It is just so rare

00:21:49.750 --> 00:21:51.950
to find a figure in any field who so fundamentally

00:21:51.950 --> 00:21:54.829
shaped its practical foundation, then formalized

00:21:54.829 --> 00:21:57.250
its theoretical structure, and then stood back

00:21:57.250 --> 00:21:59.710
to deliver it. a devastating philosophical critique

00:21:59.710 --> 00:22:02.690
of the entire system. It really is. He created

00:22:02.690 --> 00:22:04.829
the digital freeway, established the rules for

00:22:04.829 --> 00:22:06.849
building all the future roads, and then said,

00:22:06.930 --> 00:22:09.230
you know what? This whole infrastructure is fundamentally

00:22:09.230 --> 00:22:12.309
limiting our speed. It speaks to his relentless

00:22:12.309 --> 00:22:15.170
intellectual energy. He was never satisfied with

00:22:15.170 --> 00:22:18.190
good enough. So his career spanned the absolute

00:22:18.190 --> 00:22:20.869
necessity of early computing, from the manual

00:22:20.869 --> 00:22:23.849
toil of calculating lunar positions on the SSCC

00:22:23.849 --> 00:22:27.200
to the abstraction of speed coding. The revolution

00:22:27.200 --> 00:22:29.539
of practical science with Fortran. The formal

00:22:29.539 --> 00:22:31.579
definition of all language structure through

00:22:31.579 --> 00:22:34.019
BNF. And finally, the profound philosophical

00:22:34.019 --> 00:22:37.059
critique of that whole world with FP and FL.

00:22:37.259 --> 00:22:39.680
And the recognition he received truly reflects

00:22:39.680 --> 00:22:42.440
that triple legacy. It does. IBM Fellow in 63,

00:22:42.859 --> 00:22:45.960
McDowell Award in 67, the National Medal of Science

00:22:45.960 --> 00:22:49.539
in 75, followed by the Turing Award in 77. Later

00:22:49.539 --> 00:22:52.460
honors included the Draper Prize in 93, and he

00:22:52.460 --> 00:22:54.400
was named a Computer History Museum Fellow in

00:22:54.400 --> 00:22:57.319
1997. He passed away in 2007 in Ashland, Oregon,

00:22:57.519 --> 00:22:59.920
leaving behind this monumental, complex, and

00:22:59.920 --> 00:23:02.509
ultimately challenging legacy. And as a final,

00:23:02.589 --> 00:23:06.230
slightly more whimsical honor, the asteroid 6830

00:23:06.230 --> 00:23:08.589
John Bacchus was named for him. A true giant.

00:23:09.039 --> 00:23:10.859
But for the learner, for you listening to this,

00:23:11.000 --> 00:23:13.240
I think the most important part of Backus' work

00:23:13.240 --> 00:23:16.200
is the lasting question he posed. The idea that

00:23:16.200 --> 00:23:18.940
programming is constrained not by our intelligence,

00:23:19.039 --> 00:23:21.140
but by the physical architecture of the computer.

00:23:21.359 --> 00:23:24.359
Right. If Backus, the creator of Fortran, ultimately

00:23:24.359 --> 00:23:27.140
argued that the underlying sequential von Neumann

00:23:27.140 --> 00:23:30.400
-style architecture limits how powerful and expressive

00:23:30.400 --> 00:23:34.000
our programs can be, this raises a really persistent

00:23:34.000 --> 00:23:36.900
and important question. And that is? Nearly 50

00:23:36.900 --> 00:23:39.579
years after his critique, Are the programming

00:23:39.579 --> 00:23:42.240
languages you use, Python, Java, JavaScript,

00:23:42.559 --> 00:23:44.960
are they still fundamentally constrained by that

00:23:44.960 --> 00:23:47.759
sequential, word -at -a -time, memory -shuffling

00:23:47.759 --> 00:23:50.559
design of the processors they run on? Or have

00:23:50.559 --> 00:23:52.940
model kerygimes, like object -oriented design

00:23:52.940 --> 00:23:55.839
or massively parallel processing, truly found

00:23:55.839 --> 00:23:58.259
ways to liberate us from that mechanical sequence?

00:23:58.599 --> 00:24:00.339
It's something to consider the next time you

00:24:00.339 --> 00:24:02.740
design a system or write a line of code. Are

00:24:02.740 --> 00:24:04.980
you instructing the machine on the logical steps

00:24:04.980 --> 00:24:07.140
of your problem, or are you just efficiently

00:24:07.140 --> 00:24:09.839
managing the flow? of data across the von Neumann

00:24:09.839 --> 00:24:10.460
bottleneck.
