शैडोइंग अभ्यास: "Software Fundamentals Matter More Than Ever" — Matt Pocock - YouTube के साथ अंग्रेजी बोलना सीखें
C1
⏸ रुका हुआ
Hello everyone, having a good conference so far?
248 वाक्य
यदि वाक्य बहुत छोटे या लंबे हों, तो समायोजित करने के लिए Edit पर क्लिक करें।
1
Hello everyone, having a good conference so far?
2
Are you having a good conference so far?
3
Good, wonderful.
4
I have a message for you that I hope will be A comforting message for folks who believe that
5
their skill set is no longer worth anything in this new age.
6
which is I believe that software fundamentals matter now more than they actually ever have. And...
7
I'm a teacher and I've been recently teaching a course called Claude Code for Real Engineers.
8
Nice and provocative.
9
In the process of working on this course, I had to come up with a curriculum about
10
AI coding which is a bit of a nightmare because things are changing all the time, right?
11
AI is a whole new paradigm.
12
We need to chuck out all of the old rules, surely, so that we can bring in the new stuff.
13
And there's, kind of movement that has come up around this, which is the specs to code movement.
14
And the specs to code movement says that, okay, you can write a specification about how an application is supposed to work, and then you can use AI to turn it into code.
15
If there's a problem with the application, you then go back to the spec.
16
You don't really look at the code.
17
You just change the spec, you run the compiler again, and you end up with more code.
18
Raise your hand if you've heard of that.
19
Keep your hand raised if you've tried it.
20
Okay, I've tried it too, you can put your hands down.
21
And what I noticed was I would run it, And I would try not to look at the code.
22
But I would look at the code
23
and I realized I would get code out first of all
24
and then I would run it and I would get worse code.
25
and I did it again and I got even worse code.
26
I got it again, I kept running the compiler, kept running the compiler and I would just end up with garbage.
27
Raise your hand if that's happened to you.
28
Yes.
29
I don't think this works.
30
The idea that we can just ignore the code
31
and just have the code and let it manage itself is just sort of Vibe coding by another name.
32
And I didn't believe that back then.
33
I thought, "Okay, how do I fix the compiler?
34
How do I make it so that it doesn't produce bad code each time, or worse code?" And so I thought, okay, I need to explain to the LLM,
35
in English, what a good code base looks like.
36
Let me dig out one of my old favourite books, which is a philosophy of software design by John Ousterhout.
37
Go on Amazon, get it.
38
and he has a definition for what bad code looks like.
39
He calls it complex code.
40
Complexity is anything related to the structure of a software system that makes it hard to understand and modify the system.
41
Right?
42
So a bad code base is a code base that's hard to change.
43
If you can't change a code base without causing bugs, then it's a bad code base.
44
Good code bases are easy to change.
45
So I thought, ooh, that was good.
46
Let's try another book, let's try the pragmatic programmer.
47
Go on Amazon, get it.
48
they have a whole chapter on something called software entropy.
49
And this is exactly what I was seeing.
50
Entropy is the idea that things tend towards disaster and floating away from each other and collapse.
51
And this is exactly how most software systems behave too, is that every time you make a change to a codebase, If you're only thinking about that change, not thinking about the design of the whole system,
52
your codebase is going to get worse and worse and worse.
53
And that's what I was seeing.
54
Everything inside the specs to code idea that you just run the compiler again and again was making worse code.
55
Now, there's an idea that sort of drives the SpextaCode movement, which is that code is cheap.
56
Raise your hand if you've heard that phrase before, that code is cheap.
57
Well, I don't think this is right.
58
I think code is not cheap.
59
In fact, bad code is the most expensive it's ever been.
60
Because if you have a code base that's hard to change, you're not able to take all of the bounty that AI can offer,
61
because AI in a good codebase actually does really, really well.
62
And this means good code bases matter more than ever, which means software fundamentals matter more than ever.
63
That's the thesis of this talk.
64
So, let's actually get into practical stuff.
65
I'm going to talk about different failure modes that you may have experienced
66
or you may not have experienced yet with AI
67
and how you can avoid them by just going back to old books and looking at good software practices.
68
Sound good?
69
So the first one is that the AI didn't do what I wanted.
70
I thought I had a good idea in my head
71
and the AI just did something totally different or it did some like specs that I, you know, it just made something I didn't want.
72
Raise your hand if you've hit this mode.
73
Cool, okay.
74
Well, This is what they say in the Pragmatic Programmer, is that no one knows exactly what they want.
75
It's that you and the AI, there is a communication barrier there, right?
76
And so when you're talking to the AI, that's kind of like the AI doing its requirements gathering.
77
It's basically working out from you what it is that you need.
78
And, I realized that there was another book, Frederick P.
79
Brooks, The Design of Design, And it talks about this idea called the design concept.
80
It's that when you have more than one person designing something together, you have this idea sort of floating between you, this ephemeral idea of the thing that you're building.
81
And that thing that you're building, or the idea of it, is called the design concept.
82
It's not an asset, it's not something you can put in a markdown file, it is the invisible sort of theory of what you're building.
83
And so I thought, okay, that's what's going on.
84
Me and the AI don't share a design concept.
85
So I came up with a skill.
86
This skill is very, very simple, it's called Grill Me, and it looks like this.
87
Interview me relentlessly about every aspect of this plan until we reach a shared understanding.
88
walk down each branch of the design tree, which is another thing from Frederick P.
89
Brooks, resolving dependencies between decisions one by one.
90
This skill is like, the repo containing this skill has like 13 ,000 stars or something, it just went nuts, went viral, people love this thing.
91
These couple of lines means the AI asks you like 40 questions,
92
60 questions, I've had it ask people 100 questions before it's satisfied they've reached a shared understanding.
93
And it means it turns the AI into a kind of adversary where it's just continually pinging you ideas
94
and trying to reach a shared understanding.
95
And that means that the conversation that you then generate, you can take that and turn it into a product requirements document or something.
96
Or if it's a small change, you can just to and turn it directly into issues.
97
and then your AFK agent will then pick it up.
98
And don't at me on this, but I personally believe this is better than the default plan mode in the, tool that I use which is claw code.
99
Plan mode is extremely eager to create an asset.
100
It really wants to just create a plan and start working.
101
Whereas I think it's a lot nicer to reach a shared design concept first.
102
So that's tip number one.
103
Now, failure mode number two is that the AI is just way too verbose.
104
It's like you're almost talking across purposes with the AI.
105
Raise your hand if you feel this if you ever experienced that failure mode.
106
Yeah.
107
It's kind of like the AI is talking, just using too many words to try to communicate what it's doing.
108
It's not like you're talking using the same language.
109
And this to me felt very, very familiar, right?
110
If you've ever been a developer for a long time and you've worked with, let's say, domain experts, someone building an application,
111
Let's say the domain expert wants you to build something on microchips, you have no idea what microchips are.
112
you need to establish some kind of shared language.
113
Right?
114
Because otherwise, they're going to be using terms you don't understand, you're going to be translating that into code that maybe you don't even understand.
115
and certainly the domain expert won't.
116
And so there's this kind of language gap between you and the domain expert. And so...
117
I went back to domain -driven design, DDD, This is something I'm still kind of on the edge of exploring, but everything I'm reading about DDD is just music to my ears.
118
I freaking love it.
119
and DDD has a concept of a ubiquitous language.
120
With the ubiquitous language, conversations among developers, and expressions of the code, and conversations with domain experts, are all derived from the same domain model.
121
a markdown file full of a list of terms that you and the AI have in common.
122
And you really focus on those terms and you really make sure that they're aligned with what it actually means, and you use them all the time.
123
in the code, when you're talking about the code, when you're talking to domain experts.
124
or in our case, when you're talking with AI.
125
So I made a skill.
126
This skill is the ubiquitous language skill.
127
Basically just scans your code base, looks for terminology, and then...
128
creates a Markdown file creates the ubiquitous language Markdown file, a bunch of Markdown tables with all of the terminology.
129
And this, then I pass it to the AI, and I'm able to read it too.
130
and I actually have it open all the time when I'm grilling with the AI and planning and that.
131
What I noticed by reading the thinking traces of the AI not only improves the planning, but it allows the AI to think in a less verbose way,
132
and actually means that the implementation is more aligned with what you actually planned.
133
So this has absolutely been a powerhouse.
134
It's been unbelievably good.
135
So that's tip number two, create a shared language with the AI.
136
Thank you.
137
So, okay, let's imagine that you've aligned with the AI.
138
You know what it is you're supposed to be building.
139
The AI has built the right thing.
140
But it doesn't work.
141
Raise your hands if that's happened to you.
142
Yep, just doesn't work.
143
Well, there's an obvious thing that we can do to make that better, which is we can use feedback loops.
144
We can use static types, if you're not using TypeScript, that's crazy.
145
If you're building a frontend app and you're not giving the LLM access to the browser so it can look around, absolutely needs that.
146
And you obviously also need automated tests.
147
And one sort of thing I notice here is that even with these feedback loops the LLM doesn't use them very well.
148
It doesn't kind of like get the most out of its feedback loops in the way that a veteran developer would.
149
And so it does, what it tends to do is just does way too much at once, it will produce huge amounts of code and then think oh I should probably type check that actually.
150
Or I should, yeah, maybe check a test on that.
151
Or maybe do something like that.
152
And this in the pragmatic program they describe as outrunning your headlights,
153
as essentially driving too fast because the rate of feedback is your speed limit.
154
The rate of feedback is your speed limit, which means that you should be testing as you go, taking small deliberate steps.
155
And the AI by default is really not very good at that.
156
So, skill number three is TDD.
157
You should be using test -driven developments.
158
because TDD forces the LLM to really takes small steps.
159
You create a test first, you make that test pass, and then you refactor the code to make it nicer and consider the design.
160
The issue here is that testing is really hard.
161
Testing has always been hard.
162
Thank you.
163
And the reason for that, Thank you is there a ton of different decisions you need to make when you write a test.
164
You need to figure out how big a unit do you want to test.
165
You need to figure out what to mock, you need to figure out what behaviours do you even want to test in the first place.
166
And all of these decisions are dependent, so if you are testing a really big unit, like an entire massive application, then it might be quite flaky, you might not want to test that many behaviours.
167
If you only test this unit, you need to mock this unit.
168
It's all interlinked.
169
And I've been thinking about this for years, for my entire development career.
170
And what we notice is that good codebases are easy codebases to test.
171
Right?
172
So here we're starting to get back to the idea of code being important.
173
It's that the better your code base is, the better your feedback loops are because you're able to give better feedback to the LLM, it produces better code.
174
And so I thought, what does a good codebase, what does a testable codebase look like?
175
Again, we go to John Asterhout, He talks about having deep modules in your code base.
176
not shallow modules, not lots of modules that expose lots of functions,
177
There should be relatively few large deep modules with simple interfaces.
178
Let's compare them quickly.
179
Deep modules, lots of functionality hidden behind a simple interface, hiding the complexity.
180
You can look inside the deep module if you want to, but you don't need to.
181
You can just use the interface.
182
Shallow modules, not much functionality, complex interface.
183
And, I'll just wait for you to take the photos.
184
Shallow modules in a codebase kind of look like this.
185
We have a ton of different tiny little blobs that the AI has to walk through and navigate.
186
And this is really hard for the AI to explore, actually.
187
And so often what you'll see is if you have a code base like this, which AI is really good at creating code bases like this, is that you'll have a situation where AI doesn't understand what your code is doing.
188
It will attempt to explore the code, but because it's poorly laid out, filled with shallow modules, it doesn't maybe get to the right module in time or doesn't understand all the dependencies,
189
all that stuff.
190
It doesn't understand your code.
191
And so what does a codebase full of deep modules look like?
192
Well, it looks like this.
193
where it's the same code, but it's just structured inside boundaries, where you have these interfaces on the top.
194
And these interfaces, you should probably have a lot of control over them and design them really well.
195
Otherwise, AI might mess up the design.
196
But the implementation, you can kind of leave that to the AI a bit.
197
So, how do you turn a codebase that looks like this, into a codebase that looks like that?
198
Well, I've got a skill for that.
199
Improve code -based architecture.
200
Turns out this is not, it's quite complicated to do this, but it's like a set of steps that you can reusably do again and again.
201
You just sort of explore the code base, look for opportunities where there's code that's related, and wrap all of that in a deep module.
202
And this is a testable code base because the boundaries around this code are so, so simple.
203
You test at the interface, you verify using that interface, and you're good to go.
204
So this is a code base that rewards TDD.
205
But how about failure mode number six?
206
Which is your, okay, let's say your feedback loops are working, let's say that things are kicking into gear, you're able to ship more code than you ever have before, but your brain can't keep up.
207
Right?
208
Raise your hand if you felt more tired than you have ever before in your development career.
209
Yeah, me too.
210
It's knackering.
211
And I think that this is a code base that actually makes it harder for your brain, because you, as well as the AI, need to keep all of that information in your head.
212
Whereas this, not only is it simpler, for you to read and understand, it also means you can kind of treat these modules,
213
or these deep modules, as grey boxes.
214
You can kind of say, Okay.
215
I'm going to just design the interface, but I'm not going to worry too much, or not review the implementation too much.
216
You can do this obviously with things that are less critical in your application
217
You can't do this with various things like finance or whatever, but in many, many modules in your app, you don't need to think about the implementation too much,
218
as long as you have a testable boundary outside the module, and as long as you understand its purpose and can design it from the outside.
219
I have found this has really saved my brain because I can just go, "Okay, the AI, I'll let you handle what's inside the big blob."
220
I'm just going to test from the outside and verify it.
221
So that's tip number five.
222
Design the interface, delegate the implementation.
223
But this means that whenever we're touching the code, whenever we're planning stuff, we need to think about and be aware of the modules in our application.
224
We need to know that map really well.
225
It needs to be part of our ubiquitous language.
226
We need to build it into our planning skills as well.
227
So my writer PRD, inside the PRD I'm specific about the module changes and the interfaces inside those modules.
228
How they're being modified, I'm thinking about them all the time.
229
And this comes from Kent Beck.
230
Invest in the design of the system every day.
231
This is the core of it, right?
232
Because specs the code, we are not investing in the design of the system.
233
We are divesting from it.
234
We're getting rid of that.
235
Whereas this, I think, is absolutely key.
236
Thank you. And so...
237
Code is not cheap.
238
That's the message I want you to take away.
239
Code is important.
240
If we think about AI as a really great on the ground programmer, a kind of tactical programmer, a sergeant on the ground making the code changes.
241
You need someone above that You need someone thinking on the strategic level.
242
and that's you.
243
and that requires software fundamental skills that we've been using for 20 years, for longer.
244
Now if you were interested in any of the skills I put up here, it's in the GitHub repo Matt Pokok skills.
245
And if you're interested in the training that I do or any free stuff, I'm on YouTube, I'm on Twitter, but I'm also at AIHero .dev where I have a newsletter that you can check out.
246
Thank you so much.
247
I hope that this gives you confidence in this new AI age, that you can actually make a good impact.
248
Thank you.
ऐप डाउनलोड करें
Everything you need to speak fluently
AI PronunciationScore every sentence
IPA PracticeMaster every sound
VocabularyBuild your word bank
Vocab GameLearn while playing

इस पाठ के बारे में
आप ""Software Fundamentals Matter More Than Ever" — Matt Pocock" के साथ Shadowing तकनीक का उपयोग करके अपनी अंग्रेजी का अभ्यास कर रहे हैं।
शैडोइंग तकनीक क्या है?
शैडोइंग (Shadowing) एक विज्ञान-समर्थित भाषा सीखने की तकनीक है जो मूल रूप से पेशेवर दुभाषिया प्रशिक्षण के लिए विकसित की गई थी। विधि सरल लेकिन शक्तिशाली है: आप मूल अंग्रेज़ी ऑडियो सुनते हैं और तुरंत इसे ज़ोर से दोहराते हैं — जैसे वक्ता की छाया 1-2 सेकंड की देरी से। शोध से पता चलता है कि यह उच्चारण सटीकता, स्वर, लय, जुड़ी हुई ध्वनियाँ, सुनने की समझ और बोलने की प्रवाहशीलता में काफ़ी सुधार करता है।