WEBVTT

00:00:00.000 --> 00:00:02.220
Welcome back to the Deep Dive. Today, I want

00:00:02.220 --> 00:00:04.919
you to picture something really specific. Okay,

00:00:04.980 --> 00:00:07.219
what are we picturing? Picture a black screen,

00:00:07.360 --> 00:00:11.560
a blinking cursor, and you are staring at it,

00:00:11.619 --> 00:00:14.919
about to type the very first thing into a totally

00:00:14.919 --> 00:00:18.160
new system. I know exactly where this is going.

00:00:18.280 --> 00:00:20.420
Right. It's a ritual that is so ingrained in

00:00:20.420 --> 00:00:22.640
the technological world that we almost never

00:00:22.640 --> 00:00:25.980
stop to ask why we do it. It's usually just two

00:00:25.980 --> 00:00:28.960
words, maybe a comma, and almost always an exclamation

00:00:28.960 --> 00:00:32.289
mark. Hello, world. Exactly. The most famous

00:00:32.289 --> 00:00:35.130
phrase in computing. If you have ever tried to

00:00:35.130 --> 00:00:37.729
learn to code, whether it was Python last week

00:00:37.729 --> 00:00:40.509
or basic 30 years ago, this was almost certainly

00:00:40.509 --> 00:00:42.369
the very first thing you built. Oh, without a

00:00:42.369 --> 00:00:44.630
doubt. And it seems deceptively simple. You type

00:00:44.630 --> 00:00:46.789
a line, the screen talks back to you. Mission

00:00:46.789 --> 00:00:49.509
accomplished. It feels simple, sure. But that

00:00:49.509 --> 00:00:52.009
simplicity masks a massive amount of complexity.

00:00:52.590 --> 00:00:55.579
Hello, world isn't just a greeting. It's a historical

00:00:55.579 --> 00:00:58.320
artifact. It's a rigorous stress test for your

00:00:58.320 --> 00:01:01.359
entire system. And in many ways, it's the fundamental

00:01:01.359 --> 00:01:04.700
handshake between human and machine. And that's

00:01:04.700 --> 00:01:07.430
the mission for this deep dive. We aren't just

00:01:07.430 --> 00:01:09.670
looking at the syntax or how to type the code.

00:01:09.950 --> 00:01:12.689
We are going to unpack the history, which involves

00:01:12.689 --> 00:01:17.049
everything from Bell Labs to a 1950s radio DJ.

00:01:17.310 --> 00:01:19.930
And we're going to look at why, 50 years later,

00:01:20.109 --> 00:01:22.989
this is still the default sanity check for millions

00:01:22.989 --> 00:01:25.689
of developers. It really is the cultural baseline

00:01:25.689 --> 00:01:28.409
of the entire industry. It's the one thing almost

00:01:28.409 --> 00:01:31.109
every programmer has in common, regardless of

00:01:31.109 --> 00:01:33.290
what language they speak or what era they grew

00:01:33.290 --> 00:01:35.189
up in. So let's start with the definition, just

00:01:35.189 --> 00:01:37.090
so everyone is on the same page. same page. When

00:01:37.090 --> 00:01:39.450
we say a hello world program, strictly speaking,

00:01:39.730 --> 00:01:42.109
what are we actually talking about? At its core,

00:01:42.230 --> 00:01:45.510
it is the absolute simplest valid program you

00:01:45.510 --> 00:01:48.250
can write in a given language that produces a

00:01:48.250 --> 00:01:50.790
side effect. A side effect meaning? Specifically,

00:01:50.829 --> 00:01:53.650
outputting that text to a display device, usually

00:01:53.650 --> 00:01:56.159
the console. It does nothing else. It doesn't

00:01:56.159 --> 00:01:58.780
calculate. It doesn't take input. It just speaks.

00:01:58.939 --> 00:02:00.959
It just screams into the void and the void answers.

00:02:01.079 --> 00:02:04.219
Now, I think most people, myself included, assume

00:02:04.219 --> 00:02:06.180
this phrase just sort of emerged like it was

00:02:06.180 --> 00:02:09.509
always there. But looking at the sources we have,

00:02:09.629 --> 00:02:12.870
there is a very specific lineage here. We can

00:02:12.870 --> 00:02:16.030
trace it back to one specific book. We can. The

00:02:16.030 --> 00:02:18.750
moment it solidified as the tradition was 1978.

00:02:19.349 --> 00:02:21.389
That's when Brian Kernighan and Dennis Ritchie

00:02:21.389 --> 00:02:24.009
published the C programming language. Which is

00:02:24.009 --> 00:02:27.169
known as KNR. Right, KNR. It is basically the

00:02:27.169 --> 00:02:30.009
Bible of computing. C is the ancestor of almost

00:02:30.009 --> 00:02:33.530
all modern language. You know, C++, Java, Python,

00:02:33.650 --> 00:02:37.009
they all owe amounts of debt to C. Yeah. In that

00:02:37.009 --> 00:02:39.710
book, the very first example Kernighan used to

00:02:39.710 --> 00:02:42.030
show how the language worked was a program that

00:02:42.030 --> 00:02:44.729
printed hello, world in all lowercase. And because

00:02:44.729 --> 00:02:47.270
everyone learned from that exact book, everyone

00:02:47.270 --> 00:02:49.610
just copied the example, it became the default.

00:02:49.629 --> 00:02:51.710
Precisely. It became a meme before we even really

00:02:51.710 --> 00:02:54.169
had the word meme. Right. But, and this is where

00:02:54.169 --> 00:02:56.250
the history gets murky and really interesting,

00:02:56.449 --> 00:02:58.330
Kernighan didn't actually invent it for that

00:02:58.330 --> 00:03:00.909
book. He was recycling his own material. This

00:03:00.909 --> 00:03:02.930
is the part I found fascinating in our research.

00:03:03.370 --> 00:03:06.069
We have to go back further into the depths of

00:03:06.069 --> 00:03:09.169
Bell Labs in the early 70s. Right. If you dig

00:03:09.169 --> 00:03:11.870
into the internal memos of Bell Labs, you find

00:03:11.870 --> 00:03:15.389
a tutorial from 1974, also by Kernighan, called

00:03:15.389 --> 00:03:18.550
Programming in C, A Tutorial. The phrase is right

00:03:18.550 --> 00:03:21.210
there. But if you keep digging, you hit 1972.

00:03:21.770 --> 00:03:25.770
Yes. 1972. Before C, there was B. The language

00:03:25.770 --> 00:03:28.650
era. Exactly. And Kernighan wrote a tutorial

00:03:28.650 --> 00:03:32.139
introduction to the language B. That is the earliest

00:03:32.139 --> 00:03:34.819
documented instance we have of code being used

00:03:34.819 --> 00:03:38.099
to print hello world. But the context in the

00:03:38.099 --> 00:03:40.620
B tutorial was totally different, wasn't it?

00:03:40.659 --> 00:03:42.900
It wasn't just a friendly say hi exercise. It

00:03:42.900 --> 00:03:45.419
was solving a pretty weird technical problem.

00:03:45.639 --> 00:03:48.219
It was. This is a great example of how hardware

00:03:48.219 --> 00:03:50.740
limitations actually shape our culture. So the

00:03:50.740 --> 00:03:53.199
B language had a quirk. It stored text and variables,

00:03:53.419 --> 00:03:55.620
but those variables were bound by the physical

00:03:55.620 --> 00:03:57.280
architecture of the computer they were running

00:03:57.280 --> 00:03:59.300
on. Which was usually what back then? Usually

00:03:59.300 --> 00:04:01.919
something like a PDP -7. A variable in B could

00:04:01.919 --> 00:04:04.340
only hold four ASCII characters at a time. Four

00:04:04.340 --> 00:04:06.800
characters. That's it. That's it. So you couldn't

00:04:06.800 --> 00:04:09.479
just say print hello world. The variable memory

00:04:09.479 --> 00:04:11.400
wasn't big enough to pull the whole sentence.

00:04:11.639 --> 00:04:13.860
So how did he actually get it to print? He had

00:04:13.860 --> 00:04:15.879
to chop it up. The code example was actually

00:04:15.879 --> 00:04:18.040
demonstrating how to string together external

00:04:18.040 --> 00:04:21.360
variables. Oh, wow. Yeah. One variable held heli,

00:04:21.360 --> 00:04:24.879
the next held O comma space W, the next ORLD,

00:04:24.959 --> 00:04:29.000
and so on. That is wild. So the Hello World tradition

00:04:29.000 --> 00:04:31.420
didn't start as a greeting. It started as a hack

00:04:31.420 --> 00:04:34.060
to show how to glue string fragments together

00:04:34.060 --> 00:04:36.600
because the computers were literally too weak

00:04:36.600 --> 00:04:38.879
to handle the whole phrase at once. Exactly.

00:04:38.939 --> 00:04:41.259
It was a demonstration of managing memory constraints.

00:04:41.680 --> 00:04:44.040
We've kept the phrase, but we've largely forgotten

00:04:44.040 --> 00:04:46.220
that the original lesson was about the limitations

00:04:46.220 --> 00:04:48.560
of the hardware. Now, speaking of the phrase

00:04:48.560 --> 00:04:51.439
itself, why Hello World? Why not just test or...

00:04:52.120 --> 00:04:54.279
It works. Yeah. This brings us to the really

00:04:54.279 --> 00:04:57.740
unlikely connection to a New York radio DJ. Right.

00:04:57.839 --> 00:05:00.100
William B. Williams. I love this detail because

00:05:00.100 --> 00:05:01.920
it takes us out of the computer lab entirely.

00:05:02.339 --> 00:05:05.800
So Williams was a DJ on WNEW in New York in the

00:05:05.800 --> 00:05:08.920
1950s. And he had this signature sign on. He

00:05:08.920 --> 00:05:10.620
would turn on the mic and say, hello, world.

00:05:10.839 --> 00:05:13.579
And Kernighan has admitted in interviews that

00:05:13.579 --> 00:05:15.879
this was likely rattling around in his subconscious.

00:05:16.439 --> 00:05:18.899
He remembers seeing a cartoon of a chick coming

00:05:18.899 --> 00:05:21.639
out of an egg saying it. or hearing it on the

00:05:21.639 --> 00:05:24.379
radio. So it wasn't on purpose? It wasn't a deliberate,

00:05:24.540 --> 00:05:27.860
I am quoting this DJ moment, no. But it shows

00:05:27.860 --> 00:05:30.000
that computer science doesn't happen in a vacuum.

00:05:30.579 --> 00:05:34.279
The pop culture of 1950s radio totally seeped

00:05:34.279 --> 00:05:36.699
into the sterile environment of Bell Labs. It

00:05:36.699 --> 00:05:39.000
adds such a human texture to it. Every time a

00:05:39.000 --> 00:05:41.279
new kid in a coding boot camp types that line

00:05:41.279 --> 00:05:45.459
today, they are unknowingly echoing a 1950s radio

00:05:45.459 --> 00:05:47.920
bit. It's a really nice reminder that code is

00:05:47.920 --> 00:05:50.420
written by humans. Although, to be totally thorough,

00:05:50.620 --> 00:05:53.399
I should mention the jargon file claims a 1967

00:05:53.399 --> 00:05:56.860
origin with the BCPL language. Okay. But the

00:05:56.860 --> 00:05:58.879
Kernighan lineage at Bell Labs is the one we

00:05:58.879 --> 00:06:00.680
can actually prove with physical paper trails.

00:06:00.939 --> 00:06:03.220
Fair enough. So, we know where it comes from,

00:06:03.259 --> 00:06:05.480
but we don't use the B language anymore. We don't

00:06:05.480 --> 00:06:07.560
have four character limits on our variables today.

00:06:07.720 --> 00:06:10.139
Why does this persist? Why is it still the very

00:06:10.139 --> 00:06:12.240
first step? This brings us to the concept of

00:06:12.240 --> 00:06:14.759
the sanity check. I hear this term used a lot

00:06:14.759 --> 00:06:18.060
by engineers. Let's do a sanity check. What does

00:06:18.060 --> 00:06:20.980
it actually imply in this context? Think about

00:06:20.980 --> 00:06:23.560
what actually needs to happen for code to run.

00:06:24.079 --> 00:06:27.019
When you sit down at a computer and type print

00:06:27.019 --> 00:06:30.579
hello world, you aren't just typing words. You

00:06:30.579 --> 00:06:33.040
are activating a massive invisible industrial

00:06:33.040 --> 00:06:35.720
pipeline. It feels instant to me though. I hit

00:06:35.720 --> 00:06:38.360
run and the text just appears. It feels instant,

00:06:38.420 --> 00:06:41.360
but physically it's a miracle. How so? Well,

00:06:41.459 --> 00:06:44.060
you need an editor to accept the text. You need

00:06:44.060 --> 00:06:46.600
a compiler to translate that text into machine

00:06:46.600 --> 00:06:49.199
code, the binary that the processor can actually

00:06:49.199 --> 00:06:51.540
understand. You need a linker to grab the standard

00:06:51.540 --> 00:06:53.319
library so the computer knows what print even

00:06:53.319 --> 00:06:55.399
means. Right. You need the operating system to

00:06:55.399 --> 00:06:58.060
give you permission to access the screen. And

00:06:58.060 --> 00:06:59.920
finally, the hardware driver has to literally

00:06:59.920 --> 00:07:02.360
light up the pixels. Okay, so it's huge chain

00:07:02.360 --> 00:07:04.839
reaction. It's a Rube Goldberg machine. Yeah.

00:07:04.920 --> 00:07:07.180
And if any single part of that chain is broken,

00:07:07.319 --> 00:07:09.560
if the compiler is the wrong version, if the

00:07:09.560 --> 00:07:11.660
path variables aren't set, if the permissions

00:07:11.660 --> 00:07:14.720
are wrong, the program crashes. So Hello World

00:07:14.720 --> 00:07:17.660
isn't testing my ability to code. It's testing

00:07:17.660 --> 00:07:20.740
the environment. Bingo. It validates the workflow.

00:07:21.680 --> 00:07:24.519
If Hello World fails, you don't have a coding

00:07:24.519 --> 00:07:26.680
problem, you have a configuration problem. That

00:07:26.680 --> 00:07:29.240
makes so much sense. It saves you from debugging

00:07:29.240 --> 00:07:32.259
a really complex algorithm when the issue is

00:07:32.259 --> 00:07:34.160
actually just that you didn't install the language

00:07:34.160 --> 00:07:36.139
correctly. It's like tapping the microphone before

00:07:36.139 --> 00:07:38.279
you start singing. You aren't testing your voice.

00:07:38.339 --> 00:07:40.620
You're testing the sound system. That's the perfect

00:07:40.620 --> 00:07:43.560
analogy. In fact, this utility is so universally

00:07:43.560 --> 00:07:47.379
recognized that Linux systems, specifically Debian

00:07:47.379 --> 00:07:50.540
and Ubuntu, have formalized it. I saw this in

00:07:50.540 --> 00:07:53.139
the notes. There is a literal package called

00:07:53.139 --> 00:07:56.680
simply hello. Yes. You can type apt -get install

00:07:56.680 --> 00:07:59.420
hello. It downloads a program from the GNU project

00:07:59.420 --> 00:08:01.439
that just prints a friendly greeting. Why would

00:08:01.439 --> 00:08:04.160
anyone ever need to download that? It's not for

00:08:04.160 --> 00:08:06.480
the user to say hi. It's for the developers.

00:08:07.310 --> 00:08:09.930
It serves as the sanity check for the package

00:08:09.930 --> 00:08:12.790
manager system itself. Oh, I see. It's a perfect,

00:08:12.850 --> 00:08:15.670
compliant example of how to structure a software

00:08:15.670 --> 00:08:18.050
package. If you were building a new installer

00:08:18.050 --> 00:08:20.629
or package manager, you test it with Hello, because

00:08:20.629 --> 00:08:22.490
you know the code itself is totally bug -free.

00:08:22.649 --> 00:08:25.810
So if it fails... If it fails, you know your

00:08:25.810 --> 00:08:28.050
installer is broken. It's the control group of

00:08:28.050 --> 00:08:30.310
the experiment. Exactly. It's the stable baseline.

00:08:30.839 --> 00:08:32.659
I want to pivot to something that I think is

00:08:32.659 --> 00:08:35.659
really useful for anyone looking at picking up

00:08:35.659 --> 00:08:38.220
a new language. There is this metric we came

00:08:38.220 --> 00:08:41.519
across called TTHW. Yes, the time to hello world.

00:08:41.700 --> 00:08:44.269
It sounds like a race. It effectively is. It

00:08:44.269 --> 00:08:46.750
measures approachability. The stopwatch starts

00:08:46.750 --> 00:08:49.110
when you sit down to learn a language, and it

00:08:49.110 --> 00:08:51.629
stops when you successfully see text on the screen.

00:08:51.830 --> 00:08:55.549
Okay. It is a fantastic way to judge how scary

00:08:55.549 --> 00:08:58.730
or complex a programming language actually is.

00:08:58.909 --> 00:09:00.850
So let's compare a few to get a feel for this.

00:09:00.990 --> 00:09:02.850
Let's look at the easy end of the spectrum first.

00:09:03.250 --> 00:09:07.649
Python. Python is the absolute king of low TTHW.

00:09:07.769 --> 00:09:10.389
You install it, you open a file, and you type

00:09:10.389 --> 00:09:13.659
print hello world. One line. No boilerplate,

00:09:13.799 --> 00:09:16.019
no complex setup. So the barrier to entry is

00:09:16.019 --> 00:09:18.659
basically zero. Right. It's designed to be readable.

00:09:18.860 --> 00:09:21.340
It wants you to succeed immediately. Now contrast

00:09:21.340 --> 00:09:25.600
that with C++. C++ is notoriously not that. C++

00:09:25.600 --> 00:09:28.539
is industrial grade. To say hello, you can't

00:09:28.539 --> 00:09:30.559
just say print. You need to include a library

00:09:30.559 --> 00:09:33.580
called Iostream. You need to use a namespace.

00:09:33.860 --> 00:09:37.139
You have to declare a main function because C++.

00:09:38.120 --> 00:09:40.480
demands to know specifically where the program

00:09:40.480 --> 00:09:42.879
starts. Wow, that's a lot. And you have to use

00:09:42.879 --> 00:09:45.860
standard count and insertion operators, those

00:09:45.860 --> 00:09:48.240
little angle brackets, and you usually need to

00:09:48.240 --> 00:09:50.240
return an integer at the end to tell the operating

00:09:50.240 --> 00:09:53.120
system, I finished correctly. That is a massive

00:09:53.120 --> 00:09:56.799
amount of overhead just to say hi. It is, but

00:09:56.799 --> 00:09:58.639
it teaches you something fundamental about the

00:09:58.639 --> 00:10:01.820
language. It tells you that C++ gives you manual

00:10:01.820 --> 00:10:04.440
control over everything. Input streams, memory,

00:10:04.740 --> 00:10:08.899
exit codes. So high TTHW usually means high power,

00:10:08.960 --> 00:10:12.379
high complexity. Exactly. It forces you to understand

00:10:12.379 --> 00:10:14.480
the structure before you get the reward. And

00:10:14.480 --> 00:10:16.879
then there's Go. The notes mention Go does something

00:10:16.879 --> 00:10:19.620
pretty interesting with its Hello World. Go is

00:10:19.620 --> 00:10:22.019
a modern language from Google. Their tutorial

00:10:22.019 --> 00:10:24.240
example doesn't just print English. It prints

00:10:24.240 --> 00:10:26.700
English, Chinese, and Japanese characters all

00:10:26.700 --> 00:10:29.460
at once. Total show -offs. A little bit. But

00:10:29.460 --> 00:10:31.600
it's highly strategic. They are demonstrating

00:10:31.600 --> 00:10:34.240
that Go has Unicode support built right into

00:10:34.240 --> 00:10:36.860
the core. Why is that a big deal? In the old

00:10:36.860 --> 00:10:39.720
days, like with C, handling foreign characters

00:10:39.720 --> 00:10:42.889
was an absolute nightmare. Go is saying... Look,

00:10:43.029 --> 00:10:45.929
we are modern. We handle the whole world right

00:10:45.929 --> 00:10:48.149
out of the box. No, we have to talk about the

00:10:48.149 --> 00:10:51.289
absolute nightmare scenario. The time to hello

00:10:51.289 --> 00:10:54.929
world champion of the universe. Malbolge. Ah,

00:10:54.929 --> 00:10:57.330
yes, Malbolge. Wade, I'd never heard of this

00:10:57.330 --> 00:10:59.970
until we looked at these sources. The TTHW was

00:10:59.970 --> 00:11:03.110
two years. That is correct. Two entire years.

00:11:03.330 --> 00:11:06.009
How is that even possible? Malbolge is what we

00:11:06.009 --> 00:11:09.070
call an esoteric programming language. It wasn't

00:11:09.070 --> 00:11:11.610
designed to be used. It was designed as a challenge.

00:11:12.009 --> 00:11:14.669
Or maybe a sick joke. The joke. It's named after

00:11:14.669 --> 00:11:16.889
the eighth circle of hell in Dante's Inferno.

00:11:17.110 --> 00:11:20.029
The entire design goal was to make it as difficult

00:11:20.029 --> 00:11:22.009
as possible for a human being to write code.

00:11:22.210 --> 00:11:24.629
So what makes it so hard? Is it just weird symbols

00:11:24.629 --> 00:11:26.889
or what? It's much worse than that. The commands

00:11:26.889 --> 00:11:28.690
actually change depending on where they are in

00:11:28.690 --> 00:11:31.049
memory. Wait, really? Yes. The code modifies

00:11:31.049 --> 00:11:34.429
itself as it runs. The logic is ternary, so base

00:11:34.429 --> 00:11:37.669
three rather than binary. It is completely hostile

00:11:37.669 --> 00:11:40.179
to human reasoning. So the two -year delay, that

00:11:40.179 --> 00:11:41.840
wasn't just someone procrastinating. That was

00:11:41.840 --> 00:11:44.379
someone actively trying to figure it out. It

00:11:44.379 --> 00:11:48.159
took two years for the very first valid Hello

00:11:48.159 --> 00:11:52.159
World program to appear. And here's the kicker.

00:11:52.580 --> 00:11:56.049
A human didn't even write it. Really? Who did?

00:11:56.190 --> 00:11:58.610
A cryptographer had to write a completely separate

00:11:58.610 --> 00:12:02.450
program in Lisp, which is a smart logical language,

00:12:02.669 --> 00:12:05.750
to search through the combinations and basically

00:12:05.750 --> 00:12:08.470
discover the Malbolge code that would output

00:12:08.470 --> 00:12:11.169
the right text. So it was brute forced by another

00:12:11.169 --> 00:12:13.750
computer. Yes. That is the ultimate irony. The

00:12:13.750 --> 00:12:15.649
language is so hard that we literally needed

00:12:15.649 --> 00:12:18.149
machines to talk to it for us. And the output

00:12:18.149 --> 00:12:21.509
wasn't even perfect. It printed Hello World with

00:12:21.509 --> 00:12:24.159
totally weird capitalization. Because that was

00:12:24.159 --> 00:12:26.059
the absolute best the search algorithm could

00:12:26.059 --> 00:12:27.860
find. That's fantastic. It's the hello world

00:12:27.860 --> 00:12:30.220
from hell, literally. Literally. So we've talked

00:12:30.220 --> 00:12:32.840
a lot about text, but we are moving into a world

00:12:32.840 --> 00:12:35.779
where not everything is a command line. What

00:12:35.779 --> 00:12:37.399
happens to hello world when you don't even have

00:12:37.399 --> 00:12:39.860
a screen? This is where the concept adapts beautifully.

00:12:41.080 --> 00:12:44.120
It turns out, hello world isn't actually about

00:12:44.120 --> 00:12:46.779
text. It's about the simplest possible output.

00:12:49.259 --> 00:12:52.769
If you are an electrical engineer, working on

00:12:52.769 --> 00:12:55.049
an embedded system like a chip inside a microwave

00:12:55.049 --> 00:12:57.769
or a drone, you don't have a monitor. You just

00:12:57.769 --> 00:12:59.769
have the circuit board. Right. So the hell of

00:12:59.769 --> 00:13:01.730
a roll of hardware is the blinking LED. Like

00:13:01.730 --> 00:13:04.450
a little heartbeat. Exactly. If you can write

00:13:04.450 --> 00:13:06.750
code that makes a little light blink on and off

00:13:06.750 --> 00:13:09.590
once per second, you have proven everything you

00:13:09.590 --> 00:13:11.860
need to know. You've proven the power is on,

00:13:11.940 --> 00:13:14.179
the chip is reading your code, the clock timing

00:13:14.179 --> 00:13:17.000
is correct, and the physical output pin is properly

00:13:17.000 --> 00:13:19.179
connected. It's the exact same sanity check,

00:13:19.299 --> 00:13:22.399
just with photons instead of pixels. We see this

00:13:22.399 --> 00:13:25.320
in every domain. In 3D graphics, text is actually

00:13:25.320 --> 00:13:27.759
really hard to render. You need fonts, textures,

00:13:27.919 --> 00:13:31.220
alignment, the huge pain. So in OpenGL or DirectX,

00:13:31.360 --> 00:13:33.909
the sanity check is the hello triangle. Just

00:13:33.909 --> 00:13:35.769
a triangle. Just a bright, colorful triangle.

00:13:35.809 --> 00:13:37.850
If you see the triangle, your graphics driver

00:13:37.850 --> 00:13:39.909
is working. I saw a note in our research about

00:13:39.909 --> 00:13:42.110
the Excel programming language. They went a bit

00:13:42.110 --> 00:13:44.970
further than a triangle. Oh, Excel. Yeah, they

00:13:44.970 --> 00:13:47.649
show off a spinning 3D Earth. It's a bit of a

00:13:47.649 --> 00:13:50.450
flex, basically saying 3D is so native to our

00:13:50.450 --> 00:13:53.690
language that rendering a spinning globe is as

00:13:53.690 --> 00:13:56.529
easy as printing text. And then there's CNC machines,

00:13:56.870 --> 00:13:59.549
the big robotic drills. Their hello world is

00:13:59.549 --> 00:14:02.649
terrifyingly physical. Oh, absolutely. If you

00:14:02.649 --> 00:14:05.950
are programming a laser cutter or a CNC mill,

00:14:06.129 --> 00:14:09.549
the hello world is getting the machine to carve

00:14:09.549 --> 00:14:12.659
the words into a block of wood or plastic. Wow.

00:14:12.980 --> 00:14:15.879
It is the code physically manifesting in the

00:14:15.879 --> 00:14:18.559
real world. If you get that wrong, you don't

00:14:18.559 --> 00:14:20.720
just get an error message on a screen. You break

00:14:20.720 --> 00:14:22.659
a drill bit. Or cut a hole straight through your

00:14:22.659 --> 00:14:24.679
table. Exactly. It's high stakes Hello World.

00:14:24.899 --> 00:14:26.960
There is one group of programmers, though, who

00:14:26.960 --> 00:14:30.039
apparently absolutely hate Hello World, the functional

00:14:30.039 --> 00:14:32.879
programming crowd. Why do they have a beef with

00:14:32.879 --> 00:14:35.139
a friendly greeting? This gets a little philosophical.

00:14:35.789 --> 00:14:38.009
Functional languages, things like Haskell, ML,

00:14:38.230 --> 00:14:40.830
or Lisp, treat programming like pure mathematics.

00:14:41.129 --> 00:14:43.250
You put a number in, you get a number out. They

00:14:43.250 --> 00:14:45.970
highly prioritize purity. And printing text isn't

00:14:45.970 --> 00:14:48.830
pure? No, because it's a side effect. Define

00:14:48.830 --> 00:14:50.830
that for us, for those who might not know. A

00:14:50.830 --> 00:14:52.870
side effect is when a function changes the state

00:14:52.870 --> 00:14:55.610
of the world outside itself, like modifying a

00:14:55.610 --> 00:14:57.750
file, making a sound, or printing to a screen,

00:14:57.889 --> 00:15:00.470
rather than just returning a value. For purists,

00:15:00.610 --> 00:15:03.429
side effects are messy. I see. They are necessary

00:15:03.429 --> 00:15:06.429
eventually, but they are the dirty part of coding.

00:15:06.610 --> 00:15:09.769
So using a side effect as your very first lesson

00:15:09.769 --> 00:15:12.370
is seen as teaching bad habits. So what did they

00:15:12.370 --> 00:15:15.149
do instead of hello world? They usually calculate

00:15:15.149 --> 00:15:19.049
a factorial, like five factorial is 120. It demonstrates

00:15:19.049 --> 00:15:21.870
recursion in math without ever touching the messy

00:15:21.870 --> 00:15:23.950
hardware. It's very academic. We don't want to

00:15:23.950 --> 00:15:25.889
say hello. We just want to do math. That sums

00:15:25.889 --> 00:15:27.730
up the functional community pretty perfectly.

00:15:27.929 --> 00:15:29.730
They want to show you the beauty of the logic.

00:15:30.250 --> 00:15:32.490
not the utility of the screen. So we've gone

00:15:32.490 --> 00:15:35.750
from the B language hack in 1972 through the

00:15:35.750 --> 00:15:38.950
two -year time to Hello World's struggle of Malbolge

00:15:38.950 --> 00:15:42.129
all the way to blinking lights and CNC carving.

00:15:42.950 --> 00:15:45.649
It's amazing how this one ritual has held on

00:15:45.649 --> 00:15:48.250
for so long. It has held on because the fundamental

00:15:48.250 --> 00:15:51.269
problem it solves hasn't changed. We still always

00:15:51.269 --> 00:15:54.289
need to know, is this thing on? It's the bridge

00:15:54.289 --> 00:15:56.429
between the abstraction of our code and the physical

00:15:56.429 --> 00:15:58.899
reality of the machine. But there is a really

00:15:58.899 --> 00:16:01.279
interesting suggestion in the research, specifically

00:16:01.279 --> 00:16:04.519
from Mark Gosdiel and Elliot Soloway, that maybe

00:16:04.519 --> 00:16:08.059
the era of Hello World is finally ending. This

00:16:08.059 --> 00:16:10.860
is a fascinating, forward -looking idea. Their

00:16:10.860 --> 00:16:13.019
argument is that computers themselves are changing.

00:16:13.700 --> 00:16:16.639
For 50 years, the primary way we interacted with

00:16:16.639 --> 00:16:19.080
computers was text. We typed, it typed back.

00:16:19.460 --> 00:16:21.860
But look at how kids learn to code right now.

00:16:22.000 --> 00:16:25.340
Like Scratch or Minecraft. Exactly. And Scratch.

00:16:25.820 --> 00:16:27.980
You snap blocks together to make a cartoon cat

00:16:27.980 --> 00:16:30.919
dance. In AI generation, you just ask for an

00:16:30.919 --> 00:16:33.779
image. Text output isn't the primary mode of

00:16:33.779 --> 00:16:36.340
communication anymore. So if I'm programming

00:16:36.340 --> 00:16:38.879
a voice assistant, hello world might just be

00:16:38.879 --> 00:16:41.480
a sound. Or if you're programming a haptic suit

00:16:41.480 --> 00:16:43.539
for VR, it might be a pulse on your wrist, a

00:16:43.539 --> 00:16:46.320
haptic handshake. That's a wild thought. As the

00:16:46.320 --> 00:16:49.120
interface changes, the greeting changes. It forces

00:16:49.120 --> 00:16:51.659
us to ask, what does it actually mean for a computer

00:16:51.659 --> 00:16:54.750
to speak? If the future is brain -computer interfaces,

00:16:55.129 --> 00:16:57.629
maybe Hello World is just a sensation of the

00:16:57.629 --> 00:17:00.330
color blue directly stimulated into your visual

00:17:00.330 --> 00:17:02.529
cortex. The Hello World of the future might just

00:17:02.529 --> 00:17:05.809
be a feeling. It's highly possible. But whatever

00:17:05.809 --> 00:17:08.609
form it takes, we will always need that first

00:17:08.609 --> 00:17:11.769
moment of contact, that first confirmation that

00:17:11.769 --> 00:17:13.930
we have successfully bridged the gap between

00:17:13.930 --> 00:17:17.509
our mind and the machine. That is a great place

00:17:17.509 --> 00:17:19.569
to leave it. Think about that for a while. Whether

00:17:19.569 --> 00:17:22.009
it's a blinking light, a spinning triangle, or

00:17:22.009 --> 00:17:25.390
just those two words on a black screen, the ritual

00:17:25.390 --> 00:17:27.730
continues. It does indeed. If you've never done

00:17:27.730 --> 00:17:30.009
it, maybe go look up a Python tutorial today.

00:17:30.690 --> 00:17:33.529
Type the code. Make the machine say hello. It's

00:17:33.529 --> 00:17:35.609
satisfying in a way that's really hard to describe

00:17:35.609 --> 00:17:37.930
until you actually do it. Everyone should absolutely

00:17:37.930 --> 00:17:39.930
do it at least once. Thanks for listening to

00:17:39.930 --> 00:17:41.589
The Deep Dive. We'll catch you on the next one.
