WEBVTT

00:00:00.000 --> 00:00:02.720
You know, when you step up to a podium to give

00:00:02.720 --> 00:00:04.960
a big speech, you don't just like immediately

00:00:04.960 --> 00:00:07.379
launch right into your opening sentence. What's

00:00:07.379 --> 00:00:10.320
the very first thing you do? Oh, you lean in,

00:00:10.460 --> 00:00:12.179
tap the microphone, maybe blow into it a little

00:00:12.179 --> 00:00:15.099
bit. Right. You ask, is this thing on? Exactly.

00:00:15.320 --> 00:00:18.440
And that deeply human need to make sure the pipes

00:00:18.440 --> 00:00:21.960
are connected before we turn on the water, it's

00:00:21.960 --> 00:00:25.339
universal. We need to know the basic machinery

00:00:25.339 --> 00:00:27.579
is functioning before we pour our hearts out

00:00:27.579 --> 00:00:30.500
to the audience. Yeah, for sure. And that exact

00:00:30.500 --> 00:00:34.020
instinct is why, for the last 50 years, almost

00:00:34.020 --> 00:00:36.560
every software developer on Earth has started

00:00:36.560 --> 00:00:39.799
their programming journey with two simple words.

00:00:40.560 --> 00:00:43.000
Hello, world. It really is the ultimate sanity

00:00:43.000 --> 00:00:45.000
check. I mean, you aren't really trying to communicate

00:00:45.000 --> 00:00:46.619
with the world. You're just proving to yourself

00:00:46.619 --> 00:00:48.359
that the compiler is running, the software is

00:00:48.359 --> 00:00:51.340
actually installed, and the basic pathways of

00:00:51.340 --> 00:00:53.039
communication between you and the machine are

00:00:53.039 --> 00:00:56.560
open. Right, so today, for you, our listener,

00:00:56.840 --> 00:01:00.119
we are going to do a custom -tailored deep dive

00:01:00.119 --> 00:01:03.719
to unpack how this tiny, seemingly trivial snippet

00:01:03.719 --> 00:01:07.569
of code became a global standard. because hello

00:01:07.569 --> 00:01:10.670
world isn't just a greeting, it's really a mirror

00:01:10.670 --> 00:01:13.069
reflecting the evolution of technology itself.

00:01:13.250 --> 00:01:15.549
What's fascinating here is that while this presents

00:01:15.549 --> 00:01:18.109
itself as a basic syntax exercise for beginners,

00:01:18.569 --> 00:01:21.090
it actually acts as a perfect lens to view the

00:01:21.090 --> 00:01:23.650
entire history of human computer interaction.

00:01:23.670 --> 00:01:25.629
Oh, totally. If you look at how different programming

00:01:25.629 --> 00:01:28.709
languages handle this one simple task, you instantly

00:01:28.709 --> 00:01:31.230
see the friction, the hardware limitations, and

00:01:31.230 --> 00:01:33.290
like the specific philosophies of the people

00:01:33.290 --> 00:01:35.730
who built them. Yeah, so to understand how this

00:01:35.629 --> 00:01:37.810
specific phrase conquered the globe. We have

00:01:37.810 --> 00:01:39.670
to look at where it came from. And that means

00:01:39.670 --> 00:01:42.370
stepping back in time, away from the sleek, high

00:01:42.370 --> 00:01:45.189
-powered laptops of today, and into the buzzing,

00:01:45.469 --> 00:01:47.989
humming, physically massive computer rooms of

00:01:47.989 --> 00:01:51.310
early Bell Labs in the 1970s. Right. The birthplace

00:01:51.310 --> 00:01:53.469
of so much of our modern computing infrastructure.

00:01:53.989 --> 00:01:55.909
And the tradition was largely popularized by

00:01:55.909 --> 00:01:58.930
a famously influential 1978 book called The TC

00:01:58.930 --> 00:02:01.349
Programming Language. By Brian Kernahan and Dennis

00:02:01.349 --> 00:02:04.299
Ritchie. Right. Yep. Exactly. In that book, the

00:02:04.299 --> 00:02:07.579
very first example program prints, hello world,

00:02:08.219 --> 00:02:10.599
in all lowercase letters. But the trail actually

00:02:10.599 --> 00:02:14.340
goes back even further than that 1978 book. Kernaghan

00:02:14.340 --> 00:02:18.419
was using it in a 1974 internal Bell Labs memo

00:02:18.419 --> 00:02:22.509
titled Programming in C. a tutorial. Right, right.

00:02:22.550 --> 00:02:24.469
And if we dig all the way down to the bedrock,

00:02:24.770 --> 00:02:27.810
we find the absolute first documented use of

00:02:27.810 --> 00:02:32.009
the phrase in computing. It was in a 1972 tutorial.

00:02:32.490 --> 00:02:34.750
Kernaghan wrote for an earlier programming language

00:02:34.750 --> 00:02:37.430
simply called B. Which was the direct predecessor

00:02:37.430 --> 00:02:40.110
to C. And the reason he chose that specific phrase

00:02:40.110 --> 00:02:43.689
in 1972 was not out of some poetic desire to

00:02:43.689 --> 00:02:45.550
greet the universe. He was actually trying to

00:02:45.550 --> 00:02:48.590
teach around a brutal hardware limitation. Computers

00:02:48.590 --> 00:02:50.870
back then had memory capacity so small we can

00:02:50.870 --> 00:02:53.389
barely comprehend them today. Every single byte

00:02:53.389 --> 00:02:55.770
of storage was precious real estate. Here's where

00:02:55.770 --> 00:02:58.590
it gets really interesting. Because of those

00:02:58.590 --> 00:03:01.669
severe hardware constraints, the B programming

00:03:01.669 --> 00:03:04.250
language had this bizarre technical limitation.

00:03:05.150 --> 00:03:07.889
A character constant was physically limited to

00:03:07.889 --> 00:03:10.789
just four ASCII characters. Four characters,

00:03:10.830 --> 00:03:12.830
that's it. Meaning the computer could only hold

00:03:12.830 --> 00:03:15.270
four letters in a specific memory container at

00:03:15.270 --> 00:03:17.169
one time. You couldn't just tell the machine

00:03:17.169 --> 00:03:19.530
to remember a whole sentence. No, it would completely

00:03:19.530 --> 00:03:21.909
overload the memory register. Yeah. So in the

00:03:21.909 --> 00:03:24.550
tutorial, the very first example Kernane used

00:03:24.550 --> 00:03:27.780
simply printed, Hi. Just hi. Yeah, that's three

00:03:27.780 --> 00:03:30.379
characters an H and I and an exclamation point

00:03:30.379 --> 00:03:32.379
it fit perfectly into that four character limit

00:03:32.379 --> 00:03:35.439
But like hi doesn't teach a student how to manage

00:03:35.439 --> 00:03:38.620
complex data Kernan wanted to teach programmers

00:03:38.620 --> 00:03:41.219
how to string multiple variables together to

00:03:41.219 --> 00:03:45.060
form a cohesive output So he introduced hello

00:03:45.060 --> 00:03:47.719
world Which if you include the new line character

00:03:47.719 --> 00:03:50.199
at the end to move the cursor down is much longer

00:03:50.199 --> 00:03:52.439
than four characters, right? He deliberately

00:03:52.439 --> 00:03:55.580
created an obstacle Exactly. It specifically

00:03:55.580 --> 00:03:58.060
forced the programmer to chop the greeting up.

00:03:58.400 --> 00:04:01.639
They had to store hell in one variable, ow in

00:04:01.639 --> 00:04:04.039
another, orl in another, and then stitch them

00:04:04.039 --> 00:04:06.520
all back together on the screen. It's wild. The

00:04:06.520 --> 00:04:09.270
most famous greeting in digital history... exists

00:04:09.270 --> 00:04:13.110
primarily because high was too short to be a

00:04:13.110 --> 00:04:15.250
good homework assignment. He needed a phrase

00:04:15.250 --> 00:04:17.629
just long enough to break the system's four -character

00:04:17.629 --> 00:04:19.509
limit so you could show you the mechanism for

00:04:19.509 --> 00:04:21.930
fixing it. I love the practicality of that so

00:04:21.930 --> 00:04:24.670
much. Now, like all great computing lore, the

00:04:24.670 --> 00:04:27.389
origins are slightly contested. The famous jargon

00:04:27.389 --> 00:04:30.389
file, which is a glossary of hacker slang, traces

00:04:30.389 --> 00:04:32.850
the conceptual origin back a few years earlier

00:04:32.850 --> 00:04:36.410
to 1967 with a language called BCPL. Which heavily

00:04:36.410 --> 00:04:38.759
influenced the B language. Right. But outside

00:04:38.759 --> 00:04:41.100
of computing entirely, the exact phrase, hello

00:04:41.100 --> 00:04:44.120
world, has a totally analog origin. It was actually

00:04:44.120 --> 00:04:46.720
the trademark catchphrase of a New York radio

00:04:46.720 --> 00:04:49.379
disc jockey named William B. Williams, starting

00:04:49.379 --> 00:04:52.879
way back in the 1950s. Wow. Yeah. Long before

00:04:52.879 --> 00:04:54.600
programmers were typing it into green screen

00:04:54.600 --> 00:04:57.579
terminals, it was echoing across the radio waves

00:04:57.579 --> 00:05:01.160
to millions of listeners. It's just such a bizarre

00:05:01.160 --> 00:05:05.500
collision of cultures. A 1950s radio DJ catchphrase

00:05:05.500 --> 00:05:08.920
eventually becomes the solution to a 1970s Bell

00:05:08.920 --> 00:05:11.579
Labs memory constraint. Yeah. Which then becomes

00:05:11.579 --> 00:05:14.120
the universal standard for coding. It's amazing.

00:05:14.420 --> 00:05:16.680
Okay, let's impact this a bit more. We know when

00:05:16.680 --> 00:05:19.480
and why it was born. But how do different languages

00:05:19.480 --> 00:05:22.899
tackle this exact same prompt today? Because

00:05:22.899 --> 00:05:25.600
comparing them reveals vast differences in how

00:05:25.600 --> 00:05:28.079
computer languages are architected. Oh, completely.

00:05:28.300 --> 00:05:30.399
For instance, if you sit down to learn a modern

00:05:30.399 --> 00:05:32.600
scripting language like Python, getting your

00:05:32.600 --> 00:05:35.240
computer to say hello is delightfully frictionless.

00:05:35.459 --> 00:05:38.079
It takes exactly one line of code. You type print,

00:05:38.399 --> 00:05:41.459
open a parenthesis, put, hello world, in quotes,

00:05:41.540 --> 00:05:44.040
and you're done. the computer speaks, but then

00:05:44.040 --> 00:05:46.600
you contrast Python with a language like C++.

00:05:46.819 --> 00:05:49.740
Right. C++ is, well, it's the heavy machinery

00:05:49.740 --> 00:05:51.959
of the programming world. To do the exact same

00:05:51.959 --> 00:05:54.680
thing, just print those two words. C++ makes

00:05:54.680 --> 00:05:57.019
you jump through hoops. You have to write a line

00:05:57.019 --> 00:06:00.740
to import the C++ standard and output stream

00:06:00.740 --> 00:06:03.500
library. Then you have to declare an entry point.

00:06:03.689 --> 00:06:06.029
which is the main function. Then you have to

00:06:06.029 --> 00:06:09.589
write a specific command std .cout to push the

00:06:09.589 --> 00:06:12.029
text to the output console, followed by another

00:06:12.029 --> 00:06:14.589
command to return a zero to the operating system

00:06:14.589 --> 00:06:17.610
to prove the program ran without crashing. It

00:06:17.610 --> 00:06:19.670
looks like a whole paragraph of technical jargon

00:06:19.670 --> 00:06:22.259
just to say hello. Right. And honestly, I have

00:06:22.259 --> 00:06:24.420
to push back on this design philosophy a little.

00:06:24.860 --> 00:06:27.439
If Python can do it in one intuitive line, and

00:06:27.439 --> 00:06:30.100
C++ requires all this boilerplate, all these

00:06:30.100 --> 00:06:32.000
extra steps and imports just to accomplish the

00:06:32.000 --> 00:06:35.839
exact same task, doesn't that make C++ a fundamentally

00:06:35.839 --> 00:06:39.579
worse tool? Like, why use a language that makes

00:06:39.579 --> 00:06:42.439
the simplest task so incredibly complicated?

00:06:42.879 --> 00:06:44.920
Well, you know, every new programmer asks that

00:06:44.920 --> 00:06:46.620
exact question when they stare at their first

00:06:46.620 --> 00:06:49.560
C++ moment. But if we connect this to the bigger

00:06:49.560 --> 00:06:52.560
picture, complexity is not necessarily a flaw.

00:06:52.939 --> 00:06:55.220
It's really a reflection of language's intended

00:06:55.220 --> 00:06:58.339
power, and specifically, it's proximity to the

00:06:58.339 --> 00:07:00.560
actual physical hardware. Wait, when you say

00:07:00.560 --> 00:07:03.319
proximity to the hardware, do you mean C++ is

00:07:03.319 --> 00:07:06.459
actually talking directly to the physical microchips

00:07:06.459 --> 00:07:09.259
while Python is going through some kind of translator?

00:07:09.420 --> 00:07:11.120
That is a great way to think about it, yeah.

00:07:11.500 --> 00:07:14.350
Imagine ordering takeout. versus working in a

00:07:14.350 --> 00:07:17.110
commercial kitchen. Python is ordering takeout.

00:07:17.230 --> 00:07:20.430
You tell an app, bring me a pizza. and an hour

00:07:20.430 --> 00:07:23.209
later, a pizza arrives at your door. You don't

00:07:23.209 --> 00:07:24.889
have to worry about chopping onions, preheating

00:07:24.889 --> 00:07:27.649
the oven, or sourcing the cheese. Python hides

00:07:27.649 --> 00:07:29.850
all the complex memory allocation and hardware

00:07:29.850 --> 00:07:31.949
instructions from you, so you can just focus

00:07:31.949 --> 00:07:33.910
on the final product. Which is great if you just

00:07:33.910 --> 00:07:37.370
want a quick pizza. Exactly. Right. But C++ is

00:07:37.370 --> 00:07:40.129
walking into a massive, industrial commercial

00:07:40.129 --> 00:07:42.889
kitchen. If you want a pizza in that kitchen,

00:07:42.970 --> 00:07:45.810
you have to manually turn on the gas lines, you

00:07:45.810 --> 00:07:48.189
have to allocate the exact amount of flour, you

00:07:48.189 --> 00:07:50.490
have to actively... the oven temperature. That

00:07:50.490 --> 00:07:53.430
sounds exhaust. For a single pizza, or in this

00:07:53.430 --> 00:07:57.189
case, printing, hello world, it is an exhausting,

00:07:57.509 --> 00:08:00.740
overcomplicated nightmare. But if you're trying

00:08:00.740 --> 00:08:03.939
to feed 10 ,000 people simultaneously, like building

00:08:03.939 --> 00:08:06.120
a high -performance 3D video game engine or a

00:08:06.120 --> 00:08:08.920
new operating system, you absolutely need that

00:08:08.920 --> 00:08:12.480
granular absolute control over every single gas

00:08:12.480 --> 00:08:16.300
line and ingredient. C++ forces you to be explicit

00:08:16.300 --> 00:08:19.259
about memory and execution from line one, because

00:08:19.259 --> 00:08:21.720
it's preparing you for industrial scale work.

00:08:21.839 --> 00:08:23.899
That makes perfect sense. The language is setting

00:08:23.899 --> 00:08:26.339
the terms of engagement early on. And speaking

00:08:26.339 --> 00:08:29.420
of which, languages often use Hello World to

00:08:29.420 --> 00:08:31.579
show off their specific superpowers right out

00:08:31.579 --> 00:08:33.940
of the gate. Well, for sure. Look at the Go programming

00:08:33.940 --> 00:08:36.539
language. In their introductory tutorial, the

00:08:36.539 --> 00:08:40.159
Hello World program emits text in English, Chinese,

00:08:40.299 --> 00:08:42.460
and Japanese simultaneously. Right. It isn't

00:08:42.460 --> 00:08:44.980
just saying hello. It's proving a technical capability.

00:08:45.480 --> 00:08:47.700
Right. Go was designed with native Unicode support

00:08:47.700 --> 00:08:50.059
built directly into the language, meaning it

00:08:50.059 --> 00:08:52.250
understands global alphabet. without requiring

00:08:52.250 --> 00:08:55.289
developers to download extra translation plugins.

00:08:55.529 --> 00:08:58.230
It's flexing its muscles on day one. Then you

00:08:58.230 --> 00:09:01.610
have Rust. Rust is a language intensely focused

00:09:01.610 --> 00:09:04.470
on safety, structure, and preventing memory leaks.

00:09:05.169 --> 00:09:07.669
Its built -in package manager automatically generates

00:09:07.669 --> 00:09:11.330
a perfectly formatted hello world program the

00:09:11.330 --> 00:09:14.029
absolute second you create a new project folder.

00:09:14.070 --> 00:09:15.590
That's convenient. Yeah, you don't even have

00:09:15.590 --> 00:09:17.490
to type it. It's just sitting there waiting to

00:09:17.490 --> 00:09:20.590
be compiled. It acts as an immediate sanity check.

00:09:20.360 --> 00:09:22.820
before you even touch the keyboard. But we also

00:09:22.820 --> 00:09:24.639
have to look at the dark side of this spectrum,

00:09:25.000 --> 00:09:28.440
the esoteric languages. Oh, man. We have to talk

00:09:28.440 --> 00:09:30.639
about Malbolge. Yes. For those listening who

00:09:30.639 --> 00:09:33.679
aren't familiar, Malbolge is an esoteric programming

00:09:33.679 --> 00:09:36.379
language explicitly designed by its creator to

00:09:36.379 --> 00:09:39.200
be as difficult to use as humanly possible. It's

00:09:39.200 --> 00:09:42.120
awful. It is a puzzle of computational pain.

00:09:42.740 --> 00:09:45.159
It took two full years after the language was

00:09:45.159 --> 00:09:47.279
released to the public before the very first

00:09:47.279 --> 00:09:50.200
working hello world. program was announced. Two

00:09:50.200 --> 00:09:52.419
years. Just to get a computer to print a greeting.

00:09:52.860 --> 00:09:55.940
Two years. And mind -blowingly, a human being

00:09:55.940 --> 00:09:59.539
didn't even write it. No. The syntax is so chaotic

00:09:59.539 --> 00:10:02.179
and non -intuitive that a human couldn't figure

00:10:02.179 --> 00:10:05.539
it out. The code was actually produced by a separate

00:10:05.539 --> 00:10:08.220
algorithm written in an entirely different language

00:10:08.220 --> 00:10:11.299
called Common Lisp, which basically brute -forced

00:10:11.299 --> 00:10:13.860
its way into finding the right sequence of symbols.

00:10:13.980 --> 00:10:16.980
And after all that monumental effort, the output

00:10:16.980 --> 00:10:19.659
it produced was slightly mangled. It printed,

00:10:20.000 --> 00:10:24.080
hello world, with strange, inconsistent capitalization.

00:10:24.799 --> 00:10:27.679
That horror story perfectly highlights a crucial

00:10:27.679 --> 00:10:30.220
concept in the tech industry. I mean, if a language

00:10:30.220 --> 00:10:32.600
takes two years to print a greeting, you have

00:10:32.600 --> 00:10:35.200
a massive usability problem. And this brings

00:10:35.200 --> 00:10:38.039
us to a vital industry metric, time to hello

00:10:38.039 --> 00:10:41.759
world or TTHW. Time to hello world. I love that

00:10:41.759 --> 00:10:43.759
the industry took this inside joke and turned

00:10:43.759 --> 00:10:46.019
it into an actual measurable metric for success.

00:10:46.240 --> 00:10:48.779
It's brilliant. TTHW is exactly what it sounds

00:10:48.779 --> 00:10:50.700
like. It's the amount of time it takes a completely

00:10:50.700 --> 00:10:53.700
new user to author and successfully run a hello

00:10:53.700 --> 00:10:56.059
world program in a given programming language

00:10:56.059 --> 00:10:58.539
or environment. It serves as a strict parameter

00:10:58.539 --> 00:11:01.340
for approachability. I mean, think about your

00:11:01.340 --> 00:11:03.679
own workflow for a second. The last time you

00:11:03.679 --> 00:11:05.940
downloaded a new app or tried a new piece of

00:11:05.940 --> 00:11:08.659
software at your job, how quickly could you get

00:11:08.659 --> 00:11:11.860
a basic win? How fast could you do the simplest

00:11:11.860 --> 00:11:13.799
possible thing this software was designed to

00:11:13.799 --> 00:11:16.360
do? Well, if you open a new tool and it takes

00:11:16.360 --> 00:11:19.139
you like three hours just to figure out how to

00:11:19.139 --> 00:11:21.080
create a blank document, you're going to close

00:11:21.080 --> 00:11:23.200
the window and find a different tool. Exactly.

00:11:23.399 --> 00:11:26.419
The human brain craves that early dopamine hit

00:11:26.419 --> 00:11:29.720
of success. A shorter time to hello world indicates

00:11:29.720 --> 00:11:32.600
an easier adoption curves. It means the creators

00:11:32.600 --> 00:11:35.039
of the language have successfully removed the

00:11:35.039 --> 00:11:37.240
early friction. And what is really interesting

00:11:37.240 --> 00:11:39.580
is that this concept has expanded far beyond

00:11:39.580 --> 00:11:43.000
just programming languages. PTHW is now widely

00:11:43.000 --> 00:11:45.639
used to measure API's application programming

00:11:45.639 --> 00:11:48.240
interfaces. So when a tech company releases a

00:11:48.240 --> 00:11:51.159
new API, say, a tool for processing credit card

00:11:51.159 --> 00:11:53.220
payments on a website or pulling live weather

00:11:53.220 --> 00:11:55.679
data into a mobile app, they're actually tracking

00:11:55.679 --> 00:11:58.679
how fast a new developer can get a basic successful

00:11:58.679 --> 00:12:01.730
test transaction running. Precisely. If a payment

00:12:01.730 --> 00:12:04.649
processor's API requires a developer to read

00:12:04.649 --> 00:12:08.269
50 pages of documentation just to process a fake

00:12:08.269 --> 00:12:11.289
$1 test charge, their time to hello world is

00:12:11.289 --> 00:12:13.710
too long. Yeah, nobody is reading that. Right.

00:12:14.009 --> 00:12:16.230
Developers will literally just choose a competitor's

00:12:16.230 --> 00:12:19.470
API. It has become a metric of survival in the

00:12:19.470 --> 00:12:21.649
tech marketplace. Make your microphone easy to

00:12:21.649 --> 00:12:23.820
tap. or no one will bother speaking into it.

00:12:24.159 --> 00:12:26.539
So if the entire tech industry is obsessed with

00:12:26.539 --> 00:12:29.419
making time to Hello World as fast and painless

00:12:29.419 --> 00:12:32.259
as possible, it begs a massive question. OK.

00:12:32.659 --> 00:12:35.720
Why do some modern programming environments intentionally

00:12:35.720 --> 00:12:38.299
make it impossible to print those words at all?

00:12:39.240 --> 00:12:42.419
This is where Hello World transcends text and

00:12:42.419 --> 00:12:44.360
becomes an abstract concept. You start running

00:12:44.360 --> 00:12:46.580
into environments where printing text either

00:12:46.580 --> 00:12:48.419
goes against the fundamental philosophy of the

00:12:48.419 --> 00:12:50.940
language or is blocked by the physical reality

00:12:50.940 --> 00:12:52.809
of the hardware. Right, let's start with the

00:12:52.809 --> 00:12:54.909
philosophical holdouts. There's a whole branch

00:12:54.909 --> 00:12:57.210
of computing called functional programming languages

00:12:57.210 --> 00:13:01.009
like Lisp, ML, and Haskell. Now, I'm not a functional

00:13:01.009 --> 00:13:03.470
programming expert, but from what I understand,

00:13:04.009 --> 00:13:06.750
these languages operate on very strict mathematical

00:13:06.750 --> 00:13:10.110
purity. They do, yeah. In pure functional programming,

00:13:10.330 --> 00:13:13.289
functions are supposed to act like sealed pristine

00:13:13.289 --> 00:13:16.169
mathematical boxes. You put a specific input

00:13:16.169 --> 00:13:18.690
into the box, and you get a specific output.

00:13:19.309 --> 00:13:21.350
Crucially, the function is not supposed to cause

00:13:21.350 --> 00:13:23.529
any side effects in the outside world. Wait,

00:13:23.730 --> 00:13:26.490
so just displaying a word on a screen is considered

00:13:26.490 --> 00:13:28.629
breaking the rules. How is that a side effect?

00:13:28.929 --> 00:13:31.750
Well, because to display the word hello, the

00:13:31.750 --> 00:13:33.549
computer has to physically alter the state of

00:13:33.549 --> 00:13:35.669
its monitor. It has to change the color of the

00:13:35.669 --> 00:13:38.429
pixels. It's reaching outside of its sealed mathematical

00:13:38.429 --> 00:13:41.190
box to manipulate the external environment. Oh,

00:13:41.190 --> 00:13:44.009
wow. Yeah. So in this strict, pure, functional

00:13:44.009 --> 00:13:46.669
programming community, traditional input -output

00:13:46.669 --> 00:13:49.649
operations like printing text to a console are

00:13:49.649 --> 00:13:52.070
frowned upon in early learning stages because

00:13:52.070 --> 00:13:54.610
they teach bad habits. So they don't use Hello

00:13:54.610 --> 00:13:57.870
World at all. Instead, the typical introductory

00:13:57.870 --> 00:14:00.909
program for these languages is a factorial calculator.

00:14:01.730 --> 00:14:04.250
They substitute a recursive math problem for

00:14:04.250 --> 00:14:07.330
a greeting because calculating a factorial perfectly

00:14:07.330 --> 00:14:10.230
demonstrates the recursive, side -effect -free

00:14:10.120 --> 00:14:13.299
nature of the language without ever needing to

00:14:13.299 --> 00:14:16.179
alter the state of a monitor. Exactly. The sanity

00:14:16.179 --> 00:14:19.019
check changes to match the cultural values of

00:14:19.019 --> 00:14:21.159
the community. Okay, so philosophical purity

00:14:21.159 --> 00:14:24.139
is one reason to abandon the text greeting. Physical

00:14:24.139 --> 00:14:26.759
reality is the other. Let's talk about hardware.

00:14:27.500 --> 00:14:29.620
For embedded systems, text isn't just frowned

00:14:29.620 --> 00:14:32.620
upon, it's often physically impossible. Oh, definitely.

00:14:32.909 --> 00:14:35.710
We're talking about microcontrollers, field -programmable

00:14:35.710 --> 00:14:38.809
gate arrays, complex programmable logic devices,

00:14:39.250 --> 00:14:41.889
the tiny computing chips hidden inside everyday

00:14:41.889 --> 00:14:44.029
objects. Right, the computers running your washing

00:14:44.029 --> 00:14:46.549
machine or your microwave or the fuel injection

00:14:46.549 --> 00:14:49.269
system in your car engine. Those chips don't

00:14:49.269 --> 00:14:51.190
have keyboards attached to them. No, not at all.

00:14:51.269 --> 00:14:53.429
They don't have screens. There is no console

00:14:53.429 --> 00:14:55.769
to print to. So how do you know the chip is actually

00:14:55.769 --> 00:14:57.889
processing your code? It's like trying to find

00:14:57.889 --> 00:15:00.190
a pulse on a patient. You just need a sign of

00:15:00.190 --> 00:15:03.700
life. So for these headless physical devices,

00:15:03.919 --> 00:15:07.240
the Hello World equivalent is universally a blinking

00:15:07.240 --> 00:15:10.679
LED, a single flashing light. It's so elegant.

00:15:10.860 --> 00:15:14.460
It really is. Making a tiny LED blink on a circuit

00:15:14.460 --> 00:15:17.179
board proves so much behind the scenes. It proves

00:15:17.179 --> 00:15:19.519
that the code compiled correctly on your laptop.

00:15:19.799 --> 00:15:21.940
It proves that the code successfully transferred

00:15:21.940 --> 00:15:24.940
over the serial cable to the chip. It proves

00:15:24.940 --> 00:15:27.399
that the chip's internal clock timings are accurate

00:15:27.399 --> 00:15:29.700
and that the physical processor pins are firing

00:15:29.700 --> 00:15:31.759
electrical current exactly when you tell them

00:15:31.759 --> 00:15:34.700
to. It is the ultimate bare -metal sanity check.

00:15:34.840 --> 00:15:37.240
The concept is so incredibly adaptable, and it

00:15:37.240 --> 00:15:39.179
doesn't stop at physical hardware either. It

00:15:39.179 --> 00:15:41.409
shifts visually as well. In the early days of

00:15:41.409 --> 00:15:44.230
Java, Sun Microsystems created a Hello World

00:15:44.230 --> 00:15:47.129
program based entirely on scalable vector graphics.

00:15:47.429 --> 00:15:50.429
The Excel programming language introduces itself

00:15:50.429 --> 00:15:53.570
to new developers with a spinning 3D computer

00:15:53.570 --> 00:15:55.850
graphic of the Earth. And if you're learning

00:15:55.850 --> 00:15:58.610
computer graphics libraries, you know, the tools

00:15:58.610 --> 00:16:01.250
used to build modern video games, the equivalent

00:16:01.250 --> 00:16:04.149
isn't text. It's rendering a simple, brightly

00:16:04.149 --> 00:16:07.019
colored shape known as the Hello Triangle. So

00:16:07.019 --> 00:16:09.759
what does this all mean? The phrase has morphed

00:16:09.759 --> 00:16:12.860
from four character memory chunks in the 1970s

00:16:12.860 --> 00:16:16.139
to blinking LEDs on a circuit board to spinning

00:16:16.139 --> 00:16:19.480
3D globes. Educators Mark Gusdeel and Elliot

00:16:19.480 --> 00:16:21.639
Soloway have actually argued that the traditional

00:16:21.639 --> 00:16:24.980
text -based hello world test message might be

00:16:24.980 --> 00:16:27.740
totally outdated today. Really? Yeah, they suggest

00:16:27.740 --> 00:16:29.899
that manipulating complex graphics and sound

00:16:29.899 --> 00:16:32.440
is now just as easy for modern computers as printing

00:16:32.440 --> 00:16:35.159
text was decades ago. Why just print a word when

00:16:35.159 --> 00:16:37.190
you can summon an entire interactive environment

00:16:37.190 --> 00:16:39.809
with three lines of code. That raises an important

00:16:39.809 --> 00:16:41.990
question though. If a modern language can render

00:16:41.990 --> 00:16:44.850
a photorealistic 3D environment instantly, why

00:16:44.850 --> 00:16:47.590
are we still asking it to print a 1950s radio

00:16:47.590 --> 00:16:50.690
DJ catchphrase? Exactly, but it feels like we

00:16:50.690 --> 00:16:52.629
would be losing a crucial piece of our shared

00:16:52.629 --> 00:16:55.389
heritage if we let the text go completely. If

00:16:55.389 --> 00:16:57.429
we synthesize everything we've looked at today,

00:16:57.710 --> 00:17:01.250
Hello World is clearly far more than just a coding

00:17:01.250 --> 00:17:04.829
cliche. It's a historical artifact inextricably

00:17:04.829 --> 00:17:08.230
tied to the physical memory limitations of 1970s

00:17:08.230 --> 00:17:11.289
hardware. Absolutely. It has evolved into a literal

00:17:11.289 --> 00:17:14.549
industry benchmark for business usability with

00:17:14.549 --> 00:17:17.470
the time to hello world metric. And it remains

00:17:17.470 --> 00:17:20.950
a concept so fundamental that it seamlessly transforms

00:17:20.950 --> 00:17:24.609
into factorial math, or blinking lights, or 3D

00:17:24.609 --> 00:17:26.910
geometry depending entirely on the environment

00:17:26.910 --> 00:17:29.339
it finds itself in. Oh, and before we wrap up,

00:17:29.460 --> 00:17:31.480
I have to share one last detail that proves just

00:17:31.480 --> 00:17:34.700
how deeply this specific idea of the sanity check

00:17:34.700 --> 00:17:37.019
is embedded in computing culture. OK, let's hear

00:17:37.019 --> 00:17:39.339
it. The Debian and Ubuntu Linux operating systems

00:17:39.339 --> 00:17:41.599
literally include a command just called hello.

00:17:41.920 --> 00:17:44.160
You type hello into your terminal, and the system

00:17:44.160 --> 00:17:46.539
reaches out to its package manager. The GNU Hello

00:17:46.539 --> 00:17:49.180
package downloads a tiny program and prints,

00:17:49.319 --> 00:17:52.180
hello, world. Wait, a program built for no other

00:17:52.180 --> 00:17:54.079
reason than to prove the downloading mechanism

00:17:54.079 --> 00:17:57.329
itself is functioning. Yes. It exists solely

00:17:57.329 --> 00:17:59.970
to prove the package manager is working correctly

00:17:59.970 --> 00:18:02.589
and to serve as a pristine template for developers

00:18:02.589 --> 00:18:04.750
learning how to format their own software packages.

00:18:05.549 --> 00:18:08.549
It is sanity checks all the way down. An operating

00:18:08.549 --> 00:18:11.809
system testing itself using the oldest grading

00:18:11.809 --> 00:18:14.529
in the book. That is fantastic. It really makes

00:18:14.529 --> 00:18:16.609
you think about the invisible layers of abstraction

00:18:16.609 --> 00:18:19.990
we rely on every single day. As technology gets

00:18:19.990 --> 00:18:21.750
more and more complex, we kind of lose sight

00:18:21.750 --> 00:18:23.910
of the pipes and the wiring. And that leaves

00:18:23.910 --> 00:18:26.630
us with a final thought to mull over. If we do

00:18:26.630 --> 00:18:29.970
fully abandon the simple text, hello world, for

00:18:29.970 --> 00:18:32.450
auto -generated code templates or instantly rendered

00:18:32.450 --> 00:18:35.970
3D graphics, do we risk losing touch with the

00:18:35.970 --> 00:18:38.250
absolute bare metal fundamentals of how humans

00:18:38.250 --> 00:18:42.450
first learn to teach machines to speak? I want

00:18:42.450 --> 00:18:44.089
to turn this toward you listening right now and

00:18:44.089 --> 00:18:46.619
apply it to your own life. Oh, I like this. beyond

00:18:46.619 --> 00:18:50.220
just computers, what is your personal hello world?

00:18:51.059 --> 00:18:53.599
When you sit down to learn a completely new skill,

00:18:53.720 --> 00:18:55.380
whether it's picking up a guitar, learning a

00:18:55.380 --> 00:18:56.980
foreign language, or stepping onto a tennis court,

00:18:57.380 --> 00:18:59.660
what is the simplest possible action you take?

00:19:00.200 --> 00:19:03.299
What is that vital, tiny first step you use to

00:19:03.299 --> 00:19:06.000
prove to yourself, okay, I am ready to begin.

00:19:06.200 --> 00:19:08.539
Tapping the mic in your own life. I love that.

00:19:08.839 --> 00:19:10.740
Well thank you for joining us on this deep dive

00:19:10.740 --> 00:19:12.940
into the history, the friction, and the philosophy

00:19:12.940 --> 00:19:15.920
behind two simple words. Keep exploring, keep

00:19:15.920 --> 00:19:17.779
questioning, and we will catch you on the next

00:19:17.779 --> 00:19:17.940
one.
