WEBVTT

00:00:00.000 --> 00:00:02.379
All right, so for this deep dive, I want you

00:00:02.379 --> 00:00:04.960
to just close your eyes for a second. Picture

00:00:04.960 --> 00:00:06.780
something with me. Okay, I'm with you. We're

00:00:06.780 --> 00:00:09.599
in upstate New York, and I don't mean, you know,

00:00:09.599 --> 00:00:11.919
the Hudson Valley with all the cute bed and breakfasts.

00:00:11.960 --> 00:00:14.480
No, we're talking way upstate, near the Canadian

00:00:14.480 --> 00:00:18.019
border almost. Exactly, and we're talking 1930s,

00:00:18.019 --> 00:00:20.480
the Great Depression is just grinding everything

00:00:20.480 --> 00:00:24.300
to a halt. We're in a town called Peru. Not the

00:00:24.300 --> 00:00:26.460
country, the town. Right, the town. It's right

00:00:26.460 --> 00:00:28.940
on the edge of the Adirondacks. Super close to

00:00:28.940 --> 00:00:31.660
Lake Champlain. It's rugged. It's rural. And

00:00:31.660 --> 00:00:34.359
it is completely disconnected from what we would

00:00:34.359 --> 00:00:37.280
think of as the modern world. Totally. So on

00:00:37.280 --> 00:00:40.259
this farm, there's no electricity, no indoor

00:00:40.259 --> 00:00:43.060
plumbing, no running water. It's a life that's

00:00:43.060 --> 00:00:45.520
dictated by the sun and the seasons, not by,

00:00:45.619 --> 00:00:48.280
you know, a train schedule or a clock on the

00:00:48.280 --> 00:00:51.619
wall. It's all hard work and harsh winters. And

00:00:51.619 --> 00:00:53.659
there's a one -room schoolhouse about a mile's

00:00:53.659 --> 00:00:56.479
walk down a dirt road. And on this farm... Lives

00:00:56.479 --> 00:00:59.219
a young girl. She's the oldest of six kids. Yeah.

00:00:59.520 --> 00:01:01.479
And she's doing the farm work. She's milking

00:01:01.479 --> 00:01:04.000
cows. She's helping with the harvest. If you

00:01:04.000 --> 00:01:05.659
saw her back then, you would think you were looking

00:01:05.659 --> 00:01:07.500
at a character straight out of Little House on

00:01:07.500 --> 00:01:09.239
the Prairie. You definitely wouldn't look at

00:01:09.239 --> 00:01:11.640
her and think, there, there goes the architect

00:01:11.640 --> 00:01:14.799
of all modern computing. Right. It's just, it

00:01:14.799 --> 00:01:17.840
feels like a complete category error. And yet,

00:01:17.920 --> 00:01:21.549
that girl. Frances Fran Allen goes from that

00:01:21.549 --> 00:01:24.510
farm to becoming the very first woman to win

00:01:24.510 --> 00:01:27.609
the A .M. Turing Award. The Nobel Prize of Computing.

00:01:27.609 --> 00:01:29.709
It's the highest honor there is in the field.

00:01:29.829 --> 00:01:32.069
She didn't just like participate in the digital

00:01:32.069 --> 00:01:36.209
revolution. She fundamentally wrote the grammar

00:01:36.209 --> 00:01:39.230
for how we talk to machines efficiently. It's

00:01:39.230 --> 00:01:42.129
one of the most. I think, unlikely trajectories

00:01:42.129 --> 00:01:43.849
in the entire history of science. That really

00:01:43.849 --> 00:01:45.769
is. And what I love about her story is that it

00:01:45.769 --> 00:01:47.590
wasn't a straight line. It wasn't, you know,

00:01:47.650 --> 00:01:50.090
child prodigy builds a radio in the garage, goes

00:01:50.090 --> 00:01:53.129
to MIT, changes the world. No, it was messy.

00:01:53.290 --> 00:01:56.109
It was. It was driven by accident, by necessity,

00:01:56.269 --> 00:01:59.030
and to be honest, by a little bit of desperation.

00:01:59.489 --> 00:02:01.450
That's the part that gets me. The desperation.

00:02:02.469 --> 00:02:05.390
She didn't show up at IBM on day one planning

00:02:05.390 --> 00:02:08.490
to invent the future or save the world. Not at

00:02:08.490 --> 00:02:10.669
all. She joined because she had bills to pay.

00:02:10.789 --> 00:02:13.969
She had student loans. The great universal motivator.

00:02:14.069 --> 00:02:16.590
Student debt has probably driven more innovation

00:02:16.590 --> 00:02:19.189
than we give it credit for. It's so true. So

00:02:19.189 --> 00:02:22.009
our mission for this deep dive is to trace that

00:02:22.009 --> 00:02:24.250
journey. We are going to walk from that farm

00:02:24.250 --> 00:02:26.930
in Peru through the high -security computer labs

00:02:26.930 --> 00:02:29.949
of the NSA and finally land on the algorithms

00:02:29.949 --> 00:02:33.330
that probably help run the software we are using

00:02:33.330 --> 00:02:35.669
to record this right now. We are talking about

00:02:35.669 --> 00:02:38.509
Fran Allen, the woman who taught computers how

00:02:38.509 --> 00:02:41.669
to be efficient. And to really get why she is

00:02:41.669 --> 00:02:43.669
so important, we have to understand what that

00:02:43.669 --> 00:02:46.349
word efficiency even meant in the world she was

00:02:46.349 --> 00:02:48.409
working in. Oh, absolutely. Because today efficiency

00:02:48.409 --> 00:02:51.090
means, what, your phone battery lasts an extra

00:02:51.090 --> 00:02:53.370
hour? Right. Back then, it meant something completely

00:02:53.370 --> 00:02:55.349
different. It was the difference between something

00:02:55.349 --> 00:02:58.030
being possible and impossible. So let's set the

00:02:58.030 --> 00:02:59.590
stage. We need to do a little time travel. It's

00:02:59.590 --> 00:03:03.110
1957. Eisenhower is president. Sputnik is about

00:03:03.110 --> 00:03:06.490
to launch and scare the absolute daylights out

00:03:06.490 --> 00:03:09.550
of America. And Fran Allen has just walked through

00:03:09.550 --> 00:03:11.550
the doors of IBM Research in Poughkeepsie, New

00:03:11.550 --> 00:03:14.710
York. What's the vibe in that building? The vibe

00:03:14.710 --> 00:03:17.189
is, well, it's distinct. You have to remember

00:03:17.189 --> 00:03:21.590
computer science as a major, as a degree. It

00:03:21.590 --> 00:03:24.370
didn't exist. There were no CS departments at

00:03:24.370 --> 00:03:26.289
universities. Who were these people who was working

00:03:26.289 --> 00:03:28.330
there? They were mathematicians, physicists,

00:03:28.969 --> 00:03:32.009
a few electrical engineers, maybe some logicians.

00:03:32.210 --> 00:03:35.129
They were people from other fields who were drawn

00:03:35.129 --> 00:03:37.550
to these new machines. And the machines themselves.

00:03:38.360 --> 00:03:40.219
They weren't sitting on desks. No, the machines

00:03:40.219 --> 00:03:42.379
were the desks. Or really, they were the entire

00:03:42.379 --> 00:03:45.780
room. These giant humming beasts. Full of vacuum

00:03:45.780 --> 00:03:48.780
tubes cooled by massive air conditioning units

00:03:48.780 --> 00:03:51.139
just to keep them from literally melting down.

00:03:51.280 --> 00:03:53.919
And the culture around them was... It was very

00:03:53.919 --> 00:03:55.759
much like a priesthood. A priesthood. I like

00:03:55.759 --> 00:03:57.979
that. Yeah. You had the hardware guys who actually

00:03:57.979 --> 00:03:59.840
built the machine, and then you had the researchers

00:03:59.840 --> 00:04:01.400
who were trying to figure out how to talk to

00:04:01.400 --> 00:04:03.300
it. And talking to it was a total nightmare.

00:04:03.520 --> 00:04:07.099
It was excruciating. In 1957, if you wanted the

00:04:07.099 --> 00:04:09.120
computer to do something simple like add two

00:04:09.120 --> 00:04:11.360
numbers, you had to speak its native language.

00:04:11.659 --> 00:04:13.740
Assembly code. Assembly code. You had to tell

00:04:13.740 --> 00:04:16.519
it, go to this exact memory address, move the

00:04:16.519 --> 00:04:18.379
data from there into this specific register.

00:04:18.819 --> 00:04:21.360
Now go to this other address, get that data,

00:04:21.459 --> 00:04:23.759
add it to the first register. and then put the

00:04:23.759 --> 00:04:25.939
result in this third location. It's just one

00:04:25.939 --> 00:04:28.759
tiny step above writing in raw zeros and ones.

00:04:29.160 --> 00:04:32.079
Barely. It's cryptic. It's incredibly tedious.

00:04:32.139 --> 00:04:34.319
And if you make a single typo, the whole program

00:04:34.319 --> 00:04:38.680
just crashes. No error messages. But, and I guess

00:04:38.680 --> 00:04:40.779
this is the important part, it gave you absolute

00:04:40.779 --> 00:04:43.639
control. Total control. And the programmers of

00:04:43.639 --> 00:04:45.579
that era, let's call them the assembly cult.

00:04:45.800 --> 00:04:48.740
The wizards. The wizards, yeah. They prided themselves

00:04:48.740 --> 00:04:51.639
on their ability to squeeze every single ounce

00:04:51.639 --> 00:04:54.019
of performance out of that hardware. They knew

00:04:54.019 --> 00:04:56.060
exactly how many milliseconds each instruction

00:04:56.060 --> 00:04:59.139
took. They were true artisans. And right into

00:04:59.139 --> 00:05:01.339
the middle of this world of wizards, a new thing

00:05:01.339 --> 00:05:05.410
appears. Fortran. Right. Fortran, the first high

00:05:05.410 --> 00:05:08.170
-level programming language, had only been announced

00:05:08.170 --> 00:05:10.529
maybe two months before Fran Allen even started

00:05:10.529 --> 00:05:13.629
at IBM. And the idea was completely radical for

00:05:13.629 --> 00:05:15.730
the time. Totally. Instead of writing all that

00:05:15.730 --> 00:05:17.670
cryptic assembly code, you could just write something

00:05:17.670 --> 00:05:19.889
that looks like a math equation. You could write

00:05:19.889 --> 00:05:23.069
C equals A plus B. And then a special program,

00:05:23.370 --> 00:05:26.230
a compiler, would do the hard work of translating

00:05:26.230 --> 00:05:28.569
that into the machine code for you. That was

00:05:28.569 --> 00:05:31.790
the promise. That sounds amazing. Infinitely

00:05:31.790 --> 00:05:34.149
better. Why would anyone possibly object to that?

00:05:34.350 --> 00:05:37.189
Because the wizards didn't trust the translator.

00:05:37.529 --> 00:05:39.810
They looked at Fortran and the idea of a compiler

00:05:39.810 --> 00:05:43.110
and they said, there is no way a machine can

00:05:43.110 --> 00:05:45.410
write code that is as good as the code I can

00:05:45.410 --> 00:05:47.949
write by hand. They thought it would be messy.

00:05:48.129 --> 00:05:49.829
They believed it would produce what they called

00:05:49.829 --> 00:05:54.649
spaghetti code. Bloated, slow, inefficient instructions

00:05:54.649 --> 00:05:57.589
that wasted the machine's precious time. I get

00:05:57.589 --> 00:05:59.470
it. It's like a master chef watching someone

00:05:59.470 --> 00:06:01.769
use a microwave. That's a great analogy. They're

00:06:01.769 --> 00:06:04.550
thinking, sure, it's faster, but the result is

00:06:04.550 --> 00:06:08.500
going to be garbage. Exactly. And in 1957, garbage

00:06:08.500 --> 00:06:11.480
code wasn't just, you know, an aesthetic problem.

00:06:11.620 --> 00:06:14.480
It was incredibly expensive. Computer time was

00:06:14.480 --> 00:06:17.339
rented out for hundreds, sometimes thousands

00:06:17.339 --> 00:06:20.980
of dollars an hour. Memory was measured in kilobytes.

00:06:21.180 --> 00:06:23.660
So every wasted instruction, every wasted byte

00:06:23.660 --> 00:06:26.480
of memory was literally burning money. It was

00:06:26.480 --> 00:06:29.720
burning real money. So the skepticism from the

00:06:29.720 --> 00:06:32.579
establishment was immense. And that is the world

00:06:32.579 --> 00:06:34.990
that Fran Allen walks into. So let's back. Back

00:06:34.990 --> 00:06:36.889
up just a little bit. How does she even get there?

00:06:36.970 --> 00:06:39.209
We said she was a teacher. She was very much

00:06:39.209 --> 00:06:41.410
on the education track. She graduated from the

00:06:41.410 --> 00:06:43.550
New York State College for Teachers, which is

00:06:43.550 --> 00:06:47.509
now SUNY Albany, back in 1954. And she goes right

00:06:47.509 --> 00:06:50.029
back to her hometown. Right back to Peru, New

00:06:50.029 --> 00:06:52.490
York. stood in front of a classroom teaching

00:06:52.490 --> 00:06:54.829
algebra and trigonometry to high schoolers. I

00:06:54.829 --> 00:06:56.550
can just picture her, you know, chalk dust on

00:06:56.550 --> 00:06:58.529
her hands, trying to convince a bunch of teenagers

00:06:58.529 --> 00:07:00.949
to care about cosines. And by all accounts, she

00:07:00.949 --> 00:07:02.970
loved it. She was good at it. She actually wanted

00:07:02.970 --> 00:07:05.149
that to be her career. But the state of New York

00:07:05.149 --> 00:07:08.810
had a requirement. Ah, bureaucracy. Always. To

00:07:08.810 --> 00:07:10.550
get your permanent teaching certificate, you

00:07:10.550 --> 00:07:12.889
had to have a master's degree. The old credential

00:07:12.889 --> 00:07:15.850
treadmill. It gets us all. So she enrolls at

00:07:15.850 --> 00:07:17.569
the University of Michigan, gets her master's

00:07:17.569 --> 00:07:21.230
in mathematics in 1957. But now she has a new

00:07:21.230 --> 00:07:23.829
problem. Money. She's been in grad school for

00:07:23.829 --> 00:07:26.389
a couple of years, not earning anything, and

00:07:26.389 --> 00:07:29.209
she's taken out student loans. She's in debt.

00:07:29.410 --> 00:07:32.089
Deep in the red. And that's when IBM recruiters

00:07:32.089 --> 00:07:34.850
show up on campus. They're hiring pretty much

00:07:34.850 --> 00:07:37.310
anyone with a strong math background. The pay

00:07:37.310 --> 00:07:39.790
is really good. So she makes a practical decision.

00:07:40.009 --> 00:07:43.199
A purely practical one. She thinks, OK. I'll

00:07:43.199 --> 00:07:45.560
go work for this company in Poughkeepsie for,

00:07:45.660 --> 00:07:47.939
I don't know, a year, maybe two. I'll pay off

00:07:47.939 --> 00:07:50.180
this debt and then I'm right back to the chalkboard

00:07:50.180 --> 00:07:52.899
in Peru. And that two -year plan ends up becoming

00:07:52.899 --> 00:07:55.819
a 45 -year career. It's the classic accidental

00:07:55.819 --> 00:07:58.379
career. But this is where her background as a

00:07:58.379 --> 00:08:01.980
teacher becomes her superpower. IBM hires her.

00:08:02.120 --> 00:08:04.759
She knows absolutely nothing about computers.

00:08:04.980 --> 00:08:07.180
So what do they have her do? Naturally, they

00:08:07.180 --> 00:08:09.740
assign her to teach the new employees how to

00:08:09.740 --> 00:08:13.180
use Fortran. Wait, hold on. They assign the person

00:08:13.180 --> 00:08:16.339
who doesn't know the new language to teach the

00:08:16.339 --> 00:08:18.699
new language. That feels very corporate, doesn't

00:08:18.699 --> 00:08:20.540
it? It really does. But you have to remember,

00:08:20.720 --> 00:08:23.040
it was the Wild West back then. They probably

00:08:23.040 --> 00:08:24.779
thought, well, she has a teaching degree. She's

00:08:24.779 --> 00:08:27.620
a teacher. Great. Okay, but think about the position

00:08:27.620 --> 00:08:30.639
that puts her in. She has to stand up in front

00:08:30.639 --> 00:08:34.100
of a room full of incredibly smart people. these

00:08:34.100 --> 00:08:37.139
mathematicians and physicists, and explain this

00:08:37.139 --> 00:08:40.120
brand new, highly controversial tool. And she

00:08:40.120 --> 00:08:42.340
can't bluff. She has to actually know her stuff.

00:08:42.600 --> 00:08:45.019
So she has to learn it and learn it fast. Faster

00:08:45.019 --> 00:08:47.980
than fast. She described it as learning the concepts

00:08:47.980 --> 00:08:51.100
days, sometimes just hours, before she had to

00:08:51.100 --> 00:08:53.840
give the lecture. But how? There were no textbooks

00:08:53.840 --> 00:08:57.139
yet. Fortran was too new. Where did she go for

00:08:57.139 --> 00:09:00.159
information? This is the pivotal moment. This

00:09:00.159 --> 00:09:02.519
is the act that defines her entire intellectual

00:09:02.519 --> 00:09:06.159
legacy. With no manual and no grammar book, she

00:09:06.159 --> 00:09:08.039
went to the only source of truth that existed.

00:09:08.379 --> 00:09:10.820
What was that? She got her hands on the source

00:09:10.820 --> 00:09:14.059
code of the Fortran compiler itself. Whoa. Okay,

00:09:14.100 --> 00:09:15.820
unpack what that means. What does that physically

00:09:15.820 --> 00:09:18.679
look like in 1957? It would have been stacks

00:09:18.679 --> 00:09:21.860
and stacks of paper. Huge printouts of assembly

00:09:21.860 --> 00:09:25.220
code. She was reading the raw instructions that

00:09:25.220 --> 00:09:27.220
the creators of Fortran, John Backus, and his

00:09:27.220 --> 00:09:29.679
team had written to build the translator. So

00:09:29.679 --> 00:09:31.899
it's like trying to understand how a car works.

00:09:32.379 --> 00:09:35.100
Not by reading the owner's manual, but by taking

00:09:35.100 --> 00:09:37.899
the entire engine apart piece by piece. That

00:09:37.899 --> 00:09:41.120
is a perfect analogy, and it is incredibly difficult.

00:09:41.200 --> 00:09:43.659
Reading someone else's code is hard today with

00:09:43.659 --> 00:09:46.779
all our modern tools. Reading uncommented assembly

00:09:46.779 --> 00:09:49.580
code from 1957 must have been like trying to

00:09:49.580 --> 00:09:52.419
decipher ancient hieroglyphics. But doing that

00:09:52.419 --> 00:09:54.279
must have given her an insight that almost no

00:09:54.279 --> 00:09:57.110
one else had. A profound insight. Most people

00:09:57.110 --> 00:09:58.990
were just looking at the surface of Fortran,

00:09:59.070 --> 00:10:01.490
you know, the syntax, the commands. Fran Allen

00:10:01.490 --> 00:10:03.350
was looking underneath it. She was seeing the

00:10:03.350 --> 00:10:05.669
machinery. She saw the machinery. She saw how

00:10:05.669 --> 00:10:08.049
the compiler took a simple command like C plus

00:10:08.049 --> 00:10:11.090
B and twisted and turned it into machine logic.

00:10:11.309 --> 00:10:12.970
She saw the places where it was inefficient.

00:10:13.230 --> 00:10:15.889
She saw the brilliant little shortcuts the original

00:10:15.889 --> 00:10:18.830
programmers had used. She saw all the messy parts.

00:10:19.070 --> 00:10:21.750
She saw the matrix? She really did. And in that

00:10:21.750 --> 00:10:23.809
process, she realized something fundamental.

00:10:24.429 --> 00:10:26.809
Tyler wasn't just a simple translator. It was

00:10:26.809 --> 00:10:30.289
a bridge between the human world and the machine

00:10:30.289 --> 00:10:32.269
world. And if you could make that bridge better.

00:10:32.450 --> 00:10:34.850
If you could optimize how that translation happened,

00:10:35.049 --> 00:10:37.610
you could make the hardware do things its own

00:10:37.610 --> 00:10:39.970
designers never even dreamed of. You could unlock

00:10:39.970 --> 00:10:43.289
its true potential. That moment, reading the

00:10:43.289 --> 00:10:46.639
source code. that's the spark that's where the

00:10:46.639 --> 00:10:49.639
math teacher truly becomes the computer scientist

00:10:49.639 --> 00:10:52.320
absolutely she wasn't just conveying information

00:10:52.320 --> 00:10:54.860
anymore she was analyzing the very structure

00:10:54.860 --> 00:10:57.159
of information itself and she got good at it

00:10:57.529 --> 00:10:59.870
Really, really good. Which is why I'm guessing

00:10:59.870 --> 00:11:01.909
she didn't stay in that teaching role for very

00:11:01.909 --> 00:11:04.370
long. No. Pretty quickly, IBM realized what they

00:11:04.370 --> 00:11:06.210
had and they pulled her off the teaching gig

00:11:06.210 --> 00:11:08.929
and threw her into something much, much darker.

00:11:09.230 --> 00:11:12.370
The spy games. The spy games. So we've jumped

00:11:12.370 --> 00:11:15.049
forward a little bit. It's 1959. The Cold War

00:11:15.049 --> 00:11:18.289
is, well, it's freezing. The tension with the

00:11:18.289 --> 00:11:20.490
Soviet Union is at an all -time high. And the

00:11:20.490 --> 00:11:22.350
U .S. government needs a serious technological

00:11:22.350 --> 00:11:26.850
edge. Enter a new project. Project Harvest. Harvest.

00:11:26.970 --> 00:11:29.789
It sounds so pastoral and friendly, doesn't it?

00:11:29.830 --> 00:11:31.830
Like she's going back to her roots on the farm.

00:11:31.970 --> 00:11:33.590
I have a feeling they weren't counting bushels

00:11:33.590 --> 00:11:36.830
of wheat with this one. No. The client for Project

00:11:36.830 --> 00:11:39.289
Harvest was the National Security Agency, the

00:11:39.289 --> 00:11:42.470
NSA. And the goal? The goal was cryptanalysis,

00:11:42.590 --> 00:11:45.809
code breaking. The NSA was intercepting huge

00:11:45.809 --> 00:11:48.970
volumes of Soviet communications, and they needed

00:11:48.970 --> 00:11:51.210
to decrypt them as close to real time as possible.

00:11:51.429 --> 00:11:55.049
Real time, in 1959. yeah with that technology

00:11:55.049 --> 00:11:57.809
that was the dream or as close as they could

00:11:57.809 --> 00:11:59.870
get the amount of data they were dealing with

00:11:59.870 --> 00:12:02.590
was massive far beyond what any existing computer

00:12:02.590 --> 00:12:05.200
could handle they needed a new machine So IBM

00:12:05.200 --> 00:12:07.399
is building the hardware. IBM was building a

00:12:07.399 --> 00:12:09.519
supercomputer called Stretch, which was already

00:12:09.519 --> 00:12:12.259
a huge leap forward. But for the NSA, they built

00:12:12.259 --> 00:12:14.899
a highly specialized, customized version of Stretch.

00:12:15.100 --> 00:12:17.179
And that was called Harvest. What made Harvest

00:12:17.179 --> 00:12:19.860
so special? It was a monster. It had unique,

00:12:20.080 --> 00:12:22.940
specialized hardware designed specifically for

00:12:22.940 --> 00:12:24.899
streaming massive amounts of data and looking

00:12:24.899 --> 00:12:27.460
for patterns. It was essentially built to scan

00:12:27.460 --> 00:12:30.379
for keywords and recurring sequences in encrypted

00:12:30.379 --> 00:12:33.899
text at incredible speeds. But a powerful piece.

00:12:34.000 --> 00:12:36.539
of hardware is just an expensive paperweight

00:12:36.539 --> 00:12:38.200
if you don't have the software to control it.

00:12:38.399 --> 00:12:41.679
Exactly. And that's where Fran comes in. They

00:12:41.679 --> 00:12:43.899
needed a new programming language that could

00:12:43.899 --> 00:12:46.299
harness the power of this unique machine. The

00:12:46.299 --> 00:12:48.019
language was called Alpha, right? That's right.

00:12:48.600 --> 00:12:51.919
And Alan was assigned to help design Alpha. But,

00:12:51.960 --> 00:12:53.940
and this is the crucial part, she was also put

00:12:53.940 --> 00:12:55.759
in charge of managing the compiler optimization

00:12:55.759 --> 00:12:59.179
team for the entire project. Okay, so this is

00:12:59.179 --> 00:13:01.480
where the stakes for optimization get a lot higher.

00:13:01.919 --> 00:13:03.899
Oh, they go through the roof. It's no longer

00:13:03.899 --> 00:13:06.879
about saving IBM a few hundred dollars in computer

00:13:06.879 --> 00:13:09.759
time. No. Now if your compiler generates inefficient

00:13:09.759 --> 00:13:12.139
code, it means the intelligence report comes

00:13:12.139 --> 00:13:14.340
in three days too late and you miss a potential

00:13:14.340 --> 00:13:17.440
missile launch. Precisely. Speed was the only

00:13:17.440 --> 00:13:19.779
metric that mattered. Fran Allen was leading

00:13:19.779 --> 00:13:22.379
a team that had to ensure the software they wrote

00:13:22.379 --> 00:13:25.519
didn't waste a single clock cycle of that powerful,

00:13:25.779 --> 00:13:28.500
one of a kind hardware. She's sitting right at

00:13:28.500 --> 00:13:30.740
the intersection of top secret government intelligence

00:13:30.740 --> 00:13:33.980
and the absolute bleeding edge of technology.

00:13:34.419 --> 00:13:37.299
And this was all happening behind a wall of secrecy.

00:13:37.379 --> 00:13:39.759
Most of the team members didn't even know the

00:13:39.759 --> 00:13:42.039
full scope of what they were working on until

00:13:42.039 --> 00:13:44.940
details started leaking to the press years later.

00:13:45.080 --> 00:13:46.850
I have to pause. on this for a second. She's

00:13:46.850 --> 00:13:50.269
a woman in 1959 leading one of the most critical

00:13:50.269 --> 00:13:53.110
software teams for a national security project.

00:13:53.389 --> 00:13:55.690
It's remarkable. We talk a lot about the women

00:13:55.690 --> 00:13:58.330
of hidden figures at NASA who were the computers.

00:13:58.950 --> 00:14:01.309
But here's Fran Allen, not just doing the math,

00:14:01.409 --> 00:14:03.889
but designing the entire compiler architecture

00:14:03.889 --> 00:14:07.750
for the NSA. Was she the only woman on that team?

00:14:07.990 --> 00:14:10.149
In those high -level architectural meetings,

00:14:10.429 --> 00:14:13.980
often yes. She wasn't the only woman at IBM Research,

00:14:14.120 --> 00:14:15.720
and we'll get into that. But in her specific

00:14:15.720 --> 00:14:19.039
role at that level of leadership, she was a pioneer.

00:14:19.320 --> 00:14:21.759
And the system they built, Harvest, it was used

00:14:21.759 --> 00:14:25.759
until 1976. A 17 -year run. That is an eternity

00:14:25.759 --> 00:14:27.899
in the world of computing. That's a testament

00:14:27.899 --> 00:14:29.720
to how well they designed it. So she's cut her

00:14:29.720 --> 00:14:31.940
teeth on Fortran. She's been battle -tested by

00:14:31.940 --> 00:14:34.500
the NSA. Now we get to the core of her legacy.

00:14:34.919 --> 00:14:37.200
The optimizing compiler. This is the deep dive.

00:14:37.399 --> 00:14:39.120
We've used that phrase a few times, but I really

00:14:39.120 --> 00:14:41.960
want to break it down because I feel like optimization

00:14:41.960 --> 00:14:45.440
is a word we all throw around very loosely. You

00:14:45.440 --> 00:14:47.779
know, I need to optimize my morning routine.

00:14:47.879 --> 00:14:50.659
Right. Or I've optimized my sandwich making process.

00:14:50.840 --> 00:14:53.899
Exactly. But in computer science, this has a

00:14:53.899 --> 00:14:57.000
very specific, rigorous mathematical meaning.

00:14:57.340 --> 00:14:59.600
It does. And to understand it, we have to go

00:14:59.600 --> 00:15:01.659
back to that skepticism from the assembly cult.

00:15:01.840 --> 00:15:04.379
The wizards. The wizards. Remember, they truly

00:15:04.379 --> 00:15:07.039
believed that a machine could never write code

00:15:07.039 --> 00:15:10.159
as efficient as a human could. Fran Allen set

00:15:10.159 --> 00:15:12.639
out to prove that not only could a machine do

00:15:12.639 --> 00:15:15.059
it, but that a machine could actually do it better

00:15:15.059 --> 00:15:17.759
than a human. Because a machine can analyze patterns

00:15:17.759 --> 00:15:21.419
at a scale that a human brain just can't. Precisely.

00:15:21.419 --> 00:15:23.879
And for this work, she teamed up with another

00:15:23.879 --> 00:15:26.820
giant of computing, John Koch. He's a fascinating

00:15:26.820 --> 00:15:29.100
figure in his own right. Oh, a brilliant, eccentric

00:15:29.100 --> 00:15:32.399
character. He and Fran became this dynamic duo

00:15:32.399 --> 00:15:36.220
at IBM's Thomas J. Watson Research Center. Starting

00:15:36.220 --> 00:15:38.779
in the mid -1960s, they began publishing a series

00:15:38.779 --> 00:15:41.220
of papers that essentially invented the entire

00:15:41.220 --> 00:15:44.299
science of compiler optimization. Okay, so let's

00:15:44.299 --> 00:15:47.059
get into the how. How do you teach a computer

00:15:47.059 --> 00:15:50.360
to look at code and make it faster? Let's walk

00:15:50.360 --> 00:15:52.399
through some of the big techniques they cataloged.

00:15:52.419 --> 00:15:55.539
The first one I saw mentioned was procedure inlining.

00:15:56.029 --> 00:15:58.190
What is that? Okay, let's use an office analogy

00:15:58.190 --> 00:16:01.129
for this. Imagine you're a manager. You're the

00:16:01.129 --> 00:16:03.830
main program. Got it. And part of your job involves

00:16:03.830 --> 00:16:06.570
signing a document. But the signed document procedure

00:16:06.570 --> 00:16:08.950
is handled by your assistant who works in an

00:16:08.950 --> 00:16:11.750
office down the hall. Okay, so the standard non

00:16:11.750 --> 00:16:14.649
-optimized way to do this is I get a document.

00:16:15.049 --> 00:16:16.730
I have to get up from my desk, walk down the

00:16:16.730 --> 00:16:18.570
hall, hand it to my assistant, wait for them

00:16:18.570 --> 00:16:20.549
to sign it, take it back and walk back to my

00:16:20.549 --> 00:16:22.450
desk. Right. And all of that walking back and

00:16:22.450 --> 00:16:25.149
forth, that's overhead. In a computer, the processor

00:16:25.149 --> 00:16:27.690
has to jump to a different part of memory to

00:16:27.690 --> 00:16:30.429
find a subroutine and then jump back. That takes

00:16:30.429 --> 00:16:33.529
time. It might save memory space because you

00:16:33.529 --> 00:16:36.190
only write the signing instructions once, but

00:16:36.190 --> 00:16:39.149
it costs you in execution time. So what is procedure

00:16:39.149 --> 00:16:41.789
inlining then? Procedure inlining is when the

00:16:41.789 --> 00:16:44.330
compiler looks at the situation and says, you

00:16:44.330 --> 00:16:46.460
know what? This trip down the hall is happening

00:16:46.460 --> 00:16:48.659
a lot, and it's slowing things down. I'm going

00:16:48.659 --> 00:16:50.279
to teach the manager how to sign the document

00:16:50.279 --> 00:16:52.659
themselves. So it just copies the instructions?

00:16:52.899 --> 00:16:54.740
It takes the instructions from the assistant's

00:16:54.740 --> 00:16:57.519
office and essentially copy -pastes them directly

00:16:57.519 --> 00:17:00.259
into the manager's workflow. Now, when the task

00:17:00.259 --> 00:17:02.320
comes up, the manager just does it right there

00:17:02.320 --> 00:17:04.960
at their desk. No walking, no overhead. Boom.

00:17:05.220 --> 00:17:07.960
Instantly faster. Much faster. But there's a

00:17:07.960 --> 00:17:10.980
trade -off, and this is key. Now the manager's

00:17:10.980 --> 00:17:13.640
instruction book is bigger. The final program

00:17:13.640 --> 00:17:16.660
takes up more memory because you've duplicated

00:17:16.660 --> 00:17:19.660
those instructions. And memory was super expensive

00:17:19.660 --> 00:17:23.059
back then. Incredibly expensive. So Alan's work

00:17:23.059 --> 00:17:25.319
was about creating the rules. She turned that

00:17:25.319 --> 00:17:27.799
tradeoff into a mathematical formula the computer

00:17:27.799 --> 00:17:31.359
could use to decide. When is it worth it? When

00:17:31.359 --> 00:17:34.140
is the speed gain from inlining more valuable

00:17:34.140 --> 00:17:36.480
than the memory cost? That makes total sense.

00:17:36.759 --> 00:17:40.450
Okay, let's do another one. Loop unrolling. This

00:17:40.450 --> 00:17:42.210
one just sounds like a yoga pose or something.

00:17:42.450 --> 00:17:45.750
It's definitely less relaxing than yoga. So computers

00:17:45.750 --> 00:17:49.890
love loops. Do this specific task 1 ,000 times.

00:17:49.990 --> 00:17:51.849
That's what they're best at. Right. Let's stick

00:17:51.849 --> 00:17:54.190
with the office. Imagine you're an intern and

00:17:54.190 --> 00:17:57.869
your job is to stamp 100 envelopes. A standard

00:17:57.869 --> 00:18:00.609
computer loop would look like this. One, pick

00:18:00.609 --> 00:18:03.789
up an envelope. Two, stamp it. Three, put it

00:18:03.789 --> 00:18:07.369
down. Four, ask yourself, am I done with all

00:18:07.369 --> 00:18:10.730
100 envelopes yet? Four, ask yourself. Five,

00:18:10.990 --> 00:18:13.950
if the answer is no, go back to step one. Okay,

00:18:14.049 --> 00:18:15.630
that seems straightforward. But look at step

00:18:15.630 --> 00:18:17.809
four. You are asking yourself that question,

00:18:18.089 --> 00:18:21.039
am I done yet? 100 separate times. Each time

00:18:21.039 --> 00:18:23.559
you ask, it's a little mental stutter. It interrupts

00:18:23.559 --> 00:18:25.599
the flow of the work. And in a computer, that

00:18:25.599 --> 00:18:27.640
question isn't free. That check takes processing

00:18:27.640 --> 00:18:30.380
power. Exactly. That conditional check and the

00:18:30.380 --> 00:18:32.119
jump back to the beginning of the loop consume

00:18:32.119 --> 00:18:34.759
CPU cycles. Loop unrolling is when the compiler

00:18:34.759 --> 00:18:36.720
looks at that and says, hey, I know for a fact

00:18:36.720 --> 00:18:38.680
you have to do at least, say, four of these.

00:18:38.720 --> 00:18:40.940
So here's a new, better plan. It batches the

00:18:40.940 --> 00:18:43.240
work. It batches the work. The new instructions

00:18:43.240 --> 00:18:46.750
are, one, stamp an envelope. Two. Stamp an envelope.

00:18:46.910 --> 00:18:49.369
Three. Stamp an envelope. Four. Stamp an envelope.

00:18:49.569 --> 00:18:53.049
Five. Now ask yourself, am I done with the whole

00:18:53.049 --> 00:18:55.269
stack yet? Ah, so you've just cut the number

00:18:55.269 --> 00:18:57.450
of times you have to ask that question by 75%.

00:18:57.450 --> 00:19:00.470
Precisely. You reduce the loop overhead. You

00:19:00.470 --> 00:19:02.829
spend more of the computer's time doing the actual

00:19:02.829 --> 00:19:05.710
work stamping and less time managing the work.

00:19:05.849 --> 00:19:08.069
It sounds almost trivial to us with our super

00:19:08.069 --> 00:19:11.039
fast computers today. But back then. Back then,

00:19:11.140 --> 00:19:14.400
on a processor from the 1960s, eliminating all

00:19:14.400 --> 00:19:17.200
those jump and compare instructions could speed

00:19:17.200 --> 00:19:20.480
up a critical part of a program by 20, 30, even

00:19:20.480 --> 00:19:23.279
40%. That's a massive gain. It's the difference

00:19:23.279 --> 00:19:25.839
between buying in bulk at a big box store versus

00:19:25.839 --> 00:19:28.240
running to the corner store for one item every

00:19:28.240 --> 00:19:30.480
single day. That's a perfect analogy. And then

00:19:30.480 --> 00:19:32.599
there's one called CodeMotion, which is my personal

00:19:32.599 --> 00:19:34.440
favorite because it really highlights how ridiculously

00:19:34.440 --> 00:19:37.569
literal and... Frankly, dumb a computer can be

00:19:37.569 --> 00:19:40.690
if you don't help it. Okay, I'm intrigued. Tell

00:19:40.690 --> 00:19:43.210
me about code motion. Alright, new analogy. Imagine

00:19:43.210 --> 00:19:45.750
you are painting a large fence and you're working

00:19:45.750 --> 00:19:48.150
your way down the panels inside a loop. Your

00:19:48.150 --> 00:19:51.450
instructions are 1. Dip your brush in the paint

00:19:51.450 --> 00:19:56.170
can. 2. Paint one fence panel. 3. Open the gate

00:19:56.170 --> 00:19:59.349
so the dog can go out. 4. Go back to step one

00:19:59.349 --> 00:20:02.839
for the next panel. Wait, but... The gate is

00:20:02.839 --> 00:20:04.839
already open after the first time. Why would

00:20:04.839 --> 00:20:06.980
I keep opening it for every single panel? Because

00:20:06.980 --> 00:20:09.440
the instruction is inside the loop. A naive computer

00:20:09.440 --> 00:20:12.019
just follows its orders blindly. It gets to step

00:20:12.019 --> 00:20:13.980
three and thinks, my instruction is open the

00:20:13.980 --> 00:20:16.539
gate. I will now perform the open gate action.

00:20:17.069 --> 00:20:19.450
It has no idea that the state of the gate hasn't

00:20:19.450 --> 00:20:21.670
changed. It just does what it's told over and

00:20:21.670 --> 00:20:24.009
over. That is just maddeningly inefficient. It

00:20:24.009 --> 00:20:26.309
is. So CodeMotion is the compiler being smart

00:20:26.309 --> 00:20:28.190
enough to analyze that loop and say, hey, wait

00:20:28.190 --> 00:20:30.309
a second. The action open the gate has nothing

00:20:30.309 --> 00:20:32.150
to do with which fence panel we're currently

00:20:32.150 --> 00:20:34.329
painting. It's an invariant. It doesn't change

00:20:34.329 --> 00:20:36.369
inside the loop. So you just move it. You move

00:20:36.369 --> 00:20:38.710
it. The compiler rewrites the program to be,

00:20:38.829 --> 00:20:42.329
one, open the gate once. Two, now start the loop.

00:20:42.490 --> 00:20:46.170
Dip brush, paint panel, repeat. It's so simple

00:20:46.170 --> 00:20:48.750
and logical when you explain it, but someone

00:20:48.750 --> 00:20:51.470
had to figure out how to teach a machine to see

00:20:51.470 --> 00:20:53.970
that logic automatically. And that was the genius

00:20:53.970 --> 00:20:57.349
of their work. In 1971, Fran Allen and John Koch

00:20:57.349 --> 00:21:01.150
published a paper called A Catalog of Optimizing

00:21:01.150 --> 00:21:05.140
Transformations. It was... It was basically the

00:21:05.140 --> 00:21:07.400
Bible for all of this. The definitive guide.

00:21:07.619 --> 00:21:10.079
It took what had always been an art form, this

00:21:10.079 --> 00:21:13.059
wizard -like intuition of, oh, I think I can

00:21:13.059 --> 00:21:15.640
tweak this little bit of assembly code here.

00:21:15.799 --> 00:21:18.700
And they turned it into a rigorous, repeatable

00:21:18.700 --> 00:21:21.720
science that could be fully automated. They proved

00:21:21.720 --> 00:21:24.539
the wizards wrong. They proved that a well -designed

00:21:24.539 --> 00:21:27.059
compiler could analyze the whole program and

00:21:27.059 --> 00:21:29.900
generate machine code that was not just as good

00:21:29.900 --> 00:21:32.200
as, but often much, much better than what the

00:21:32.200 --> 00:21:34.319
average human programmer could write. Because

00:21:34.319 --> 00:21:36.799
the compiler never gets tired. It never gets

00:21:36.799 --> 00:21:39.079
lazy and forgets to move the gate instruction.

00:21:39.400 --> 00:21:40.859
And it can see the whole picture at once. It

00:21:40.859 --> 00:21:43.740
has a global view of the entire program, which

00:21:43.740 --> 00:21:45.400
was another one of Allen's huge contributions,

00:21:45.759 --> 00:21:48.880
the idea of data flow analysis. Which is what,

00:21:48.960 --> 00:21:52.119
exactly. It's about systematically tracking how

00:21:52.359 --> 00:21:54.500
Every piece of data moves through the entire

00:21:54.500 --> 00:21:58.299
program. Where is a variable created? Where is

00:21:58.299 --> 00:22:01.380
it used? Where is it changed? By mapping this

00:22:01.380 --> 00:22:03.920
out, the compiler can make incredibly smart decisions

00:22:03.920 --> 00:22:06.400
that a human looking at only one function at

00:22:06.400 --> 00:22:09.160
a time would miss. So she's basically conquered

00:22:09.160 --> 00:22:11.119
the single processor. She's written the Bible

00:22:11.119 --> 00:22:13.900
of optimization. But technology never stands

00:22:13.900 --> 00:22:16.819
still. Never. We get into the 1980s and the hardware

00:22:16.819 --> 00:22:18.819
starts to change in a fundamental way. Right.

00:22:18.940 --> 00:22:21.380
We stop trying to make one single brain faster

00:22:21.380 --> 00:22:23.819
and bigger and we start trying to use many brains

00:22:23.819 --> 00:22:26.599
at once. The shift to parallel computing. And

00:22:26.599 --> 00:22:28.579
this is where the problems get an order of magnitude

00:22:28.579 --> 00:22:30.900
more difficult. Why is that? I mean, intuitively.

00:22:31.640 --> 00:22:34.099
Two heads are better than one, right? Four processors

00:22:34.099 --> 00:22:36.700
should be four times as fast. In life, yes. In

00:22:36.700 --> 00:22:38.920
computing, it's a logistical nightmare. For its

00:22:38.920 --> 00:22:41.460
entire history up until the 80s, programming

00:22:41.460 --> 00:22:43.920
was sequential. It was a story. You do step one,

00:22:44.000 --> 00:22:45.839
then you do step two, then step three. It's a

00:22:45.839 --> 00:22:48.039
single predictable timeline. A straight line.

00:22:48.259 --> 00:22:50.799
A straight line. Parallel computing shatters

00:22:50.799 --> 00:22:53.759
that timeline. Now you have, say, four processors.

00:22:54.240 --> 00:22:56.099
You want to give each of them a piece of the

00:22:56.099 --> 00:22:59.019
work to do at the same time. But what happens

00:22:59.019 --> 00:23:01.819
if processor A needs the result of a calculation

00:23:01.819 --> 00:23:03.880
that processor B is still working on? You get

00:23:03.880 --> 00:23:06.079
a traffic jam. The whole thing has to stop and

00:23:06.079 --> 00:23:08.359
wait. Or worse, you get something called a race

00:23:08.359 --> 00:23:11.160
condition, where the final result depends on

00:23:11.160 --> 00:23:14.079
which processor gets there first. Or a deadlock,

00:23:14.119 --> 00:23:16.599
where processor A is waiting for B and B is waiting

00:23:16.599 --> 00:23:19.480
for A, and the entire system just freezes forever.

00:23:19.859 --> 00:23:24.099
So writing parallel code by hand is just Brain

00:23:24.099 --> 00:23:25.819
-breakingly difficult. It is because the human

00:23:25.819 --> 00:23:28.200
brain is really, really bad at keeping track

00:23:28.200 --> 00:23:31.460
of four or eight or a thousand simultaneous timelines.

00:23:31.799 --> 00:23:33.819
So what was Fran's solution? What was her approach

00:23:33.819 --> 00:23:36.279
to this new challenge? Well, her answer was the

00:23:36.279 --> 00:23:39.259
same as before. Automation. She believed the

00:23:39.259 --> 00:23:41.180
programmer shouldn't have to deal with this complexity.

00:23:41.400 --> 00:23:43.960
The compiler should. Let the machine manage the

00:23:43.960 --> 00:23:46.720
mess. Exactly. She led a massive project at IBM

00:23:46.720 --> 00:23:49.440
called PT -RAM, which stood for Parallel Translator.

00:23:49.680 --> 00:23:54.180
And the goal was... unbelievably audacious for

00:23:54.180 --> 00:23:56.440
the time. What was it? The goal was to take a

00:23:56.440 --> 00:23:59.000
normal sequential program written by a regular

00:23:59.000 --> 00:24:01.400
human who thinks in a straight line and have

00:24:01.400 --> 00:24:04.079
the PTR and compiler automatically figure out

00:24:04.079 --> 00:24:06.440
how to break it apart and run it safely and efficiently

00:24:06.440 --> 00:24:09.019
on a parallel machine. She wanted the software

00:24:09.019 --> 00:24:11.700
to become the world's best project manager. That's

00:24:11.700 --> 00:24:14.269
a great way to put it. And to do this, her team

00:24:14.269 --> 00:24:16.430
had to invent a new way of looking at programs.

00:24:16.809 --> 00:24:19.390
They created a concept called the program dependence

00:24:19.390 --> 00:24:21.950
graph. Okay, that sounds important. Walk us through

00:24:21.950 --> 00:24:24.450
it. Think of a complex recipe for making dinner.

00:24:24.609 --> 00:24:27.250
A normal, sequential recipe looks like a list.

00:24:27.630 --> 00:24:33.170
1. Chop onions. 2. Heat pan on stove. 3. Saute

00:24:33.170 --> 00:24:37.880
onions in the pan. 4. Toss the salad. 5. bake

00:24:37.880 --> 00:24:40.119
the chicken right a sequential cook does step

00:24:40.119 --> 00:24:42.880
one then two then three and so on the program

00:24:42.880 --> 00:24:45.380
dependence graph isn't a list it's a mat it draws

00:24:45.380 --> 00:24:47.579
lines between the tasks based on what depends

00:24:47.579 --> 00:24:50.160
on what so saute onions depends on chopped onions

00:24:50.160 --> 00:24:51.920
you can't do it without the chopped onions exactly

00:24:51.920 --> 00:24:54.539
and saute onions also depends on heat pan you

00:24:54.539 --> 00:24:56.619
need the hot pan there are dependencies but what

00:24:56.619 --> 00:24:59.839
about toss the salad that's an island It doesn't

00:24:59.839 --> 00:25:01.900
depend on the onions or the pan or the chicken.

00:25:02.059 --> 00:25:04.859
It's totally independent. Precisely. And Bake

00:25:04.859 --> 00:25:07.819
the Chicken is also mostly independent, at least

00:25:07.819 --> 00:25:10.680
at the beginning. The compiler builds this dependency

00:25:10.680 --> 00:25:13.220
map, and then it can see the opportunities for

00:25:13.220 --> 00:25:15.599
parallelism. It can see that you can have one

00:25:15.599 --> 00:25:18.140
processor chopping onions while another processor

00:25:18.140 --> 00:25:20.500
is pausing the salad at the exact same time.

00:25:20.660 --> 00:25:22.940
It untangles the spaghetti before it even gets

00:25:22.940 --> 00:25:25.740
cooked. It can assign independent tasks to different

00:25:25.740 --> 00:25:28.690
processors. This concept, the program dependence

00:25:28.690 --> 00:25:31.390
graph, is still the primary structuring method

00:25:31.390 --> 00:25:34.609
used by most parallelizing compilers today. It

00:25:34.609 --> 00:25:36.869
was a monumental breakthrough. She was basically

00:25:36.869 --> 00:25:39.690
building the air traffic control system for the

00:25:39.690 --> 00:25:42.130
information superhighway. That's a very 90s metaphor,

00:25:42.230 --> 00:25:44.069
but you know what? It actually fits perfectly.

00:25:44.309 --> 00:25:47.450
I'm bringing it back. So we've established this,

00:25:47.529 --> 00:25:51.150
this titan of technical achievement, a true giant.

00:25:51.390 --> 00:25:53.890
But we can't tell her full story without talking

00:25:53.890 --> 00:25:57.039
about the environment she did all this in. IBM.

00:25:57.039 --> 00:26:00.579
The tech world. It was a boys club. It absolutely

00:26:00.579 --> 00:26:03.660
was. But here's a statistic that's going to blow

00:26:03.660 --> 00:26:07.980
your mind. In the 1970s and 80s, in the compiler

00:26:07.980 --> 00:26:10.339
research group that Fran Allen managed at IBM,

00:26:10.559 --> 00:26:12.940
do you want to take a guess at the gender breakdown?

00:26:13.099 --> 00:26:15.680
Oh, man. Based on everything I know about that

00:26:15.680 --> 00:26:19.599
era, I'm going to guess it was like 95 % men.

00:26:20.059 --> 00:26:22.119
Maybe one or two other women. It was nearly 50

00:26:22.119 --> 00:26:25.920
% women. Get out of here. 50 % in the 1970s.

00:26:26.079 --> 00:26:29.099
50%. One to one. That is. That's better than

00:26:29.099 --> 00:26:31.960
most Silicon Valley companies are today in 2026.

00:26:32.180 --> 00:26:34.500
How on earth did that happen? It happened because

00:26:34.500 --> 00:26:37.380
Fran Allen made it happen. She didn't just sit

00:26:37.380 --> 00:26:40.220
back and accept the pipeline problem as an excuse.

00:26:40.559 --> 00:26:43.960
She actively sought out, recruited, and mentored

00:26:43.960 --> 00:26:46.339
women. She created an environment where they

00:26:46.339 --> 00:26:49.019
could not just survive, but thrive. She built

00:26:49.019 --> 00:26:51.059
the culture. She built the culture. A colleague

00:26:51.059 --> 00:26:53.299
of hers, Barbara Simons, who later became president

00:26:53.299 --> 00:26:56.880
of the ACM, called Fran a strong feminist who

00:26:56.880 --> 00:26:58.920
understood that men mentorship wasn't just about

00:26:58.920 --> 00:27:01.579
being nice. It was about strategic advocacy.

00:27:01.880 --> 00:27:03.740
It's about holding the door open for the people

00:27:03.740 --> 00:27:05.819
coming behind you. And she did that explicitly.

00:27:06.119 --> 00:27:07.900
There's a great story. She took a sabbatical

00:27:07.900 --> 00:27:11.359
to teach at Stanford in 1977. And in one of her

00:27:11.359 --> 00:27:14.180
graduate classes was a student named Anita Borg.

00:27:14.400 --> 00:27:17.619
Anita Borg, as in the founder of the Grace Hopper

00:27:17.619 --> 00:27:20.279
Celebration of Women in Computing, the AnitaB

00:27:20.279 --> 00:27:24.079
.org Institute, that Anita Borg. The very same,

00:27:24.180 --> 00:27:26.619
a legendary figure in her own right. And Anita

00:27:26.619 --> 00:27:29.180
Borg later said that during her entire Ph .D.

00:27:29.180 --> 00:27:32.039
program at a major university, Fran Allen was

00:27:32.039 --> 00:27:34.440
the only female professor she ever had. The only

00:27:34.440 --> 00:27:36.839
one. Wow. Imagine the impact of that. You're

00:27:36.839 --> 00:27:38.980
sitting in a classroom, probably surrounded by

00:27:38.980 --> 00:27:40.900
men, maybe feeling like an imposter, questioning

00:27:40.900 --> 00:27:43.200
if you even belong there. And you look up at

00:27:43.200 --> 00:27:44.900
the podium and the person teaching you is the

00:27:44.900 --> 00:27:47.380
world's foremost expert on compiler optimization.

00:27:48.279 --> 00:27:50.119
And she looks like you. It just changes your

00:27:50.119 --> 00:27:52.200
whole perception of what's possible. It moves

00:27:52.200 --> 00:27:54.500
the goalposts from impossible to that could be

00:27:54.500 --> 00:27:57.799
me. It's everything. And IBM did eventually recognize

00:27:57.799 --> 00:28:00.420
her leadership. She became the first female IBM

00:28:00.420 --> 00:28:03.640
fellow in 1989. Which is a huge deal at IBM.

00:28:03.779 --> 00:28:06.400
It's their highest technical honor. It's reserved

00:28:06.400 --> 00:28:08.660
for a tiny fraction of their most brilliant researchers.

00:28:09.059 --> 00:28:11.440
She was also president of the IBM Academy of

00:28:11.440 --> 00:28:13.960
Technology. And they later created mentorship

00:28:13.960 --> 00:28:17.970
awards in her name. But the biggest award. The

00:28:17.970 --> 00:28:20.529
one that cemented her place in the Pantheon came

00:28:20.529 --> 00:28:24.410
much later. The Turing Award. The Nobel of Computing.

00:28:24.430 --> 00:28:28.170
It's 2006. Fran has been retired from IBM for

00:28:28.170 --> 00:28:30.950
a few years. And the Association for Computing

00:28:30.950 --> 00:28:33.430
Machinery makes the announcement. She becomes

00:28:33.430 --> 00:28:35.869
the first woman in the award's 40 -year history

00:28:35.869 --> 00:28:39.130
to receive it. It took 40 years. 40 years. It's

00:28:39.130 --> 00:28:41.109
a pretty sobering statistic when you think about

00:28:41.109 --> 00:28:43.369
it. And frankly, many people felt it was long

00:28:43.369 --> 00:28:45.769
overdue. Especially when you consider that her

00:28:45.769 --> 00:28:48.809
collaborator, John Koch had won the same award.

00:28:48.950 --> 00:28:51.609
In 1987. Wait a minute. They did the foundational

00:28:51.609 --> 00:28:53.869
work together. The seminal papers were credited

00:28:53.869 --> 00:28:57.569
to Allen and Koch. And he won the award 19 years

00:28:57.569 --> 00:29:01.509
before she did. 19 years earlier, yes. That stings.

00:29:01.509 --> 00:29:03.970
That really says something. It does. It reflects

00:29:03.970 --> 00:29:06.930
the biases of the era. It reflects who was often

00:29:06.930 --> 00:29:10.049
seen as the lead genius and who was perhaps perceived

00:29:10.049 --> 00:29:13.170
as the helper or the implementer, even when that

00:29:13.170 --> 00:29:16.140
wasn't the case. But to her credit. She seems

00:29:16.140 --> 00:29:18.720
to have handled it with incredible grace. She

00:29:18.720 --> 00:29:21.180
never expressed any public bitterness about it.

00:29:21.240 --> 00:29:24.099
When she finally won, she used her acceptance

00:29:24.099 --> 00:29:26.579
speech and the platform it gave her to talk about.

00:29:27.559 --> 00:29:30.220
Well, you can guess. More opportunities for women

00:29:30.220 --> 00:29:33.019
in science? Exactly. She said she hoped the award

00:29:33.019 --> 00:29:34.980
would create more opportunities for women in

00:29:34.980 --> 00:29:37.519
science, computing, and engineering. She stayed

00:29:37.519 --> 00:29:40.180
on message, always. So before we wrap this all

00:29:40.180 --> 00:29:42.750
up, I want to pivot to a part of her life that

00:29:42.750 --> 00:29:44.930
seems completely disconnected from computers.

00:29:45.109 --> 00:29:47.430
Right. We've painted this picture of her as this

00:29:47.430 --> 00:29:50.509
intense lab researcher staring at code, living

00:29:50.509 --> 00:29:53.230
in this abstract world of logic. But her weekends

00:29:53.230 --> 00:29:56.710
were different. Oh, she was not staring at a

00:29:56.710 --> 00:29:58.569
screen on the weekend. She was staring at glaciers

00:29:58.569 --> 00:30:01.650
and rock faces. Fran Allen was a serious, hardcore

00:30:01.650 --> 00:30:03.390
mountain climber. And we're not talking about...

00:30:03.519 --> 00:30:05.519
you know, casual day hikes in the local hills.

00:30:05.640 --> 00:30:08.599
No, no. We are talking about expeditions to the

00:30:08.599 --> 00:30:11.160
high Arctic. She was an active member of the

00:30:11.160 --> 00:30:13.960
American Alpine Club. She was part of an expedition

00:30:13.960 --> 00:30:16.420
to Ellesmere Island. Ellesmere Island. I mean,

00:30:16.420 --> 00:30:18.039
for people who don't know, that is the most northern

00:30:18.039 --> 00:30:20.920
part of Canada. It is way up there. That is polar

00:30:20.920 --> 00:30:23.000
bear country. It is one of the most desolate,

00:30:23.140 --> 00:30:26.579
remote, and dangerous places on the planet. And

00:30:26.579 --> 00:30:28.720
she was on a team that established a completely

00:30:28.720 --> 00:30:32.089
new route across a section of the island. That's

00:30:32.089 --> 00:30:34.009
incredible. And I feel like there's a perfect

00:30:34.009 --> 00:30:36.349
metaphor in there for her work. I think so, too.

00:30:36.470 --> 00:30:39.009
How do you see it? Well, think about what a technical

00:30:39.009 --> 00:30:41.250
climb is. You're standing at the bottom of a

00:30:41.250 --> 00:30:43.670
mountain, looking up at this chaotic, dangerous,

00:30:44.049 --> 00:30:47.730
seemingly impassable landscape. A rock face,

00:30:48.049 --> 00:30:51.730
a glacier field. And your job is to find a path

00:30:51.730 --> 00:30:54.430
through it. Not just any path, but the optimal

00:30:54.430 --> 00:30:56.569
path. the one that conserves the most energy,

00:30:56.750 --> 00:30:59.230
the one that avoids the biggest dangers, the

00:30:59.230 --> 00:31:01.329
most efficient route to the top. It's optimization.

00:31:01.690 --> 00:31:04.009
It's the exact same problem. It's exactly the

00:31:04.009 --> 00:31:06.309
same problem. Whether she was looking at a messy

00:31:06.309 --> 00:31:09.910
loop of Fortran code or a field of glacial crevasses,

00:31:10.150 --> 00:31:13.509
her mind was doing the same thing. She was identifying

00:31:13.509 --> 00:31:16.930
dependencies, finding invariance, and charting

00:31:16.930 --> 00:31:19.369
the most efficient path. She was bringing order

00:31:19.369 --> 00:31:22.779
to chaos. The great explorer of complex systems,

00:31:22.859 --> 00:31:25.579
both digital and natural. That's beautiful. She

00:31:25.579 --> 00:31:28.279
kept exploring right up until the end. She passed

00:31:28.279 --> 00:31:32.160
away in 2020 on her 88th birthday. And the outpouring

00:31:32.160 --> 00:31:34.480
of respect from the entire computing community

00:31:34.480 --> 00:31:38.359
was universal. The IE, a huge professional organization,

00:31:38.880 --> 00:31:42.220
created the Frances E. Allen Medal in her honor.

00:31:42.339 --> 00:31:43.900
And it's only the second medal in their history

00:31:43.900 --> 00:31:45.799
to be named after a woman. The other one being

00:31:45.799 --> 00:31:48.019
the Ada Lovelace Award. She's in very good company.

00:31:48.220 --> 00:31:49.839
So let's bring it all home. We've gone from the

00:31:49.839 --> 00:31:52.339
farm to the source code, from the spies to the

00:31:52.339 --> 00:31:54.819
parallel algorithms. What's the big takeaway?

00:31:54.960 --> 00:31:57.150
Why should you... listening to this right now,

00:31:57.269 --> 00:32:00.069
care about Fran Allen? You should care because

00:32:00.069 --> 00:32:02.509
the modern world you're living in is built on

00:32:02.509 --> 00:32:05.410
the foundation of her work. Every single time

00:32:05.410 --> 00:32:08.109
you open an app on your phone and it loads instantly

00:32:08.109 --> 00:32:10.990
instead of taking 10 seconds. You can thank the

00:32:10.990 --> 00:32:13.650
principles of optimization she developed. Every

00:32:13.650 --> 00:32:16.309
time you check a weather forecast and a supercomputer

00:32:16.309 --> 00:32:19.390
model running on thousands of processors has

00:32:19.390 --> 00:32:21.730
predicted the rain. That's the legacy of her

00:32:21.730 --> 00:32:24.769
work in parallel computing. She is the invisible

00:32:24.769 --> 00:32:27.349
architect. She's the reason our digital world

00:32:27.349 --> 00:32:30.269
is fast and responsive. She made computing viable.

00:32:30.859 --> 00:32:34.339
She proved that we as humans didn't need to contort

00:32:34.339 --> 00:32:37.079
our brains to speak the machine's language. We

00:32:37.079 --> 00:32:39.240
could instead teach the machine to understand

00:32:39.240 --> 00:32:42.160
ours and to do it efficiently. She democratized

00:32:42.160 --> 00:32:44.220
high performance computing. She made it possible

00:32:44.220 --> 00:32:46.359
for people who weren't assembly code wizards

00:32:46.359 --> 00:32:49.160
to write software that could solve huge problems.

00:32:49.319 --> 00:32:51.759
And on a more philosophical level, she reminds

00:32:51.759 --> 00:32:54.289
us of the profound value of looking. Under the

00:32:54.289 --> 00:32:56.769
hood. That is the single biggest lesson from

00:32:56.769 --> 00:32:59.710
her life. She was handed a tool, Fortran, and

00:32:59.710 --> 00:33:01.569
she wasn't content to just use it. She had to

00:33:01.569 --> 00:33:03.730
open it up. She had to read the source. And that

00:33:03.730 --> 00:33:05.930
leads me to one last slightly provocative thought

00:33:05.930 --> 00:33:08.470
for you to chew on. Okay. We are living in a

00:33:08.470 --> 00:33:12.250
moment right now that feels a lot like 1957 all

00:33:12.250 --> 00:33:15.829
over again. We have a powerful new tool that

00:33:15.829 --> 00:33:19.349
a lot of people are skeptical of. AI. Specifically,

00:33:19.529 --> 00:33:24.049
AI that can write code. GitHub Copilot. ChatGPT.

00:33:24.170 --> 00:33:27.009
It's the ultimate compiler in a way. Yeah. It

00:33:27.009 --> 00:33:30.109
translates plain English human intent directly

00:33:30.109 --> 00:33:33.069
into functional code. Exactly. Fran Allen spent

00:33:33.069 --> 00:33:35.910
her entire career teaching computers how to optimize

00:33:35.910 --> 00:33:38.990
code that humans wrote. Now the computers are

00:33:38.990 --> 00:33:40.609
starting to create the code from scratch. In

00:33:40.609 --> 00:33:42.390
a way, it's the ultimate fulfillment of her vision.

00:33:42.430 --> 00:33:44.230
The machine is doing all the heavy lifting. It

00:33:44.230 --> 00:33:47.180
is. And here's the question. Fran Allen became

00:33:47.180 --> 00:33:49.500
a genius precisely because she was forced to

00:33:49.500 --> 00:33:51.059
get her hands dirty. She had to read the raw

00:33:51.059 --> 00:33:53.000
assembly. She had to understand the nuts and

00:33:53.000 --> 00:33:55.859
bolts at the deepest possible level. If the AI

00:33:55.859 --> 00:33:58.759
does all of that for us, if the car dries itself

00:33:58.759 --> 00:34:01.720
perfectly every time, do we lose something critical?

00:34:01.960 --> 00:34:04.299
Are we raising a new generation of programmers

00:34:04.299 --> 00:34:07.059
who will never know how to read the source? That

00:34:07.059 --> 00:34:10.659
is the fundamental risk. Convenience can sometimes

00:34:10.659 --> 00:34:13.750
be the enemy of deep understanding. If we stop

00:34:13.750 --> 00:34:15.670
looking under the hood because the engine appears

00:34:15.670 --> 00:34:18.210
to never break down, we might completely forget

00:34:18.210 --> 00:34:20.349
how the engine works. And when it finally does

00:34:20.349 --> 00:34:24.690
break, in some new and unexpected way. We might

00:34:24.690 --> 00:34:26.610
not have a Fran Allen around who knows how to

00:34:26.610 --> 00:34:28.929
fix it. A little bit of existential dread to

00:34:28.929 --> 00:34:31.309
end our deep dive. Just a little, to keep you

00:34:31.309 --> 00:34:33.590
sharp. That's it for this one. Go read some source

00:34:33.590 --> 00:34:37.690
code, or maybe climb a mountain, or both. Thanks

00:34:37.690 --> 00:34:38.610
for listening. Take care.
