Shadowing Practice: People Are Mad They're Told to Learn - Learn English Speaking with Video

Creating lesson...
1
So I was, you know, surfing on the old Twitters, and I saw this tweet that wrote a practical introduction to SimD using real examples from Ghosty,
2
and I thought, hey, that's pretty cool.
3
But here's the thing, is that often my projects, I don't really feel like need SimD anywhere.
4
In fact, I took a flame graph of the game I'm making, and only 0.83% of the entire time, I'm actually in the update function.
5
I don't really feel like I have a huge need, you know, to learn the old SIMDs, whatever.
6
Hey, cool post though.
7
But then the next day, this got posted.
8
My SIMD post was on Hacker News
9
and the general hostility towards understanding how computers work and owning your own outcomes is really depressing.
10
A large amount of people seem to simply have the attitude that they hope someone else will pay their bills for them.
11
It can't be that bad, right?
12
The vast majority of developers have zero need for learning SIMD.
13
Why mislead them and make them feel like to be a real developer?
14
You have to know it.
15
what?
16
So an article about SIMD is making people feel like, what am I reading?
17
So obviously at this point, I had to go and actually learn SIMD because, you know, whether you like this or not, I've never actually used SIMD in any sort of practical use case.
18
I've understood what it was.
19
I've called functions that have been SIMD themselves.
20
I have just never personally hand wrote anything to do with it.
21
So I thought, hey, given the fact that Hacker News hates it, I probably need to give this a shot and learn about it.
22
So today you're going to A, have to learn about it, but B, we got some hot takes, okay?
23
So I got to talk about this whole thing.
24
Because honestly, why are you misleading them, Mitchell?
25
Also, just in case anyone's wondering, I'm not going to make the joke that everybody thinks I'm going to make involving SimD, okay?
26
Not going to happen.
27
And I'd also like to say thank you to the sponsors.
28
Vibe Coders, silence.
29
Someone who's worked in enterprise is speaking.
30
You know, simple OAuth sign-in's not that bad to program.
31
For real enterprise applications that need single sign-on, pass keys, user management, roles and permission, enterprise readiness, and passwords, and recovery,
32
that's a little bit more difficult.
33
And that is where WorkOS comes in.
34
WorkOS is trusted by a lot of the top companies, OpenAI, Anthropic, Cursor, and a whole lot more.
35
But not only that, it's free for your first million users.
36
So that means for you, that is 999,999 free seats available.
37
Pretty much no matter what backend you have chosen, there is an SDK available for you.
38
So go check out WorkOS at workos.com.
39
Links in the description.
40
So the article's called Everyone Should Know SIMD.
41
Now, obviously this became the immediate focal point.
42
The fact that he said everyone should know SIMD, people just got pissed off.
43
How dare you say everyone? and it's just like, okay, here's a great concept.
44
And honestly, it would be really good.
45
The more people know when programming, right?
46
I don't think anyone should ever argue that everybody should try
47
and attempt to know as much as possible so they can make the best quality software out there.
48
And so when someone says, Hey, everybody should know this.
49
It's like, okay, I mean, maybe I should know this.
50
But instead, people were genuinely upset about that.
51
Good article, but I wouldn't start off with a bold sentence such as SIMD can be simple to understand.
52
And there you go.
53
That's the second big one.
54
People hate the fact that he calls it simple.
55
Just read the article though.
56
SIMD has a reputation for being complex.
57
I've met many a good software engineers who dismiss it as something too complex to learn
58
or a niche optimization meant only for the highest performance software, not useful in everyday programming.
59
I think that's wrong.
60
SIMD can be simple to understand.
61
And there's a lot of versions of that comment.
62
It was all over Twitter as well.
63
Like, how could you say that everybody should know something?
64
Or how could you say it was easy or simple to understand?
65
It's complex.
66
And it's funny because by saying it that way, his first line was, in fact, kind of made obvious.
67
So me, who's never really understood what SIMD was, I figured, you know what?
68
Why don't I learn what SIMD is?
69
Why don't I give it a try, come up with a quick problem, and see if I can make something disproportionately faster, and then I can judge.
70
Is SimD difficult?
71
Is it some magical beast?
72
Or really, was that all that bad at all?
73
All right, so let's go to the white board.
74
Oh, gosh.
75
Oh, Dario.
76
Dario, stop doing that, Dario.
77
Don't do that.
78
Okay, here, hold on.
79
That's the wrong one, wrong one.
80
So I thought, what could be a good SimD project?
81
Well, SimD, you want to do some action that you need to do over a long for loop,
82
but you have to do like the same comparison a bunch or some same operation over and over again.
83
At least that's what I thought in my head.
84
So I thought, okay, a good project would probably be, I have these long log files that I want to be able to find the individual logs out.
85
And I want to be able to go over this whole list.
86
And you know, you just generally have to keep doing this over and over and over again.
87
And it doesn't really matter how long this line is.
88
It just matters that, yes, we just have to do this over and over again up until the, you know, slash end.
89
And again, I'm not gonna make the joke that everybody thinks I'm gonna make.
90
So I figured I would just create a program
91
that would find each one of these new lines and be able to parse out this delicious JSON.
92
I dropped the actual parsing of JSON, but instead just looked for the new lines
93
because I wanted to see how much faster could I make the new line looking.
94
Next, I actually had to learn what SIMD was.
95
In the most simple sense, effectively, you can operate instead of on a singular value, say X, you operate on a vector, right?
96
So pretend you have a vector of X, Y, Z, you could operate on all of these at once.
97
Let's just say you wanted to compare, say, finding a new line.
98
Well, what I'd have to do is I'd have to load up a vector with three new lines, kind of like my example, and then in one single CPU operation now this is not
99
a single cpu cycle cpus are like magic to me i have no idea what's going on underneath there
100
but one i'm just going to call it an operation a
101
single operation can compare this vector to this new line
102
and then it can produce out for you a new vector
103
that's going to say hey this is uh the new lines
104
no new line in the first position there was a new
105
line in the second position there there was no new line in the third position.
106
So I can actually take that and go, okay, was there a new line?
107
Oh, there was.
108
That means I need to find out where the new line was within my vector, and then I can return that.
109
And that's because SIMD literally stands for single instruction, multiple data.
110
And you can see that right here.
111
You can see the fact that I have multiple data and I'm doing a single instruction.
112
Are these equal?
113
So I didn't really know how to do that, but I just followed exactly what was inside the blog post.
114
First, I have to create the constants and initialize any vector stuff.
115
I have to loop over the input one vector chunk at a time.
116
I perform the comparison.
117
I reduce it down to something that I can actually use.
118
And then I just handle the remaining bits at the very, very end.
119
That actually feels, well, pretty straightforward.
120
So this is the naive implementation.
121
This is how I would have implemented it if I did not use SIMD.
122
I'm gonna go over the entire data starting at some point, and I'm gonna go and just say, hey, are you a new line?
123
And if you are, then this is the spot.
124
Else I say, hey, no new line found, the end.
125
This is your very classic index of approach.
126
Then of course, I just created something to look for all the new lines and just go over all of them.
127
I'm sure there's better way of testing the code.
128
This was good enough for me.
129
And when I had run the program, as you can see here, it would take about 1.54 seconds.
130
Okay, not that long.
131
And this is the SIMD version.
132
Yes, it is a lot larger.
133
It's a little bit more tedious to do, but when you break it down into the five steps, it's actually pretty simple.
134
Step one, the broadcast part.
135
Broadcast just means I need to create that constant.
136
Remember how I talked about this new line constant?
137
Well, I do it right here.
138
I go, okay, I need to create effectively a byte array that's lanes big.
139
Lanes in this case is how many bytes can I fit in my SIMD operations?
140
SIMD turns out to be kind of CPU dependent my CPU can do 256 bits of SIMD operations.
141
So I can do effectively 16 of them at a time if they're byte wide, meaning they're eight bits wide.
142
So this is my little array, 16 eight bit items.
143
Then I just simply create 16 new line bytes and whatever value that is, I think it's hex A.
144
Hex A, new line.
145
Okay, I'm a genius.
146
Actual genius of useless information, of course.
147
Number two, instead of iterating, say one byte at a time, I iterate lanes by data time lanes, of course, is how big my Cindy operation is.
148
In this particular case, it's 16.
149
So I'm doing 16 bytes at a time, instead of one byte at a time.
150
From there, I actually just create my little value array, I just slice off 16 bytes from my array and go, okay, you are now a SIMD vector.
151
From there, I just simply see are these equal, I take all my new lines
152
and compare to all my values in like one single operation instead of doing that little tight for loop.
153
It's just lit I'm doing 16 operations at once.
154
It's kind of cool.
155
Extract most significant bits just really checks for any values that has a one in it.
156
Since all my values should equal zero, if there's no new lines, if there is a new lines, one of them will equal a one, it will grab out that most significant bit.
157
And by doing a cardinality check, if it's not zero, if they're not all zeros, then I have at least one one, then I need to go there and find
158
that one once then I have to manually go through my little SIMD vector and I have to go, okay, which one of you are one and then the first one I find, that's where the new line is.
159
If I don't find a new line, I just add lanes to the end of end.
160
So I'm just incrementing it 16 at a time.
161
So at the very end, you have to do this, which is kind of funny.
162
It's called the scalar tail, which makes a lot of sense if you think about it.
163
Let's just say you have seven bytes remaining.
164
Well, you can't create something that's 16 long from seven bytes.
165
Okay, so then instead, I have to just manually walk the remaining seven.
166
And by doing it that way, if I simply just run this, you can see it's like massively faster.
167
And so yes, am I going to be using SIMD anytime soon?
168
Probably not.
169
I have virtually no problems with performance inside the game I'm making.
170
But now I kind of know the shape I need to have.
171
And now I see why I'm gonna want to use structure of arrays versus array of structures,
172
because there is a huge possibility I could have some mega wins and some future performance optimizations.
173
And honestly, it kind of feels cool.
174
I have to say, it does feel kind of neat.
175
So should everybody know about SIMD?
176
Yeah, why not?
177
It took me an hour to go really learn everything and program up an example and debug it a little bit, not that bad.
178
You can do, Chat Shippity can tell you all about what you need to do.
179
It's actually pretty straightforward.
180
You can ask infinity questions.
181
At the end of the day, which one would you rather have?
182
Maybe a little too much knowledge, knowledge that you don't often use or don't need to use, and you just simply kind of disregard it, but you have it kind of floating in the back of your head,
183
like Dykstra's shortest algorithm, just floating in the back of my head, okay?
184
Priority queue.
185
Or would you rather be this guy?
186
The vast majority of developers have zero need for learning SIMD.
187
Why mislead them?
188
At the end of the day, I'd rather work with the person that wants to know more.
189
I'd rather be the person that wants to know more.
190
And if I never use SIMD and knowing this was completely useless throughout my entire life, I'm happy I know it.
191
The name is, did you know that Go 1.6 right here, as you can see right here, new experimental SIMD, ArchSIMD package?
192
Did you know that Go, even Go, it now has SIMD support?
193
Obviously, you know what that means, right?
194
That means we can sim these nuts on your face again.

Vocabulary and speaking notes for this lesson

This B2 speaking lesson is built on the video “People Are Mad They're Told to Learn”. The speaker keeps coming back to these words: Simd, byte, vector, operation. This video has 194 sentences and 2368 words to shadow. The speech runs for 11:30. The speaker talks fast, about 206 words per minute, so expect linked and reduced sounds. 83% of the words are among the 3,000 most common in English; the rest is worth studying before you start. 33 of its 194 sentences are questions, so it is good practice for question intonation and short answers.

Key vocabulary in this video

The 15 most advanced words in the video, with pronunciation and meaning:

WordPronunciationMeaning
byte noun/baɪt/A short sequence of bits (binary digits) that can be operated on as a unit by a computer; the smallest usable machine word.
vector noun/ˈvɛktɚ/A directed quantity, one with both magnitude and direction; the signed difference between two points.
array noun/əˈɹeɪ/Clothing and ornamentation; raiment.
lanes noun/leɪnz/bowling alley
mislead verb/mɪsˈliːd/To lead astray, in a false direction.
developer noun/dɪˈvɛləpɚ/A person or entity engaged in the creation or improvement of certain classes of products.
iterate verb/ˈɪtəɹeɪt/To perform or repeat an action on each item in a set.
parse verb/pɑɹs/To resolve (a sentence, etc.) into its elements, pointing out the several parts of speech, and their relation to each other by agreement or government; to…
optimization noun/ˌɑptəmaɪˈzeɪʃən/The design and operation of a system or process to make it as good as possible in some defined sense.
manually adverb/ˈmænj(u)əliː/By hand.
straightforward adjective/ˌstɹeɪtˈfɔː(ɹ)wə(ɹ)d/Proceeding in a straight course or manner; not deviating.
float verb/fləʊt/To be supported by a fluid of greater density (than the object).
instruction noun/ɪnˈstɹʌkʃən/The act of instructing, teaching, or providing with information or knowledge.
cardinality noun/kɑɹdɪˈnælɪti/The number of elements a given set contains.
disproportionately adverb/ˈdɪs.pɹəˌpɔɹ.ʃən.ət.li/in a disproportionate manner

Phrasal verbs you will hear

WordPronunciationMeaning
go over verbTo look at carefully; to scrutinize; to analyze.
check out verbTo record the departure or withdrawal of someone or something (such as guests, employees, books, etc.).
come up with verbTo manage to produce, deliver, or present (something) by inventing, creating, thinking of, or obtaining it.
do over verb/ˈduˌoʊvɚ/To cover with; to smear or spread on to.
find out verbTo discover, as by asking or investigating.
go through verbTo travel from one end of something to the other.
log out verbTo exit a user account in a computer system, so that one is not recognized until signing in again.

Sentences worth repeating

Short, complete lines from the video that you can reuse in everyday conversation:

  • I've understood what it was.
  • How dare you say everyone?
  • All right, so let's go to the white board.
  • At least that's what I thought in my head.
  • Remember how I talked about this new line constant?

Grammar in this video

The structures the speaker uses most, with the exact words from the video:

StructureIn the video
Present perfect have/has + past participle — a past action that still matters nowI've understood · I've called · have chosen
Relative clauses who / which + clause — extra information about a person or thingthis, which is · tail, which makes

Pronunciation to watch

The speaker uses 50 contractions and reduced forms, such as I'm, don't, gonna. Say them the short way, as you hear them.

  • The “th” sounds: algorithm /ˈælɡəɹɪðm̩/, underneath /ˌʌndɚˈniθ/
  • The “sh” and “zh” sounds: optimization /ˌɑptəmaɪˈzeɪʃən/, instruction /ɪnˈstɹʌkʃən/, disproportionately /ˈdɪs.pɹəˌpɔɹ.ʃən.ət.li/, initialize /ɪˈnɪʃəlaɪz/, gosh /ɡɑːʃ/
  • Long words — get the stress right: developer /dɪˈvɛləpɚ/, optimization /ˌɑptəmaɪˈzeɪʃən/, manually /ˈmænj(u)əliː/, cardinality /kɑɹdɪˈnælɪti/, disproportionately /ˈdɪs.pɹəˌpɔɹ.ʃən.ət.li/

How to practise with this video

  1. Listen to the whole video once without speaking and note the words you do not know.
  2. Start at 0.75× speed, shadow it sentence by sentence, then go back to normal speed once it feels easy.
  3. Record yourself and compare with the original, paying attention to words like byte, vector, array.

What is the Shadowing Technique?

Shadowing is a science-backed language learning technique originally developed for professional interpreter training and popularized by polyglot Dr. Alexander Arguelles. The method is simple but powerful: you listen to native English audio and immediately repeat it out loud — like a shadow following the speaker with just a 1–2 second delay. Unlike passive listening or grammar drills, shadowing forces your brain and mouth muscles to simultaneously process and reproduce real speech patterns. Research shows it significantly improves pronunciation accuracy, intonation, rhythm, connected speech, listening comprehension, and speaking fluency — making it one of the most effective methods for IELTS Speaking preparation and real-world English communication.

Shadowing technique: read the full step-by-step guide →