ฝึกพูดภาษาอังกฤษด้วยเทคนิค Shadowing จากวิดีโอ: People Are Mad They're Told to Learn

เลือกโหมดฝึก

แต่ละโหมดจะเปิดห้องฝึกแบบเต็มจอ

194 ประโยค
หากประโยคสั้นหรือยาวเกินไป กดที่ Edit เพื่อปรับแก้
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.

ดาวน์โหลดแอป

ทุกอย่างที่ต้องใช้เพื่อพูดได้คล่อง

AI ให้คะแนนการออกเสียงให้คะแนนทุกประโยค
ฝึก IPAเชี่ยวชาญทุกเสียง
คำศัพท์สร้างคลังคำของคุณ
เกมคำศัพท์เล่นไปเรียนไป

ช่องเดียวกัน

FOR YOU

วิดีโอแนะนำ

คำศัพท์และข้อสังเกตด้านการพูดสำหรับบทเรียนนี้

บทเรียนฝึกพูดระดับ B2 นี้ใช้วิดีโอ “People Are Mad They're Told to Learn” เป็นสื่อ คำที่ถูกพูดซ้ำบ่อยที่สุด: Simd, byte, vector, operation วิดีโอนี้มี 194 ประโยค และ 2368 คำ สำหรับฝึกพูดตาม ช่วงที่มีเสียงพูดยาว 11:30 ผู้พูดพูดเร็ว ประมาณ 206 คำต่อนาที จึงมีการเชื่อมเสียงและลดเสียงค่อนข้างมาก 83% ของคำอยู่ใน 3,000 คำที่ใช้บ่อยที่สุดในภาษาอังกฤษ ส่วนที่เหลือควรดูไว้ก่อนเริ่มฝึก จากทั้งหมด 194 ประโยค มี 33 ประโยคเป็นคำถาม จึงเหมาะสำหรับฝึกน้ำเสียงประโยคคำถามและการตอบสั้น ๆ

คำศัพท์สำคัญในวิดีโอนี้

คำที่ยากที่สุด 12 คำในวิดีโอ พร้อมคำอ่านและความหมาย:

คำศัพท์คำอ่านความหมาย
byte คำนาม/baɪt/ไบต์
vector คำนาม/ˈvɛktɚ/เวกเตอร์
cardinality คำนาม/kɑɹdɪˈnælɪti/ภาวะเชิงการนับ
naive คำคุณศัพท์/naɪˈiv/ไร้เดียงสา, นาอีฟ
queue คำนาม/kju/คิว
infinity คำนาม/ɪnˈfɪnɪti/อนันต์
depressing คำคุณศัพท์/dɪˈpɹɛsɪŋ/น่าหดหู่, น่าเศร้า
slice คำนาม/slaɪs/ชิ้น
algorithm คำนาม/ˈælɡəɹɪðm̩/ขั้นตอนวิธี, อัลกอริทึม
graph คำนาม/ɡɹæf/กราฟ
password คำนาม/ˈpæs.wɜɹd/รหัสผ่าน, รหัส
flame คำนาม/fleɪm/เปลวไฟ, อัคนิคณะ

กริยาวลีที่คุณจะได้ยิน

คำศัพท์ความหมาย
log out คำกริยาล็อกเอาต์

ประโยคที่ควรฝึกพูดซ้ำ

ประโยคสั้น ๆ ที่สมบูรณ์จากวิดีโอ ซึ่งนำไปใช้ในบทสนทนาประจำวันได้:

  • 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?

ไวยากรณ์ในวิดีโอนี้

โครงสร้างที่ผู้พูดใช้บ่อยที่สุด พร้อมคำพูดจริงจากวิดีโอ:

โครงสร้างในวิดีโอ
Present perfect have/has + กริยาช่อง 3 — เหตุการณ์ในอดีตที่ยังเกี่ยวข้องกับปัจจุบันI've understood · I've called · have chosen
Relative clauses who / which + อนุประโยค — ข้อมูลเพิ่มเติมเกี่ยวกับคนหรือสิ่งของthis, which is · tail, which makes

การออกเสียงที่ควรระวัง

ผู้พูดใช้รูปย่อและรูปลดเสียง 50 ครั้ง เช่น I'm, don't, gonna ให้พูดแบบสั้นตามที่ได้ยิน

  • เสียง “th”: algorithm /ˈælɡəɹɪðm̩/, underneath /ˌʌndɚˈniθ/
  • เสียง “sh” และ “zh”: optimization /ˌɑptəmaɪˈzeɪʃən/, instruction /ɪnˈstɹʌkʃən/, disproportionately /ˈdɪs.pɹəˌpɔɹ.ʃən.ət.li/, initialize /ɪˈnɪʃəlaɪz/, gosh /ɡɑːʃ/
  • คำยาว — ลงเสียงหนักให้ถูกพยางค์: 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/

เสียงที่คนไทยมักออกเสียงยาก:

  • เสียงท้ายคำ — ออกเสียงให้ครบ ไม่เปลี่ยนเป็นตัวสะกดแบบไทย: lanes /leɪnz/, parse /pɑɹs/, initialize /ɪˈnɪʃəlaɪz/, tedious /ˈtiː.dɪəs/, readiness /ˈɹɛdinəs/
  • /v/ — ไม่ใช่ /w/ ให้ฟันบนแตะริมฝีปากล่าง: vector /ˈvɛktɚ/, developer /dɪˈvɛləpɚ/, massively /ˈmæs.ɪv.li/, naive /naɪˈiv/, vibe /vaɪb/
  • /z/ — เสียงก้อง ไม่ใช่ /s/: lanes /leɪnz/, optimization /ˌɑptəmaɪˈzeɪʃən/, initialize /ɪˈnɪʃəlaɪz/

วิธีฝึกกับวิดีโอนี้

  1. ฟังวิดีโอให้จบหนึ่งรอบโดยยังไม่ต้องพูด แล้วจดคำที่ยังไม่รู้จัก
  2. เริ่มที่ความเร็ว 0.75× พูดตามทีละประโยค แล้วกลับไปใช้ความเร็วปกติเมื่อเริ่มคล่อง
  3. อัดเสียงตัวเองแล้วเทียบกับต้นฉบับ โดยสังเกตคำอย่าง byte, vector, cardinality เป็นพิเศษ

เทคนิค Shadowing คืออะไร?

Shadowing เป็นเทคนิคการเรียนรู้ภาษาที่ได้รับการรับรองทางวิทยาศาสตร์ พัฒนาขึ้นสำหรับการฝึกนักแปลมืออาชีพ วิธีการนี้เรียบง่ายแต่ทรงพลัง: คุณฟังเสียงภาษาอังกฤษจากเจ้าของภาษาและพูดตามทันที — เหมือนเงาที่ตามผู้พูดด้วยช่วงเวลาห่าง 1-2 วินาที การวิจัยแสดงว่าเทคนิคนี้ปรับปรุงความแม่นยำในการออกเสียง ทำนองเสียง จังหวะ การเชื่อมเสียง การฟังเข้าใจ และความคล่องแคล่วในการพูดได้อย่างมีนัยสำคัญ

เทคนิค shadowing: อ่านคู่มือฉบับเต็มทีละขั้นตอน →