Building C# with Mads Torgerson and Dustin Campbell - podcast episode cover

Building C# with Mads Torgerson and Dustin Campbell

Jun 06, 202457 min
--:--
--:--
Download Metacast podcast app
Listen to this episode in Metacast mobile app
Don't just listen to podcasts. Learn from them with transcripts, summaries, and chapters for every episode. Skim, search, and bookmark insights. Learn more

Episode description

Chatting with the leaders of C#! While at Build in Seattle, Carl and Richard sat down with Mads Torgersen and Dustin Campbell to discuss how C# continues evolving into version 13! With new versions coming every year, Mads talks about how complex features can be developed over several versions of the language - while also being able to get feedback from regular developers. So, what comes next for C#? Have a listen!

Transcript

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

Transcript source: Provided by creator in RSS feed: download file
For the best experience, listen in Metacast app for iOS or Android