WEBVTT
1
00:00:11.560 --> 00:00:19.800
Hey, Ben.
2
00:00:19.800 --> 00:00:20.680
Hey, Matt.
3
00:00:20.680 --> 00:00:22.400
How are things?
4
00:00:22.400 --> 00:00:23.180
Great.
5
00:00:23.180 --> 00:00:29.320
It's that time of the week when I say, hey, Ben, and then you say, hey, Matt, and then we talk about something.
6
00:00:29.320 --> 00:00:29.960
Mm-hmm. Yep.
7
00:00:29.960 --> 00:00:38.700
Have you any idea what that thing should be? Because, you know, I've planned carefully and I have nothing, as per.
8
00:00:38.700 --> 00:00:39.700
Right. No, I do have a thing. I started doing a new thing this week.
9
00:00:39.700 --> 00:00:43.580
Okay, let's talk about yours. All right. What are we going to talk about?
10
00:00:43.580 --> 00:00:58.560
So, careful listener of this podcast may recall that I have talked before about having a period in my career where I tried to learn a new programming language every year.
11
00:00:58.560 --> 00:01:06.200
This year's new programming language is English. It's all the rage. But in addition to that, the...
12
00:01:06.200 --> 00:01:10.160
Oh, I've heard, or American or English?
13
00:01:10.160 --> 00:01:11.060
The English. It's proper English, right?
14
00:01:11.060 --> 00:01:13.780
English. Oh, okay.
15
00:01:13.780 --> 00:01:16.720
I mean, you got to put some U's in some places, I guess, if you really want to call it English.
16
00:01:16.720 --> 00:01:16.720
Yeah.
17
00:01:16.720 --> 00:01:21.600
Well, I certainly do. And far fewer Zs than you would put in, and you would call them Zs.
18
00:01:21.600 --> 00:01:21.840
But, you know.
19
00:01:21.840 --> 00:01:29.650
Right. Some S's instead of Z's. I think that's, but is this like the German translation, where you just take all the spaces out?
20
00:01:29.650 --> 00:01:29.870
That's right. Yeah.
21
00:01:29.870 --> 00:01:30.020
That's, yeah.
22
00:01:30.020 --> 00:01:31.840
I think that's pretty much what German is.
23
00:01:31.840 --> 00:01:38.370
German is just English, but with random capital letters in the middle of the word and no spaces between words.
24
00:01:38.370 --> 00:01:38.910
You just...
25
00:01:38.910 --> 00:01:39.170
Yeah.
26
00:01:39.170 --> 00:01:39.980
Exactly.
27
00:01:39.980 --> 00:01:42.140
Have we, is there anyone we haven't offended yet? Let's just...
28
00:01:42.140 --> 00:01:46.500
Let's keep going.
29
00:01:46.500 --> 00:01:47.700
Okay. But yeah, programming in English. Programming in English.
30
00:01:47.700 --> 00:01:47.880
Yeah. So that was...
31
00:01:47.880 --> 00:01:51.240
So tell me about your new language you're programming in, which I mean... yeah.
32
00:01:51.240 --> 00:02:00.760
Well, so I've kind of, just as I've had on my list, and I say jokingly that, you know, the hot new programming language is English.
33
00:02:00.760 --> 00:02:01.780
Yeah.
34
00:02:01.780 --> 00:02:02.800
Yeah.
35
00:02:02.800 --> 00:02:16.500
I've had a number of programming languages on this list of, like, you know, if I ever get back to this practice, because I kind of fell out of it, because I was sort of like, what language could I learn that would allow me to do something that I can't do in an existing language, right?
36
00:02:16.500 --> 00:02:21.640
Like, you know, if you've never built a web application before and you don't know JavaScript, then JavaScript is a way, yeah, it's like, I can do this.
37
00:02:21.640 --> 00:02:25.080
Then you're probably right. That's interesting.
38
00:02:25.080 --> 00:02:26.420
I couldn't do this before, right?
39
00:02:26.420 --> 00:02:34.960
Okay. Or like an HDL for, like, you know, hey, I'm programming an FPGA and I can make lights blink in a new and exciting way, but I can't write this in Java.
40
00:02:34.960 --> 00:02:35.780
Right.
41
00:02:35.780 --> 00:02:37.540
And so maybe I need to learn something else.
42
00:02:37.540 --> 00:02:37.540
Yes.
43
00:02:37.540 --> 00:02:40.730
And it's a paradigm shift that goes alongside the language.
44
00:02:40.730 --> 00:02:40.800
Yes.
45
00:02:40.800 --> 00:02:49.900
It makes you think, I mean, what is it, the Sapir-Whorf hypothesis thing that says, you know, the language you first learn sort of tempers however... and my first language was, you know, machine code and assembly.
46
00:02:49.900 --> 00:02:49.900
Mm-hmm.
47
00:02:49.900 --> 00:02:51.390
So that definitely has tempered my entire...
48
00:02:51.390 --> 00:02:51.400
Mm-hmm.
49
00:02:51.400 --> 00:02:54.870
experience in my career.
50
00:02:54.870 --> 00:02:55.380
Mm-hmm.
51
00:02:55.380 --> 00:03:13.240
But there are definitely languages that force you to think in different ways, be it like a Prolog-type language, and it first bends your mind and you go, oh, I see, you can specify things this way. Or a Lispy thing where you're exposed to the fact that the representation is the language and all that good stuff.
52
00:03:13.240 --> 00:03:14.600
Yes.
53
00:03:14.600 --> 00:03:17.060
So yeah, English though, but I'm pretty familiar with English.
54
00:03:17.060 --> 00:03:29.440
Yeah, yeah. Well, OK, so the spoiler alert: the language that I am trying to teach myself, basically starting this week, is Rust. And I have used Rust before.
55
00:03:29.440 --> 00:03:37.100
But the sort of new idea around all of this is in the way that I teach myself this language.
56
00:03:37.100 --> 00:03:37.200
Right.
57
00:03:37.200 --> 00:03:48.140
So previously, the way that I had always done this was I came up with some project, right? And that was sort of the relationship between, like, hey, I'm going to learn a new language to be able to do this kind of thing.
58
00:03:48.140 --> 00:03:55.300
And I'm going to learn that by doing the thing. And then I will, you know, learn the language and then I will be very confident that I can do the thing, right? And...
59
00:03:55.300 --> 00:04:02.280
Like, I want to write a ray tracer, I go write it in Rust and I get my, you know, maybe you've done that 10 times before, or it's something completely new. Like, yeah, I get it. Yeah.
60
00:04:02.280 --> 00:04:19.200
And the, you know, Sapir-Whorf hypothesis reason for doing that is also a good reason. I've told people, you know, people ask me for advice on, you know, what should I do in my career, how should I be a better programmer, and I would, I still give this advice out, I'm like, how many programming languages do you know? You should try to learn more of them.
61
00:04:19.200 --> 00:04:27.180
Because two things. One is you will be able to do more things. And also it will expand your mind in terms of how things work.
62
00:04:27.180 --> 00:04:27.280
It's...
63
00:04:27.280 --> 00:04:39.640
You know, I love Clojure as a programming language because it's fun. I wouldn't inflict it on anyone right now, other than sort of as a learning exercise, but it's a fantastic learning exercise.
64
00:04:39.640 --> 00:04:41.800
If you've never used a Lisp before, it's awesome.
65
00:04:41.800 --> 00:04:51.230
It's funny you mentioned that, because when I first moved to this country, one of the first things I ended up doing was working with one of our mutual friends on a system that was all in Clojure.
66
00:04:51.230 --> 00:04:51.780
Mm-hmm.
67
00:04:51.780 --> 00:04:58.960
And I was completely, well, it took me a while to get over the hump of, what the heck is this? Why are we doing this?
68
00:04:58.960 --> 00:04:59.040
Right.
69
00:04:59.040 --> 00:05:00.420
It seems like we're doing it on hard mode.
70
00:05:00.420 --> 00:05:00.420
Right. Okay.
71
00:05:00.420 --> 00:05:12.420
...to, oh no, this is pretty neat, to the penny dropping and me going, like, oh, I get this now. I see functional programming languages as being useful. I see Lisp-like languages. I see. Wow.
72
00:05:12.420 --> 00:05:22.350
And, you know, I have not chosen to go back to it, but I do feel like I'm enriched as a programmer by having had that experience.
73
00:05:22.350 --> 00:05:22.960
Yeah.
74
00:05:22.960 --> 00:05:36.160
Yes. Yes. Yes, yes. And it's an intersubjective experience, to use one of our favorite podcast words, because if you have used a Lisp before, then you can talk to someone else who has used a Lisp before and be like, this is just Let Over Lambda, and then they'll know what you mean, right?
75
00:05:36.160 --> 00:05:37.800
Right.
76
00:05:37.800 --> 00:05:58.780
So those are many reasons to learn programming languages, and I highly recommend that people do. What I am doing this week is I am attempting to learn a programming language not by building something that is, I think, you know, a representation of what would be good for that language. In fact, I am trying to learn a programming language by not writing any code at all.
77
00:05:58.780 --> 00:06:10.640
What I am trying to do is learn a programming language by asking Claude to teach me the language and quiz me on whether or not I know it. And I am just going back and forth...
78
00:06:10.640 --> 00:06:10.640
Oh.
79
00:06:10.640 --> 00:06:15.220
like taking snippets of code, being like, what does this do?
80
00:06:15.220 --> 00:06:15.500
That's...
81
00:06:15.500 --> 00:06:22.840
Okay, explain this, explain that, explain that. Okay, now quiz me on all of the concepts that you just taught me and see if I get it right.
82
00:06:22.840 --> 00:06:23.040
Wow.
83
00:06:23.040 --> 00:06:25.540
And then I ask follow-up questions, all of that.
84
00:06:25.540 --> 00:06:47.680
That's not what I thought you were going to say at all. I just figured you were going to say, yeah, I asked it to write the thing for me and I skimmed the code afterwards. And I was about to bring up all the kind of badnesses of, like, you know, the quote, I forget who, is it Karpathy?, but it's one of, I think you've retweeted it, something along the lines of, like, you know, LLMs let you outsource thinking, but not knowledge, right?
85
00:06:47.680 --> 00:06:58.120
and, like, or experience, that kind of feel. And that's, like, I'm definitely feeling a bit of that in my day job right now. It's like, oh yeah, I don't necessarily know this as well as I should do. I'm very effective at what I'm doing, but if someone comes, yeah.
86
00:06:58.120 --> 00:07:02.140
But no, you're so, yeah, tell me more. Tell me more about this approach. Yeah.
87
00:07:02.140 --> 00:07:22.480
Well, yeah. And a lot of this sort of comes from, it would be bold to call this a realization, because I don't really know that it's fully true, but my suspicion is that it is going to be increasingly important for software engineers to read code in the future.
88
00:07:22.480 --> 00:07:30.830
I think that's, I mean, even as you get more senior, I think that's become true, as you end up mentoring more folks and they ask your opinion of code and whatnot.
89
00:07:30.830 --> 00:07:31.420
Yeah.
90
00:07:31.420 --> 00:07:38.000
And, you know, maybe you spend more time, yeah, either explicitly reviewing PRs or just over people's shoulders helping them. So yeah, I think reading code is, yeah.
91
00:07:38.000 --> 00:07:38.000
Right.
92
00:07:38.000 --> 00:07:38.800
important.
93
00:07:38.800 --> 00:07:44.120
It's always been important. It's always been very important. I think it's going to become even more important.
94
00:07:44.120 --> 00:07:44.480
Right.
95
00:07:44.480 --> 00:07:45.560
And I...
96
00:07:45.560 --> 00:07:53.980
What, until we teach the robots to just review it? And then at what point will that flip? Then it's like, we're writing code and the robots are telling us not to do it that way.
97
00:07:53.980 --> 00:08:12.190
I mean, so the code is always, I think, at this point, I think I could say that the code is always going to be the actual source of truth, right? Like, there's enough well-worn, and you can certainly point out some situations in which source code and what the machine is actually doing do not line up in a consistent way.
98
00:08:12.190 --> 00:08:12.290
Right.
99
00:08:12.290 --> 00:08:12.500
Right.
100
00:08:12.500 --> 00:08:24.990
Like, that is certainly possible, but it is, I think, much less likely than the delta between what the code is doing and what the English that created the code in a prompt is doing, right?
101
00:08:24.990 --> 00:08:25.030
Yep.
102
00:08:25.030 --> 00:08:25.260
Like, the code is, it's...
103
00:08:25.260 --> 00:08:27.900
I think that's a fair assessment. Yeah, yeah.
104
00:08:27.900 --> 00:08:35.970
Yeah, it's like a really good source of truth if you're going to pick a source of truth for, like, what is this program actually doing, right?
105
00:08:35.970 --> 00:08:36.600
Yeah.
106
00:08:36.600 --> 00:08:39.040
And so being able to read that is really important.
107
00:08:39.040 --> 00:08:54.660
It's funny, actually. So somebody tweeted at me or whatever, not tweet, but, you know, the current whatever Hachyderm thing, with the thing that, like, someone was saying, you know, like, oh yeah, LLMs will be to code as C is to assembly code.
108
00:08:54.660 --> 00:09:06.500
Nobody looks at the output of a compiler. Ha ha ha ha. And of course it's like, at Compiler Explorer, you know, like, everybody here, you know this, the reason this exists is so that we can, because we don't trust it and we do do this.
109
00:09:06.500 --> 00:09:06.640
Yeah. Yeah. Yeah. Right.
110
00:09:06.640 --> 00:09:06.710
So yeah,
111
00:09:06.710 --> 00:09:06.740
Yeah.
112
00:09:06.740 --> 00:09:11.120
I think that backs up your point. I think there's always a need to look one layer below, right?
113
00:09:11.120 --> 00:09:11.200
Yeah.
114
00:09:11.200 --> 00:09:13.440
We've talked about this before, the various layers of things.
115
00:09:13.440 --> 00:09:13.440
Right.
116
00:09:13.440 --> 00:09:25.760
And, like, each abstraction or layer brings something to the party, right? And you learn to trust it in different ways. But ultimately, you need to be able to, like, look down and go, ah, no, whatever.
117
00:09:25.760 --> 00:09:26.000
Right.
118
00:09:26.000 --> 00:09:36.200
And yeah, for those folks who say, you know, we just give it English and we just get a binary out at the end of it, it's like, no, the differentiability of the intermediate forms of, say, code is useful.
119
00:09:36.200 --> 00:09:41.550
I mean, we typically don't diff the binaries to get anything useful out of it, right?
120
00:09:41.550 --> 00:09:43.560
Right.
121
00:09:43.560 --> 00:09:45.210
That doesn't seem useful. But the thing that generates the binary...
122
00:09:45.210 --> 00:09:45.900
Right, right.
123
00:09:45.900 --> 00:09:55.620
like the concepts from that make sense, that I can look at as something I've asked the AI to do and say, is this a reasonable way of achieving what you did given what was working before? And I trust...
124
00:09:55.620 --> 00:09:56.080
Mm-hmm.
125
00:09:56.080 --> 00:10:00.400
So yeah, anyway, so you've been, yeah, reading code is an important skill.
126
00:10:00.400 --> 00:10:00.460
Mm-hmm.
127
00:10:00.460 --> 00:10:03.860
There we are. I've just remembered where we're going with this. Yeah.
128
00:10:03.860 --> 00:10:25.140
Yeah, so this whole exercise is an experiment in: what if I learned a programming language by reading it? Now, I think you and I have talked before about both of our brains really working best when we sort of get down into the nitty-gritty and, like, step by step build a thing. And that's how we really, really, really understand something.
129
00:10:25.140 --> 00:10:39.460
And so I am trying to push myself to grow the skill of being able to have, like, ideally an equivalent level of understanding of code that I am just reading.
130
00:10:39.460 --> 00:10:51.670
And I'm trying to start that, like, you know, I may not get there, but just move in that direction. I'm trying to start that by this experiment of, like, can I say that I am fluent in Rust and...
131
00:10:51.670 --> 00:10:51.880
Mm-hmm.
132
00:10:51.880 --> 00:11:02.400
having written basically no Rust, right? Like, can I achieve that? I don't know that I can, but that's what this journey is all about.
133
00:11:02.400 --> 00:11:13.990
I am very skeptical that you could do any more than you could read every book that says how to drive a car and then get in and, or land a plane, or, you know, those kinds of things, right?
134
00:11:13.990 --> 00:11:14.100
Mm-hmm.
135
00:11:14.100 --> 00:11:23.600
They feel like things that you have to do a little bit to be able to do well. But then, there may be humans that do this. I mean, there are very bright people out there who learn and think in very different ways than the way that I do.
136
00:11:23.600 --> 00:11:25.240
Yeah.
137
00:11:25.240 --> 00:11:31.590
So, you know, I remain skeptical, but I think what you're doing is really interesting.
138
00:11:31.590 --> 00:11:33.050
Yeah.
139
00:11:33.050 --> 00:11:36.720
So how's it going so far? I mean, it's been, like, how many days? You've only been doing this a couple of days.
140
00:11:36.720 --> 00:11:39.220
I've been doing this for like three days and it's going really well.
141
00:11:39.220 --> 00:11:39.380
All right.
142
00:11:39.380 --> 00:11:54.100
And one thing is that, of course, like, Claude, and I'm sure the LLM of your choice would do this, is shockingly good at coming up with good pointed questions to test my understanding, because it knows what my understanding is, because it taught me all those things.
143
00:11:54.100 --> 00:12:05.710
Right. So, and the other thing that has been really nice is being able to compare it to other languages, kind of getting back to our earlier point about, like, those concepts that you bring in from other programming languages.
144
00:12:05.710 --> 00:12:06.200
Ah, yeah.
145
00:12:06.200 --> 00:12:19.480
I'm like, what would this look like in Python? How does this compare to Java? What would this look like in Ruby? You know, how does this compare to JavaScript? And, like, finding all those little things where you can, because I feel like a lot of people learn this way, where they map, right?
146
00:12:19.480 --> 00:12:21.480
They're mapping concepts from one thing that they know.
147
00:12:21.480 --> 00:12:25.570
Right, right. You're sort of like, X but not the Y part, or something like that.
148
00:12:25.570 --> 00:12:26.780
Right, yeah.
149
00:12:26.780 --> 00:12:42.400
Yeah. So are you physically writing any of this? Are you purely reading it? Because I could imagine it being, you know, like the best tutor, where it's grading you and asking you and even setting you little challenges and saying, okay, now write something which command-line parses and does blah, blah, blah, blah.
150
00:12:42.400 --> 00:12:43.380
I have not written. Mm-hmm.
151
00:12:43.380 --> 00:12:46.640
But you've not written anything.
152
00:12:46.640 --> 00:12:56.880
I have not written anything. Now, it wouldn't surprise me if Claude kind of invents a "write me a function that does this" kind of question. And I will just do that if it does that.
153
00:12:56.880 --> 00:12:57.340
Uh huh. Right.
154
00:12:57.340 --> 00:13:07.000
But I am not prompting it to do that. And thus far, everything has been basically like, explain what's wrong with this code, right?
155
00:13:07.000 --> 00:13:15.300
Or explain why this works, right? And it's been very good. It's been very good.
156
00:13:15.300 --> 00:13:22.660
How, you know, the sycophancy of these things leads me to think that maybe it would be a little bit forgiving to you.
157
00:13:22.660 --> 00:13:30.440
You know, "well done, yes, you got it right, oh, just this one minor thing", and you look and, like, no, that's terribly important. You know, how...
158
00:13:30.440 --> 00:13:43.840
It does say things like, well, you got it mostly right, but here's the thing that you missed. And it's like, oh, you got the concept right, but here, this thing is wrong. I haven't been able to, because I haven't developed enough of an understanding yet.
159
00:13:43.840 --> 00:13:48.800
And, like, again, the last time I wrote Rust was like 10 years ago. So at this point, I've basically forgotten...
160
00:13:48.800 --> 00:13:50.220
Okay. You've forgotten most of it. Yeah, you understand...
161
00:13:50.220 --> 00:13:52.040
I mean, I remember the basic structure of the language, and it's like, yeah, there's no...
162
00:13:52.040 --> 00:13:56.750
It looks a bit like C, with the types the opposite way around to normal, and then something something borrow checker.
163
00:13:56.750 --> 00:13:57.740
Yeah. Yeah.
164
00:13:57.740 --> 00:13:58.480
There you go, right, Rust.
165
00:13:58.480 --> 00:14:18.100
Yeah. It's like, you know, there's no inheritance and, you know, you lend and borrow, and there's no garbage collector and there's no free, right? But, like, I haven't gotten deep enough into this to have found a situation where it failed to point out something that I had said that was wrong.
166
00:14:18.100 --> 00:14:21.440
Like, in retrospect, I realized that something was wrong.
167
00:14:21.440 --> 00:14:21.840
Okay.
168
00:14:21.840 --> 00:14:27.710
Again, I'm three days into this, so it may be not surprising that I haven't hit that yet, but it's definitely something that I am concerned about.
169
00:14:27.710 --> 00:14:27.900
Of course.
170
00:14:27.900 --> 00:14:32.950
And also just on the obvious thing of, like, how do you know that the LLM is right, right?
171
00:14:32.950 --> 00:14:35.400
Okay.
172
00:14:35.400 --> 00:14:38.760
Like, you know, that's a base-level skepticism that everyone should have with any kind of exercise like this.
173
00:14:38.760 --> 00:14:38.860
Yeah, that's true.
174
00:14:38.860 --> 00:14:44.620
You're learning from, you know, whatever LLM, how do you know it's not giving you bogus information?
175
00:14:44.620 --> 00:14:44.880
Yeah.
176
00:14:44.880 --> 00:14:58.600
One of the things that I think is going to be unavoidable, probably, with this is I need some external validation of the concepts that I'm learning. And obviously the thing that I would reach for is, well, go write a frigging program and then you'll know.
177
00:14:58.600 --> 00:14:59.400
Yeah, yeah, yeah.
178
00:14:59.400 --> 00:15:03.720
But I'm trying to, like, not do that if I don't have to do that.
179
00:15:03.720 --> 00:15:12.590
Well, this seems timely, but, a website that some people refer to after my last name has got an MCP now.
180
00:15:12.590 --> 00:15:12.640
Right. I probably will. But...
181
00:15:12.640 --> 00:15:12.650
No.
182
00:15:12.650 --> 00:15:19.180
So you can just add the endpoint of your choice.
183
00:15:19.180 --> 00:15:32.550
I will use compiler-explorer.com slash MCP. And then all the languages and all the execution and everything are available to it. So you could tell your LLM, I mean, obviously it could also write the stupid thing locally and run your own local Rust toolchain and all that good stuff.
184
00:15:32.550 --> 00:15:32.570
No.
185
00:15:32.570 --> 00:15:32.600
Interesting.
186
00:15:32.600 --> 00:15:55.720
But for small snippets, it might be useful to say, hey, I can do this on the go. You can add it in, like, the web version of your favorite LLM tool if you're having just a regular chat with it, and it can go off and do the needful things there. Which has been an interesting journey in, how do you give LLMs what they need without overwhelming them with tokens, kind of thing, on my side, but that's a whole other story.
187
00:15:55.720 --> 00:15:55.750
Yeah.
188
00:15:55.750 --> 00:15:55.820
Yeah. Yeah.
189
00:15:55.820 --> 00:15:58.100
I don't want to derail too totally, but yeah.
190
00:15:58.100 --> 00:15:59.320
Filling up way too much context.
191
00:15:59.320 --> 00:15:59.600
Yeah.
192
00:15:59.600 --> 00:16:12.820
One of the more interesting elements of this is, you know, previously, when I had been doing this, you know, learning a new language by building a project, it was very much like, okay, I'm going to get my laptop and I'm going to sit down, I'm going to plug in the monitors and put on some music and I'm going to sit down and I'm going to code.
193
00:16:12.820 --> 00:16:19.590
And that was, like, a very focused activity that was restricted in when and where I could do it, right?
194
00:16:19.590 --> 00:16:20.140
Right, yeah.
195
00:16:20.140 --> 00:16:28.200
Now I can do this on the train home. I just pull out my phone, pull up the chat that I have running with Claude and be like, okay, what does this operator do here?
196
00:16:28.200 --> 00:16:28.380
Yeah.
197
00:16:28.380 --> 00:16:31.240
Like, what is this thing? And then you just kind of keep it going.
198
00:16:31.240 --> 00:16:34.190
No, that for me has become very valuable.
199
00:16:34.190 --> 00:16:34.200
Right.
200
00:16:34.200 --> 00:16:51.240
The ability to essentially continue useful knowledge work while on the move, be it through remote control of a session that I've got running somewhere else, be it through exactly as you describe. I've got a number of long-lived projects that have me trying to understand...
201
00:16:51.240 --> 00:17:04.370
I'm laughing because it's so sad, trying to understand, you know, how 1980s television signals were encoded and decoded, for reasons we'll talk about hopefully on another podcast.
202
00:17:04.370 --> 00:17:04.560
Yeah.
203
00:17:04.560 --> 00:17:15.980
But yeah, and that is very valuable. And you can say, yeah, I've just been thinking about this thing, like, walking the dog, what about that? How does that bit work? How do you know that this is true? And then it's a useful thing.
204
00:17:15.980 --> 00:17:24.490
And, you know, 10 years ago, 15 years ago, maybe even 20 years ago, you would just Google it, right? It would be a Google search and you would find it.
205
00:17:24.490 --> 00:17:24.580
Yeah. Yeah.
206
00:17:24.580 --> 00:17:29.380
And then you'd be like, oh, this is cool, and you'd find someone's blog page that talks about that thing and you scroll down till you find it.
207
00:17:29.380 --> 00:17:29.580
Mm-hmm.
208
00:17:29.580 --> 00:17:42.760
And then, you know, maybe 10 or 15 years ago, you start looking at the synopsis thing that appears at the top, this pre-AI, like, hey, did you mean this thing? Oh, I did, actually. Fine. I got the answer to it, which obviously...
209
00:17:42.760 --> 00:17:49.610
had its own bag of problems, you know, like, well, now Google aren't actually sending you to the webpage that had the information on it, which means that they don't get the hit.
210
00:17:49.610 --> 00:17:50.020
Right. Yeah.
211
00:17:50.020 --> 00:18:04.240
Now, of course, you do get the AI summary at the top, which, it's funny, I think, I don't know if you perceive this or not, but the tide seems to have turned from "we hate this" to mostly indifference and occasional "oh, that was handy."
212
00:18:04.240 --> 00:18:15.200
Certainly dinner-table conversations with my family have gone from "well, this is stupid, ha ha," to "oh, it says this," and you're like, oh yeah, that's fair.
213
00:18:15.200 --> 00:18:16.640
Yeah.
214
00:18:16.640 --> 00:18:27.560
But yeah, all these things are really valuable ways of being on the move and being able to continue doing something. But I wonder if that comes with a different problem of, you know, burnout, right?
215
00:18:27.560 --> 00:18:31.430
We've talked about this before, where you're managing 12 different chats and trying to make progress and whatever.
216
00:18:31.430 --> 00:18:31.540
Uh-huh.
217
00:18:31.540 --> 00:18:33.430
And now you can't get away from the stupid thing.
218
00:18:33.430 --> 00:18:33.860
Mm-hmm.
219
00:18:33.860 --> 00:18:34.710
Yeah. Yeah.
220
00:18:34.710 --> 00:18:35.140
Mm-hmm.
221
00:18:35.140 --> 00:18:36.860
Sorry, that was a real derail, but yeah.
222
00:18:36.860 --> 00:18:41.370
No, it's not. I mean, it's all related to this, right?
223
00:18:41.370 --> 00:18:45.140
Yeah.
224
00:18:45.140 --> 00:18:48.500
It's, I was going to say, if this works, and then it's like, how would I know if it worked?
225
00:18:48.500 --> 00:18:51.060
Yeah, what will be, yeah.
226
00:18:51.060 --> 00:18:51.910
Right? Like, well, yeah, kind of.
227
00:18:51.910 --> 00:18:52.080
How do you test this, right?
228
00:18:52.080 --> 00:19:00.100
I mean, it's sort of like, okay, I claim that I am fluent in a programming language. What do you use to back up that claim?
229
00:19:00.100 --> 00:19:18.120
Is there a distinction between fluidity to read and fluidity to write, too? Because, I mean, like, so, fluidity to read, to me, means that you understand everything that you will likely see in the language, and you are capable of then applying your sort of experience and your intelligence and your...
230
00:19:18.120 --> 00:19:18.500
Yeah.
231
00:19:18.500 --> 00:19:18.880
Yeah.
232
00:19:18.880 --> 00:19:35.040
you know, I guess experience, right, to say, I think this is a good way of doing this, this seems fine to me, there are no issues, there are no bugs, the tests are good, all that stuff, right. And that is still fundamentally different from, given a blank page, make a Rust project that does X.
233
00:19:35.040 --> 00:19:35.720
Yeah.
234
00:19:35.720 --> 00:19:38.060
That does seem like a different skill set.
235
00:19:38.060 --> 00:19:49.340
Certainly, at any time in the past, if somebody had come to me and they had said, well, I am a C++ expert, but in reading only, I would have been like, ha, oh, wait, you're serious.
236
00:19:49.340 --> 00:19:49.550
Yeah.
237
00:19:49.550 --> 00:19:49.990
Right, right?
238
00:19:49.990 --> 00:19:50.640
Yeah, yeah, yeah.
239
00:19:50.640 --> 00:19:53.000
Like, like, what? So...
240
00:19:53.000 --> 00:19:57.560
Is it like, you know, like a foreign language, to go back to our original language thing?
241
00:19:57.560 --> 00:20:00.400
Yeah, like, you can hear it but you can't speak it, something like that? Yeah.
242
00:20:00.400 --> 00:20:04.140
Yeah, you know, like, or, you know, reading, I could read a book in French, say, and you'd be like, that's one thing.
243
00:20:04.140 --> 00:20:04.200
Yeah.
244
00:20:04.200 --> 00:20:08.290
But if you drop me in Paris, I'd be a bit SOL, really, you know?
245
00:20:08.290 --> 00:20:08.540
Right.
246
00:20:08.540 --> 00:20:19.420
I mean, maybe it is just as simple as that, that they actually are just separate skills. And if you learn one, you'll get better at the other one incidentally, but you actually do have to learn both skills, right?
247
00:20:19.420 --> 00:20:19.490
I...
248
00:20:19.490 --> 00:20:20.420
Like, that probably is the simplest way to think about it.
249
00:20:20.420 --> 00:20:32.360
So the thing that I would wonder that you might miss, one might miss, in a read-only training model like you're doing is, you know, those kinds of things where, like, the 15th time you've done something, like, there must be a better way to do this.
250
00:20:32.360 --> 00:20:32.650
Mm-hmm.
251
00:20:32.650 --> 00:20:36.950
And then you experiment yourself with different ways of doing it.
252
00:20:36.950 --> 00:20:37.000
Mm-hmm.
253
00:20:37.000 --> 00:20:43.780
Like, hey, can I use reflection to, oh, yeah, I can. Wait a second, I don't have to declare this stuff at all, I can pull it out of the structures or whatever.
254
00:20:43.780 --> 00:20:43.780
Mm-hmm.
255
00:20:43.780 --> 00:21:02.560
Like, you know, reflection is top of mind because C++ has just gained it. So I'm thinking of all the silly things you can do with it. But, like, when do you have those galaxy-brain moments of inspiration? If you're just reading, it seems too passive to me for you to kind of go, like, I've read this 40 times, there must be a better way, and then be able to come up with that better way.
256
00:21:02.560 --> 00:21:10.700
Having only ever read code. And, you know, I don't know if, I don't know if I believe that, I'm just thinking out loud.
257
00:21:10.700 --> 00:21:17.020
Well, here's a thought experiment. So let's say that I do this, and then I do what I would normally do.
258
00:21:17.020 --> 00:21:20.180
And I just sit down and I write a Rust program, right?
259
00:21:20.180 --> 00:21:20.940
Yeah.
260
00:21:20.940 --> 00:21:26.120
How would you be able to tell the difference versus what I would have done before, right?
261
00:21:26.120 --> 00:21:26.580
How would you, yeah.
262
00:21:26.580 --> 00:21:31.900
Like, congratulations, you wrote something in Rust. That was your original plan for every other language that you've learned.
263
00:21:31.900 --> 00:21:32.580
Yeah, yeah, what would you...
264
00:21:32.580 --> 00:21:38.680
What would be the difference? Like, do I do it faster? Do I have, like, fewer questions?
265
00:21:38.680 --> 00:21:39.500
Yeah.
266
00:21:39.500 --> 00:21:41.800
Like, the result would be the same, right?
267
00:21:41.800 --> 00:21:43.080
Yeah, that's a good point.
268
00:21:43.080 --> 00:21:48.280
So, like, how do you tell that the reading exercise actually made any difference at all? Like, maybe I could feel it, that'd be about it.
269
00:21:48.280 --> 00:21:56.740
Well, I mean, I suppose, but if you did sit down and then you realized, actually, I can't write something, then you can sort of do the opposite.
270
00:21:56.740 --> 00:21:56.960
Right, you could, yes, yes.
271
00:21:56.960 --> 00:22:17.960
You can say, like, okay, yeah, I am proficient in reading, and it would be a cluster... for me to actually sit down and write anything more complicated, because, you know, like, I can't create something. I suppose it's, you know, and I'd say there's a reason why book authors are not also book critics, in the same way that book critics, you know, there are sort of, like, none of them...
272
00:22:17.960 --> 00:22:18.140
Yeah, yeah.
273
00:22:18.140 --> 00:22:31.480
I'm sure there are a number of authors who can critique their own work and other people's work and whatever, but, like, there's a sort of creative process that's happening in the construction of something new...
274
00:22:31.480 --> 00:22:31.780
Mm-hmm.
275
00:22:31.780 --> 00:22:32.080
Mm-hmm.
276
00:22:32.080 --> 00:22:36.460
that perhaps it's hard to tickle when you're just reading.
277
00:22:36.460 --> 00:22:36.860
Yeah.
278
00:22:36.860 --> 00:22:47.760
I'm not saying you couldn't, you know, like, I've certainly, if someone sends me a PR and I look at it, I'm like, no, no, no, no, there's a completely new way of doing this, let me sketch it out for you, then I'm doing that part.
279
00:22:47.760 --> 00:22:57.200
It's not like that doesn't happen, but, like, it seems like the activation energy to start doing that is much higher than, yeah, that seems okay to me, you just got the comments in the wrong place, kind of feel, right?
280
00:22:57.200 --> 00:22:57.800
Yeah.
281
00:22:57.800 --> 00:23:00.600
Yeah. And I don't know whether or not that...
282
00:23:00.600 --> 00:23:17.620
This also seems just, like, more, almost like an academic way to do this, principled, maybe, but maybe not with the right principles, where it's like, you know, no, first you should learn all of the operators and the keywords and how everything is structured.
283
00:23:17.620 --> 00:23:17.820
Yeah.
284
00:23:17.820 --> 00:23:22.430
And then, and only then, I mean, it's like programming in the 1950s maybe worked like that, I don't know.
285
00:23:22.430 --> 00:23:22.700
Right.
286
00:23:22.700 --> 00:23:23.480
I'm just making stuff up right now.
287
00:23:23.480 --> 00:23:26.660
First, you have to learn where to put the holes in the punch card.
288
00:23:26.660 --> 00:23:52.070
Right. Like, you're just, it's like this unnecessary ordering of learning that I have never done and wouldn't recommend, but I'm just kind of trying it. And it would be, actually, you know, I think the more interesting outcome of this, the much more interesting outcome of this, is that I do this, and I do this for, like, three months, and then I sit down and I'm like, okay, now I have something that I want to build in Rust.
289
00:23:52.070 --> 00:23:52.220
Right.
290
00:23:52.220 --> 00:24:05.270
And it's like, this is just like if I had started clean slate. Like, none of the things that I've learned in the last three months have, like, maybe I saved myself three days' worth of work, right?
291
00:24:05.270 --> 00:24:05.820
Right.
292
00:24:05.820 --> 00:24:09.820
That would be a really interesting outcome from this, to say, like, no, there really is...
293
00:24:09.820 --> 00:24:09.820
Yeah, I mean...
294
00:24:09.820 --> 00:24:11.980
There's no substitute for just building stuff.
295
00:24:11.980 --> 00:24:27.020
I would, yeah, this, it seems like reading is a valuable skill, full stop. And I think, obviously, your experience and your tastes and your sensibilities already put you way, way up in the, like...
296
00:24:27.020 --> 00:24:38.500
you know, you're looking for certain patterns, and you're like, whether you express it with curly braces or indentation or lambdas that you apply or whatever it is, it doesn't matter. Syntax is the easy bit, really.
297
00:24:38.500 --> 00:24:39.940
Right, right.
298
00:24:39.940 --> 00:24:48.940
So maybe, you know, this is not necessarily a fair fight, because maybe for you, most of it is the syntax, and then after that you're like, yeah, sure, I need to do a visitor pattern here.
299
00:24:48.940 --> 00:24:49.380
Yeah.
300
00:24:49.380 --> 00:24:59.330
I know how to spell that now in Rust-land or whatever. Or, you know, you've seen enough code that shows you that there is some other way of doing it in Rust that isn't the visitor spell, whatever, you know.
301
00:24:59.330 --> 00:25:00.600
Mm-hmm. Mm-hmm.
302
00:25:00.600 --> 00:25:23.680
So either way, it's going to be an interesting experiment. And I think also, your instincts are right that the readability of a language, as in your ability to be able to read, parse, critique code, understand code, is by far going to be more useful going forward.
303
00:25:23.680 --> 00:25:32.440
And so if you find it difficult to then write code, well, at least you can poke holes in your own work fairly easily.
304
00:25:32.440 --> 00:25:33.660
Yeah.
305
00:25:33.660 --> 00:25:34.750
Be interested in how that comes along.
306
00:25:34.750 --> 00:25:34.860
Yeah.
307
00:25:34.860 --> 00:25:36.240
Yeah.
308
00:25:36.240 --> 00:25:53.400
One of the, sort of maybe the last point here, is, in addition to the language itself, I have also been asking it questions and prompting it to ask me questions (although this has not gone as well) about the ecosystem.
309
00:25:53.400 --> 00:25:53.400
Right. Right.
310
00:25:53.400 --> 00:25:57.590
Because, you know, Rust ecosystem is, like, legendary, right, in its consistency, you know, cargo and all of that.
311
00:25:57.590 --> 00:25:57.840
Right.
312
00:25:57.840 --> 00:26:17.320
But I was like, okay, you know, again, a lot of this is really easy when you do comparisons. I'm like, what's the, is there a Rust equivalent to, like, the Java Flight Recorder, which would let me, like, see the state of all variables and memory and heap and look at all the threads and see what their stacks look like?
313
00:26:17.320 --> 00:26:23.710
And they're like, nah, it's like, you can do, like, GDB integration and you can debug and stuff like that, but that's not really there.
314
00:26:23.710 --> 00:26:24.500
Right.
315
00:26:24.500 --> 00:26:36.660
I'm like, all right, what are the logging frameworks like? And it's like, oh, well, here's some options for logging and things like that. But I feel like there's a whole, you know, again, I feel like these days a lot of our podcasts are just recounting other podcasts.
316
00:26:36.660 --> 00:26:40.700
But surely at some point in the history of this podcast I have uttered the phrase, the difference between computer science and software engineering is: computer science is solving problems with computers.
317
00:26:40.700 --> 00:26:40.700
And software engineering is solving the problems you create when solving problems with computers.
318
00:26:40.700 --> 00:26:40.700
And the software...
319
00:26:40.700 --> 00:26:40.700
The second derivative.
320
00:26:40.700 --> 00:27:10.460
Yes, exactly. Exactly right. And so the software engineering side of Rust, and sort of the blocking and tackling of how do I actually, like, run something and debug it and observe it and recover from crashes and do all the other things that you have to do when you're running software...
321
00:27:10.460 --> 00:27:16.550
Like, that's a critical part. And I think that's one of the things that you really get very well from writing a project.
322
00:27:16.550 --> 00:27:17.520
Yeah.
323
00:27:17.520 --> 00:27:48.640
Like, you get kind of a little narrow slice, like, you don't necessarily get the broadest view from doing that, but, like, if you're like, oh, I built a thing and it does X and I went and I learned how to do it well, something that I'm happy with, like, that aspect of the software engineering of that language really, like, clicks and is super valuable. And so I am definitely not expecting to get any of that from just reading code, because a lot of it is, like, okay, staring at the stack trace being like, what is wrong with this thing?
324
00:27:48.640 --> 00:27:49.940
I don't even know how to figure out what is wrong with this thing.
325
00:27:49.940 --> 00:27:54.230
Yeah, right, right, right. I heard, though, that if you write in Rust, there's just no bugs. That's what I heard.
326
00:27:54.230 --> 00:27:54.600
Oh, well, maybe that'll...
327
00:27:54.600 --> 00:27:57.720
That was, that was the word.
328
00:27:57.720 --> 00:28:00.380
If it compiles, then you can't possibly have any bugs? Yes.
329
00:28:00.380 --> 00:28:00.620
That's right.
330
00:28:00.620 --> 00:28:01.280
Right.
331
00:28:01.280 --> 00:28:19.450
That's right. Sorry, that's slightly more snipey than it sounds, snarky than I mean it to be, because, you know, like, this is just top of mind for, like, folks in the C++ community, where, you know, Rust obviously has a lot of benefits over vanilla C++, and, you know, it keeps being touted out.
332
00:28:19.450 --> 00:28:19.590
Mm-hmm.
333
00:28:19.590 --> 00:28:19.740
Mm-hmm.
334
00:28:19.740 --> 00:28:23.260
It's no... It is still possible to have logic errors in Rust, right?
335
00:28:23.260 --> 00:28:25.480
Yes. You can just have the wrong understanding of the problem.
336
00:28:25.480 --> 00:28:25.840
It's not a...
337
00:28:25.840 --> 00:28:27.440
No language is going to save you from that.
338
00:28:27.440 --> 00:28:31.820
Yeah, or an infinite loop. You know, again, no one's going to stop you from writing an infinite loop.
339
00:28:31.820 --> 00:28:33.080
That's exactly right.
340
00:28:33.080 --> 00:28:33.440
So...
341
00:28:33.440 --> 00:28:34.360
Fun side fact.
342
00:28:34.360 --> 00:28:38.440
Did you know that snark was a portmanteau, or is a portmanteau?
343
00:28:38.440 --> 00:28:40.740
No, what is snark...
344
00:28:40.740 --> 00:28:43.500
It is a portmanteau of snide remark.
345
00:28:43.500 --> 00:28:47.320
Get the heck out. I figured it was Lewis Carroll, you know, the Hunting of the Snark.
346
00:28:47.320 --> 00:28:47.320
Yeah.
347
00:28:47.320 --> 00:28:59.180
And then it came from that somehow. Although I believe a whole bunch of words came from the nonsense poems that Lewis Carroll wrote, including, oh my gosh, there was a list of them the other day.
348
00:28:59.180 --> 00:28:59.180
Maybe.
349
00:28:59.180 --> 00:29:01.230
And I was like, oh yeah, that makes sense.
350
00:29:01.230 --> 00:29:01.660
Oh.
351
00:29:01.660 --> 00:29:06.760
But yeah, I mean, so what two words is portmanteau made from?
352
00:29:06.760 --> 00:29:13.680
And, you know, the tragedy and missed opportunity is the two words that it's, why, why would you not do that?
353
00:29:13.680 --> 00:29:14.080
Isn't it just...
354
00:29:14.080 --> 00:29:21.860
I mean, I think it's the appendage on the foot of someone from Portman.
355
00:29:21.860 --> 00:29:24.040
That's terrible.
356
00:29:24.040 --> 00:29:30.130
We used to have this term, AR redundancy. I forget where that came from.
357
00:29:30.130 --> 00:29:30.540
Oh.
358
00:29:30.540 --> 00:29:35.160
It was for things like pin number and ATM machine.
359
00:29:35.160 --> 00:29:37.400
Oh. Oh, yeah, yeah, yeah, yeah. Oh, my gosh.
360
00:29:37.400 --> 00:29:39.360
It stands for acronym redundancy.
361
00:29:39.360 --> 00:29:59.700
Oh. Yeah, that is definitely red... red. The thing is, out of context, if you just say pin, you might be referring to the sharp bit of metal that you, you know, hold things together with sometimes. But anyway, this seems like we've reached the natural end of our experiment.
362
00:29:59.700 --> 00:30:04.920
All of the notifications in my, dear listener, I'm sorry for all the dings and bings and buzzes and everything that just happened.
363
00:30:04.920 --> 00:30:09.770
I know. A bigger noise earlier was me throwing my phone as far away as I could because it kept making noises.
364
00:30:09.770 --> 00:30:09.940
Yeah.
365
00:30:09.940 --> 00:30:21.780
And also, I apologize that I left Slack on. And so if any other dings have come through, and I'm only apologizing, really, to our listener and me in a few hours' time when I edit this.
366
00:30:21.780 --> 00:30:23.030
But, cool.
367
00:30:23.030 --> 00:30:23.680
Yeah.
368
00:30:23.680 --> 00:30:26.380
Well, this sounds like an interesting experiment. We're going to have to...
369
00:30:26.380 --> 00:30:26.380
Yeah.
370
00:30:26.380 --> 00:30:29.140
We should put a pin somewhere, aha, and that's not the...
371
00:30:29.140 --> 00:30:29.820
Right.
372
00:30:29.820 --> 00:30:40.200
the other kind of pin, in the calendar sometime, to revisit this and see how this worked out, because this is an interesting way of learning.
373
00:30:40.200 --> 00:30:41.160
Yeah.
374
00:30:41.160 --> 00:30:41.220
Yeah. Yeah. Definitely.
375
00:30:41.220 --> 00:30:44.680
Yeah. Especially the thing on the train, you know, continuing to keep making good use of time.
376
00:30:44.680 --> 00:30:44.680
Right.
377
00:30:44.680 --> 00:31:02.830
I mean, I use that. Like, a Brilliant thing, I'm not sponsored. But, you know, that's another thing that I'm doing to try and remind myself enough of the maths that I need, plural, to help my children do whatever they need to do, although they've really surpassed me now. But yeah, no, that's cool. All right, friend.
378
00:31:02.830 --> 00:31:03.060
Yeah.
379
00:31:03.060 --> 00:31:09.640
Well, before I ramble any more, I will bid you farewell, and we'll chat some more another time.
380
00:31:09.640 --> 00:31:12.640
Until next time.
1
00:00:11.560 --> 00:00:19.800
Hey, Ben.
2
00:00:19.800 --> 00:00:20.680
Hey, Matt.
3
00:00:20.680 --> 00:00:22.400
How are things?
4
00:00:22.400 --> 00:00:23.180
Great.
5
00:00:23.180 --> 00:00:29.320
It's that time of the week when I say, hey, Ben, and then you say, hey, Matt, and then we talk about something.
6
00:00:29.320 --> 00:00:29.960
Mm-hmm. Yep.
7
00:00:29.960 --> 00:00:38.700
Have you any idea what that thing should be? Because, you know, I've planned carefully and I have nothing, as per.
8
00:00:38.700 --> 00:00:39.700
Right. No, I do have a thing. I started doing a new thing this week.
9
00:00:39.700 --> 00:00:43.580
Okay, let's talk about yours. All right. What are we going to talk about?
10
00:00:43.580 --> 00:00:58.560
So, careful listener of this podcast may recall that I have talked before about having a period in my career where I tried to learn a new programming language every year.
11
00:00:58.560 --> 00:01:06.200
This year's new programming language is English. It's all the rage. But in addition to that, the...
12
00:01:06.200 --> 00:01:10.160
Oh, I've heard, or American or English?
13
00:01:10.160 --> 00:01:11.060
The English. It's proper English, right?
14
00:01:11.060 --> 00:01:13.780
English. Oh, okay.
15
00:01:13.780 --> 00:01:16.720
I mean, you got to put some U's in some places, I guess, if you really want to call it English.
16
00:01:16.720 --> 00:01:16.720
Yeah.
17
00:01:16.720 --> 00:01:21.600
Well, I certainly do. And far fewer Zs than you would put in, and you would call them Zs.
18
00:01:21.600 --> 00:01:21.840
But, you know.
19
00:01:21.840 --> 00:01:29.650
Right. Some S's instead of Z's. I think that's, but is this like the German translation, where you just take all the spaces out?
20
00:01:29.650 --> 00:01:29.870
That's right. Yeah.
21
00:01:29.870 --> 00:01:30.020
That's, yeah.
22
00:01:30.020 --> 00:01:31.840
I think that's pretty much what German is.
23
00:01:31.840 --> 00:01:38.370
German is just English, but with random capital letters in the middle of the word and no spaces between words.
24
00:01:38.370 --> 00:01:38.910
You just...
25
00:01:38.910 --> 00:01:39.170
Yeah.
26
00:01:39.170 --> 00:01:39.980
Exactly.
27
00:01:39.980 --> 00:01:42.140
Have we, is there anyone we haven't offended yet? Let's just...
28
00:01:42.140 --> 00:01:46.500
Let's keep going.
29
00:01:46.500 --> 00:01:47.700
Okay. But yeah, programming in English. Programming in English.
30
00:01:47.700 --> 00:01:47.880
Yeah. So that was...
31
00:01:47.880 --> 00:01:51.240
So tell me about your new language you're programming in, which I mean... yeah.
32
00:01:51.240 --> 00:02:00.760
Well, so I've kind of, just as I've had on my list, and I say jokingly that, you know, the hot new programming language is English.
33
00:02:00.760 --> 00:02:01.780
Yeah.
34
00:02:01.780 --> 00:02:02.800
Yeah.
35
00:02:02.800 --> 00:02:16.500
I've had a number of programming languages on this list of, like, you know, if I ever get back to this practice, because I kind of fell out of it, because I was sort of like, what language could I learn that would allow me to do something that I can't do in an existing language, right?
36
00:02:16.500 --> 00:02:21.640
Like, you know, if you've never built a web application before and you don't know JavaScript, then JavaScript is a way, yeah, it's like, I can do this.
37
00:02:21.640 --> 00:02:25.080
Then you're probably right. That's interesting.
38
00:02:25.080 --> 00:02:26.420
I couldn't do this before, right?
39
00:02:26.420 --> 00:02:34.960
Okay. Or like an HDL for, like, you know, hey, I'm programming an FPGA and I can make lights blink in a new and exciting way, but I can't write this in Java.
40
00:02:34.960 --> 00:02:35.780
Right.
41
00:02:35.780 --> 00:02:37.540
And so maybe I need to learn something else.
42
00:02:37.540 --> 00:02:37.540
Yes.
43
00:02:37.540 --> 00:02:40.730
And it's a paradigm shift that goes alongside the language.
44
00:02:40.730 --> 00:02:40.800
Yes.
45
00:02:40.800 --> 00:02:49.900
It makes you think, I mean, what is it, the Sapir-Whorf hypothesis thing that says, you know, the language you first learn sort of tempers however... and my first language was, you know, machine code and assembly.
46
00:02:49.900 --> 00:02:49.900
Mm-hmm.
47
00:02:49.900 --> 00:02:51.390
So that definitely has tempered my entire...
48
00:02:51.390 --> 00:02:51.400
Mm-hmm.
49
00:02:51.400 --> 00:02:54.870
experience in my career.
50
00:02:54.870 --> 00:02:55.380
Mm-hmm.
51
00:02:55.380 --> 00:03:13.240
But there are definitely languages that force you to think in different ways, be it like a Prolog-type language, and it first bends your mind and you go, oh, I see, you can specify things this way. Or a Lispy thing where you're exposed to the fact that the representation is the language and all that good stuff.
52
00:03:13.240 --> 00:03:14.600
Yes.
53
00:03:14.600 --> 00:03:17.060
So yeah, English though, but I'm pretty familiar with English.
54
00:03:17.060 --> 00:03:29.440
Yeah, yeah. Well, OK, so the spoiler alert: the language that I am trying to teach myself, basically starting this week, is Rust. And I have used Rust before.
55
00:03:29.440 --> 00:03:37.100
But the sort of new idea around all of this is in the way that I teach myself this language.
56
00:03:37.100 --> 00:03:37.200
Right.
57
00:03:37.200 --> 00:03:48.140
So previously, the way that I had always done this was I came up with some project, right? And that was sort of the relationship between, like, hey, I'm going to learn a new language to be able to do this kind of thing.
58
00:03:48.140 --> 00:03:55.300
And I'm going to learn that by doing the thing. And then I will, you know, learn the language and then I will be very confident that I can do the thing, right? And...
59
00:03:55.300 --> 00:04:02.280
Like, I want to write a ray tracer, I go write it in Rust and I get my, you know, maybe you've done that 10 times before, or it's something completely new. Like, yeah, I get it. Yeah.
60
00:04:02.280 --> 00:04:19.200
And the, you know, Sapir-Whorf hypothesis reason for doing that is also a good reason. I've told people, you know, people ask me for advice on, you know, what should I do in my career, how should I be a better programmer, and I would, I still give this advice out, I'm like, how many programming languages do you know? You should try to learn more of them.
61
00:04:19.200 --> 00:04:27.180
Because two things. One is you will be able to do more things. And also it will expand your mind in terms of how things work.
62
00:04:27.180 --> 00:04:27.280
It's...
63
00:04:27.280 --> 00:04:39.640
You know, I love Clojure as a programming language because it's fun. I wouldn't inflict it on anyone right now, other than sort of as a learning exercise, but it's a fantastic learning exercise.
64
00:04:39.640 --> 00:04:41.800
If you've never used a Lisp before, it's awesome.
65
00:04:41.800 --> 00:04:51.230
It's funny you mentioned that, because when I first moved to this country, one of the first things I ended up doing was working with one of our mutual friends on a system that was all in Clojure.
66
00:04:51.230 --> 00:04:51.780
Mm-hmm.
67
00:04:51.780 --> 00:04:58.960
And I was completely, well, it took me a while to get over the hump of, what the heck is this? Why are we doing this?
68
00:04:58.960 --> 00:04:59.040
Right.
69
00:04:59.040 --> 00:05:00.420
It seems like we're doing it on hard mode.
70
00:05:00.420 --> 00:05:00.420
Right. Okay.
71
00:05:00.420 --> 00:05:12.420
...to, oh no, this is pretty neat, to the penny dropping and me going, like, oh, I get this now. I see functional programming languages as being useful. I see Lisp-like languages. I see. Wow.
72
00:05:12.420 --> 00:05:22.350
And, you know, I have not chosen to go back to it, but I do feel like I'm enriched as a programmer by having had that experience.
73
00:05:22.350 --> 00:05:22.960
Yeah.
74
00:05:22.960 --> 00:05:36.160
Yes. Yes. Yes, yes. And it's an intersubjective experience, to use one of our favorite podcast words, because if you have used a Lisp before, then you can talk to someone else who has used a Lisp before and be like, this is just Let Over Lambda, and then they'll know what you mean, right?
75
00:05:36.160 --> 00:05:37.800
Right.
76
00:05:37.800 --> 00:05:58.780
So those are many reasons to learn programming languages, and I highly recommend that people do. What I am doing this week is I am attempting to learn a programming language not by building something that is, I think, you know, a representation of what would be good for that language. In fact, I am trying to learn a programming language by not writing any code at all.
77
00:05:58.780 --> 00:06:10.640
What I am trying to do is learn a programming language by asking Claude to teach me the language and quiz me on whether or not I know it. And I am just going back and forth...
78
00:06:10.640 --> 00:06:10.640
Oh.
79
00:06:10.640 --> 00:06:15.220
like taking snippets of code, being like, what does this do?
80
00:06:15.220 --> 00:06:15.500
That's...
81
00:06:15.500 --> 00:06:22.840
Okay, explain this, explain that, explain that. Okay, now quiz me on all of the concepts that you just taught me and see if I get it right.
82
00:06:22.840 --> 00:06:23.040
Wow.
83
00:06:23.040 --> 00:06:25.540
And then I ask follow-up questions, all of that.
84
00:06:25.540 --> 00:06:47.680
That's not what I thought you were going to say at all. I just figured you were going to say, yeah, I asked it to write the thing for me and I skimmed the code afterwards. And I was about to bring up all the kind of badnesses of, like, you know, the quote, I forget who, is it Karpathy?, but it's one of, I think you've retweeted it, something along the lines of, like, you know, LLMs let you outsource thinking, but not knowledge, right?
85
00:06:47.680 --> 00:06:58.120
and, like, or experience, that kind of feel. And that's, like, I'm definitely feeling a bit of that in my day job right now. It's like, oh yeah, I don't necessarily know this as well as I should do. I'm very effective at what I'm doing, but if someone comes, yeah.
86
00:06:58.120 --> 00:07:02.140
But no, you're so, yeah, tell me more. Tell me more about this approach. Yeah.
87
00:07:02.140 --> 00:07:22.480
Well, yeah. And a lot of this sort of comes from, it would be bold to call this a realization, because I don't really know that it's fully true, but my suspicion is that it is going to be increasingly important for software engineers to read code in the future.
88
00:07:22.480 --> 00:07:30.830
I think that's, I mean, even as you get more senior, I think that's become true, as you end up mentoring more folks and they ask your opinion of code and whatnot.
89
00:07:30.830 --> 00:07:31.420
Yeah.
90
00:07:31.420 --> 00:07:38.000
And, you know, maybe you spend more time, yeah, either explicitly reviewing PRs or just over people's shoulders helping them. So yeah, I think reading code is, yeah.
91
00:07:38.000 --> 00:07:38.000
Right.
92
00:07:38.000 --> 00:07:38.800
important.
93
00:07:38.800 --> 00:07:44.120
It's always been important. It's always been very important. I think it's going to become even more important.
94
00:07:44.120 --> 00:07:44.480
Right.
95
00:07:44.480 --> 00:07:45.560
And I...
96
00:07:45.560 --> 00:07:53.980
What, until we teach the robots to just review it? And then at what point will that flip? Then it's like, we're writing code and the robots are telling us not to do it that way.
97
00:07:53.980 --> 00:08:12.190
I mean, so the code is always, I think, at this point, I think I could say that the code is always going to be the actual source of truth, right? Like, there's enough well-worn, and you can certainly point out some situations in which source code and what the machine is actually doing do not line up in a consistent way.
98
00:08:12.190 --> 00:08:12.290
Right.
99
00:08:12.290 --> 00:08:12.500
Right.
100
00:08:12.500 --> 00:08:24.990
Like, that is certainly possible, but it is, I think, much less likely than the delta between what the code is doing and what the English that created the code in a prompt is doing, right?
101
00:08:24.990 --> 00:08:25.030
Yep.
102
00:08:25.030 --> 00:08:25.260
Like, the code is, it's...
103
00:08:25.260 --> 00:08:27.900
I think that's a fair assessment. Yeah, yeah.
104
00:08:27.900 --> 00:08:35.970
Yeah, it's like a really good source of truth if you're going to pick a source of truth for, like, what is this program actually doing, right?
105
00:08:35.970 --> 00:08:36.600
Yeah.
106
00:08:36.600 --> 00:08:39.040
And so being able to read that is really important.
107
00:08:39.040 --> 00:08:54.660
It's funny, actually. So somebody tweeted at me or whatever, not tweet, but, you know, the current whatever Hachyderm thing, with the thing that, like, someone was saying, you know, like, oh yeah, LLMs will be to code as C is to assembly code.
108
00:08:54.660 --> 00:09:06.500
Nobody looks at the output of a compiler. Ha ha ha ha. And of course it's like, at Compiler Explorer, you know, like, everybody here, you know this, the reason this exists is so that we can, because we don't trust it and we do do this.
109
00:09:06.500 --> 00:09:06.640
Yeah. Yeah. Yeah. Right.
110
00:09:06.640 --> 00:09:06.710
So yeah,
111
00:09:06.710 --> 00:09:06.740
Yeah.
112
00:09:06.740 --> 00:09:11.120
I think that backs up your point. I think there's always a need to look one layer below, right?
113
00:09:11.120 --> 00:09:11.200
Yeah.
114
00:09:11.200 --> 00:09:13.440
We've talked about this before, the various layers of things.
115
00:09:13.440 --> 00:09:13.440
Right.
116
00:09:13.440 --> 00:09:25.760
And, like, each abstraction or layer brings something to the party, right? And you learn to trust it in different ways. But ultimately, you need to be able to, like, look down and go, ah, no, whatever.
117
00:09:25.760 --> 00:09:26.000
Right.
118
00:09:26.000 --> 00:09:36.200
And yeah, for those folks who say, you know, we just give it English and we just get a binary out at the end of it, it's like, no, the differentiability of the intermediate forms of, say, code is useful.
119
00:09:36.200 --> 00:09:41.550
I mean, we typically don't diff the binaries to get anything useful out of it, right?
120
00:09:41.550 --> 00:09:43.560
Right.
121
00:09:43.560 --> 00:09:45.210
That doesn't seem useful. But the thing that generates the binary...
122
00:09:45.210 --> 00:09:45.900
Right, right.
123
00:09:45.900 --> 00:09:55.620
like the concepts from that make sense, that I can look at as something I've asked the AI to do and say, is this a reasonable way of achieving what you did given what was working before? And I trust...
124
00:09:55.620 --> 00:09:56.080
Mm-hmm.
125
00:09:56.080 --> 00:10:00.400
So yeah, anyway, so you've been, yeah, reading code is an important skill.
126
00:10:00.400 --> 00:10:00.460
Mm-hmm.
127
00:10:00.460 --> 00:10:03.860
There we are. I've just remembered where we're going with this. Yeah.
128
00:10:03.860 --> 00:10:25.140
Yeah, so this whole exercise is an experiment in: what if I learned a programming language by reading it? Now, I think you and I have talked before about both of our brains really working best when we sort of get down into the nitty-gritty and, like, step by step build a thing. And that's how we really, really, really understand something.
129
00:10:25.140 --> 00:10:39.460
And so I am trying to push myself to grow the skill of being able to have, like, ideally an equivalent level of understanding of code that I am just reading.
130
00:10:39.460 --> 00:10:51.670
And I'm trying to start that, like, you know, I may not get there, but just move in that direction. I'm trying to start that by this experiment of, like, can I say that I am fluent in Rust and...
131
00:10:51.670 --> 00:10:51.880
Mm-hmm.
132
00:10:51.880 --> 00:11:02.400
having written basically no Rust, right? Like, can I achieve that? I don't know that I can, but that's what this journey is all about.
133
00:11:02.400 --> 00:11:13.990
I am very skeptical that you could do any more than you could read every book that says how to drive a car and then get in and, or land a plane, or, you know, those kinds of things, right?
134
00:11:13.990 --> 00:11:14.100
Mm-hmm.
135
00:11:14.100 --> 00:11:23.600
They feel like things that you have to do a little bit to be able to do well. But then, there may be humans that do this. I mean, there are very bright people out there who learn and think in very different ways than the way that I do.
136
00:11:23.600 --> 00:11:25.240
Yeah.
137
00:11:25.240 --> 00:11:31.590
So, you know, I remain skeptical, but I think what you're doing is really interesting.
138
00:11:31.590 --> 00:11:33.050
Yeah.
139
00:11:33.050 --> 00:11:36.720
So how's it going so far? I mean, it's been, like, how many days? You've only been doing this a couple of days.
140
00:11:36.720 --> 00:11:39.220
I've been doing this for like three days and it's going really well.
141
00:11:39.220 --> 00:11:39.380
All right.
142
00:11:39.380 --> 00:11:54.100
And one thing is that, of course, like, Claude, and I'm sure the LLM of your choice would do this, is shockingly good at coming up with good pointed questions to test my understanding, because it knows what my understanding is, because it taught me all those things.
143
00:11:54.100 --> 00:12:05.710
Right. So, and the other thing that has been really nice is being able to compare it to other languages, kind of getting back to our earlier point about, like, those concepts that you bring in from other programming languages.
144
00:12:05.710 --> 00:12:06.200
Ah, yeah.
145
00:12:06.200 --> 00:12:19.480
I'm like, what would this look like in Python? How does this compare to Java? What would this look like in Ruby? You know, how does this compare to JavaScript? And, like, finding all those little things where you can, because I feel like a lot of people learn this way, where they map, right?
146
00:12:19.480 --> 00:12:21.480
They're mapping concepts from one thing that they know.
147
00:12:21.480 --> 00:12:25.570
Right, right. You're sort of like, X but not the Y part, or something like that.
148
00:12:25.570 --> 00:12:26.780
Right, yeah.
149
00:12:26.780 --> 00:12:42.400
Yeah. So are you physically writing any of this? Are you purely reading it? Because I could imagine it being, you know, like the best tutor, where it's grading you and asking you and even setting you little challenges and saying, okay, now write something which command-line parses and does blah, blah, blah, blah.
150
00:12:42.400 --> 00:12:43.380
I have not written. Mm-hmm.
151
00:12:43.380 --> 00:12:46.640
But you've not written anything.
152
00:12:46.640 --> 00:12:56.880
I have not written anything. Now, it wouldn't surprise me if Claude kind of invents a "write me a function that does this" kind of question. And I will just do that if it does that.
153
00:12:56.880 --> 00:12:57.340
Uh huh. Right.
154
00:12:57.340 --> 00:13:07.000
But I am not prompting it to do that. And thus far, everything has been basically like, explain what's wrong with this code, right?
155
00:13:07.000 --> 00:13:15.300
Or explain why this works, right? And it's been very good. It's been very good.
156
00:13:15.300 --> 00:13:22.660
How, you know, the sycophancy of these things leads me to think that maybe it would be a little bit forgiving to you.
157
00:13:22.660 --> 00:13:30.440
You know, "well done, yes, you got it right, oh, just this one minor thing", and you look and, like, no, that's terribly important. You know, how...
158
00:13:30.440 --> 00:13:43.840
It does say things like, well, you got it mostly right, but here's the thing that you missed. And it's like, oh, you got the concept right, but here, this thing is wrong. I haven't been able to, because I haven't developed enough of an understanding yet.
159
00:13:43.840 --> 00:13:48.800
And, like, again, the last time I wrote Rust was like 10 years ago. So at this point, I've basically forgotten...
160
00:13:48.800 --> 00:13:50.220
Okay. You've forgotten most of it. Yeah, you understand...
161
00:13:50.220 --> 00:13:52.040
I mean, I remember the basic structure of the language, and it's like, yeah, there's no...
162
00:13:52.040 --> 00:13:56.750
It looks a bit like C, with the types the opposite way around to normal, and then something something borrow checker.
163
00:13:56.750 --> 00:13:57.740
Yeah. Yeah.
164
00:13:57.740 --> 00:13:58.480
There you go, right, Rust.
165
00:13:58.480 --> 00:14:18.100
Yeah. It's like, you know, there's no inheritance and, you know, you lend and borrow, and there's no garbage collector and there's no free, right? But, like, I haven't gotten deep enough into this to have found a situation where it failed to point out something that I had said that was wrong.
166
00:14:18.100 --> 00:14:21.440
Like, in retrospect, I realized that something was wrong.
167
00:14:21.440 --> 00:14:21.840
Okay.
168
00:14:21.840 --> 00:14:27.710
Again, I'm three days into this, so it may be not surprising that I haven't hit that yet, but it's definitely something that I am concerned about.
169
00:14:27.710 --> 00:14:27.900
Of course.
170
00:14:27.900 --> 00:14:32.950
And also just on the obvious thing of, like, how do you know that the LLM is right, right?
171
00:14:32.950 --> 00:14:35.400
Okay.
172
00:14:35.400 --> 00:14:38.760
Like, you know, that's a base-level skepticism that everyone should have with any kind of exercise like this.
173
00:14:38.760 --> 00:14:38.860
Yeah, that's true.
174
00:14:38.860 --> 00:14:44.620
You're learning from, you know, whatever LLM, how do you know it's not giving you bogus information?
175
00:14:44.620 --> 00:14:44.880
Yeah.
176
00:14:44.880 --> 00:14:58.600
One of the things that I think is going to be unavoidable, probably, with this is I need some external validation of the concepts that I'm learning. And obviously the thing that I would reach for is, well, go write a frigging program and then you'll know.
177
00:14:58.600 --> 00:14:59.400
Yeah, yeah, yeah.
178
00:14:59.400 --> 00:15:03.720
But I'm trying to, like, not do that if I don't have to do that.
179
00:15:03.720 --> 00:15:12.590
Well, this seems timely, but, a website that some people refer to after my last name has got an MCP now.
180
00:15:12.590 --> 00:15:12.640
Right. I probably will. But...
181
00:15:12.640 --> 00:15:12.650
No.
182
00:15:12.650 --> 00:15:19.180
So you can just add the endpoint of your choice.
183
00:15:19.180 --> 00:15:32.550
I will use compiler-explorer.com slash MCP. And then all the languages and all the execution and everything are available to it. So you could tell your LLM, I mean, obviously it could also write the stupid thing locally and run your own local Rust toolchain and all that good stuff.
184
00:15:32.550 --> 00:15:32.570
No.
185
00:15:32.570 --> 00:15:32.600
Interesting.
186
00:15:32.600 --> 00:15:55.720
But for small snippets, it might be useful to say, hey, I can do this on the go. You can add it in, like, the web version of your favorite LLM tool if you're having just a regular chat with it, and it can go off and do the needful things there. Which has been an interesting journey in, how do you give LLMs what they need without overwhelming them with tokens, kind of thing, on my side, but that's a whole other story.
187
00:15:55.720 --> 00:15:55.750
Yeah.
188
00:15:55.750 --> 00:15:55.820
Yeah. Yeah.
189
00:15:55.820 --> 00:15:58.100
I don't want to derail too totally, but yeah.
190
00:15:58.100 --> 00:15:59.320
Filling up way too much context.
191
00:15:59.320 --> 00:15:59.600
Yeah.
192
00:15:59.600 --> 00:16:12.820
One of the more interesting elements of this is, you know, previously, when I had been doing this, you know, learning a new language by building a project, it was very much like, okay, I'm going to get my laptop and I'm going to sit down, I'm going to plug in the monitors and put on some music and I'm going to sit down and I'm going to code.
193
00:16:12.820 --> 00:16:19.590
And that was, like, a very focused activity that was restricted in when and where I could do it, right?
194
00:16:19.590 --> 00:16:20.140
Right, yeah.
195
00:16:20.140 --> 00:16:28.200
Now I can do this on the train home. I just pull out my phone, pull up the chat that I have running with Claude and be like, okay, what does this operator do here?
196
00:16:28.200 --> 00:16:28.380
Yeah.
197
00:16:28.380 --> 00:16:31.240
Like, what is this thing? And then you just kind of keep it going.
198
00:16:31.240 --> 00:16:34.190
No, that for me has become very valuable.
199
00:16:34.190 --> 00:16:34.200
Right.
200
00:16:34.200 --> 00:16:51.240
The ability to essentially continue useful knowledge work while on the move, be it through remote control of a session that I've got running somewhere else, be it through exactly as you describe. I've got a number of long-lived projects that have me trying to understand...
201
00:16:51.240 --> 00:17:04.370
I'm laughing because it's so sad, trying to understand, you know, how 1980s television signals were encoded and decoded, for reasons we'll talk about hopefully on another podcast.
202
00:17:04.370 --> 00:17:04.560
Yeah.
203
00:17:04.560 --> 00:17:15.980
But yeah, and that is very valuable. And you can say, yeah, I've just been thinking about this thing, like, walking the dog, what about that? How does that bit work? How do you know that this is true? And then it's a useful thing.
204
00:17:15.980 --> 00:17:24.490
And, you know, 10 years ago, 15 years ago, maybe even 20 years ago, you would just Google it, right? It would be a Google search and you would find it.
205
00:17:24.490 --> 00:17:24.580
Yeah. Yeah.
206
00:17:24.580 --> 00:17:29.380
And then you'd be like, oh, this is cool, and you'd find someone's blog page that talks about that thing and you scroll down till you find it.
207
00:17:29.380 --> 00:17:29.580
Mm-hmm.
208
00:17:29.580 --> 00:17:42.760
And then, you know, maybe 10 or 15 years ago, you start looking at the synopsis thing that appears at the top, this pre-AI, like, hey, did you mean this thing? Oh, I did, actually. Fine. I got the answer to it, which obviously...
209
00:17:42.760 --> 00:17:49.610
had its own bag of problems, you know, like, well, now Google aren't actually sending you to the webpage that had the information on it, which means that they don't get the hit.
210
00:17:49.610 --> 00:17:50.020
Right. Yeah.
211
00:17:50.020 --> 00:18:04.240
Now, of course, you do get the AI summary at the top, which, it's funny, I think, I don't know if you perceive this or not, but the tide seems to have turned from "we hate this" to mostly indifference and occasional "oh, that was handy."
212
00:18:04.240 --> 00:18:15.200
Certainly dinner-table conversations with my family have gone from "well, this is stupid, ha ha," to "oh, it says this," and you're like, oh yeah, that's fair.
213
00:18:15.200 --> 00:18:16.640
Yeah.
214
00:18:16.640 --> 00:18:27.560
But yeah, all these things are really valuable ways of being on the move and being able to continue doing something. But I wonder if that comes with a different problem of, you know, burnout, right?
215
00:18:27.560 --> 00:18:31.430
We've talked about this before, where you're managing 12 different chats and trying to make progress and whatever.
216
00:18:31.430 --> 00:18:31.540
Uh-huh.
217
00:18:31.540 --> 00:18:33.430
And now you can't get away from the stupid thing.
218
00:18:33.430 --> 00:18:33.860
Mm-hmm.
219
00:18:33.860 --> 00:18:34.710
Yeah. Yeah.
220
00:18:34.710 --> 00:18:35.140
Mm-hmm.
221
00:18:35.140 --> 00:18:36.860
Sorry, that was a real derail, but yeah.
222
00:18:36.860 --> 00:18:41.370
No, it's not. I mean, it's all related to this, right?
223
00:18:41.370 --> 00:18:45.140
Yeah.
224
00:18:45.140 --> 00:18:48.500
It's, I was going to say, if this works, and then it's like, how would I know if it worked?
225
00:18:48.500 --> 00:18:51.060
Yeah, what will be, yeah.
226
00:18:51.060 --> 00:18:51.910
Right? Like, well, yeah, kind of.
227
00:18:51.910 --> 00:18:52.080
How do you test this, right?
228
00:18:52.080 --> 00:19:00.100
I mean, it's sort of like, okay, I claim that I am fluent in a programming language. What do you use to back up that claim?
229
00:19:00.100 --> 00:19:18.120
Is there a distinction between fluidity to read and fluidity to write, too? Because, I mean, like, so, fluidity to read, to me, means that you understand everything that you will likely see in the language, and you are capable of then applying your sort of experience and your intelligence and your...
230
00:19:18.120 --> 00:19:18.500
Yeah.
231
00:19:18.500 --> 00:19:18.880
Yeah.
232
00:19:18.880 --> 00:19:35.040
you know, I guess experience, right, to say, I think this is a good way of doing this, this seems fine to me, there are no issues, there are no bugs, the tests are good, all that stuff, right. And that is still fundamentally different from, given a blank page, make a Rust project that does X.
233
00:19:35.040 --> 00:19:35.720
Yeah.
234
00:19:35.720 --> 00:19:38.060
That does seem like a different skill set.
235
00:19:38.060 --> 00:19:49.340
Certainly, at any time in the past, if somebody had come to me and they had said, well, I am a C++ expert, but in reading only, I would have been like, ha, oh, wait, you're serious.
236
00:19:49.340 --> 00:19:49.550
Yeah.
237
00:19:49.550 --> 00:19:49.990
Right, right?
238
00:19:49.990 --> 00:19:50.640
Yeah, yeah, yeah.
239
00:19:50.640 --> 00:19:53.000
Like, like, what? So...
240
00:19:53.000 --> 00:19:57.560
Is it like, you know, like a foreign language, to go back to our original language thing?
241
00:19:57.560 --> 00:20:00.400
Yeah, like, you can hear it but you can't speak it, something like that? Yeah.
242
00:20:00.400 --> 00:20:04.140
Yeah, you know, like, or, you know, reading, I could read a book in French, say, and you'd be like, that's one thing.
243
00:20:04.140 --> 00:20:04.200
Yeah.
244
00:20:04.200 --> 00:20:08.290
But if you drop me in Paris, I'd be a bit SOL, really, you know?
245
00:20:08.290 --> 00:20:08.540
Right.
246
00:20:08.540 --> 00:20:19.420
I mean, maybe it is just as simple as that, that they actually are just separate skills. And if you learn one, you'll get better at the other one incidentally, but you actually do have to learn both skills, right?
247
00:20:19.420 --> 00:20:19.490
I...
248
00:20:19.490 --> 00:20:20.420
Like, that probably is the simplest way to think about it.
249
00:20:20.420 --> 00:20:32.360
So the thing that I would wonder that you might miss, one might miss, in a read-only training model like you're doing is, you know, those kinds of things where, like, the 15th time you've done something, like, there must be a better way to do this.
250
00:20:32.360 --> 00:20:32.650
Mm-hmm.
251
00:20:32.650 --> 00:20:36.950
And then you experiment yourself with different ways of doing it.
252
00:20:36.950 --> 00:20:37.000
Mm-hmm.
253
00:20:37.000 --> 00:20:43.780
Like, hey, can I use reflection to, oh, yeah, I can. Wait a second, I don't have to declare this stuff at all, I can pull it out of the structures or whatever.
254
00:20:43.780 --> 00:20:43.780
Mm-hmm.
255
00:20:43.780 --> 00:21:02.560
Like, you know, reflection is top of mind because C++ has just gained it. So I'm thinking of all the silly things you can do with it. But, like, when do you have those galaxy-brain moments of inspiration? If you're just reading, it seems too passive to me for you to kind of go, like, I've read this 40 times, there must be a better way, and then be able to come up with that better way.
256
00:21:02.560 --> 00:21:10.700
Having only ever read code. And, you know, I don't know if, I don't know if I believe that, I'm just thinking out loud.
257
00:21:10.700 --> 00:21:17.020
Well, here's a thought experiment. So let's say that I do this, and then I do what I would normally do.
258
00:21:17.020 --> 00:21:20.180
And I just sit down and I write a Rust program, right?
259
00:21:20.180 --> 00:21:20.940
Yeah.
260
00:21:20.940 --> 00:21:26.120
How would you be able to tell the difference versus what I would have done before, right?
261
00:21:26.120 --> 00:21:26.580
How would you, yeah.
262
00:21:26.580 --> 00:21:31.900
Like, congratulations, you wrote something in Rust. That was your original plan for every other language that you've learned.
263
00:21:31.900 --> 00:21:32.580
Yeah, yeah, what would you...
264
00:21:32.580 --> 00:21:38.680
What would be the difference? Like, do I do it faster? Do I have, like, fewer questions?
265
00:21:38.680 --> 00:21:39.500
Yeah.
266
00:21:39.500 --> 00:21:41.800
Like, the result would be the same, right?
267
00:21:41.800 --> 00:21:43.080
Yeah, that's a good point.
268
00:21:43.080 --> 00:21:48.280
So, like, how do you tell that the reading exercise actually made any difference at all? Like, maybe I could feel it, that'd be about it.
269
00:21:48.280 --> 00:21:56.740
Well, I mean, I suppose, but if you did sit down and then you realized, actually, I can't write something, then you can sort of do the opposite.
270
00:21:56.740 --> 00:21:56.960
Right, you could, yes, yes.
271
00:21:56.960 --> 00:22:17.960
You can say, like, okay, yeah, I am proficient in reading, and it would be a cluster... for me to actually sit down and write anything more complicated, because, you know, like, I can't create something. I suppose it's, you know, and I'd say there's a reason why book authors are not also book critics, in the same way that book critics, you know, there are sort of, like, none of them...
272
00:22:17.960 --> 00:22:18.140
Yeah, yeah.
273
00:22:18.140 --> 00:22:31.480
I'm sure there are a number of authors who can critique their own work and other people's work and whatever, but, like, there's a sort of creative process that's happening in the construction of something new...
274
00:22:31.480 --> 00:22:31.780
Mm-hmm.
275
00:22:31.780 --> 00:22:32.080
Mm-hmm.
276
00:22:32.080 --> 00:22:36.460
that perhaps it's hard to tickle when you're just reading.
277
00:22:36.460 --> 00:22:36.860
Yeah.
278
00:22:36.860 --> 00:22:47.760
I'm not saying you couldn't, you know, like, I've certainly, if someone sends me a PR and I look at it, I'm like, no, no, no, no, there's a completely new way of doing this, let me sketch it out for you, then I'm doing that part.
279
00:22:47.760 --> 00:22:57.200
It's not like that doesn't happen, but, like, it seems like the activation energy to start doing that is much higher than, yeah, that seems okay to me, you just got the comments in the wrong place, kind of feel, right?
280
00:22:57.200 --> 00:22:57.800
Yeah.
281
00:22:57.800 --> 00:23:00.600
Yeah. And I don't know whether or not that...
282
00:23:00.600 --> 00:23:17.620
This also seems just, like, more, almost like an academic way to do this, principled, maybe, but maybe not with the right principles, where it's like, you know, no, first you should learn all of the operators and the keywords and how everything is structured.
283
00:23:17.620 --> 00:23:17.820
Yeah.
284
00:23:17.820 --> 00:23:22.430
And then, and only then, I mean, it's like programming in the 1950s maybe worked like that, I don't know.
285
00:23:22.430 --> 00:23:22.700
Right.
286
00:23:22.700 --> 00:23:23.480
I'm just making stuff up right now.
287
00:23:23.480 --> 00:23:26.660
First, you have to learn where to put the holes in the punch card.
288
00:23:26.660 --> 00:23:52.070
Right. Like, you're just, it's like this unnecessary ordering of learning that I have never done and wouldn't recommend, but I'm just kind of trying it. And it would be, actually, you know, I think the more interesting outcome of this, the much more interesting outcome of this, is that I do this, and I do this for, like, three months, and then I sit down and I'm like, okay, now I have something that I want to build in Rust.
289
00:23:52.070 --> 00:23:52.220
Right.
290
00:23:52.220 --> 00:24:05.270
And it's like, this is just like if I had started clean slate. Like, none of the things that I've learned in the last three months have, like, maybe I saved myself three days' worth of work, right?
291
00:24:05.270 --> 00:24:05.820
Right.
292
00:24:05.820 --> 00:24:09.820
That would be a really interesting outcome from this, to say, like, no, there really is...
293
00:24:09.820 --> 00:24:09.820
Yeah, I mean...
294
00:24:09.820 --> 00:24:11.980
There's no substitute for just building stuff.
295
00:24:11.980 --> 00:24:27.020
I would, yeah, this, it seems like reading is a valuable skill, full stop. And I think, obviously, your experience and your tastes and your sensibilities already put you way, way up in the, like...
296
00:24:27.020 --> 00:24:38.500
you know, you're looking for certain patterns, and you're like, whether you express it with curly braces or indentation or lambdas that you apply or whatever it is, it doesn't matter. Syntax is the easy bit, really.
297
00:24:38.500 --> 00:24:39.940
Right, right.
298
00:24:39.940 --> 00:24:48.940
So maybe, you know, this is not necessarily a fair fight, because maybe for you, most of it is the syntax, and then after that you're like, yeah, sure, I need to do a visitor pattern here.
299
00:24:48.940 --> 00:24:49.380
Yeah.
300
00:24:49.380 --> 00:24:59.330
I know how to spell that now in Rust-land or whatever. Or, you know, you've seen enough code that shows you that there is some other way of doing it in Rust that isn't the visitor spell, whatever, you know.
301
00:24:59.330 --> 00:25:00.600
Mm-hmm. Mm-hmm.
302
00:25:00.600 --> 00:25:23.680
So either way, it's going to be an interesting experiment. And I think also, your instincts are right that the readability of a language, as in your ability to be able to read, parse, critique code, understand code, is by far going to be more useful going forward.
303
00:25:23.680 --> 00:25:32.440
And so if you find it difficult to then write code, well, at least you can poke holes in your own work fairly easily.
304
00:25:32.440 --> 00:25:33.660
Yeah.
305
00:25:33.660 --> 00:25:34.750
Be interested in how that comes along.
306
00:25:34.750 --> 00:25:34.860
Yeah.
307
00:25:34.860 --> 00:25:36.240
Yeah.
308
00:25:36.240 --> 00:25:53.400
One of the, sort of maybe the last point here, is, in addition to the language itself, I have also been asking it questions and prompting it to ask me questions (although this has not gone as well) about the ecosystem.
309
00:25:53.400 --> 00:25:53.400
Right. Right.
310
00:25:53.400 --> 00:25:57.590
Because, you know, Rust ecosystem is, like, legendary, right, in its consistency, you know, cargo and all of that.
311
00:25:57.590 --> 00:25:57.840
Right.
312
00:25:57.840 --> 00:26:17.320
But I was like, okay, you know, again, a lot of this is really easy when you do comparisons. I'm like, what's the, is there a Rust equivalent to, like, the Java Flight Recorder, which would let me, like, see the state of all variables and memory and heap and look at all the threads and see what their stacks look like?
313
00:26:17.320 --> 00:26:23.710
And they're like, nah, it's like, you can do, like, GDB integration and you can debug and stuff like that, but that's not really there.
314
00:26:23.710 --> 00:26:24.500
Right.
315
00:26:24.500 --> 00:26:36.660
I'm like, all right, what are the logging frameworks like? And it's like, oh, well, here's some options for logging and things like that. But I feel like there's a whole, you know, again, I feel like these days a lot of our podcasts are just recounting other podcasts.
316
00:26:36.660 --> 00:26:40.700
But surely at some point in the history of this podcast I have uttered the phrase, the difference between computer science and software engineering is: computer science is solving problems with computers.
317
00:26:40.700 --> 00:26:40.700
And software engineering is solving the problems you create when solving problems with computers.
318
00:26:40.700 --> 00:26:40.700
And the software...
319
00:26:40.700 --> 00:26:40.700
The second derivative.
320
00:26:40.700 --> 00:27:10.460
Yes, exactly. Exactly right. And so the software engineering side of Rust, and sort of the blocking and tackling of how do I actually, like, run something and debug it and observe it and recover from crashes and do all the other things that you have to do when you're running software...
321
00:27:10.460 --> 00:27:16.550
Like, that's a critical part. And I think that's one of the things that you really get very well from writing a project.
322
00:27:16.550 --> 00:27:17.520
Yeah.
323
00:27:17.520 --> 00:27:48.640
Like, you get kind of a little narrow slice, like, you don't necessarily get the broadest view from doing that, but, like, if you're like, oh, I built a thing and it does X and I went and I learned how to do it well, something that I'm happy with, like, that aspect of the software engineering of that language really, like, clicks and is super valuable. And so I am definitely not expecting to get any of that from just reading code, because a lot of it is, like, okay, staring at the stack trace being like, what is wrong with this thing?
324
00:27:48.640 --> 00:27:49.940
I don't even know how to figure out what is wrong with this thing.
325
00:27:49.940 --> 00:27:54.230
Yeah, right, right, right. I heard, though, that if you write in Rust, there's just no bugs. That's what I heard.
326
00:27:54.230 --> 00:27:54.600
Oh, well, maybe that'll...
327
00:27:54.600 --> 00:27:57.720
That was, that was the word.
328
00:27:57.720 --> 00:28:00.380
If it compiles, then you can't possibly have any bugs? Yes.
329
00:28:00.380 --> 00:28:00.620
That's right.
330
00:28:00.620 --> 00:28:01.280
Right.
331
00:28:01.280 --> 00:28:19.450
That's right. Sorry, that's slightly more snipey than it sounds, snarky than I mean it to be, because, you know, like, this is just top of mind for, like, folks in the C++ community, where, you know, Rust obviously has a lot of benefits over vanilla C++, and, you know, it keeps being touted out.
332
00:28:19.450 --> 00:28:19.590
Mm-hmm.
333
00:28:19.590 --> 00:28:19.740
Mm-hmm.
334
00:28:19.740 --> 00:28:23.260
It's no... It is still possible to have logic errors in Rust, right?
335
00:28:23.260 --> 00:28:25.480
Yes. You can just have the wrong understanding of the problem.
336
00:28:25.480 --> 00:28:25.840
It's not a...
337
00:28:25.840 --> 00:28:27.440
No language is going to save you from that.
338
00:28:27.440 --> 00:28:31.820
Yeah, or an infinite loop. You know, again, no one's going to stop you from writing an infinite loop.
339
00:28:31.820 --> 00:28:33.080
That's exactly right.
340
00:28:33.080 --> 00:28:33.440
So...
341
00:28:33.440 --> 00:28:34.360
Fun side fact.
342
00:28:34.360 --> 00:28:38.440
Did you know that snark was a portmanteau, or is a portmanteau?
343
00:28:38.440 --> 00:28:40.740
No, what is snark...
344
00:28:40.740 --> 00:28:43.500
It is a portmanteau of snide remark.
345
00:28:43.500 --> 00:28:47.320
Get the heck out. I figured it was Lewis Carroll, you know, the Hunting of the Snark.
346
00:28:47.320 --> 00:28:47.320
Yeah.
347
00:28:47.320 --> 00:28:59.180
And then it came from that somehow. Although I believe a whole bunch of words came from the nonsense poems that Lewis Carroll wrote, including, oh my gosh, there was a list of them the other day.
348
00:28:59.180 --> 00:28:59.180
Maybe.
349
00:28:59.180 --> 00:29:01.230
And I was like, oh yeah, that makes sense.
350
00:29:01.230 --> 00:29:01.660
Oh.
351
00:29:01.660 --> 00:29:06.760
But yeah, I mean, so what two words is portmanteau made from?
352
00:29:06.760 --> 00:29:13.680
And, you know, the tragedy and missed opportunity is the two words that it's, why, why would you not do that?
353
00:29:13.680 --> 00:29:14.080
Isn't it just...
354
00:29:14.080 --> 00:29:21.860
I mean, I think it's the appendage on the foot of someone from Portman.
355
00:29:21.860 --> 00:29:24.040
That's terrible.
356
00:29:24.040 --> 00:29:30.130
We used to have this term, AR redundancy. I forget where that came from.
357
00:29:30.130 --> 00:29:30.540
Oh.
358
00:29:30.540 --> 00:29:35.160
It was for things like pin number and ATM machine.
359
00:29:35.160 --> 00:29:37.400
Oh. Oh, yeah, yeah, yeah, yeah. Oh, my gosh.
360
00:29:37.400 --> 00:29:39.360
It stands for acronym redundancy.
361
00:29:39.360 --> 00:29:59.700
Oh. Yeah, that is definitely red... red. The thing is, out of context, if you just say pin, you might be referring to the sharp bit of metal that you, you know, hold things together with sometimes. But anyway, this seems like we've reached the natural end of our experiment.
362
00:29:59.700 --> 00:30:04.920
All of the notifications in my, dear listener, I'm sorry for all the dings and bings and buzzes and everything that just happened.
363
00:30:04.920 --> 00:30:09.770
I know. A bigger noise earlier was me throwing my phone as far away as I could because it kept making noises.
364
00:30:09.770 --> 00:30:09.940
Yeah.
365
00:30:09.940 --> 00:30:21.780
And also, I apologize that I left Slack on. And so if any other dings have come through, and I'm only apologizing, really, to our listener and me in a few hours' time when I edit this.
366
00:30:21.780 --> 00:30:23.030
But, cool.
367
00:30:23.030 --> 00:30:23.680
Yeah.
368
00:30:23.680 --> 00:30:26.380
Well, this sounds like an interesting experiment. We're going to have to...
369
00:30:26.380 --> 00:30:26.380
Yeah.
370
00:30:26.380 --> 00:30:29.140
We should put a pin somewhere, aha, and that's not the...
371
00:30:29.140 --> 00:30:29.820
Right.
372
00:30:29.820 --> 00:30:40.200
the other kind of pin, in the calendar sometime, to revisit this and see how this worked out, because this is an interesting way of learning.
373
00:30:40.200 --> 00:30:41.160
Yeah.
374
00:30:41.160 --> 00:30:41.220
Yeah. Yeah. Definitely.
375
00:30:41.220 --> 00:30:44.680
Yeah. Especially the thing on the train, you know, continuing to keep making good use of time.
376
00:30:44.680 --> 00:30:44.680
Right.
377
00:30:44.680 --> 00:31:02.830
I mean, I use that. Like, a Brilliant thing, I'm not sponsored. But, you know, that's another thing that I'm doing to try and remind myself enough of the maths that I need, plural, to help my children do whatever they need to do, although they've really surpassed me now. But yeah, no, that's cool. All right, friend.
378
00:31:02.830 --> 00:31:03.060
Yeah.
379
00:31:03.060 --> 00:31:09.640
Well, before I ramble any more, I will bid you farewell, and we'll chat some more another time.
380
00:31:09.640 --> 00:31:12.640
Until next time.