How'd you like to listen to dot NetRocks with no ads? Easy? Become
a patron For just five dollars a month, you get access to a private
RSS feed where all the shows have no ads. Twenty dollars a month will
get you that and a special dot NetRocks patron mug. Sign up now at
Patreon dot dot NetRocks dot com. Hey, Carl and Richard here with your
twenty twenty four NDC schedule. Will be at as many NDC conferences as possible
this year, and you should consider attending no matter what. Ndcoslow is happening
June tenth through the fourteenth. Get your tickets at ndcoslow dot com. The
Copenhagen Developers Festival happens August twenty sixth through the thirtieth. Early bird discount ends
April twenty sixth. Tickets at Cphdevfest dot com. Ndcporto is happening October fourteenth
through the eighteenth. The early bird discount ends June fourteenth. Tickets at Ndcporto
dot com. And we'll see you there, we hope. Hey, guess
what it's dot net rocks and guess where in Seattle that build? I'm Carl
Franklin. I'm Richard Gamble, and while we're here with a couple of C
Sharp legends, but we are in a podcast booth with some fabric walls,
no ceiling, and a whole bunch of other podcasters. Yeah, a few
other shows going at the moment that we're recording. Amanda Silvers in one room
and Marc Siavich is in another room. So it's quite an all star back
cast. And by room we mean polls with fabric stretched around. Yeah,
but we'll see what these headsets are good, So hopefully they cross talk is
not too bad. Yeah, hopefully. I mean, it feels like I'm
landing a plane. Well it's really belt for like the NFL. Yeah,
so you feel like you're planning a kickoff. So I'll be color here.
Can they do the play by play? All right? He's at the thirty,
he's at the forty. Yeah, he's stopping him now, Bob.
Last time I said this was in nineteen seventy four and the World Series against
it. I know who I'm talking about. All Right, anyway, let's
get started with better know a framework. Awesome, alight, man, what
do you got? I found this cool thing called Terminal dot Gooey. What
is terminal Terminal dot Gooey is a toolkit for building rich console apps for dot
net, dot net core and mono that works on Windows, the Mac,
and Linux or Unix. How about that? And by you know, it
looks just like you know, Norton Utilities from nineteen eighty three, oh man,
like the demo does, but it also has like Google asci art graphics
and things. It's really cool. So super old school though, that's awesome,
very old school. Well, you know that I think these things are
coming back, you know, yeah, they have been coming back for a
while. Everybody likes a command line, but yeah, if you can do
a text based gooey, then it's not as obnoxious as a mouse based guey.
I guess I suppose so. I mean, I kind of think that
these are more retro toys for people. Our age that you know, grew
make you feel better call you know when his command line would call ourselves a
green screen. You know, honestly, I remember when I got rid of
my Hercule Lee's graphics card and the world was all caller yeah in other top
days and cga c ga yeah, and g e ga e ga and hands
graphics adapter. Welcome to some old guys talk about old things that don't matter
anymore. There you go, all right? Anyway, that's what I got.
Tonald Duck Gooey and who's talking to us today? Drafted comment off a
show eighteen ninety eight, not that long ago. This is the one we
did with Sean Wildermouth back in May, because we're publishing this in June,
talking about being a senior software developer. Yeah, we kind of went back
and forth on this show because we did we have not a soft skills show
in a long time, and we weren't sure how this is going to come
out. But boy, we got a really strong reaction. And Sean wasn't
really sure. He pushed her too, right, He like, have I
ever done the right thing here? And it's like, let's see what the
listeners think, and the listeners seem I think we resonated with certain folks,
and one of them here is Rob Schroeder, who said, as a senior
dev who just ticked over into his fifties, this episode came at the right
time. It's good to hear that Shawn's experience in struggles mirror mine. Also,
I struggle to know where my career should go. Management hold zero appeal
to me. So I've been sort of peaked at the lead engineer level a
kid go into training. But despite thirty years under my belt, I still
feel like I don't know enough. Isn't that funny? And that's totally inside
of you, Rob, Like you know far more than you realize. If
you actually sit down and make a plan to teach people, you'll know what
to do. You know far more than you realize. What I still have
going for me is a willingness to learn new things and demonstrate how they could
be useful. Maybe if that goes, I will reevaluate the Yeah, if
you stop caring, then it's time to move on. As long as you
care, it's great. So Rob, thank you so much for your comment.
To copy music Coby is on its way to you, and if you'd
like a copy of music Koba, I write a comment on the website at
dot at Rocks dot com or on the Facebook so we publish every show there
and if you comment there and I read it in the show, we'll send
you copy music Go buy. You could also send us an X. It
just doesn't sound right, No, that's wrong. Let's just send me an
X. What does that mean? A kiss or huck? I can't remember
on the switch Send us a tweet. Of course, we've been on Twitter
forever, but you can also follow us on masdon where the cool kids are
hanging out. I'm at Carl Franklin at tech Hub dot social, and I'm
Rich Campbell at Mastered on dot social. Send us a two. That's another
way that you can get a copy of music to code buy. Here you
go. So let's bring on our guests. They've been on the show before.
They've been on many shows of their own talking about c sharp. Every
time there's a new C sharp version. You'll see them online doing videos.
It's Mad's Torgerson and Dustin Campbell. Let me read their bios. Mads Targusen
is the architec for the C sharp language at Microsoft and runs the C sharp
design meetings and Prior to joining Microsoft in two thousand and five, he was
an associate professor at University of RHUs and doing programming language research YEP and Dustin
Campbell is a principal software engineer on the dot Net Developer Experience Team, where
he currently works on the Razor C sharp and Visual Basic language experiences for visual
Studio. Passionate about coding productivity, Dustin's primary focus is on making dot net
tooling great and helping design the next version of c sharp. Is part of
the language design team. Prior to his current role, he spent several years
working as a program manager in the project called Rosalin maybe you've heard of it,
designing the next generation of the c sharp and VBID experiences. Dustin is
a programming nut. His favorite color is blue. Welcome back, guys.
Is any of that true? Some of that's true, Some of it is
true. What a luxury that we get to be sit together rather than the
usual of remote thing. Yeah, it's fun to be together and chat a
bit. This we we just went through the keynote of Build and it's all
copilot all the time. It's a a I like, where where's the pro
You guys have got to talk? What are you talking about? We're talking
about programming? Good, because that's a good thing of a bill to talk
about programming. Yeah, I mean, don't get me wrong. AI Copilot
it is really important. It's really taking off and it's getting into everything.
It is getting into the coding experience. Should you copilot like first people first
met copilot as part of a developer experience. That's where that kind of that's
what that's why so good Microsoft had come up with it was GitHub. Yeah,
well get hub. You know it's owned subsidiary, so we'll take that,
thank you very much. Yeah, but but it is really impacting the
developer experience very much, right, I use getthub copile internally. We were
we were in fact just using it. We were working on our talk and
it was filling in stuff for us, just the small things as we're and
it was actually you know, just filling out the boilerplate as we were writing
up demos. And I love that. Yeah, even on crazy brand new
sea sharp bits that nobody's seen yet. It was like, so when you
guys are working on like I mean, you're working on dot at nine right
now, so sharp thirteen, Yeah at thirteen, lucky number thirteen. Man.
Yeah, So the way that copilot works, it can actually understand the
new language features and you can see how it interacts with like that's almost a
way to look at how that feature surfaces, because it isn't a trained on
your reposts, I mean your personal repost like I can comment, you know,
list all of the connection strings that Matt's has put in his reposts,
and yeah, Matt Matt's posts all of his passwords. One that's how you
know works. You got to do it yourself and right a four loop to
print them out. There's a language feature for you. I mean, that's
been one of the interesting challenges for AI to get up to speed, right,
because the older the version of the language, the more code is already
out there in it new things. And that's some something we've gotten a lot
better at. Yeah, and I think there's a long ways to go,
too, right, because you know, the I guess the the best idea
that we have is like, let's let's, you know, try and make
the AI to produce code that is the latest and greatest, right, But
what if that doesn't mean anything to you yet? Right, right, Like
it introduces collection expressions, but you're still new in upper rays and C sharp
one O syntax, you know. And so I I like the idea that,
you know, if we can get AI to the place where it actually
it's almost as if you asked it a question and responded in your own voice,
where you just look at your code and produce code that is essentially look
at it, and it's friction free. You're comfortable in C sharp seven.
Yeah, so that's the code I'm going to spit out for you. Yeah.
I know, I'm on C sharp nine, I'm on C sharp thirteen,
whatever, whatever, But I haven't used any of those features yet,
and I really don't know what that does. Yeah. So yeah, but
this was a conversation we had ages ago about how were we going to manage
the fact that you maintain backward compatibility so all that out code always runs,
but still encourage people to use the new features. And you said tooling,
and this looks like tooling like that, this is the tool that. Well,
I'll spit you out your CE sharp seven. I'll say, hey,
would you let us see what this looks like in thirteen because you can do
it this way and it's maybe a little terser, a little clearer. You
know. All of those things seem to me to be really compelling for developers
to say, this still runs, but you could have it this way instead
and lead them to the path of using the new features. Yes, and
we do that often already, even without the use of copilot, without a
yeah, you just have has a lot of that coded in right. Yeah,
And the interesting is that how that interplay evolved between what co pilot feels
like suggesting based on it's on the model that it's right referring to virtually on
probability, yes, versus the deterministic but sort of needs to be hand rolled
a little more. Things that we also have built in sort of intelli sense
and telecode type technology, code fixes that suggest using new features and that kind
of thing. Yeah, I can tell you from experience that when I ask
chat GPT to write me a console app that does X, it creates a
main and a you know, a submain in the program and all that stuff,
whereas you guys have completely simplified that and yeah, so really even a
couple of versions ago. Yeah, it you know, it takes time to
get that stuff trained on, you know, even to have code out there.
Right, that's and that's that's that's writing that way or has best practices
and all that kind of thing. That in the perspective of gethub copilot,
where it's parsing public repositories, it's not only that you have to put the
feature out there so that somebody has to code against it enough times that it
rises in probability is a correct answer for a large language model. Yes,
so, and you said that you want it to be as natural as you
know, talking to somebody who's very much like yourself. Is there going to
be away soon or is there a way, you know, get hub co
pilot to say, you know, this is the version of C sharp language
that I want to use, and you should spit out everything like this.
I even want it to be more like it's it, you know, hand
in hand with some of the ID tooling that we have. If I can
get of us more than text, more than just code, give us some
semantics here, here's what I was trying to do. Yeah, And the
idea is like, you know, I've got the whole project here, I
know what's in there. Like they don't do that, but they do this,
you know, and it might be c sharp ten, but they might
be still using us. It might use a smattering of features and different things.
All right, So you don't want to you don't want to have to
tell the tool anything. It should read the code that's there and say,
hey, this is how you write your code. Let me write code like
this. Yes, yeah, absolutely, that's legit. Well you can say
that, let the version of c sharp that using that your cs prog file.
Right, But it's not there by default, right, not by default,
it's the it's the latest by default, And that might not be what
your program looks like. It also might be it might make a suggestion that
looks completely different than the code you're looking at, and so then there's friction
should I accept this suggestion or yeah, that kind of thing. So yeah,
I'd love it to just get friction free, to just kind of no
be able to speak in your language. Right. I've said this before that
you know, there are people who are kind of hesitant to trust AI.
But code is one of the places where it really shines because you can test
it immediately. You know, it's not like it's giving you a fact that
you are then going to regurgitate and you could look like a complete idiot or
or worse right, you're getting some code and it runs or it doesn't run.
The compiler has to say yeah, intelligence has to say yeah, of
course. There's these things called tests that some people's talk those tests that an
a I wrote for you first doing that, so I mean that's how they
get you. Yeah, yeah, first that generated code that didn't work then
I wrote test around it, so it passed anyway. But wouldn't it be
great though, if we could have tests for everything that AI outputs, you
know, just like everything that the large language model says. It's just it
sooner or later you you actually have to use your brain and your eyes to
look at it. Go is that a real test? Is that what we
want to validate? M But then it begs the question that, well,
if we need to be smarter than the AI, then what's the use of
an AI? Just type save key strokes? Yeah, it's productivity. It
saves time. Oh, I get it. It was a rhetorical question.
I say, I actually, and I actually turn it off a lot of
times. I have there's a button in the in visual studio where I can
turn it on and off. And I turned off a lot of the time
because when it makes a suggestion, I find my my my ADHD brain finds
myself staring at that code and trying to under stand what it's doing as opposed
to what I really wanted. Was like a blank slate, So I think
and start filling it out to fund them A very interesting definition. It's like
how many times do you want the blank slate versus the blank state is stopping
you. You get to that blank screen like I don't know what to do,
and describing it to the tool actually helps you know what to do.
What I do is I ask four comments. I ask a comment every line
of code, and they will do that to parse existing code. No,
no, no, when you when you want it to, let's say,
generate a method that does acts okay, and when in this generated code,
I want you to comment everyone, tell me what you're doing, help you
with parsing for understanding, and I'll do that. That's a great idea.
I am pentameter, I like I am acceptameter. I want you to comment
every line of code in rhyming couplets, write a sonnet. I know it's
just a machine, but it feels a little cruel. Actually, yeah,
I know. I know you want to say I'm sorry, but I'm sorry,
thank you to write, thank you very much. I used the iamic
Contemporary trip to to show people what overflowing the token buffer looked like, because
it was the first thing I said is everything you should say to me is
that I just keep asking it things and after a certain point when it overflowed,
that would stroll off and suddenly we drop and so it was just like
look this and here's this is also look what it said. It it got
weird because it had a portion of a set of tokens. This is older
versions stuff. But it was just like ways to remind people there's this is
software and it's not intelligent. So should we talk about c sharp? Oh
yeah, that's what what pardon there's this thing right now where every conversation degenerates
in just went straight there. Yeah, regenerate from that. So at first
to get it out of the way, move on. So what's new,
pussy cat? Hmm, you're making a new language, a new version of
the new version again. Yeah. Yeah, it happens every year. Now,
is that good? Yes? Not everybody thinks. So. I do
know that there's folks out there. We certainly get the emails of resolves like
so fast, so fast. He did look at me when he said that
too, Yes, I did, but it was not necessarily because it was
not to imply that you had a different opinion. More, I think that
the perception when when we come out every year, the perception of speed is
certainly different, right because the number of times you have to well you feel
you have to go and reorient yourself and figure out what's up now is you
know, more frequent, But I mean the PM in me and I know
that's a you know, out of style term, but the PM ME says
are we're building features that can ship in a year because that's what we have
for time. So that's that's one of the risks I feel that we're so
I don't feel that the overall velocity of c Sharp's evolution is actually higher.
I feel like we we ship deltas more often you get like the first down
payment on a feature that immediately gives you value, and then the next round.
So we did collection expressions for instance twelve. There'll be a few more
things based on that in thirteen and in fourteen, maybe in fifteen. So
at the end of all of that, you'll have the same amount of feature.
It will just have come out in increments in increments. It is,
And I also wonder if that helps people use it, because it's a small
step in each version. It possibly helps some people. And what it does
for us is it gives us feedback in between, so the feedback loop becomes
more fine grained. A lot of people we're using the first part, and
we're going to be like, oh, actually that direction we thought we were
going to take it in, We're going to take it over the webstead Yeah,
or between three possible things we could do with it next we'll find out
which one is the most important based on the scenario. So the feature we
did, that's kind of the poster show that was like C sharp nine,
we started doing records and then continue doing records in C sharp ten, Yeah,
and then continue doing records and C sharp them. But really it was
kind of a you know, when we first did it, it was a
question of like what did we need to do. What's the goal to make
sure that our future selves were equipped in order to do the next things,
whatever those might be, depending on what people really needed next. And you
said that there were features that you may have started, like in C sharp
nine that won't even come out until now. How many how many of those
are there that took four or five years to Yeah, So that's to the
other part of Richard's question is that we we try very hard not to limit
ourselves to bite sized features, because we do need to do big revolutionary things
in the language occasionally. Does that mean you pushed dark code out, like
code that's now in the system but generally not available to the user. As
if you're going that long on code, or does it stay in a brand,
you can go for it later, it can go for a don release.
It kind of depends, right. A good example is the generic math
stuff that shipped a couple of releases ago now, right, but that actually
shipped it is an experimental preview and like an SDK before that, because we
needed a couple of releases to deal to get the run time support to do
things like static abstract members on interfaces, which we did, which is a
whole thing. Is that just time to interact with the other teams, It's
it's it's it's bake right as well, to see if it's like okay,
is this hanging together? Does this actually meet the scenario? Let's get let's
get some people that are you know, kind of kind of front runners that
want to really play with this to try it out, and but we still
need to get it out there for them, and so we've shipped it as
with an experimental flag, right. Yeah. I mean, because what you
were describing with records is that you kept adding features to records over time that
was more like it was always But it's interesting to say, like you knew
where you wanted to go, or you thought you knew where you wanted to
go, and then you decomposed it of the steps you could fit into the
interval, and then at each interval the customer are pressed against it and maybe
changed it for you. Yes, well, Rosalind was like that wasn't It
took a few years to come in, so it was. And another example,
maybe the most extreme example in the language is pattern matching, which came
in and C sharp seven. Yeah, and it was the most basic of
things when you look back on it, but it introduced the notion of patterns,
and it unified switch statements and is expressions around this notion of patterns.
It had like that core. Oh here's we're turning a page. Here's a
whole new thing. But the new thing itself was kind of small. It
could do type tests and compared to constants, that was pretty much it pretty
much it. Yeah, But then from there we knew we had thought ahead
enough that we knew we had syntactic headroom to keep adding, and then it
was a question of rinse and repeat for release after release after release, we
had various forms of recursive patterns and list patterns and conditional patterns and all those
things that wasn't even the right order ranges and everything. Yeah, and it
just sometimes doing it that way really helps, just helps the feature get right.
You need to make sure that you think ahead enough that you haven't just
designed yourself into a dead end, right that the direction you want to go
now you can't go there right, right? But also, I mean how
much of the feedback influence you along that path too. It certainly it influenced
us both in terms of the couple of things we had thought about, which
is the next important thing we should get to in terms of priority. I
think you're doing it right if you push it out there and the thing they
ask for is the next thing you were planning to build. Yeah, yeah,
yeah. And then sometimes that's the thing we know that like, Okay,
this is the first bug that's going to get filed in this future,
right, we know that we know it's missing. And sometimes it's it's you
know, getting that signal from the customer and also coupling that with whatever resources
there are there's and so sometimes like, well we're not getting to that yet
because the person's over here working on those, they're clearly the good person to
go do that. Yeah. I think that's the thing that a lot of
folks struggle with, this is the reality that programmers aren't widgets. You can't
just plug them into any old thing. That there's definitely folks with minds well
suited to particular problem spaces, like this feature will be better if we wait
for that person to work on it. Yeah, they're passions to people.
People get passionate about. Like when we did records, the last feature to
go in I think was all the required members for properties, and that turned
out to be somebody who's just like, I am super passionate about this.
It is I feel that it's broken until we do this, And so they
went after it and it happened, yeah, and made it more Robust's Yeah,
accordingly, how much is discoverability a feature? Because I mean, you
guys are always adding things. What you can do with link now could be
a book. This thick. I mean, I got a foot between my
hands and I guess what I'm asking is do you get customers that say,
you know, it would be really great if ce Shark could do this,
And the answer is oh yeah, just do this sea shark can do that?
Do that? Yeah, that happens. And I mean there's discoverability just
in terms of sort of documentary how do I find out? But then there's
also then there's also literally like the discoverability feature of pressing dot and seeing what
you get up, like a feature we're going to be showing at the at
built here is about that as about actually adding discoverability to that of APIs as
you know, as part of your programming experience. But there is the there
is a question about we talked about before with AI, and the same goes
for things like stacko, like sites that give you answers to how do I
do this? They're lagging, right, They're like right, they'll give you
yesterday's best answer if you search, And so there's there's always a challenge of
how do we help people realize what is the best thing you can do today?
Right? Yeah? And to that end, what it really means is
the different ways that you can construct let's say a link statement. You know,
if you do something like with from you know, X, sequels parentheses
from blah blah blah in or if you just do list dot were like those
are two different ways to do sart of the same thing with two different syntax
trees. And so if you know how to do those and you're good on
the fundamentals, then when you press the dot, then you'll you'll find the
new stuff. Well, I think, and you bring up an interesting example
because the success of c sharp three to zeros extension methods, it's kind of
been through the roof over the last ten releases, and and you know,
it's much easier to press dot and discover the next thing I need to do
with those extension methods then to go, well, how did I do a
group by I don't remember what the syntax for that is in query expressions,
but I can sort it out when I press dot. And so that's actually
one of the main features we're looking at for c sharp thirteen that we're going
to show, which is you know, extensions that taking more than extension meta
methods, but you know, going further extension properties, being able to you
know, add extension static methods for a type you can I think you got
the slogan for c sharp thirteen just pressed dot, just pressed That's not bad
at all. But we've been talking about that is like, you know,
the discovernment. Yeah, that's fine, that's fine. I know what to
send you back. Yeah, okay, Yeah, dear idiot, I always
think of guitar strings or something. It's funny how much intelligence counts, like
just it's you. You try turning that off and work especially. Yeah,
I mean it's the power of you know, the popularity of type script is
really? Is that? Yeah? You know? Yeah, We've been using
very preliminary bits for our presentation here because what we are showing only ships in
another six months from now, right, So this is a rough version.
So occasionally, you know, thirteen thirteen. Occasionally the idea just goes blank
on us with these bits and you're back in the eighties. Yeah. Wow,
this is hard. I have to tie the whole name of this member
so many clicks, especially with the naming conventions we have. They really made
for completion, you know, yeah, or those times to be completed,
those awkward times when you write a comment that you think copal's going to pick
up on your presenter and nothing happens, and you're like hello, and if
they could speak, it would say shut up. I'm thinking I'm looking at
the c sharp blank getub in the milestones category and for it's like you know,
versions for ten and eleven and twelve and so forth, and needs more
work and backlog and working said and any time, and my favorite of all,
likely never. Yeah, it's very polite, don't get likely. You
could have just said no, or how about the standard Microsoft answer? Why
would you ever want to do that? Yeah, but you know it's not
it's actually not just about politeness. It's a little bit about mindset as well,
Like you want to keep an open mind. It's like, we can't
imagine that right now. Yeah, but who knows, like maybe in two
or three years, so ten that that's actually just maybe this was actually an
insight of sometime in the future, we're going to need this this as opposed
to that's just a crazy idea and we're going to likely never. Yeah,
so we and I'm only half joking, like we really do try to.
Yeah, you got to stay open. Yes, it's the only way to
thrive long term, right, Like is that maybe it will come back around,
it's not. It's a crazy idea only today right at this point in
time, likely not likely never. And with that, gentleman, I had
an interrupt for one moment for this very important message and we're back. It's
not that rocks, I'm mature. Well that's called Franklin. Yo. We're
here in a strange room called the Elliott Bay Room at the conventions that are
in Seattle for build sitting with our friends Mats and Dustin, talking a bit
about how c sharp gets built. Obviously new version coming and the very open
process of you know, it's you want to know what's coming in c sharp,
it's in the GitHub repository. You can pick up those bits and compile
them and play with your own version. If you hate yourself, you know,
like they have those choice you can very least read. Look, you
don't even have to hate yourself that much. You can go use a tool
that's not our tool. But there's there's a website called sharp lab todo where
you can go and play with the different branches. Yeah yeah, literally built
this thing and it's fantastic. It'll yeah yeah. So you literally can pick
a version of a beta version or alpha version of branch out of the rodul
and just go for it. The feature branch that is building let's say params
collections like that feature brand. You can just go and play with that and
see what the feature looks like, so this is built by the community.
Do you use it? We use it all the time, no kidding.
Yeah, that's cool, especially because the code that you write in there becomes
part of the r L, so you can just super easily just keep sending
share it around, share it. Watch this. This is not what we
planned. We do it all the time in the in the in the C
Sharp Language design meeting was like, how did what is that? What does
that? Nobody remembers, right, it's like, oh, just go somebody
writes it up in sharp labs. So here's what it does. Yeah,
somebody's eyes glazes over for a moment, you know, they're they're typing it
up and sharp lab. Right, see what use we actually do with that?
The sharp lab guys just got some serious free advertising the morning We love
you all, Yeah, from Microsoft. I don't think there's any money in
it for them, but they got the glory though. Definitely created a service.
It was a wonderful thing, makes a difference through Yeah, Andre Shecklin,
mind, yeah, sharp on GitHub. It's it's beautiful. It looks
right like soon did I see that? It's like, oh, I know
what to do with that? Off you go you know, you can take
her away, but yeah, you can pick the version. That's amazing.
Here's Richard Campbell playing with it live on radio. So that's right. What
could what could be better? Go wrong? Yeah? So as long as
we're looking at things, I'm just the podcasting listeners need to know that.
I look to my right and I see the Paramount Theater. Yeah, and
like we're two sides of this room are glass looking out at the wonder that
is the gray weather of Sattle. Yes, because they put the audio podcast
in the room of the best Few. Yeah, Paramount looks great. Great,
and one of my favorite shows. Wait wait, don't tell me is
coming there. Well, I know it's a very good whiskey shop around the
corner too. You know, we could just blow off the rest of the
Thursday and just you know, so I could go wrong. Yeah, let's
just walk out on their responsibilities. Would be the first time. Oh wait,
no, that's not true. I probably would. We're pretty good.
Did you get it? Are you getting pushed back for the yearly cadence?
Like? And then get we get into the long term support versus the short
term? Like, I know, I know why we're doing this. I
believe in the idea, but I feel for the working developer whose I don't
think culture is in a place where it's like, we just use the new
versions. We keep using new versions. Corporate Life says wants more stability than
that. They're really not inclined to change unless we really make them, and
this seems somewhat arbiture. Three years from now you need to switch. Well
we I'm going to just I'm going to totally do a dodge here. I
appreciate that the dot net has this release cadence and policy with the LTS and
STS. From a language point of view, that doesn't really matter. We
ship the same roughly the same volume of features, and you don't take features
away. We don't take features away. It doesn't matter to us if it's
an LTS TS release. It matters to the support policy, which is other
people than us generally have to kind of live up to the support policy.
Is there a minimum version of dot net that thirteen will run on. Yes,
and no, so's it's supported only on the latest version. Yes.
However, well, and the big schism was the break for four point eight
where you stopped him winning. You see sharp features, well the old framework,
Well, yeah, well again, yes and no. So here's the
story. There are new versions of the runtime. It will have new APIs
that the language may depend on for certain features. It will have new runtime
features in i L that the language may depend on for some features. And
if you try to target them older, well those features won't work, just
break. But as long as you then you get a nice message saying this
is not supported on the runtime you're targeting, and that's it. I would
have been happy with an object now found because that's so much fun to shay.
Okay, if you know this is we are so friendly now sorry,
yeah, sorry, we so we We don't really, we don't really try
to trip you up there. You're not just stopping anybody when you don't if
you're in visual studio, I don't think that that combination of like pull down
menu shows up for you to mix and match like that, because because you're
entering on supported territories and we're like you have to. But if you just
go and edit your product file and say I want to do this, and
we're like fine, we'll tell you when you catch you and we'll just generate
the errors when the errors come. And if you know what you're doing you
can, you can get pretty far. I mean a lot of us,
you know, are working on Roslin. We're working on projects like Razor.
These are tooling projects, or visual Studio, which still runs on dot net
framework. And so if we want to use new language features in our active
development, then we need to have some ways of kind of doing this,
and you kind of have to like you know, you wind up kind of
like I think with a we've talked about sometimes like a decoder ring sort of
version half big version of the language where it's like, well, I don't
really have default interface methods from c sharp eight because that requires a change in
the run time to support that. But I can get index system dot index
and range, I can. I can write those types myself, and c
Sharp like the compiler generally goes along by checking these API patterns and if they're
there, yeah, they'll support it. Yeah that's crazy. So we do
it. I mean, if a feature is better implemented within your runtime feature,
we will do that. Yeah, we don't always you always target the
best. We always do it. We can if something is like that just
has to happen in the runtime or else it doesn't, we can't make it
work. Or it will be very inefficient or whatever, We'll do it and
then sorry, that feature doesn't work down level. But if it does work
down level, who are we to say and you can't do that? Can
we stop you from doing We say you're in a non supportive scenario. If
you send us bugs based in this will tell tell you stop that that is
that's unsupported. Don't do that. There's one thing that I forget, you
know, sitting in my office and building code all in the latest bits all
the time, is that, you know, people want to do weird things
right because they are weird. And and so I was. And here's a
great example. I was teaching a workshop at dev sum last week in Stockholm
on Blazer and I'm talking about Blazer web assembly where there's a hosted version on
the server side and there's this on the on the other side. And somebody
said, could we run dot net eight on the server and dot net seven
on the client? And my immediate reaction was like, you stupid idiots,
why would you do that? Right? And then I'm talking to Steve Sanderson
like down at the bar, and he goes, why not, Yeah,
yeah, he goes, why wouldn't you Why stop that? Why yeah,
why stop the Why tell that person no that? Why prescribe right right exactly?
Because maybe those are the constraints that they're using. But the fact is,
yeah, that'll work just fine. I mean, and sometimes it's it's
some of our you know, largest customers, some of our biggest dott neet
lovers that have to stay back yeah a while, right, they can't go
forging ahead, They're not nimble enough or whatever. So it's yeah, in
those cases sometimes you know, and guess what they can squeak by done.
That's pretty good. It lasts for a long time. Yeah, yeah,
s's it's legit. Is there an end to this? Like how many language
features do we need? What that's they're gonna say, ah, we're done.
Yeah, yeah, no, you gotta romantic to fifteen and then you're
gonna retire. We're going to move to D now. I forget sharp.
I remember when I was new at Microsoft, one of the first PDC's I
went to when andrews. Heilsberg was still in charge of Sea sharp right,
and I got to tag along with him to an interview like this. It
was probably like two thousand and six, right, something like that, And
I don't think it was you, but it could have been. Yeah,
probably, and somebody. We were there and somebody they asked the question like,
can you keep at this? And Anders was like, hmm, not
forever. I mean we probably have one or two good versions left in US
and we're talking like version three. Yeah, And it just turned out that,
hey, this isn't so bad. You know, you imagine this kitchen
sink train wreck situation if you keep adding stuff. But somehow, somehow we've
managed it. Seems we managed it pretty well to keep adding things to the
language that somehow makes life simpler for development, right, more complicated. I
think we we we focus a lot in this release. We've been talking about
a lot, right, We focus a lot on you know, adding features
or expanding features that you already use, taking out roadblocks that you would hit
with an existing feature, and really kind of making it so that because it's
true that languages do have like a capacity right for like big ideas, right,
and you only get so many big ideas, and so we spend a
lot of time investing in features that maybe aren't giant ideas, right, but
they are like they expand your expressiveness how you can work with existing API.
So often we get things that are like requests from you know, Stephen Tobe
and his team, you know, on the fromt the library's team saying we're
building APIs like this or Fowler David Fowler, like the minimal API stuff with
Sofia right where it was like, we need to write code like this,
we need this kind of expressiveness out of C sharp, and it causes us
to kind of just take a look at the features we already haven't say well,
how can we make those better? And they sound like big features,
but they end up being kind of you know, adjustments to to things that
just make things kind of more satisfying to use. Do you guys usually start
with extension methods in terms of experimenting with new features. No, no,
think so. I don't think so No, I in what way do you
mean? Well? Okay, so, like let's say you want to add
something new to string, I mean canonical example, right, so you do
a string extension library and just add your there. Yes, I think that,
but that's more like the library people. And certainly when people are prototyping
should I put this new member or these new members on an existing type,
they will start out with extension methods if they happen to be instance methods or
if not, well, up until C sharp thirteen they wouldn't have been able
to. But now, of course they can just be able to. Soon
do tell. I mean, they'll be able to add extension properties or extension
index ers, static this or that, or operators and that's new and thirteen
extension everything. Yeah, somebody will come in because this is one of those
down payments, right, Well, there'll be extension, some new things,
and then we'll probably keep adding stension, more things and extension all like that
idea. Yeah, well, I mean, and again we go back to
a show the pivot to Core and see I think with C sharp six,
where if they said to you, this feels like the Cambrian explosion, Like
you've now setting yourselves up for all these extension approaches to allow many people,
including folks inside of Microsoft, to extend the language the way they want to
and see how that resonates and decide what becomes more than an extension. Yeah,
I think I asked you this last time we talked. But are there
any features that, after implementing, you regretted adding because they've been abused or
used wrongly? Hmmm I mean, I know there's some that we added and
then decided not to keep as good. That was during the cycle that we're
out there in preview. That's that leaps to mind, and that's a good
thing. You put it out there. You watch what happened with you go,
that's not right. But there are dangerous features like new you know,
to create new versions of methods that are I guess it was shadows and VB
right, where you have one class and then in a subclass and you can
just take over that whatever that method is or that property handler. I've seen
that abused. Yeah, and then you lose track and lose control of your
of your code. There's a difference between a feature can be abused and then
I wish we hadn't done it. Okay, Yeah, that's a good point.
I mean, they might be that their feature by and large is a
great feature and adding a lot of value. And yes, here and there
people also abusing Harry carrying kit for twelve year olds or for example. But
any powerful language has that shoot your toe off effect, Like that's sort of
a measure. It's not a real language, and you can't blow your toe
off, all right, So let's forget about bad. Yes, there's like
the language features that I wouldn't say I completely regret them, but maybe they
didn't have the impact they thought they'd bigger. And because now you have you
have a measure that we don't know of, which was effort. I imagine
you worked really hard on certain features, absolutely, and the customer doesn't do
what you thought. Take a feature like dynamic, right, we can talk
about dynamic. Sure. It was a massive effort, and it was part
of a it was part of a future that never really fully came to,
in which there was Python and Ruby running on dot net and it and also
in which people were using comments were up much more than they ended up doing.
And so all of this came together into this beautiful feature that happens to
be also you know, a big performance bottleneg and a big tax on us
forever more and so as abercoll, it generated lots of bio. Yeah,
and it became it became a it became a hindrance for other directions we wanted
to go. And when dot Native was happening, it became a problem like
how do we compile US native code? Because yeah, because it turns out
that it's the impact it had was Newton Soft Jason people people used it for
Jason and uh, and so then it wound up in a lot of apps.
But in this you know, then it'd liked me. It harder to
compile than the native code and all that sort, and you can't take it
out. Yeah, no, but correct. But I also want to point
out, like, even even as it has those drawbacks, and even as
things didn't go the way we imagine when we to sign it. You know,
sometimes you see code where people using you just like, yeah, all
right, all right, okay, I see that, now that's cool,
you know, so it yeah, it would we have done it that same
way if we had known, Yeah, how the world would have gone?
Probably not. Yeah, but it's but that's not to say that I fully
regretted either. I thought it was a beautiful to sign. It was also
in between two largely successful features, between Link and ACYNC, between those those
versions of the language, so you know, we can kind of the middle
sibling in that. Yeah, exactly. I've always paid attention to Iron Python
and Iron Ruby wasn't around for near as long, but you know, we
had John Lamb on it, and yeah, look, both those languages are
enjoyable. I write more Python, I care to admit, because I do
a lot data handling, Like it's just a big chunk of my life.
And by golly, Python's flipping good at that. And get Hub likes to
remind me once a year you wrote more Python than your thought. But yeah,
you know, I remember dabbling and Ruby going this is very cool.
I do not need this. It's not a thing for me. But it's
not just a dynamic ness I think. I mean, Python nails a few
other things really well. One of course is it's always had this alignment with
the numbers community, which has grown up to be scientific and then machine learning
and then AI and like it. It was really good at at exploiting that
affinity to to popularity there being really easy to use for people aren't professional developers
necessarily. But then also some things are just really neat, and people have
done a lot of hard work inside of Python to make some things remarkably easy.
Yeah, and we've and we've definitely stolen from there. Like if you
look at if you look at ind index and rain, it was like it
was nailed. Should this is so cool in Python? Why is it so
hard? And t sharp was Yeah, There was even a whole thing around
the indexes where we wanted to do the you know, index from the end
of of of an array or something like that, and we couldn't use the
Python syntax because the Python syntexts use negatives minus one. We're like, we
can't do that. I remember the meeting like, it was like but why.
It was like, because that that compiles and grows today and that would
be a break and change at run time for chaos chaos. So we ended
up using the hat character for it. That was the only concession we made.
We really strive. We were very inspired by Python. And yeah,
because because there's features in c sharp, they have gone everywhere, like I
you think a weight gone every Yes, it is a better way to think
about x ascretous execution. It just is C plus plus. Guys adopted it,
like what the what. Yeah, we're pretty proud about it. You
should be. That's the hell of a thing. But it's like, yeah,
and it's interesting thinking the terms of when people have it right, copy
it. Yeah, I mean everybody's happier and it's a compliment. Yeah,
you got this right. This was the right way, and so we should
use it absolutely and we've done it. We've definitely just mentioned we've done our
share of they being heavily inspired yea and vice versa. You have inspired others.
Absolutely, Yeah, we're all better for it. Yeah, are we?
Now? This angle of this is, are we converging in languages?
I don't know. There seems to be. There's definitely something happened where languages
went from being very purely themselves to all sort of going all going for the
center and kind of slapping optic grind and functional things together, simpler syntaxes,
and where we all kind of there's a WorldWind of borrowing from each other,
where we all end up in sort of like ant a pragmatic center. Yeah,
the general purpose language is I also think there's a cult of non general
purpose line. Yes, yes, there's only languages with a purpose, right
or a goal. But even still they'll be like you know, those of
those languages will still a lot of times bring some of these paradigms in because
they're natural and they're proven. It's been I mean, guys, it's been
twenty years since we were like talking about link and PC, right, so
you know, and it's that's that brought a lot of mainstream for at least
for those that were had their eyes on. Microsoft brought a lot of that
functional stuff. I mean we talked about it in the show over the time,
but I watched the way F sharp evolved and seeing sort of the concessions
to practicality. It's the functional purity. I get it. Go live in
haske Land, you know, practical functionality. There's some concessions and F sharp
struck that I thought. Yes, it's still a very small part of the
market. The F sharp enthusiasts are enthusiastic. But that I think it's also
a product of being a smaller club, is that those that are in it
take it very seriously. It also has a certain like it's it's very intellectually
stimulating. Write codin right, and so you're like, I'm doing really well.
When you g get my head in the functional space and I write a
nice expressive, I am delighted. It's like a factory. Man, I'm
just fun. That's the way we used to feel about C plus plus.
Hey, I did it file and it doesn't crash the machine for at least
an hour. That is good. I feel good. Hey, you know,
write a good sequel expression is like that too. When you can actually,
you know, it's another kind of functional mindset of here is a good
efficient expression that gets as the precisely the result we want and it's optimal,
and you're like, yeah, this thing just works. Yeah yeah. Before
we hang up, I want to go back to what we were talking about
at the beginning of the show, which is Ai, you just said something
that made me reminded me of this. You know, when you write a
good sequel expression, you write a good function. Yeah, whatever language.
Now we're having these tools do it for us. So let's say you need
it to hire a junior developer. How are you going to know if they
are if they're there GPT brain or you know, copilot brain, or they
can actually think in code and actually reason through this stuff. Well or do
you care? I do care because I feel that if you're just doing that
right, you're not using the tool. You're being used by the tool,
right, you know, I don't want that, right, Like when when
I when new engineers, when new engineers come to me, I want to
know what their side projects are. I want to know how much they love
this work and uh, and that speaks to me more than like and then
if they're using AI. I'm pretty confident that they're using it to be productive,
but they're they're passionate about the space, they're passionate about software. That's
That's how I've been collecting. I've been talking to a lot of pms and
collecting data around what after more than a year, what get hep co pilot's
been doing to check in patterns. And one of the things that's really emerged
from that is, uh, revert within a few hours or almost nothing,
like they pretty much the code is correct. So it has changed because it
is less iteration and major refactoring and so forth. Like typically the code comes
up pretty good and it stays or they haven't thought about it enough and the
come was completely wrong. Take it out, start again, yea. And
that seems like an interaction with like an intern where it's like, oh,
take a stab at this, let's see where it goes. Oh okay,
well that wasn't the right way, Let's go try it again, as opposed
to you know, iterate, iterate, iterate, iterating, Yeah, why
do you think that is? Do you feel like it's like it's not it's
produced something that you're like, Okay, I don't want to refine this.
I need to go back to the drawing board. Yeah, well, I
get the sense that this is you're also watching the shape of people learning to
work with this tool, and they're asking you to do things they don't fully
understand. When they do fully understand, it doesn't make it to the check
in until it's right. But when they don't fully understand their check it anyway,
then they realize they're going a mistake. It went away. So my
thinking now is a year from now that pattern will change as those people get
more experienced, there will be less revert events. But at the moment where
this like there's an argument and I was talking to people, it is like
this is not working. People reverting code a lot, and I'm like,
but then what happens, Well, then they do it again and it goes
and it goes better. It's like interesting, So that's really cool observation,
manifestation of the learnings. It's not just is AI doing what it should as
a tool, it's also us learning to use it the way that it the
way that it was actually going to be good. Yeah that's what you want
it to Yeah, interesting times, Yes, it's very interesting. And guys,
what's next? For you. I know that C sharp thirteen is about
after build. I bet November just to guess what about after build? What
are you going back to work on besides Sea sharp thirteen? What's next besides
Oh, personally, I'm very interested in see sharp fourteen. If I didn't
see that coming, right, let's just knock that out of the part.
You know, there are a few So with the extensions work that's starting to
roll out and see Sharp thirteen. Hopefully that's like one of the big things
that have been on the radar for a long time that starts to come to
freih So is it triage like this isn't going to make it that will be
fourteen. No, it's just fleshing it out right and making sure that when
we go so. But besides extensions, there are a few other things on
the radar currently that will say are like big, big feature areas that it
would be really cool if we can nail. From a design perspective. One
of the ones that we get asked about a lot is unions union types,
and we are very actively looking at that, but we still haven't reached a
point where we can say, oh, this is how we're going to do
it. There's sort of two competing approaches out there in existing languages. That's
discriminated unions and functional land that are very sort of declared types and alternative to
optagonoid inheritance almost. And then there's union types in typescript, which are very
much a different thing, much more structural, lightweight thing, and both have
really good arguments going for them. They're also quite far apart. So when
we say we would like to do something with unions, what do we end
up actually really needing on top of what's already in C shark in order to
give people your expressiveness. So that's one that I hope to be able to
devote more time and effort to. Cool. Yeah, a few other things
like that, how about you. Well, since I write code instead of
imagine code like maths, I'm kidding, Mads, I'm sorry. I like
to take things apart and put them back together a comeback right now. No,
I know he is, he's going to give it to me after the
case. But I like to take things apart and put them back together again.
And so right now I am working on that for Razor Tooling and Compiler.
It's something that a lot of our customers write a lot of a lot
of a lot of razor and and and it's also at the you know,
forefront and importance of like things like Blazer and some of the most important platforms.
So I'm trying to get that tooling stack with the help of some very
smart people, they're trying to get that really turned around into something that we
can we can feel like is going to be, you know, lightweight and
successful. That's awesome. Yeah, all right, guys, well I think
that's it. Thanks very much, and have a great rest of your time
at build. Thank you very much. I always a pleasure, Yes,
definitely for us too, and we'll see you next time. A dot net
rock. Dot net Rocks is brought to you by Franklin's Net and produced by
Pop Studios, a full service audio, video and post production facility located physically
in New London, Connecticut, and of course in the cloud online at pwop
dot com. Visit our website at d O T N E t R O
c k S dot com for RSS feeds, downloads, mobile apps, comments,
and access to the full archives going back to show number one, recorded
in September two thousand and two, and make sure you check out our sponsors.
They keep us in business. Now go write some code. See you
next time. You got meddle Vans and my bed is harder than my taxes
in lie credit roll