WEBVTT

1
00:00:01.080 --> 00:00:05.679
How'd you like to listen to dot
NetRocks with no ads? Easy? Become

2
00:00:05.679 --> 00:00:09.839
a patron For just five dollars a
month, you get access to a private

3
00:00:10.000 --> 00:00:14.439
RSS feed where all the shows have
no ads. Twenty dollars a month will

4
00:00:14.439 --> 00:00:19.039
get you that and a special dot
NetRocks patron mug. Sign up now at

5
00:00:19.039 --> 00:00:23.800
Patreon dot dot NetRocks dot com.
Hey, Carl and Richard here with your

6
00:00:23.920 --> 00:00:28.800
twenty twenty four NDC schedule. Will
be at as many NDC conferences as possible

7
00:00:28.800 --> 00:00:33.280
this year, and you should consider
attending no matter what. Ndcoslow is happening

8
00:00:33.439 --> 00:00:38.560
June tenth through the fourteenth. Get
your tickets at ndcoslow dot com. The

9
00:00:38.600 --> 00:00:43.640
Copenhagen Developers Festival happens August twenty sixth
through the thirtieth. Early bird discount ends

10
00:00:43.679 --> 00:00:51.479
April twenty sixth. Tickets at Cphdevfest
dot com. Ndcporto is happening October fourteenth

11
00:00:51.560 --> 00:00:57.799
through the eighteenth. The early bird
discount ends June fourteenth. Tickets at Ndcporto

12
00:00:57.920 --> 00:01:14.200
dot com. And we'll see you
there, we hope. Hey, guess

13
00:01:14.200 --> 00:01:18.159
what it's dot net rocks and guess
where in Seattle that build? I'm Carl

14
00:01:18.200 --> 00:01:21.079
Franklin. I'm Richard Gamble, and
while we're here with a couple of C

15
00:01:21.280 --> 00:01:27.280
Sharp legends, but we are in
a podcast booth with some fabric walls,

16
00:01:27.519 --> 00:01:30.760
no ceiling, and a whole bunch
of other podcasters. Yeah, a few

17
00:01:30.760 --> 00:01:34.840
other shows going at the moment that
we're recording. Amanda Silvers in one room

18
00:01:36.000 --> 00:01:38.640
and Marc Siavich is in another room. So it's quite an all star back

19
00:01:38.719 --> 00:01:44.159
cast. And by room we mean
polls with fabric stretched around. Yeah,

20
00:01:44.159 --> 00:01:47.840
but we'll see what these headsets are
good, So hopefully they cross talk is

21
00:01:47.879 --> 00:01:49.319
not too bad. Yeah, hopefully. I mean, it feels like I'm

22
00:01:49.359 --> 00:01:53.840
landing a plane. Well it's really
belt for like the NFL. Yeah,

23
00:01:53.959 --> 00:01:59.400
so you feel like you're planning a
kickoff. So I'll be color here.

24
00:01:59.680 --> 00:02:02.319
Can they do the play by play? All right? He's at the thirty,

25
00:02:02.680 --> 00:02:06.599
he's at the forty. Yeah,
he's stopping him now, Bob.

26
00:02:06.959 --> 00:02:10.800
Last time I said this was in
nineteen seventy four and the World Series against

27
00:02:10.800 --> 00:02:14.639
it. I know who I'm talking
about. All Right, anyway, let's

28
00:02:14.639 --> 00:02:24.360
get started with better know a framework. Awesome, alight, man, what

29
00:02:24.400 --> 00:02:29.039
do you got? I found this
cool thing called Terminal dot Gooey. What

30
00:02:29.159 --> 00:02:34.800
is terminal Terminal dot Gooey is a
toolkit for building rich console apps for dot

31
00:02:34.879 --> 00:02:38.120
net, dot net core and mono
that works on Windows, the Mac,

32
00:02:38.719 --> 00:02:44.560
and Linux or Unix. How about
that? And by you know, it

33
00:02:44.599 --> 00:02:47.960
looks just like you know, Norton
Utilities from nineteen eighty three, oh man,

34
00:02:49.199 --> 00:02:52.800
like the demo does, but it
also has like Google asci art graphics

35
00:02:52.800 --> 00:02:55.639
and things. It's really cool.
So super old school though, that's awesome,

36
00:02:55.759 --> 00:02:59.280
very old school. Well, you
know that I think these things are

37
00:02:59.280 --> 00:03:00.919
coming back, you know, yeah, they have been coming back for a

38
00:03:00.960 --> 00:03:05.439
while. Everybody likes a command line, but yeah, if you can do

39
00:03:05.479 --> 00:03:07.360
a text based gooey, then it's
not as obnoxious as a mouse based guey.

40
00:03:07.439 --> 00:03:09.759
I guess I suppose so. I
mean, I kind of think that

41
00:03:09.879 --> 00:03:14.520
these are more retro toys for people. Our age that you know, grew

42
00:03:15.120 --> 00:03:17.240
make you feel better call you know
when his command line would call ourselves a

43
00:03:17.280 --> 00:03:22.240
green screen. You know, honestly, I remember when I got rid of

44
00:03:22.280 --> 00:03:28.039
my Hercule Lee's graphics card and the
world was all caller yeah in other top

45
00:03:28.120 --> 00:03:32.960
days and cga c ga yeah,
and g e ga e ga and hands

46
00:03:34.000 --> 00:03:37.719
graphics adapter. Welcome to some old
guys talk about old things that don't matter

47
00:03:37.719 --> 00:03:39.520
anymore. There you go, all
right? Anyway, that's what I got.

48
00:03:39.560 --> 00:03:44.120
Tonald Duck Gooey and who's talking to
us today? Drafted comment off a

49
00:03:44.159 --> 00:03:46.960
show eighteen ninety eight, not that
long ago. This is the one we

50
00:03:46.000 --> 00:03:51.520
did with Sean Wildermouth back in May, because we're publishing this in June,

51
00:03:52.319 --> 00:03:54.599
talking about being a senior software developer. Yeah, we kind of went back

52
00:03:54.639 --> 00:03:58.680
and forth on this show because we
did we have not a soft skills show

53
00:03:58.719 --> 00:04:00.479
in a long time, and we
weren't sure how this is going to come

54
00:04:00.479 --> 00:04:03.960
out. But boy, we got
a really strong reaction. And Sean wasn't

55
00:04:04.000 --> 00:04:08.560
really sure. He pushed her too, right, He like, have I

56
00:04:08.560 --> 00:04:11.199
ever done the right thing here?
And it's like, let's see what the

57
00:04:11.199 --> 00:04:14.199
listeners think, and the listeners seem
I think we resonated with certain folks,

58
00:04:14.240 --> 00:04:19.480
and one of them here is Rob
Schroeder, who said, as a senior

59
00:04:19.519 --> 00:04:23.480
dev who just ticked over into his
fifties, this episode came at the right

60
00:04:23.519 --> 00:04:28.000
time. It's good to hear that
Shawn's experience in struggles mirror mine. Also,

61
00:04:28.839 --> 00:04:31.439
I struggle to know where my career
should go. Management hold zero appeal

62
00:04:31.519 --> 00:04:35.160
to me. So I've been sort
of peaked at the lead engineer level a

63
00:04:35.279 --> 00:04:39.279
kid go into training. But despite
thirty years under my belt, I still

64
00:04:39.279 --> 00:04:43.240
feel like I don't know enough.
Isn't that funny? And that's totally inside

65
00:04:43.240 --> 00:04:46.040
of you, Rob, Like you
know far more than you realize. If

66
00:04:46.040 --> 00:04:48.959
you actually sit down and make a
plan to teach people, you'll know what

67
00:04:49.079 --> 00:04:53.839
to do. You know far more
than you realize. What I still have

68
00:04:53.879 --> 00:04:56.480
going for me is a willingness to
learn new things and demonstrate how they could

69
00:04:56.480 --> 00:05:00.480
be useful. Maybe if that goes, I will reevaluate the Yeah, if

70
00:05:00.519 --> 00:05:03.079
you stop caring, then it's time
to move on. As long as you

71
00:05:03.160 --> 00:05:06.199
care, it's great. So Rob, thank you so much for your comment.

72
00:05:06.240 --> 00:05:09.199
To copy music Coby is on its
way to you, and if you'd

73
00:05:09.240 --> 00:05:11.560
like a copy of music Koba,
I write a comment on the website at

74
00:05:11.560 --> 00:05:14.560
dot at Rocks dot com or on
the Facebook so we publish every show there

75
00:05:14.720 --> 00:05:15.879
and if you comment there and I
read it in the show, we'll send

76
00:05:15.879 --> 00:05:19.519
you copy music Go buy. You
could also send us an X. It

77
00:05:19.680 --> 00:05:23.680
just doesn't sound right, No,
that's wrong. Let's just send me an

78
00:05:23.839 --> 00:05:25.959
X. What does that mean?
A kiss or huck? I can't remember

79
00:05:26.160 --> 00:05:29.519
on the switch Send us a tweet. Of course, we've been on Twitter

80
00:05:29.560 --> 00:05:32.800
forever, but you can also follow
us on masdon where the cool kids are

81
00:05:32.839 --> 00:05:36.199
hanging out. I'm at Carl Franklin
at tech Hub dot social, and I'm

82
00:05:36.279 --> 00:05:40.240
Rich Campbell at Mastered on dot social. Send us a two. That's another

83
00:05:40.240 --> 00:05:43.959
way that you can get a copy
of music to code buy. Here you

84
00:05:44.000 --> 00:05:46.720
go. So let's bring on our
guests. They've been on the show before.

85
00:05:46.879 --> 00:05:50.560
They've been on many shows of their
own talking about c sharp. Every

86
00:05:50.560 --> 00:05:55.519
time there's a new C sharp version. You'll see them online doing videos.

87
00:05:55.879 --> 00:06:00.800
It's Mad's Torgerson and Dustin Campbell.
Let me read their bios. Mads Targusen

88
00:06:00.879 --> 00:06:03.759
is the architec for the C sharp
language at Microsoft and runs the C sharp

89
00:06:03.839 --> 00:06:08.759
design meetings and Prior to joining Microsoft
in two thousand and five, he was

90
00:06:08.800 --> 00:06:15.600
an associate professor at University of RHUs
and doing programming language research YEP and Dustin

91
00:06:15.639 --> 00:06:19.560
Campbell is a principal software engineer on
the dot Net Developer Experience Team, where

92
00:06:19.560 --> 00:06:25.199
he currently works on the Razor C
sharp and Visual Basic language experiences for visual

93
00:06:25.199 --> 00:06:30.680
Studio. Passionate about coding productivity,
Dustin's primary focus is on making dot net

94
00:06:30.720 --> 00:06:33.480
tooling great and helping design the next
version of c sharp. Is part of

95
00:06:33.480 --> 00:06:38.439
the language design team. Prior to
his current role, he spent several years

96
00:06:38.439 --> 00:06:42.759
working as a program manager in the
project called Rosalin maybe you've heard of it,

97
00:06:43.279 --> 00:06:47.120
designing the next generation of the c
sharp and VBID experiences. Dustin is

98
00:06:47.160 --> 00:06:53.360
a programming nut. His favorite color
is blue. Welcome back, guys.

99
00:06:53.480 --> 00:06:56.040
Is any of that true? Some
of that's true, Some of it is

100
00:06:56.040 --> 00:06:59.439
true. What a luxury that we
get to be sit together rather than the

101
00:06:59.560 --> 00:07:02.680
usual of remote thing. Yeah,
it's fun to be together and chat a

102
00:07:02.720 --> 00:07:08.639
bit. This we we just went
through the keynote of Build and it's all

103
00:07:08.639 --> 00:07:12.879
copilot all the time. It's a
a I like, where where's the pro

104
00:07:13.000 --> 00:07:15.839
You guys have got to talk?
What are you talking about? We're talking

105
00:07:15.879 --> 00:07:19.800
about programming? Good, because that's
a good thing of a bill to talk

106
00:07:19.800 --> 00:07:26.120
about programming. Yeah, I mean, don't get me wrong. AI Copilot

107
00:07:26.199 --> 00:07:30.160
it is really important. It's really
taking off and it's getting into everything.

108
00:07:30.279 --> 00:07:35.959
It is getting into the coding experience. Should you copilot like first people first

109
00:07:36.519 --> 00:07:41.519
met copilot as part of a developer
experience. That's where that kind of that's

110
00:07:41.519 --> 00:07:44.959
what that's why so good Microsoft had
come up with it was GitHub. Yeah,

111
00:07:45.560 --> 00:07:50.399
well get hub. You know it's
owned subsidiary, so we'll take that,

112
00:07:50.439 --> 00:07:57.160
thank you very much. Yeah,
but but it is really impacting the

113
00:07:57.319 --> 00:08:01.480
developer experience very much, right,
I use getthub copile internally. We were

114
00:08:01.720 --> 00:08:05.519
we were in fact just using it. We were working on our talk and

115
00:08:05.600 --> 00:08:07.639
it was filling in stuff for us, just the small things as we're and

116
00:08:07.680 --> 00:08:11.439
it was actually you know, just
filling out the boilerplate as we were writing

117
00:08:11.519 --> 00:08:16.560
up demos. And I love that. Yeah, even on crazy brand new

118
00:08:16.639 --> 00:08:20.600
sea sharp bits that nobody's seen yet. It was like, so when you

119
00:08:20.600 --> 00:08:22.720
guys are working on like I mean, you're working on dot at nine right

120
00:08:22.759 --> 00:08:26.920
now, so sharp thirteen, Yeah
at thirteen, lucky number thirteen. Man.

121
00:08:28.160 --> 00:08:33.840
Yeah, So the way that copilot
works, it can actually understand the

122
00:08:33.919 --> 00:08:37.080
new language features and you can see
how it interacts with like that's almost a

123
00:08:37.120 --> 00:08:41.480
way to look at how that feature
surfaces, because it isn't a trained on

124
00:08:41.559 --> 00:08:45.159
your reposts, I mean your personal
repost like I can comment, you know,

125
00:08:45.279 --> 00:08:48.480
list all of the connection strings that
Matt's has put in his reposts,

126
00:08:48.519 --> 00:08:54.120
and yeah, Matt Matt's posts all
of his passwords. One that's how you

127
00:08:54.240 --> 00:08:58.960
know works. You got to do
it yourself and right a four loop to

128
00:08:58.000 --> 00:09:05.840
print them out. There's a language
feature for you. I mean, that's

129
00:09:05.840 --> 00:09:09.360
been one of the interesting challenges for
AI to get up to speed, right,

130
00:09:09.440 --> 00:09:13.759
because the older the version of the
language, the more code is already

131
00:09:13.799 --> 00:09:18.559
out there in it new things.
And that's some something we've gotten a lot

132
00:09:18.600 --> 00:09:20.720
better at. Yeah, and I
think there's a long ways to go,

133
00:09:20.919 --> 00:09:28.080
too, right, because you know, the I guess the the best idea

134
00:09:28.159 --> 00:09:30.960
that we have is like, let's
let's, you know, try and make

135
00:09:31.080 --> 00:09:35.279
the AI to produce code that is
the latest and greatest, right, But

136
00:09:35.000 --> 00:09:37.960
what if that doesn't mean anything to
you yet? Right, right, Like

137
00:09:39.080 --> 00:09:41.960
it introduces collection expressions, but you're
still new in upper rays and C sharp

138
00:09:43.000 --> 00:09:48.200
one O syntax, you know.
And so I I like the idea that,

139
00:09:48.519 --> 00:09:50.600
you know, if we can get
AI to the place where it actually

140
00:09:50.679 --> 00:09:54.360
it's almost as if you asked it
a question and responded in your own voice,

141
00:09:54.360 --> 00:09:58.600
where you just look at your code
and produce code that is essentially look

142
00:09:58.639 --> 00:10:01.440
at it, and it's friction free. You're comfortable in C sharp seven.

143
00:10:01.600 --> 00:10:03.679
Yeah, so that's the code I'm
going to spit out for you. Yeah.

144
00:10:03.720 --> 00:10:07.080
I know, I'm on C sharp
nine, I'm on C sharp thirteen,

145
00:10:07.159 --> 00:10:09.360
whatever, whatever, But I haven't
used any of those features yet,

146
00:10:09.360 --> 00:10:11.919
and I really don't know what that
does. Yeah. So yeah, but

147
00:10:13.039 --> 00:10:16.039
this was a conversation we had ages
ago about how were we going to manage

148
00:10:16.480 --> 00:10:18.879
the fact that you maintain backward compatibility
so all that out code always runs,

149
00:10:18.960 --> 00:10:22.679
but still encourage people to use the
new features. And you said tooling,

150
00:10:24.440 --> 00:10:28.200
and this looks like tooling like that, this is the tool that. Well,

151
00:10:28.240 --> 00:10:30.200
I'll spit you out your CE sharp
seven. I'll say, hey,

152
00:10:30.200 --> 00:10:31.919
would you let us see what this
looks like in thirteen because you can do

153
00:10:33.000 --> 00:10:37.759
it this way and it's maybe a
little terser, a little clearer. You

154
00:10:37.840 --> 00:10:41.000
know. All of those things seem
to me to be really compelling for developers

155
00:10:41.080 --> 00:10:43.480
to say, this still runs,
but you could have it this way instead

156
00:10:43.960 --> 00:10:46.360
and lead them to the path of
using the new features. Yes, and

157
00:10:46.480 --> 00:10:50.279
we do that often already, even
without the use of copilot, without a

158
00:10:52.240 --> 00:10:54.159
yeah, you just have has a
lot of that coded in right. Yeah,

159
00:10:54.360 --> 00:11:01.600
And the interesting is that how that
interplay evolved between what co pilot feels

160
00:11:01.759 --> 00:11:07.879
like suggesting based on it's on the
model that it's right referring to virtually on

161
00:11:07.000 --> 00:11:13.159
probability, yes, versus the deterministic
but sort of needs to be hand rolled

162
00:11:13.200 --> 00:11:18.080
a little more. Things that we
also have built in sort of intelli sense

163
00:11:18.120 --> 00:11:22.279
and telecode type technology, code fixes
that suggest using new features and that kind

164
00:11:22.279 --> 00:11:24.279
of thing. Yeah, I can
tell you from experience that when I ask

165
00:11:24.399 --> 00:11:28.120
chat GPT to write me a console
app that does X, it creates a

166
00:11:28.200 --> 00:11:31.679
main and a you know, a
submain in the program and all that stuff,

167
00:11:33.000 --> 00:11:37.320
whereas you guys have completely simplified that
and yeah, so really even a

168
00:11:37.320 --> 00:11:39.600
couple of versions ago. Yeah,
it you know, it takes time to

169
00:11:39.639 --> 00:11:43.320
get that stuff trained on, you
know, even to have code out there.

170
00:11:43.799 --> 00:11:48.000
Right, that's and that's that's that's
writing that way or has best practices

171
00:11:48.279 --> 00:11:52.000
and all that kind of thing.
That in the perspective of gethub copilot,

172
00:11:52.039 --> 00:11:54.519
where it's parsing public repositories, it's
not only that you have to put the

173
00:11:54.600 --> 00:11:58.879
feature out there so that somebody has
to code against it enough times that it

174
00:12:00.159 --> 00:12:03.960
rises in probability is a correct answer
for a large language model. Yes,

175
00:12:03.039 --> 00:12:05.879
so, and you said that you
want it to be as natural as you

176
00:12:05.960 --> 00:12:11.840
know, talking to somebody who's very
much like yourself. Is there going to

177
00:12:11.919 --> 00:12:13.639
be away soon or is there a
way, you know, get hub co

178
00:12:13.799 --> 00:12:16.639
pilot to say, you know,
this is the version of C sharp language

179
00:12:16.639 --> 00:12:20.279
that I want to use, and
you should spit out everything like this.

180
00:12:20.080 --> 00:12:24.200
I even want it to be more
like it's it, you know, hand

181
00:12:24.279 --> 00:12:28.080
in hand with some of the ID
tooling that we have. If I can

182
00:12:28.159 --> 00:12:30.919
get of us more than text,
more than just code, give us some

183
00:12:30.919 --> 00:12:33.399
semantics here, here's what I was
trying to do. Yeah, And the

184
00:12:33.480 --> 00:12:35.120
idea is like, you know,
I've got the whole project here, I

185
00:12:35.240 --> 00:12:39.039
know what's in there. Like they
don't do that, but they do this,

186
00:12:39.679 --> 00:12:41.879
you know, and it might be
c sharp ten, but they might

187
00:12:41.960 --> 00:12:46.440
be still using us. It might
use a smattering of features and different things.

188
00:12:46.440 --> 00:12:48.080
All right, So you don't want
to you don't want to have to

189
00:12:48.240 --> 00:12:50.559
tell the tool anything. It should
read the code that's there and say,

190
00:12:50.879 --> 00:12:54.080
hey, this is how you write
your code. Let me write code like

191
00:12:54.159 --> 00:12:56.600
this. Yes, yeah, absolutely, that's legit. Well you can say

192
00:12:56.639 --> 00:13:01.039
that, let the version of c
sharp that using that your cs prog file.

193
00:13:01.279 --> 00:13:05.720
Right, But it's not there by
default, right, not by default,

194
00:13:05.759 --> 00:13:09.399
it's the it's the latest by default, And that might not be what

195
00:13:09.639 --> 00:13:11.960
your program looks like. It also
might be it might make a suggestion that

196
00:13:13.120 --> 00:13:16.120
looks completely different than the code you're
looking at, and so then there's friction

197
00:13:16.200 --> 00:13:20.559
should I accept this suggestion or yeah, that kind of thing. So yeah,

198
00:13:20.559 --> 00:13:24.120
I'd love it to just get friction
free, to just kind of no

199
00:13:24.679 --> 00:13:28.360
be able to speak in your language. Right. I've said this before that

200
00:13:28.559 --> 00:13:31.279
you know, there are people who
are kind of hesitant to trust AI.

201
00:13:33.080 --> 00:13:37.519
But code is one of the places
where it really shines because you can test

202
00:13:37.600 --> 00:13:39.360
it immediately. You know, it's
not like it's giving you a fact that

203
00:13:39.480 --> 00:13:43.120
you are then going to regurgitate and
you could look like a complete idiot or

204
00:13:43.600 --> 00:13:50.080
or worse right, you're getting some
code and it runs or it doesn't run.

205
00:13:50.519 --> 00:13:52.879
The compiler has to say yeah,
intelligence has to say yeah, of

206
00:13:52.919 --> 00:14:00.799
course. There's these things called tests
that some people's talk those tests that an

207
00:14:00.840 --> 00:14:07.679
a I wrote for you first doing
that, so I mean that's how they

208
00:14:07.759 --> 00:14:11.200
get you. Yeah, yeah,
first that generated code that didn't work then

209
00:14:11.200 --> 00:14:15.519
I wrote test around it, so
it passed anyway. But wouldn't it be

210
00:14:15.600 --> 00:14:18.480
great though, if we could have
tests for everything that AI outputs, you

211
00:14:18.559 --> 00:14:22.159
know, just like everything that the
large language model says. It's just it

212
00:14:22.240 --> 00:14:26.960
sooner or later you you actually have
to use your brain and your eyes to

213
00:14:26.039 --> 00:14:28.399
look at it. Go is that
a real test? Is that what we

214
00:14:28.519 --> 00:14:33.240
want to validate? M But then
it begs the question that, well,

215
00:14:33.320 --> 00:14:35.919
if we need to be smarter than
the AI, then what's the use of

216
00:14:37.000 --> 00:14:41.000
an AI? Just type save key
strokes? Yeah, it's productivity. It

217
00:14:41.559 --> 00:14:43.080
saves time. Oh, I get
it. It was a rhetorical question.

218
00:14:43.240 --> 00:14:46.919
I say, I actually, and
I actually turn it off a lot of

219
00:14:46.960 --> 00:14:48.679
times. I have there's a button
in the in visual studio where I can

220
00:14:48.720 --> 00:14:52.000
turn it on and off. And
I turned off a lot of the time

221
00:14:52.039 --> 00:14:56.360
because when it makes a suggestion,
I find my my my ADHD brain finds

222
00:14:56.399 --> 00:15:01.120
myself staring at that code and trying
to under stand what it's doing as opposed

223
00:15:01.159 --> 00:15:03.200
to what I really wanted. Was
like a blank slate, So I think

224
00:15:03.360 --> 00:15:07.720
and start filling it out to fund
them A very interesting definition. It's like

225
00:15:09.000 --> 00:15:11.960
how many times do you want the
blank slate versus the blank state is stopping

226
00:15:13.080 --> 00:15:16.480
you. You get to that blank
screen like I don't know what to do,

227
00:15:16.480 --> 00:15:20.600
and describing it to the tool actually
helps you know what to do.

228
00:15:20.879 --> 00:15:24.879
What I do is I ask four
comments. I ask a comment every line

229
00:15:24.879 --> 00:15:28.399
of code, and they will do
that to parse existing code. No,

230
00:15:28.480 --> 00:15:31.519
no, no, when you when
you want it to, let's say,

231
00:15:31.600 --> 00:15:35.120
generate a method that does acts okay, and when in this generated code,

232
00:15:35.159 --> 00:15:37.720
I want you to comment everyone,
tell me what you're doing, help you

233
00:15:37.799 --> 00:15:41.879
with parsing for understanding, and I'll
do that. That's a great idea.

234
00:15:41.519 --> 00:15:50.480
I am pentameter, I like I
am acceptameter. I want you to comment

235
00:15:50.519 --> 00:15:58.200
every line of code in rhyming couplets, write a sonnet. I know it's

236
00:15:58.320 --> 00:16:00.440
just a machine, but it feels
a little cruel. Actually, yeah,

237
00:16:00.480 --> 00:16:03.559
I know. I know you want
to say I'm sorry, but I'm sorry,

238
00:16:04.120 --> 00:16:07.480
thank you to write, thank you
very much. I used the iamic

239
00:16:07.559 --> 00:16:14.000
Contemporary trip to to show people what
overflowing the token buffer looked like, because

240
00:16:14.000 --> 00:16:15.159
it was the first thing I said
is everything you should say to me is

241
00:16:15.159 --> 00:16:19.039
that I just keep asking it things
and after a certain point when it overflowed,

242
00:16:19.039 --> 00:16:22.279
that would stroll off and suddenly we
drop and so it was just like

243
00:16:22.480 --> 00:16:26.399
look this and here's this is also
look what it said. It it got

244
00:16:26.480 --> 00:16:30.720
weird because it had a portion of
a set of tokens. This is older

245
00:16:30.840 --> 00:16:34.000
versions stuff. But it was just
like ways to remind people there's this is

246
00:16:34.200 --> 00:16:37.919
software and it's not intelligent. So
should we talk about c sharp? Oh

247
00:16:38.080 --> 00:16:44.519
yeah, that's what what pardon there's
this thing right now where every conversation degenerates

248
00:16:44.720 --> 00:16:51.679
in just went straight there. Yeah, regenerate from that. So at first

249
00:16:51.720 --> 00:16:52.200
to get it out of the way, move on. So what's new,

250
00:16:52.240 --> 00:16:56.679
pussy cat? Hmm, you're making
a new language, a new version of

251
00:16:56.679 --> 00:16:59.360
the new version again. Yeah.
Yeah, it happens every year. Now,

252
00:17:00.320 --> 00:17:03.720
is that good? Yes? Not
everybody thinks. So. I do

253
00:17:04.039 --> 00:17:07.799
know that there's folks out there.
We certainly get the emails of resolves like

254
00:17:07.119 --> 00:17:11.799
so fast, so fast. He
did look at me when he said that

255
00:17:11.920 --> 00:17:17.359
too, Yes, I did,
but it was not necessarily because it was

256
00:17:17.680 --> 00:17:22.240
not to imply that you had a
different opinion. More, I think that

257
00:17:22.359 --> 00:17:25.839
the perception when when we come out
every year, the perception of speed is

258
00:17:25.880 --> 00:17:30.160
certainly different, right because the number
of times you have to well you feel

259
00:17:30.240 --> 00:17:33.599
you have to go and reorient yourself
and figure out what's up now is you

260
00:17:33.680 --> 00:17:37.559
know, more frequent, But I
mean the PM in me and I know

261
00:17:37.680 --> 00:17:41.440
that's a you know, out of
style term, but the PM ME says

262
00:17:41.880 --> 00:17:45.920
are we're building features that can ship
in a year because that's what we have

263
00:17:45.079 --> 00:17:51.839
for time. So that's that's one
of the risks I feel that we're so

264
00:17:51.920 --> 00:17:57.039
I don't feel that the overall velocity
of c Sharp's evolution is actually higher.

265
00:17:57.480 --> 00:18:03.279
I feel like we we ship deltas
more often you get like the first down

266
00:18:03.359 --> 00:18:07.039
payment on a feature that immediately gives
you value, and then the next round.

267
00:18:07.079 --> 00:18:11.640
So we did collection expressions for instance
twelve. There'll be a few more

268
00:18:11.720 --> 00:18:15.000
things based on that in thirteen and
in fourteen, maybe in fifteen. So

269
00:18:15.119 --> 00:18:18.480
at the end of all of that, you'll have the same amount of feature.

270
00:18:18.720 --> 00:18:22.039
It will just have come out in
increments in increments. It is,

271
00:18:22.279 --> 00:18:26.279
And I also wonder if that helps
people use it, because it's a small

272
00:18:26.319 --> 00:18:30.720
step in each version. It possibly
helps some people. And what it does

273
00:18:30.839 --> 00:18:34.640
for us is it gives us feedback
in between, so the feedback loop becomes

274
00:18:34.720 --> 00:18:37.880
more fine grained. A lot of
people we're using the first part, and

275
00:18:37.960 --> 00:18:40.480
we're going to be like, oh, actually that direction we thought we were

276
00:18:40.519 --> 00:18:42.880
going to take it in, We're
going to take it over the webstead Yeah,

277
00:18:44.200 --> 00:18:47.920
or between three possible things we could
do with it next we'll find out

278
00:18:47.920 --> 00:18:51.319
which one is the most important based
on the scenario. So the feature we

279
00:18:51.359 --> 00:18:52.720
did, that's kind of the poster
show that was like C sharp nine,

280
00:18:52.799 --> 00:18:57.480
we started doing records and then continue
doing records in C sharp ten, Yeah,

281
00:18:57.480 --> 00:19:00.680
and then continue doing records and C
sharp them. But really it was

282
00:19:00.759 --> 00:19:03.000
kind of a you know, when
we first did it, it was a

283
00:19:03.079 --> 00:19:07.599
question of like what did we need
to do. What's the goal to make

284
00:19:07.599 --> 00:19:11.200
sure that our future selves were equipped
in order to do the next things,

285
00:19:11.359 --> 00:19:14.839
whatever those might be, depending on
what people really needed next. And you

286
00:19:14.880 --> 00:19:17.920
said that there were features that you
may have started, like in C sharp

287
00:19:18.039 --> 00:19:21.839
nine that won't even come out until
now. How many how many of those

288
00:19:21.960 --> 00:19:25.640
are there that took four or five
years to Yeah, So that's to the

289
00:19:25.720 --> 00:19:30.880
other part of Richard's question is that
we we try very hard not to limit

290
00:19:30.960 --> 00:19:37.960
ourselves to bite sized features, because
we do need to do big revolutionary things

291
00:19:38.039 --> 00:19:41.759
in the language occasionally. Does that
mean you pushed dark code out, like

292
00:19:41.920 --> 00:19:47.279
code that's now in the system but
generally not available to the user. As

293
00:19:47.400 --> 00:19:49.519
if you're going that long on code, or does it stay in a brand,

294
00:19:49.599 --> 00:19:52.880
you can go for it later,
it can go for a don release.

295
00:19:52.920 --> 00:19:56.960
It kind of depends, right.
A good example is the generic math

296
00:19:56.240 --> 00:20:00.000
stuff that shipped a couple of releases
ago now, right, but that actually

297
00:20:00.759 --> 00:20:06.519
shipped it is an experimental preview and
like an SDK before that, because we

298
00:20:06.640 --> 00:20:10.240
needed a couple of releases to deal
to get the run time support to do

299
00:20:10.400 --> 00:20:14.160
things like static abstract members on interfaces, which we did, which is a

300
00:20:14.200 --> 00:20:17.200
whole thing. Is that just time
to interact with the other teams, It's

301
00:20:17.480 --> 00:20:19.480
it's it's it's bake right as well, to see if it's like okay,

302
00:20:19.599 --> 00:20:23.559
is this hanging together? Does this
actually meet the scenario? Let's get let's

303
00:20:23.559 --> 00:20:26.079
get some people that are you know, kind of kind of front runners that

304
00:20:26.160 --> 00:20:32.000
want to really play with this to
try it out, and but we still

305
00:20:32.039 --> 00:20:33.319
need to get it out there for
them, and so we've shipped it as

306
00:20:33.599 --> 00:20:37.200
with an experimental flag, right.
Yeah. I mean, because what you

307
00:20:37.279 --> 00:20:41.000
were describing with records is that you
kept adding features to records over time that

308
00:20:41.119 --> 00:20:45.680
was more like it was always But
it's interesting to say, like you knew

309
00:20:45.680 --> 00:20:48.200
where you wanted to go, or
you thought you knew where you wanted to

310
00:20:48.279 --> 00:20:52.240
go, and then you decomposed it
of the steps you could fit into the

311
00:20:52.319 --> 00:20:56.839
interval, and then at each interval
the customer are pressed against it and maybe

312
00:20:56.960 --> 00:20:59.599
changed it for you. Yes,
well, Rosalind was like that wasn't It

313
00:21:00.079 --> 00:21:03.920
took a few years to come in, so it was. And another example,

314
00:21:03.319 --> 00:21:07.640
maybe the most extreme example in the
language is pattern matching, which came

315
00:21:07.720 --> 00:21:14.160
in and C sharp seven. Yeah, and it was the most basic of

316
00:21:14.240 --> 00:21:17.759
things when you look back on it, but it introduced the notion of patterns,

317
00:21:18.240 --> 00:21:22.880
and it unified switch statements and is
expressions around this notion of patterns.

318
00:21:22.920 --> 00:21:27.279
It had like that core. Oh
here's we're turning a page. Here's a

319
00:21:27.319 --> 00:21:30.839
whole new thing. But the new
thing itself was kind of small. It

320
00:21:30.880 --> 00:21:34.119
could do type tests and compared to
constants, that was pretty much it pretty

321
00:21:34.160 --> 00:21:40.000
much it. Yeah, But then
from there we knew we had thought ahead

322
00:21:40.119 --> 00:21:42.559
enough that we knew we had syntactic
headroom to keep adding, and then it

323
00:21:42.680 --> 00:21:47.160
was a question of rinse and repeat
for release after release after release, we

324
00:21:47.200 --> 00:21:52.160
had various forms of recursive patterns and
list patterns and conditional patterns and all those

325
00:21:52.200 --> 00:21:56.640
things that wasn't even the right order
ranges and everything. Yeah, and it

326
00:21:56.839 --> 00:22:03.920
just sometimes doing it that way really
helps, just helps the feature get right.

327
00:22:06.000 --> 00:22:08.839
You need to make sure that you
think ahead enough that you haven't just

328
00:22:08.960 --> 00:22:12.079
designed yourself into a dead end,
right that the direction you want to go

329
00:22:12.240 --> 00:22:15.359
now you can't go there right,
right? But also, I mean how

330
00:22:15.440 --> 00:22:19.920
much of the feedback influence you along
that path too. It certainly it influenced

331
00:22:21.000 --> 00:22:25.160
us both in terms of the couple
of things we had thought about, which

332
00:22:25.279 --> 00:22:27.119
is the next important thing we should
get to in terms of priority. I

333
00:22:27.559 --> 00:22:30.759
think you're doing it right if you
push it out there and the thing they

334
00:22:30.839 --> 00:22:33.119
ask for is the next thing you
were planning to build. Yeah, yeah,

335
00:22:33.160 --> 00:22:37.079
yeah. And then sometimes that's the
thing we know that like, Okay,

336
00:22:37.200 --> 00:22:38.279
this is the first bug that's going
to get filed in this future,

337
00:22:38.640 --> 00:22:42.240
right, we know that we know
it's missing. And sometimes it's it's you

338
00:22:42.319 --> 00:22:48.400
know, getting that signal from the
customer and also coupling that with whatever resources

339
00:22:48.440 --> 00:22:52.000
there are there's and so sometimes like, well we're not getting to that yet

340
00:22:52.119 --> 00:22:55.880
because the person's over here working on
those, they're clearly the good person to

341
00:22:55.960 --> 00:22:57.119
go do that. Yeah. I
think that's the thing that a lot of

342
00:22:57.160 --> 00:23:00.839
folks struggle with, this is the
reality that programmers aren't widgets. You can't

343
00:23:00.920 --> 00:23:04.920
just plug them into any old thing. That there's definitely folks with minds well

344
00:23:06.000 --> 00:23:08.920
suited to particular problem spaces, like
this feature will be better if we wait

345
00:23:10.039 --> 00:23:11.799
for that person to work on it. Yeah, they're passions to people.

346
00:23:12.359 --> 00:23:15.680
People get passionate about. Like when
we did records, the last feature to

347
00:23:15.759 --> 00:23:21.160
go in I think was all the
required members for properties, and that turned

348
00:23:21.160 --> 00:23:22.519
out to be somebody who's just like, I am super passionate about this.

349
00:23:22.960 --> 00:23:26.759
It is I feel that it's broken
until we do this, And so they

350
00:23:26.839 --> 00:23:29.599
went after it and it happened,
yeah, and made it more Robust's Yeah,

351
00:23:29.599 --> 00:23:33.000
accordingly, how much is discoverability a
feature? Because I mean, you

352
00:23:33.039 --> 00:23:37.400
guys are always adding things. What
you can do with link now could be

353
00:23:37.480 --> 00:23:40.319
a book. This thick. I
mean, I got a foot between my

354
00:23:40.400 --> 00:23:45.759
hands and I guess what I'm asking
is do you get customers that say,

355
00:23:47.119 --> 00:23:48.880
you know, it would be really
great if ce Shark could do this,

356
00:23:48.119 --> 00:23:51.599
And the answer is oh yeah,
just do this sea shark can do that?

357
00:23:51.839 --> 00:23:56.519
Do that? Yeah, that happens. And I mean there's discoverability just

358
00:23:56.599 --> 00:24:02.519
in terms of sort of documentary how
do I find out? But then there's

359
00:24:02.519 --> 00:24:07.200
also then there's also literally like the
discoverability feature of pressing dot and seeing what

360
00:24:07.359 --> 00:24:12.559
you get up, like a feature
we're going to be showing at the at

361
00:24:12.960 --> 00:24:22.519
built here is about that as about
actually adding discoverability to that of APIs as

362
00:24:23.039 --> 00:24:26.440
you know, as part of your
programming experience. But there is the there

363
00:24:26.519 --> 00:24:30.039
is a question about we talked about
before with AI, and the same goes

364
00:24:30.079 --> 00:24:36.200
for things like stacko, like sites
that give you answers to how do I

365
00:24:36.319 --> 00:24:40.160
do this? They're lagging, right, They're like right, they'll give you

366
00:24:41.279 --> 00:24:48.680
yesterday's best answer if you search,
And so there's there's always a challenge of

367
00:24:48.839 --> 00:24:52.079
how do we help people realize what
is the best thing you can do today?

368
00:24:52.440 --> 00:24:56.119
Right? Yeah? And to that
end, what it really means is

369
00:24:56.160 --> 00:25:02.240
the different ways that you can construct
let's say a link statement. You know,

370
00:25:02.480 --> 00:25:07.960
if you do something like with from
you know, X, sequels parentheses

371
00:25:07.039 --> 00:25:12.279
from blah blah blah in or if
you just do list dot were like those

372
00:25:12.319 --> 00:25:17.160
are two different ways to do sart
of the same thing with two different syntax

373
00:25:17.200 --> 00:25:19.559
trees. And so if you know
how to do those and you're good on

374
00:25:19.599 --> 00:25:23.720
the fundamentals, then when you press
the dot, then you'll you'll find the

375
00:25:23.799 --> 00:25:26.960
new stuff. Well, I think, and you bring up an interesting example

376
00:25:27.079 --> 00:25:33.799
because the success of c sharp three
to zeros extension methods, it's kind of

377
00:25:33.839 --> 00:25:37.000
been through the roof over the last
ten releases, and and you know,

378
00:25:37.440 --> 00:25:41.519
it's much easier to press dot and
discover the next thing I need to do

379
00:25:41.599 --> 00:25:44.880
with those extension methods then to go, well, how did I do a

380
00:25:44.920 --> 00:25:48.440
group by I don't remember what the
syntax for that is in query expressions,

381
00:25:48.480 --> 00:25:52.400
but I can sort it out when
I press dot. And so that's actually

382
00:25:52.480 --> 00:25:55.480
one of the main features we're looking
at for c sharp thirteen that we're going

383
00:25:55.559 --> 00:25:59.960
to show, which is you know, extensions that taking more than extension meta

384
00:26:00.000 --> 00:26:03.759
methods, but you know, going
further extension properties, being able to you

385
00:26:03.839 --> 00:26:07.480
know, add extension static methods for
a type you can I think you got

386
00:26:07.519 --> 00:26:12.440
the slogan for c sharp thirteen just
pressed dot, just pressed That's not bad

387
00:26:12.440 --> 00:26:15.640
at all. But we've been talking
about that is like, you know,

388
00:26:15.720 --> 00:26:19.519
the discovernment. Yeah, that's fine, that's fine. I know what to

389
00:26:19.559 --> 00:26:27.359
send you back. Yeah, okay, Yeah, dear idiot, I always

390
00:26:27.400 --> 00:26:36.880
think of guitar strings or something.
It's funny how much intelligence counts, like

391
00:26:37.119 --> 00:26:42.640
just it's you. You try turning
that off and work especially. Yeah,

392
00:26:44.400 --> 00:26:48.400
I mean it's the power of you
know, the popularity of type script is

393
00:26:48.680 --> 00:26:52.920
really? Is that? Yeah?
You know? Yeah, We've been using

394
00:26:53.200 --> 00:26:59.640
very preliminary bits for our presentation here
because what we are showing only ships in

395
00:26:59.720 --> 00:27:02.359
another six months from now, right, So this is a rough version.

396
00:27:02.480 --> 00:27:10.079
So occasionally, you know, thirteen
thirteen. Occasionally the idea just goes blank

397
00:27:10.160 --> 00:27:15.480
on us with these bits and you're
back in the eighties. Yeah. Wow,

398
00:27:15.720 --> 00:27:18.400
this is hard. I have to
tie the whole name of this member

399
00:27:18.519 --> 00:27:22.440
so many clicks, especially with the
naming conventions we have. They really made

400
00:27:22.519 --> 00:27:26.119
for completion, you know, yeah, or those times to be completed,

401
00:27:26.240 --> 00:27:30.880
those awkward times when you write a
comment that you think copal's going to pick

402
00:27:30.960 --> 00:27:38.599
up on your presenter and nothing happens, and you're like hello, and if

403
00:27:38.640 --> 00:27:41.519
they could speak, it would say
shut up. I'm thinking I'm looking at

404
00:27:41.559 --> 00:27:45.519
the c sharp blank getub in the
milestones category and for it's like you know,

405
00:27:45.680 --> 00:27:48.960
versions for ten and eleven and twelve
and so forth, and needs more

406
00:27:49.000 --> 00:27:53.240
work and backlog and working said and
any time, and my favorite of all,

407
00:27:53.519 --> 00:28:00.799
likely never. Yeah, it's very
polite, don't get likely. You

408
00:28:00.839 --> 00:28:04.720
could have just said no, or
how about the standard Microsoft answer? Why

409
00:28:04.799 --> 00:28:07.960
would you ever want to do that? Yeah, but you know it's not

410
00:28:08.279 --> 00:28:11.960
it's actually not just about politeness.
It's a little bit about mindset as well,

411
00:28:12.079 --> 00:28:15.400
Like you want to keep an open
mind. It's like, we can't

412
00:28:15.480 --> 00:28:18.960
imagine that right now. Yeah,
but who knows, like maybe in two

413
00:28:19.079 --> 00:28:23.799
or three years, so ten that
that's actually just maybe this was actually an

414
00:28:23.839 --> 00:28:29.759
insight of sometime in the future,
we're going to need this this as opposed

415
00:28:29.759 --> 00:28:32.960
to that's just a crazy idea and
we're going to likely never. Yeah,

416
00:28:33.240 --> 00:28:36.279
so we and I'm only half joking, like we really do try to.

417
00:28:36.519 --> 00:28:38.240
Yeah, you got to stay open. Yes, it's the only way to

418
00:28:40.359 --> 00:28:44.279
thrive long term, right, Like
is that maybe it will come back around,

419
00:28:44.319 --> 00:28:48.279
it's not. It's a crazy idea
only today right at this point in

420
00:28:48.400 --> 00:28:51.400
time, likely not likely never.
And with that, gentleman, I had

421
00:28:51.440 --> 00:28:57.799
an interrupt for one moment for this
very important message and we're back. It's

422
00:28:57.839 --> 00:29:00.839
not that rocks, I'm mature.
Well that's called Franklin. Yo. We're

423
00:29:00.920 --> 00:29:06.240
here in a strange room called the
Elliott Bay Room at the conventions that are

424
00:29:06.279 --> 00:29:10.519
in Seattle for build sitting with our
friends Mats and Dustin, talking a bit

425
00:29:10.559 --> 00:29:15.559
about how c sharp gets built.
Obviously new version coming and the very open

426
00:29:15.720 --> 00:29:19.759
process of you know, it's you
want to know what's coming in c sharp,

427
00:29:19.960 --> 00:29:23.640
it's in the GitHub repository. You
can pick up those bits and compile

428
00:29:23.720 --> 00:29:26.839
them and play with your own version. If you hate yourself, you know,

429
00:29:27.000 --> 00:29:30.400
like they have those choice you can
very least read. Look, you

430
00:29:30.480 --> 00:29:34.400
don't even have to hate yourself that
much. You can go use a tool

431
00:29:34.440 --> 00:29:40.519
that's not our tool. But there's
there's a website called sharp lab todo where

432
00:29:40.519 --> 00:29:45.240
you can go and play with the
different branches. Yeah yeah, literally built

433
00:29:45.279 --> 00:29:48.599
this thing and it's fantastic. It'll
yeah yeah. So you literally can pick

434
00:29:48.640 --> 00:29:52.119
a version of a beta version or
alpha version of branch out of the rodul

435
00:29:52.720 --> 00:29:57.240
and just go for it. The
feature branch that is building let's say params

436
00:29:57.279 --> 00:30:00.640
collections like that feature brand. You
can just go and play with that and

437
00:30:00.759 --> 00:30:03.160
see what the feature looks like,
so this is built by the community.

438
00:30:03.200 --> 00:30:06.960
Do you use it? We use
it all the time, no kidding.

439
00:30:07.039 --> 00:30:11.119
Yeah, that's cool, especially because
the code that you write in there becomes

440
00:30:11.160 --> 00:30:14.400
part of the r L, so
you can just super easily just keep sending

441
00:30:15.640 --> 00:30:18.680
share it around, share it.
Watch this. This is not what we

442
00:30:18.799 --> 00:30:21.279
planned. We do it all the
time in the in the in the C

443
00:30:21.400 --> 00:30:23.720
Sharp Language design meeting was like,
how did what is that? What does

444
00:30:23.799 --> 00:30:26.480
that? Nobody remembers, right,
it's like, oh, just go somebody

445
00:30:26.480 --> 00:30:29.720
writes it up in sharp labs.
So here's what it does. Yeah,

446
00:30:29.960 --> 00:30:32.680
somebody's eyes glazes over for a moment, you know, they're they're typing it

447
00:30:32.799 --> 00:30:36.240
up and sharp lab. Right,
see what use we actually do with that?

448
00:30:36.440 --> 00:30:41.119
The sharp lab guys just got some
serious free advertising the morning We love

449
00:30:41.160 --> 00:30:42.440
you all, Yeah, from Microsoft. I don't think there's any money in

450
00:30:42.519 --> 00:30:47.200
it for them, but they got
the glory though. Definitely created a service.

451
00:30:47.319 --> 00:30:49.920
It was a wonderful thing, makes
a difference through Yeah, Andre Shecklin,

452
00:30:52.000 --> 00:30:56.200
mind, yeah, sharp on GitHub. It's it's beautiful. It looks

453
00:30:56.279 --> 00:30:56.960
right like soon did I see that? It's like, oh, I know

454
00:30:57.000 --> 00:31:00.960
what to do with that? Off
you go you know, you can take

455
00:31:00.000 --> 00:31:03.759
her away, but yeah, you
can pick the version. That's amazing.

456
00:31:03.920 --> 00:31:07.359
Here's Richard Campbell playing with it live
on radio. So that's right. What

457
00:31:07.480 --> 00:31:11.720
could what could be better? Go
wrong? Yeah? So as long as

458
00:31:11.799 --> 00:31:17.160
we're looking at things, I'm just
the podcasting listeners need to know that.

459
00:31:17.400 --> 00:31:19.519
I look to my right and I
see the Paramount Theater. Yeah, and

460
00:31:19.680 --> 00:31:26.079
like we're two sides of this room
are glass looking out at the wonder that

461
00:31:26.400 --> 00:31:30.960
is the gray weather of Sattle.
Yes, because they put the audio podcast

462
00:31:32.079 --> 00:31:37.920
in the room of the best Few. Yeah, Paramount looks great. Great,

463
00:31:37.960 --> 00:31:38.920
and one of my favorite shows.
Wait wait, don't tell me is

464
00:31:38.960 --> 00:31:44.359
coming there. Well, I know
it's a very good whiskey shop around the

465
00:31:44.400 --> 00:31:45.920
corner too. You know, we
could just blow off the rest of the

466
00:31:47.039 --> 00:31:49.640
Thursday and just you know, so
I could go wrong. Yeah, let's

467
00:31:49.680 --> 00:31:52.960
just walk out on their responsibilities.
Would be the first time. Oh wait,

468
00:31:53.359 --> 00:31:57.279
no, that's not true. I
probably would. We're pretty good.

469
00:31:57.480 --> 00:32:00.759
Did you get it? Are you
getting pushed back for the yearly cadence?

470
00:32:00.920 --> 00:32:06.039
Like? And then get we get
into the long term support versus the short

471
00:32:06.160 --> 00:32:08.880
term? Like, I know,
I know why we're doing this. I

472
00:32:09.079 --> 00:32:15.640
believe in the idea, but I
feel for the working developer whose I don't

473
00:32:15.680 --> 00:32:19.279
think culture is in a place where
it's like, we just use the new

474
00:32:19.359 --> 00:32:23.920
versions. We keep using new versions. Corporate Life says wants more stability than

475
00:32:23.960 --> 00:32:29.079
that. They're really not inclined to
change unless we really make them, and

476
00:32:29.200 --> 00:32:35.559
this seems somewhat arbiture. Three years
from now you need to switch. Well

477
00:32:35.680 --> 00:32:38.960
we I'm going to just I'm going
to totally do a dodge here. I

478
00:32:39.119 --> 00:32:45.240
appreciate that the dot net has this
release cadence and policy with the LTS and

479
00:32:45.400 --> 00:32:50.039
STS. From a language point of
view, that doesn't really matter. We

480
00:32:50.759 --> 00:32:54.680
ship the same roughly the same volume
of features, and you don't take features

481
00:32:54.680 --> 00:32:58.759
away. We don't take features away. It doesn't matter to us if it's

482
00:32:58.759 --> 00:33:02.759
an LTS TS release. It matters
to the support policy, which is other

483
00:33:02.839 --> 00:33:07.119
people than us generally have to kind
of live up to the support policy.

484
00:33:07.279 --> 00:33:13.200
Is there a minimum version of dot
net that thirteen will run on. Yes,

485
00:33:13.279 --> 00:33:19.000
and no, so's it's supported only
on the latest version. Yes.

486
00:33:19.759 --> 00:33:22.200
However, well, and the big
schism was the break for four point eight

487
00:33:22.240 --> 00:33:27.680
where you stopped him winning. You
see sharp features, well the old framework,

488
00:33:27.839 --> 00:33:30.599
Well, yeah, well again,
yes and no. So here's the

489
00:33:30.680 --> 00:33:36.160
story. There are new versions of
the runtime. It will have new APIs

490
00:33:36.200 --> 00:33:39.319
that the language may depend on for
certain features. It will have new runtime

491
00:33:39.400 --> 00:33:45.440
features in i L that the language
may depend on for some features. And

492
00:33:45.680 --> 00:33:49.599
if you try to target them older, well those features won't work, just

493
00:33:49.680 --> 00:33:53.079
break. But as long as you
then you get a nice message saying this

494
00:33:53.160 --> 00:33:57.720
is not supported on the runtime you're
targeting, and that's it. I would

495
00:33:57.720 --> 00:33:59.960
have been happy with an object now
found because that's so much fun to shay.

496
00:34:00.680 --> 00:34:05.640
Okay, if you know this is
we are so friendly now sorry,

497
00:34:06.079 --> 00:34:12.199
yeah, sorry, we so we
We don't really, we don't really try

498
00:34:12.239 --> 00:34:15.320
to trip you up there. You're
not just stopping anybody when you don't if

499
00:34:15.360 --> 00:34:20.559
you're in visual studio, I don't
think that that combination of like pull down

500
00:34:20.639 --> 00:34:22.960
menu shows up for you to mix
and match like that, because because you're

501
00:34:23.079 --> 00:34:27.400
entering on supported territories and we're like
you have to. But if you just

502
00:34:27.480 --> 00:34:30.239
go and edit your product file and
say I want to do this, and

503
00:34:30.400 --> 00:34:32.519
we're like fine, we'll tell you
when you catch you and we'll just generate

504
00:34:32.559 --> 00:34:35.880
the errors when the errors come.
And if you know what you're doing you

505
00:34:36.000 --> 00:34:37.440
can, you can get pretty far. I mean a lot of us,

506
00:34:37.920 --> 00:34:42.000
you know, are working on Roslin. We're working on projects like Razor.

507
00:34:42.079 --> 00:34:45.239
These are tooling projects, or visual
Studio, which still runs on dot net

508
00:34:45.280 --> 00:34:49.840
framework. And so if we want
to use new language features in our active

509
00:34:49.880 --> 00:34:52.880
development, then we need to have
some ways of kind of doing this,

510
00:34:52.960 --> 00:34:55.519
and you kind of have to like
you know, you wind up kind of

511
00:34:55.599 --> 00:35:00.400
like I think with a we've talked
about sometimes like a decoder ring sort of

512
00:35:00.480 --> 00:35:02.519
version half big version of the language
where it's like, well, I don't

513
00:35:02.559 --> 00:35:08.280
really have default interface methods from c
sharp eight because that requires a change in

514
00:35:08.320 --> 00:35:13.760
the run time to support that.
But I can get index system dot index

515
00:35:13.840 --> 00:35:16.360
and range, I can. I
can write those types myself, and c

516
00:35:16.519 --> 00:35:22.360
Sharp like the compiler generally goes along
by checking these API patterns and if they're

517
00:35:22.400 --> 00:35:24.719
there, yeah, they'll support it. Yeah that's crazy. So we do

518
00:35:24.840 --> 00:35:30.440
it. I mean, if a
feature is better implemented within your runtime feature,

519
00:35:30.960 --> 00:35:34.000
we will do that. Yeah,
we don't always you always target the

520
00:35:34.039 --> 00:35:37.440
best. We always do it.
We can if something is like that just

521
00:35:37.519 --> 00:35:39.360
has to happen in the runtime or
else it doesn't, we can't make it

522
00:35:39.480 --> 00:35:43.400
work. Or it will be very
inefficient or whatever, We'll do it and

523
00:35:43.480 --> 00:35:45.960
then sorry, that feature doesn't work
down level. But if it does work

524
00:35:46.000 --> 00:35:50.519
down level, who are we to
say and you can't do that? Can

525
00:35:50.559 --> 00:35:52.360
we stop you from doing We say
you're in a non supportive scenario. If

526
00:35:52.400 --> 00:35:55.360
you send us bugs based in this
will tell tell you stop that that is

527
00:35:57.119 --> 00:36:00.239
that's unsupported. Don't do that.
There's one thing that I forget, you

528
00:36:00.320 --> 00:36:04.679
know, sitting in my office and
building code all in the latest bits all

529
00:36:04.760 --> 00:36:07.039
the time, is that, you
know, people want to do weird things

530
00:36:07.559 --> 00:36:12.920
right because they are weird. And
and so I was. And here's a

531
00:36:12.960 --> 00:36:15.920
great example. I was teaching a
workshop at dev sum last week in Stockholm

532
00:36:16.400 --> 00:36:22.559
on Blazer and I'm talking about Blazer
web assembly where there's a hosted version on

533
00:36:22.639 --> 00:36:24.679
the server side and there's this on
the on the other side. And somebody

534
00:36:24.719 --> 00:36:30.480
said, could we run dot net
eight on the server and dot net seven

535
00:36:30.599 --> 00:36:34.280
on the client? And my immediate
reaction was like, you stupid idiots,

536
00:36:34.320 --> 00:36:38.639
why would you do that? Right? And then I'm talking to Steve Sanderson

537
00:36:38.760 --> 00:36:43.159
like down at the bar, and
he goes, why not, Yeah,

538
00:36:43.440 --> 00:36:46.440
yeah, he goes, why wouldn't
you Why stop that? Why yeah,

539
00:36:46.559 --> 00:36:52.159
why stop the Why tell that person
no that? Why prescribe right right exactly?

540
00:36:52.280 --> 00:36:55.800
Because maybe those are the constraints that
they're using. But the fact is,

541
00:36:57.039 --> 00:36:59.840
yeah, that'll work just fine.
I mean, and sometimes it's it's

542
00:37:00.000 --> 00:37:02.440
some of our you know, largest
customers, some of our biggest dott neet

543
00:37:02.480 --> 00:37:07.039
lovers that have to stay back yeah
a while, right, they can't go

544
00:37:07.239 --> 00:37:10.159
forging ahead, They're not nimble enough
or whatever. So it's yeah, in

545
00:37:10.239 --> 00:37:15.079
those cases sometimes you know, and
guess what they can squeak by done.

546
00:37:15.119 --> 00:37:16.920
That's pretty good. It lasts for
a long time. Yeah, yeah,

547
00:37:17.199 --> 00:37:22.480
s's it's legit. Is there an
end to this? Like how many language

548
00:37:22.480 --> 00:37:24.239
features do we need? What that's
they're gonna say, ah, we're done.

549
00:37:24.320 --> 00:37:28.239
Yeah, yeah, no, you
gotta romantic to fifteen and then you're

550
00:37:28.239 --> 00:37:30.320
gonna retire. We're going to move
to D now. I forget sharp.

551
00:37:30.440 --> 00:37:37.000
I remember when I was new at
Microsoft, one of the first PDC's I

552
00:37:37.079 --> 00:37:39.840
went to when andrews. Heilsberg was
still in charge of Sea sharp right,

553
00:37:40.039 --> 00:37:43.920
and I got to tag along with
him to an interview like this. It

554
00:37:44.000 --> 00:37:45.800
was probably like two thousand and six, right, something like that, And

555
00:37:46.320 --> 00:37:49.320
I don't think it was you,
but it could have been. Yeah,

556
00:37:49.360 --> 00:37:52.960
probably, and somebody. We were
there and somebody they asked the question like,

557
00:37:53.559 --> 00:37:57.400
can you keep at this? And
Anders was like, hmm, not

558
00:37:57.559 --> 00:38:00.480
forever. I mean we probably have
one or two good versions left in US

559
00:38:00.639 --> 00:38:07.079
and we're talking like version three.
Yeah, And it just turned out that,

560
00:38:07.559 --> 00:38:12.840
hey, this isn't so bad.
You know, you imagine this kitchen

561
00:38:13.000 --> 00:38:17.920
sink train wreck situation if you keep
adding stuff. But somehow, somehow we've

562
00:38:19.719 --> 00:38:23.880
managed it. Seems we managed it
pretty well to keep adding things to the

563
00:38:24.000 --> 00:38:30.400
language that somehow makes life simpler for
development, right, more complicated. I

564
00:38:30.480 --> 00:38:34.800
think we we we focus a lot
in this release. We've been talking about

565
00:38:34.840 --> 00:38:37.760
a lot, right, We focus
a lot on you know, adding features

566
00:38:38.039 --> 00:38:44.639
or expanding features that you already use, taking out roadblocks that you would hit

567
00:38:44.760 --> 00:38:50.280
with an existing feature, and really
kind of making it so that because it's

568
00:38:50.400 --> 00:38:55.800
true that languages do have like a
capacity right for like big ideas, right,

569
00:38:55.920 --> 00:39:00.639
and you only get so many big
ideas, and so we spend a

570
00:39:00.679 --> 00:39:07.199
lot of time investing in features that
maybe aren't giant ideas, right, but

571
00:39:07.400 --> 00:39:12.679
they are like they expand your expressiveness
how you can work with existing API.

572
00:39:12.840 --> 00:39:15.599
So often we get things that are
like requests from you know, Stephen Tobe

573
00:39:15.639 --> 00:39:17.760
and his team, you know,
on the fromt the library's team saying we're

574
00:39:17.760 --> 00:39:22.400
building APIs like this or Fowler David
Fowler, like the minimal API stuff with

575
00:39:22.519 --> 00:39:27.719
Sofia right where it was like,
we need to write code like this,

576
00:39:28.039 --> 00:39:31.559
we need this kind of expressiveness out
of C sharp, and it causes us

577
00:39:31.599 --> 00:39:35.199
to kind of just take a look
at the features we already haven't say well,

578
00:39:35.239 --> 00:39:38.119
how can we make those better?
And they sound like big features,

579
00:39:38.159 --> 00:39:42.519
but they end up being kind of
you know, adjustments to to things that

580
00:39:42.679 --> 00:39:45.039
just make things kind of more satisfying
to use. Do you guys usually start

581
00:39:45.119 --> 00:39:52.719
with extension methods in terms of experimenting
with new features. No, no,

582
00:39:52.960 --> 00:39:55.920
think so. I don't think so
No, I in what way do you

583
00:39:57.000 --> 00:39:58.920
mean? Well? Okay, so, like let's say you want to add

584
00:39:59.000 --> 00:40:01.840
something new to string, I mean
canonical example, right, so you do

585
00:40:01.920 --> 00:40:07.199
a string extension library and just add
your there. Yes, I think that,

586
00:40:07.639 --> 00:40:12.679
but that's more like the library people. And certainly when people are prototyping

587
00:40:13.159 --> 00:40:16.000
should I put this new member or
these new members on an existing type,

588
00:40:16.039 --> 00:40:21.119
they will start out with extension methods
if they happen to be instance methods or

589
00:40:21.400 --> 00:40:23.920
if not, well, up until
C sharp thirteen they wouldn't have been able

590
00:40:23.960 --> 00:40:27.800
to. But now, of course
they can just be able to. Soon

591
00:40:27.960 --> 00:40:30.920
do tell. I mean, they'll
be able to add extension properties or extension

592
00:40:30.960 --> 00:40:36.519
index ers, static this or that, or operators and that's new and thirteen

593
00:40:37.639 --> 00:40:39.920
extension everything. Yeah, somebody will
come in because this is one of those

594
00:40:39.960 --> 00:40:44.039
down payments, right, Well,
there'll be extension, some new things,

595
00:40:44.079 --> 00:40:47.360
and then we'll probably keep adding stension, more things and extension all like that

596
00:40:47.519 --> 00:40:52.480
idea. Yeah, well, I
mean, and again we go back to

597
00:40:52.599 --> 00:40:58.480
a show the pivot to Core and
see I think with C sharp six,

598
00:40:58.519 --> 00:41:01.639
where if they said to you,
this feels like the Cambrian explosion, Like

599
00:41:01.760 --> 00:41:07.880
you've now setting yourselves up for all
these extension approaches to allow many people,

600
00:41:07.079 --> 00:41:10.920
including folks inside of Microsoft, to
extend the language the way they want to

601
00:41:12.320 --> 00:41:16.320
and see how that resonates and decide
what becomes more than an extension. Yeah,

602
00:41:16.360 --> 00:41:20.480
I think I asked you this last
time we talked. But are there

603
00:41:20.519 --> 00:41:25.239
any features that, after implementing,
you regretted adding because they've been abused or

604
00:41:25.400 --> 00:41:30.880
used wrongly? Hmmm I mean,
I know there's some that we added and

605
00:41:30.039 --> 00:41:36.840
then decided not to keep as good. That was during the cycle that we're

606
00:41:36.840 --> 00:41:40.159
out there in preview. That's that
leaps to mind, and that's a good

607
00:41:40.199 --> 00:41:44.079
thing. You put it out there. You watch what happened with you go,

608
00:41:44.760 --> 00:41:46.719
that's not right. But there are
dangerous features like new you know,

609
00:41:46.880 --> 00:41:52.920
to create new versions of methods that
are I guess it was shadows and VB

610
00:41:52.159 --> 00:41:55.159
right, where you have one class
and then in a subclass and you can

611
00:41:55.280 --> 00:42:00.679
just take over that whatever that method
is or that property handler. I've seen

612
00:42:00.719 --> 00:42:04.639
that abused. Yeah, and then
you lose track and lose control of your

613
00:42:05.639 --> 00:42:09.159
of your code. There's a difference
between a feature can be abused and then

614
00:42:09.400 --> 00:42:13.480
I wish we hadn't done it.
Okay, Yeah, that's a good point.

615
00:42:13.599 --> 00:42:15.559
I mean, they might be that
their feature by and large is a

616
00:42:15.599 --> 00:42:19.440
great feature and adding a lot of
value. And yes, here and there

617
00:42:19.480 --> 00:42:23.000
people also abusing Harry carrying kit for
twelve year olds or for example. But

618
00:42:23.119 --> 00:42:27.719
any powerful language has that shoot your
toe off effect, Like that's sort of

619
00:42:27.760 --> 00:42:30.280
a measure. It's not a real
language, and you can't blow your toe

620
00:42:30.320 --> 00:42:31.920
off, all right, So let's
forget about bad. Yes, there's like

621
00:42:32.000 --> 00:42:37.440
the language features that I wouldn't say
I completely regret them, but maybe they

622
00:42:37.480 --> 00:42:40.920
didn't have the impact they thought they'd
bigger. And because now you have you

623
00:42:42.079 --> 00:42:46.119
have a measure that we don't know
of, which was effort. I imagine

624
00:42:46.239 --> 00:42:51.960
you worked really hard on certain features, absolutely, and the customer doesn't do

625
00:42:52.159 --> 00:42:54.199
what you thought. Take a feature
like dynamic, right, we can talk

626
00:42:54.239 --> 00:42:59.639
about dynamic. Sure. It was
a massive effort, and it was part

627
00:42:59.679 --> 00:43:02.960
of a it was part of a
future that never really fully came to,

628
00:43:05.760 --> 00:43:10.039
in which there was Python and Ruby
running on dot net and it and also

629
00:43:10.320 --> 00:43:14.880
in which people were using comments were
up much more than they ended up doing.

630
00:43:15.960 --> 00:43:22.320
And so all of this came together
into this beautiful feature that happens to

631
00:43:22.440 --> 00:43:30.840
be also you know, a big
performance bottleneg and a big tax on us

632
00:43:30.920 --> 00:43:36.440
forever more and so as abercoll,
it generated lots of bio. Yeah,

633
00:43:36.960 --> 00:43:40.639
and it became it became a it
became a hindrance for other directions we wanted

634
00:43:40.639 --> 00:43:45.199
to go. And when dot Native
was happening, it became a problem like

635
00:43:45.239 --> 00:43:49.840
how do we compile US native code? Because yeah, because it turns out

636
00:43:49.880 --> 00:43:53.960
that it's the impact it had was
Newton Soft Jason people people used it for

637
00:43:54.079 --> 00:43:59.199
Jason and uh, and so then
it wound up in a lot of apps.

638
00:43:59.760 --> 00:44:01.440
But in this you know, then
it'd liked me. It harder to

639
00:44:01.679 --> 00:44:05.320
compile than the native code and all
that sort, and you can't take it

640
00:44:05.400 --> 00:44:07.360
out. Yeah, no, but
correct. But I also want to point

641
00:44:07.400 --> 00:44:12.679
out, like, even even as
it has those drawbacks, and even as

642
00:44:13.039 --> 00:44:15.320
things didn't go the way we imagine
when we to sign it. You know,

643
00:44:15.400 --> 00:44:19.360
sometimes you see code where people using
you just like, yeah, all

644
00:44:19.480 --> 00:44:21.599
right, all right, okay,
I see that, now that's cool,

645
00:44:21.880 --> 00:44:25.360
you know, so it yeah,
it would we have done it that same

646
00:44:25.400 --> 00:44:29.239
way if we had known, Yeah, how the world would have gone?

647
00:44:29.320 --> 00:44:32.480
Probably not. Yeah, but it's
but that's not to say that I fully

648
00:44:32.559 --> 00:44:36.119
regretted either. I thought it was
a beautiful to sign. It was also

649
00:44:36.239 --> 00:44:40.960
in between two largely successful features,
between Link and ACYNC, between those those

650
00:44:42.079 --> 00:44:45.000
versions of the language, so you
know, we can kind of the middle

651
00:44:45.039 --> 00:44:47.880
sibling in that. Yeah, exactly. I've always paid attention to Iron Python

652
00:44:49.559 --> 00:44:52.639
and Iron Ruby wasn't around for near
as long, but you know, we

653
00:44:52.719 --> 00:44:54.559
had John Lamb on it, and
yeah, look, both those languages are

654
00:44:54.760 --> 00:44:59.480
enjoyable. I write more Python,
I care to admit, because I do

655
00:44:59.639 --> 00:45:01.480
a lot data handling, Like it's
just a big chunk of my life.

656
00:45:01.599 --> 00:45:05.800
And by golly, Python's flipping good
at that. And get Hub likes to

657
00:45:05.840 --> 00:45:10.599
remind me once a year you wrote
more Python than your thought. But yeah,

658
00:45:10.719 --> 00:45:14.360
you know, I remember dabbling and
Ruby going this is very cool.

659
00:45:14.440 --> 00:45:16.480
I do not need this. It's
not a thing for me. But it's

660
00:45:16.519 --> 00:45:22.159
not just a dynamic ness I think. I mean, Python nails a few

661
00:45:22.199 --> 00:45:24.480
other things really well. One of
course is it's always had this alignment with

662
00:45:24.639 --> 00:45:30.039
the numbers community, which has grown
up to be scientific and then machine learning

663
00:45:30.119 --> 00:45:35.239
and then AI and like it.
It was really good at at exploiting that

664
00:45:35.400 --> 00:45:43.800
affinity to to popularity there being really
easy to use for people aren't professional developers

665
00:45:43.880 --> 00:45:49.360
necessarily. But then also some things
are just really neat, and people have

666
00:45:49.440 --> 00:45:52.719
done a lot of hard work inside
of Python to make some things remarkably easy.

667
00:45:53.000 --> 00:45:57.000
Yeah, and we've and we've definitely
stolen from there. Like if you

668
00:45:57.039 --> 00:46:00.880
look at if you look at ind
index and rain, it was like it

669
00:46:00.039 --> 00:46:05.039
was nailed. Should this is so
cool in Python? Why is it so

670
00:46:05.119 --> 00:46:10.400
hard? And t sharp was Yeah, There was even a whole thing around

671
00:46:10.519 --> 00:46:14.760
the indexes where we wanted to do
the you know, index from the end

672
00:46:15.320 --> 00:46:17.320
of of of an array or something
like that, and we couldn't use the

673
00:46:17.360 --> 00:46:22.760
Python syntax because the Python syntexts use
negatives minus one. We're like, we

674
00:46:22.880 --> 00:46:25.159
can't do that. I remember the
meeting like, it was like but why.

675
00:46:25.280 --> 00:46:29.559
It was like, because that that
compiles and grows today and that would

676
00:46:29.559 --> 00:46:34.440
be a break and change at run
time for chaos chaos. So we ended

677
00:46:34.519 --> 00:46:37.880
up using the hat character for it. That was the only concession we made.

678
00:46:37.920 --> 00:46:39.880
We really strive. We were very
inspired by Python. And yeah,

679
00:46:40.400 --> 00:46:44.239
because because there's features in c sharp, they have gone everywhere, like I

680
00:46:44.320 --> 00:46:49.440
you think a weight gone every Yes, it is a better way to think

681
00:46:49.480 --> 00:46:55.599
about x ascretous execution. It just
is C plus plus. Guys adopted it,

682
00:46:55.760 --> 00:46:59.119
like what the what. Yeah,
we're pretty proud about it. You

683
00:46:59.199 --> 00:47:01.639
should be. That's the hell of
a thing. But it's like, yeah,

684
00:47:01.639 --> 00:47:06.000
and it's interesting thinking the terms of
when people have it right, copy

685
00:47:06.079 --> 00:47:08.519
it. Yeah, I mean everybody's
happier and it's a compliment. Yeah,

686
00:47:08.880 --> 00:47:13.559
you got this right. This was
the right way, and so we should

687
00:47:13.639 --> 00:47:16.880
use it absolutely and we've done it. We've definitely just mentioned we've done our

688
00:47:16.960 --> 00:47:22.400
share of they being heavily inspired yea
and vice versa. You have inspired others.

689
00:47:22.440 --> 00:47:24.840
Absolutely, Yeah, we're all better
for it. Yeah, are we?

690
00:47:25.760 --> 00:47:29.920
Now? This angle of this is, are we converging in languages?

691
00:47:30.239 --> 00:47:36.519
I don't know. There seems to
be. There's definitely something happened where languages

692
00:47:36.599 --> 00:47:43.559
went from being very purely themselves to
all sort of going all going for the

693
00:47:43.719 --> 00:47:51.079
center and kind of slapping optic grind
and functional things together, simpler syntaxes,

694
00:47:51.199 --> 00:47:54.880
and where we all kind of there's
a WorldWind of borrowing from each other,

695
00:47:54.960 --> 00:48:00.719
where we all end up in sort
of like ant a pragmatic center. Yeah,

696
00:48:00.480 --> 00:48:04.920
the general purpose language is I also
think there's a cult of non general

697
00:48:04.920 --> 00:48:08.480
purpose line. Yes, yes,
there's only languages with a purpose, right

698
00:48:09.480 --> 00:48:13.159
or a goal. But even still
they'll be like you know, those of

699
00:48:13.159 --> 00:48:16.000
those languages will still a lot of
times bring some of these paradigms in because

700
00:48:16.000 --> 00:48:20.039
they're natural and they're proven. It's
been I mean, guys, it's been

701
00:48:20.400 --> 00:48:23.920
twenty years since we were like talking
about link and PC, right, so

702
00:48:25.199 --> 00:48:29.599
you know, and it's that's that
brought a lot of mainstream for at least

703
00:48:29.639 --> 00:48:31.199
for those that were had their eyes
on. Microsoft brought a lot of that

704
00:48:31.239 --> 00:48:34.320
functional stuff. I mean we talked
about it in the show over the time,

705
00:48:34.360 --> 00:48:39.159
but I watched the way F sharp
evolved and seeing sort of the concessions

706
00:48:39.239 --> 00:48:45.440
to practicality. It's the functional purity. I get it. Go live in

707
00:48:45.519 --> 00:48:51.559
haske Land, you know, practical
functionality. There's some concessions and F sharp

708
00:48:51.639 --> 00:48:54.320
struck that I thought. Yes,
it's still a very small part of the

709
00:48:54.440 --> 00:48:59.800
market. The F sharp enthusiasts are
enthusiastic. But that I think it's also

710
00:48:59.800 --> 00:49:02.000
a product of being a smaller club, is that those that are in it

711
00:49:02.079 --> 00:49:07.320
take it very seriously. It also
has a certain like it's it's very intellectually

712
00:49:07.360 --> 00:49:10.480
stimulating. Write codin right, and
so you're like, I'm doing really well.

713
00:49:12.039 --> 00:49:15.000
When you g get my head in
the functional space and I write a

714
00:49:15.119 --> 00:49:19.840
nice expressive, I am delighted.
It's like a factory. Man, I'm

715
00:49:19.920 --> 00:49:22.880
just fun. That's the way we
used to feel about C plus plus.

716
00:49:22.360 --> 00:49:28.320
Hey, I did it file and
it doesn't crash the machine for at least

717
00:49:28.360 --> 00:49:31.360
an hour. That is good.
I feel good. Hey, you know,

718
00:49:32.199 --> 00:49:35.920
write a good sequel expression is like
that too. When you can actually,

719
00:49:36.079 --> 00:49:38.199
you know, it's another kind of
functional mindset of here is a good

720
00:49:38.360 --> 00:49:43.239
efficient expression that gets as the precisely
the result we want and it's optimal,

721
00:49:43.360 --> 00:49:45.880
and you're like, yeah, this
thing just works. Yeah yeah. Before

722
00:49:45.960 --> 00:49:49.840
we hang up, I want to
go back to what we were talking about

723
00:49:49.840 --> 00:49:52.760
at the beginning of the show,
which is Ai, you just said something

724
00:49:52.840 --> 00:49:54.599
that made me reminded me of this. You know, when you write a

725
00:49:54.800 --> 00:50:00.880
good sequel expression, you write a
good function. Yeah, whatever language.

726
00:50:01.079 --> 00:50:06.800
Now we're having these tools do it
for us. So let's say you need

727
00:50:06.880 --> 00:50:10.719
it to hire a junior developer.
How are you going to know if they

728
00:50:10.800 --> 00:50:15.599
are if they're there GPT brain or
you know, copilot brain, or they

729
00:50:15.679 --> 00:50:22.639
can actually think in code and actually
reason through this stuff. Well or do

730
00:50:22.679 --> 00:50:29.480
you care? I do care because
I feel that if you're just doing that

731
00:50:30.079 --> 00:50:35.159
right, you're not using the tool. You're being used by the tool,

732
00:50:35.320 --> 00:50:39.159
right, you know, I don't
want that, right, Like when when

733
00:50:39.199 --> 00:50:43.599
I when new engineers, when new
engineers come to me, I want to

734
00:50:43.639 --> 00:50:45.800
know what their side projects are.
I want to know how much they love

735
00:50:46.519 --> 00:50:51.199
this work and uh, and that
speaks to me more than like and then

736
00:50:51.199 --> 00:50:55.239
if they're using AI. I'm pretty
confident that they're using it to be productive,

737
00:50:55.880 --> 00:51:00.360
but they're they're passionate about the space, they're passionate about software. That's

738
00:51:00.440 --> 00:51:02.559
That's how I've been collecting. I've
been talking to a lot of pms and

739
00:51:02.559 --> 00:51:07.039
collecting data around what after more than
a year, what get hep co pilot's

740
00:51:07.039 --> 00:51:10.199
been doing to check in patterns.
And one of the things that's really emerged

741
00:51:10.199 --> 00:51:16.639
from that is, uh, revert
within a few hours or almost nothing,

742
00:51:17.280 --> 00:51:21.960
like they pretty much the code is
correct. So it has changed because it

743
00:51:22.199 --> 00:51:25.239
is less iteration and major refactoring and
so forth. Like typically the code comes

744
00:51:25.320 --> 00:51:30.000
up pretty good and it stays or
they haven't thought about it enough and the

745
00:51:30.079 --> 00:51:34.000
come was completely wrong. Take it
out, start again, yea. And

746
00:51:34.119 --> 00:51:38.679
that seems like an interaction with like
an intern where it's like, oh,

747
00:51:38.800 --> 00:51:42.159
take a stab at this, let's
see where it goes. Oh okay,

748
00:51:42.199 --> 00:51:45.440
well that wasn't the right way,
Let's go try it again, as opposed

749
00:51:45.480 --> 00:51:47.480
to you know, iterate, iterate, iterate, iterating, Yeah, why

750
00:51:47.480 --> 00:51:51.360
do you think that is? Do
you feel like it's like it's not it's

751
00:51:51.400 --> 00:51:52.800
produced something that you're like, Okay, I don't want to refine this.

752
00:51:52.880 --> 00:51:55.159
I need to go back to the
drawing board. Yeah, well, I

753
00:51:55.239 --> 00:51:59.599
get the sense that this is you're
also watching the shape of people learning to

754
00:51:59.760 --> 00:52:01.960
work with this tool, and they're
asking you to do things they don't fully

755
00:52:02.079 --> 00:52:07.199
understand. When they do fully understand, it doesn't make it to the check

756
00:52:07.280 --> 00:52:10.320
in until it's right. But when
they don't fully understand their check it anyway,

757
00:52:10.320 --> 00:52:13.119
then they realize they're going a mistake. It went away. So my

758
00:52:13.239 --> 00:52:16.639
thinking now is a year from now
that pattern will change as those people get

759
00:52:16.719 --> 00:52:21.000
more experienced, there will be less
revert events. But at the moment where

760
00:52:21.079 --> 00:52:23.360
this like there's an argument and I
was talking to people, it is like

761
00:52:23.400 --> 00:52:27.719
this is not working. People reverting
code a lot, and I'm like,

762
00:52:27.800 --> 00:52:30.400
but then what happens, Well,
then they do it again and it goes

763
00:52:30.559 --> 00:52:35.360
and it goes better. It's like
interesting, So that's really cool observation,

764
00:52:35.920 --> 00:52:39.440
manifestation of the learnings. It's not
just is AI doing what it should as

765
00:52:39.480 --> 00:52:45.440
a tool, it's also us learning
to use it the way that it the

766
00:52:45.519 --> 00:52:47.440
way that it was actually going to
be good. Yeah that's what you want

767
00:52:47.480 --> 00:52:51.960
it to Yeah, interesting times,
Yes, it's very interesting. And guys,

768
00:52:52.000 --> 00:52:53.800
what's next? For you. I
know that C sharp thirteen is about

769
00:52:53.800 --> 00:52:59.199
after build. I bet November just
to guess what about after build? What

770
00:52:59.239 --> 00:53:02.199
are you going back to work on
besides Sea sharp thirteen? What's next besides

771
00:53:02.239 --> 00:53:07.599
Oh, personally, I'm very interested
in see sharp fourteen. If I didn't

772
00:53:07.599 --> 00:53:13.039
see that coming, right, let's
just knock that out of the part.

773
00:53:13.360 --> 00:53:16.519
You know, there are a few
So with the extensions work that's starting to

774
00:53:16.639 --> 00:53:22.159
roll out and see Sharp thirteen.
Hopefully that's like one of the big things

775
00:53:22.199 --> 00:53:24.960
that have been on the radar for
a long time that starts to come to

776
00:53:25.079 --> 00:53:29.280
freih So is it triage like this
isn't going to make it that will be

777
00:53:29.320 --> 00:53:32.559
fourteen. No, it's just fleshing
it out right and making sure that when

778
00:53:32.599 --> 00:53:39.519
we go so. But besides extensions, there are a few other things on

779
00:53:39.599 --> 00:53:45.440
the radar currently that will say are
like big, big feature areas that it

780
00:53:45.440 --> 00:53:47.440
would be really cool if we can
nail. From a design perspective. One

781
00:53:47.480 --> 00:53:52.000
of the ones that we get asked
about a lot is unions union types,

782
00:53:52.880 --> 00:53:57.400
and we are very actively looking at
that, but we still haven't reached a

783
00:53:57.440 --> 00:53:59.559
point where we can say, oh, this is how we're going to do

784
00:53:59.639 --> 00:54:07.000
it. There's sort of two competing
approaches out there in existing languages. That's

785
00:54:07.039 --> 00:54:14.280
discriminated unions and functional land that are
very sort of declared types and alternative to

786
00:54:14.559 --> 00:54:20.039
optagonoid inheritance almost. And then there's
union types in typescript, which are very

787
00:54:20.119 --> 00:54:25.480
much a different thing, much more
structural, lightweight thing, and both have

788
00:54:25.719 --> 00:54:30.920
really good arguments going for them.
They're also quite far apart. So when

789
00:54:31.000 --> 00:54:36.239
we say we would like to do
something with unions, what do we end

790
00:54:36.320 --> 00:54:39.079
up actually really needing on top of
what's already in C shark in order to

791
00:54:39.119 --> 00:54:43.920
give people your expressiveness. So that's
one that I hope to be able to

792
00:54:44.000 --> 00:54:49.119
devote more time and effort to.
Cool. Yeah, a few other things

793
00:54:49.199 --> 00:54:55.039
like that, how about you.
Well, since I write code instead of

794
00:54:55.079 --> 00:55:00.280
imagine code like maths, I'm kidding, Mads, I'm sorry. I like

795
00:55:00.360 --> 00:55:04.159
to take things apart and put them
back together a comeback right now. No,

796
00:55:04.280 --> 00:55:06.000
I know he is, he's going
to give it to me after the

797
00:55:06.039 --> 00:55:09.000
case. But I like to take
things apart and put them back together again.

798
00:55:09.039 --> 00:55:15.039
And so right now I am working
on that for Razor Tooling and Compiler.

799
00:55:15.199 --> 00:55:19.760
It's something that a lot of our
customers write a lot of a lot

800
00:55:19.800 --> 00:55:23.639
of a lot of razor and and
and it's also at the you know,

801
00:55:24.119 --> 00:55:28.960
forefront and importance of like things like
Blazer and some of the most important platforms.

802
00:55:29.039 --> 00:55:31.719
So I'm trying to get that tooling
stack with the help of some very

803
00:55:31.800 --> 00:55:37.239
smart people, they're trying to get
that really turned around into something that we

804
00:55:37.320 --> 00:55:39.800
can we can feel like is going
to be, you know, lightweight and

805
00:55:39.880 --> 00:55:44.119
successful. That's awesome. Yeah,
all right, guys, well I think

806
00:55:44.159 --> 00:55:46.159
that's it. Thanks very much,
and have a great rest of your time

807
00:55:46.239 --> 00:55:50.480
at build. Thank you very much. I always a pleasure, Yes,

808
00:55:50.599 --> 00:55:53.360
definitely for us too, and we'll
see you next time. A dot net

809
00:55:53.800 --> 00:56:19.679
rock. Dot net Rocks is brought
to you by Franklin's Net and produced by

810
00:56:19.800 --> 00:56:24.679
Pop Studios, a full service audio, video and post production facility located physically

811
00:56:24.800 --> 00:56:30.719
in New London, Connecticut, and
of course in the cloud online at pwop

812
00:56:30.960 --> 00:56:34.760
dot com. Visit our website at
d O T N E t R O

813
00:56:34.960 --> 00:56:39.199
c k S dot com for RSS
feeds, downloads, mobile apps, comments,

814
00:56:39.559 --> 00:56:44.639
and access to the full archives going
back to show number one, recorded

815
00:56:44.679 --> 00:56:47.599
in September two thousand and two,
and make sure you check out our sponsors.

816
00:56:47.760 --> 00:56:52.360
They keep us in business. Now
go write some code. See you

817
00:56:52.480 --> 00:57:02.360
next time. You got meddle Vans
and my bed is harder than my taxes

818
00:57:02.440 --> 00:57:05.119
in lie credit roll

