Home .NET John Skeet on .NET in 2020: “My main complaint is versioning.

John Skeet on .NET in 2020: “My main complaint is versioning.

by admin

John Skeet on .NET in 2020: "My main complaint is versioning.
Present John Skeet not really needed : the most famous user of Stack Overflow(with over a million karma), author of "C# in Depth" , creator of the library Noda Time and generally the person about whom joke "even John Skeet couldn’t have rasped HTML with regulars."
In 2017, John spoke At our DotNext.Then we published a big interview with him about the state of affairs in .NET and C#, with buzzwords like "will squeeze Java" and lively discussions in the comments.
In the past three years, a lot of RAM has leaked out. So now that John will be giving two presentations at the online DotNext , we decided to ask him similar questions to see how the answers changed.
And as a bonus, we added to the post another little conversation with Skeet from the online broadcast of DotNext 2017 Piter: then it was seen only by the viewers of the broadcast, but now the readers of the habradery get both video and text transcripts.

New interview : how 2020 relates to 2017

NET in general

– In 2017, you were very optimistic about the prospects for .NET, expecting it to grow in popularity. And now how do you assess the popularity : has it exceeded your expectations or has it failed to meet them?
– Unfortunately, I don’t have enough evidence one way or the other. I think it still needs to be communicated to people that .NET is now cross-platform. In addition, in September 2020, very careful communication will be required when they stop using the .NET Core brand and just leave .NET 5. When you try to simplify things with two names to one, but it is one name in some sense new, it is always hard to get clarity for everyone. But I think it’s the right move, and it will do some good in the end.
– In 2017, because of .NET Core, the entire .NET world was in a state of transition. And now that the dust has settled, how do you see the current state of the ecosystem?
– It’s in great shape, with a bright future. Microsoft has made the migration from the .NET Framework to .NET Core as straightforward as could be hoped, especially with things like WinForms and WPF running on .NET Core 3. If you still have "old-mode" project files, now is a good time to migrate to "SDK-style"…it’s that much nicer!
Also making life easier are little things like reference assemblies, which allow you to build projects to run on the .NET Framework, even if you’re building on Linux.
– Are there any difficulties or flaws in .NET Core that have not been fixed in these three years?
– Versioning. This is my main beef with .NET right now, as readers of my blog already know. It’s not that Microsoft doesn’t recognize the problem, but rather that such a thing is very difficult to fix, especially on a platform like .NET with its static typing. Hopefully, in the next couple of years, we will at least get some tulings that warn us of the problems ahead of time.

Just about versioning will be one of John’s two talks at DotNext: Versioning, and how it makes my head hurt

– Now what do you expect from the future? What will happen to .NET in the next three years? We’ll see in 2023 🙂
– .NET 5 will be a big step in the sense of overlapping rantimes. That said, I’m sure it will take us a long time to get used to some of the extra options related to AOT compilation and others.
I think there’s a delicate balance that Microsoft and everyone who makes rantimes needs to realize: some people are hungry for new features, while others want relative stability in development.

New versions of C#

In 2017, John was eager to share his thoughts on C# 7 with us. So now that it’s been three years, questions about new versions of the language were clearly in order.
– Last time you told us that you were deep into C# 7, working on a new edition of C# in Depth. And to what extent are you dealing with C# 8 and are you planning another edition of the book?
– I should definitely be taking on the new edition of "C# in Depth" soon, which will cover C# 8. And given how much time it takes to work on each edition, it will come down to C# 9.
I’ve been using C# 8 for a long time, both for personal projects and for work. Not all of the features I use – some things like default interface methods have runtime requirements, which I can’t use with libraries targeting older versions of .NET Framework and .NET Core. But what I use, I like 🙂
– Do you have a favorite feature in C# 8?
– Of course, the most massive feature is nullable reference type support, and it’s insanely useful. But it has a disadvantage: migrating a project to it can be a very big task. Another of my favorite features, switch expressions, looks different in comparison. They do not change the generated code in any way, but simply allow to express the existing functionality in a much easier way. I can’t tell you how many times I’ve worked on code from "pre-C# 8" times, and I’ve just been itching to use switch expressions…
– What do you think of C# 8 in general? Is it exactly what the developers needed, or would you have done things differently if you were Microsoft?
– As someone who has given several presentations on this version, I wish it had fewer features! It’s just impossible to cover them all in any depth in the course of one presentation, even a long one. But on the whole, I really like it.
There are some "rough edges" associated with nullable reference types, but they don’t mean that I could suggest anything better – just that there is a "mismatch" between nullable reference types and things we could have expressed before. What is especially true for generics : it is a matter of working with what we have, and accepting that language evolves. It does not always end up being what it would have been if all the requirements (and resources) were already in place at the start.
– If you are following the work on C# 9, do you think anything about it?
– To be honest, I don’t follow any of the details. I hope that the record types will eventually emerge from the difficult decisions the team has to make right now.

Stack Overflow

In 2017, John mentioned that he was concerned about the quality of the questions on SO: as the site grew in popularity, questions consisting of a canvass of code with a "why it doesn’t work" attribute began to appear.
– How has the quality of issues changed in three years? Has it gotten better or worse?
– Honestly, it feels the same. Maybe it got a little better, it’s hard to give an objective answer here (it suggests that no drastic changes have occurred)… At least in the tags I follow.
– Something changes over time, both on the site itself and in the community that has developed there. What seems like an important change to you?
– I think the relationship between the community/moderators and the company has changed in an awkward way. The company is now trying very hard to fix that relationship, but it will take a lot of work and empathy on both sides.
To be honest, I haven’t noticed much change on the site itself. But I do know that there have been (and still are) experiments with the Ask a Question page, and that’s a good thing. Anything we can do to improve the quality of questions without scaring newbies is a good thing. Speaking of newbies, I think the "X is a new contributor to this site" badge is a nice touch, too.
– There is a problem when an answer is already out of date, but it is marked as correct by the author of the question, and new users get to it. Does this problem become more acute over the years as more and more answers become obsolete?
– I haven’t come across it much, although I’m sure it happens. I wouldn’t be surprised if, over time, there were designations like "this question and the accepted answer are over 10 years old – they may still be relevant, but note that something may have changed."
– Is there anything you wish had happened to Stack Overflow in the next three years? What would have made it better?
– I’ve always liked the idea of integration with documentation. I would like it if I could highlight the name of a method (e.g. DateTime.SpecifyKind), hover over the hotkey, and the site would assume from the question tags that I wanted Microsoft documentation, and all I would have to do is agree, and a link would be generated. And if hovering over that link brought up a documentation preview, even better.
– What do you think will actually happen? 🙂
– I think there will be networking between the company and the community, and it will take longer than everyone wants, and it will be less successful than everyone wants, but things will get better nonetheless. I’m sure there will still be good questions, poorly worded questions, polite users, nasty users, and so on. I’ll be surprised if anything massive happens. When the platform is established, change is usually unhurried.
John Skeet on .NET in 2020: "My main complaint is versioning.


Finally

At the end of the previous interview, John gave readers three pieces of advice: try Noda Time, pay more attention to documentation, and promote diversity in the technology industry.
– What would you like to recommend now?
– The previous three pieces of advice still stand. Perhaps I would also suggest thinking about versioning, and trying to be kind to others. I don’t mean to say that readers are unkind now, but I believe that consciously thinking about it more often helps us to be kinder.
– Many online discussions about diversity seem like bazaar bickering. Do you think there is a separate problem of discussing diversity apart from the issues themselves? You’re doing a much calmer job of talking about it – can you give some advice on a balanced approach?
– There is a problem here, but it’s not just with diversity, but with any acute topic. In recent years the UK has felt this very acutely with Brexit. I don’t think many people have changed their views (in either direction) – we have only become more entrenched on different sides of the barricades. It’s happening to me, too. I wish I was better able to see things through the eyes of people with whom I completely disagree. The fact that I’ve recognized this in myself as a flaw is already a start to fixing it, but you can’t get very far on awareness alone.
And on the subject of diversity: I found an analogy that makes sense to people. Last summer I started playing drums. I still don’t play well, although I’m getting better – but a much more striking change has happened to the way I hear music now. I can hear a song I’ve heard hundreds of times, but now I can distinguish the drum part much more clearly. It’s just an example of how your experience affects how you interact with things around you. And if we want to deal with the problems facing the world, we clearly need to consider as many different perspectives as possible. And that is diversity.
– How would you like to see the IT world in 2023?
– I’d like to see more human diversity in it, but I don’t think anything terrific will happen in that regard. I’d love to see a more diverse audience at conferences and user group meetings. There is more diversity among speakers (please, conference organizers, keep working on it!), but I often find myself interacting with a room almost entirely made up of white males 🙁
I wish conferences and user groups would really invest in understanding what keeps women and people of color from attending events. It’s very difficult because the people you want to hear from are the ones who are the hardest to hear from… In this case, each of us can act within our own social group. Perhaps user-group meetings during lunch can help? Can companies help? Could user-groups do a children’s corner, and would that help or not?
– What does the IT world really turn out to be like?
– In terms of technology, I’m sure we’re going to see more and more movement toward the cloud. Although I expect it will increasingly be a hybrid option : either a combination of different public clouds or a combination of on-prem and public clouds. Beyond that, I have almost no idea, but I’m looking forward to the future with interest…


Bonus : an old interview

In 2017, we hosted an online broadcast of DotNext 2017 on YouTube and took short video interviews with the speakers there. After the conference, the video was moved to "link-only" access, but now we’re sharing it with Habr; the conversation with John starts at 25:30:
And for those who prefer to read, here is her text translation into Russian :
– You’re known both as the author of a raft of answers to Stack Overflow, as the author of C# in Depth, as a speaker at technical conferences, yet you have your main job as a developer, and finally, you’re a father and husband. How is it even possible to combine so many roles?
– That’s not really all there is to it. I am a Christian and a local preacher. I am also a feminist and a member of the British Women’s Equality Party.
A lot of people ask how I manage to do so much, and that means they overestimate how much I actually do! Just because I have a lot of roles doesn’t mean I do any of them very well. Speaking about people’s opinions of me as a developer… I understand that there’s impostor syndrome, but let me be serious and sincere: I’m not as smart as people think I am. And I don’t write as much code as people think.
As you said, I’m the author of "C# in Depth", I’m currently working on the fourth edition. And I manage to allocate an hour or two to it : just today on the plane from Russia to the UK I hope to get as much as two hours to it, should get a few pages. I’m constantly trying to cram all this stuff into my time. At the same time, like everyone else, I lie in front of the TV with my wife every night. At this point I feel guilty : I should be doing something for the community, working or writing. But then I feel too tired for all that and just fall asleep to the TV.
But that’s what I’m really good at is the quick context switching. I can answer a couple of questions on Stack Overflow while building or running tests, why I can go back to work, answer my wife’s question, and then go back to answering the question on Stack Overflow again. I can easily switch from one thing to another and I think it really helps.
The only exception is writing a book. If you’re trying to explain a complicated topic, it sometimes takes a little longer to get into the gist and catch the idea. But most of the time I easily switch from one thing to another.
– Speaking of switching, do you have any specific time-management strategies?
– No. Well, on Google, I started to track what I do during the week. Throughout my career, I’ve liked and disliked doing it. It’s a pretty useful thing when it comes to performance reviews – you can show that you’ve done all these things. But overall, I’m pretty terrible with time management in the sense that I don’t do it systematically.
And I think I’m very lucky that without any time management, things work out pretty well. I don’t know, maybe I would have made more time if I had somehow stuck to some strategies. I get asked a lot of questions about my career because people see that I love what I do. When they ask what to do to get a job like this, I always urge them not to do it the way I do. I’m like a pinball. Flying from one place to another. I never had a plan, never laid out what I was going to do in the next five years. Usually, it just kind of worked itself out. I think I’m just lucky, so don’t do what I do. Have a plan, try to do things deliberately.
– Yeah and then if you follow your path, you won’t get your dream job, but your dream job.
– All right, people shouldn’t look up to me, they should look up to the person they’d like to be. It’s worth thinking about what you’re doing now and what you’d like to do. I can’t say I didn’t have any plans or ambitions at all. I was looking at Joshua Bloch with his book "Effective Java" and thinking: I want to be like Joshua Bloch, only in C#. That’s the kind of plan I had. That was about five years ago.
You can always become the best version of yourself. It can be about technology, and it can be about more than that. For example, you can tell yourself that you can be more diligent about writing tests. This is a very concrete example. If you keep in your head all the time about what you want to become (the kind of person who writes tests, clean code, comments), then that person will be in front of you. Not me, not you and me, but the kind of person you would like to become. I think I could guide you on the path to becoming, but no more than that.
– Going back to the topic of multiple roles in life : do these roles help each other? You had an interesting tweet about "talk-driven development" : while working on code, it’s helpful to compose a report about what you’re doing, because if you can’t explain your solutions well, you’re in trouble with the code. Are there any other intersections like this?
– This one was a pretty interesting idea that we were discussing at work. It was about designing an authentication library. Authentication is a really complicated thing, it’s easy to turn code into impenetrable thickets there. We discuss topics for reports all the time, so we thought a report on authentication would be useful, and since we’re going to design a new library for authentication, it’s worth working on this and that in parallel.
Yesterday in keynote I voiced my thoughts on the concepts of date and time. These concepts have been very much influenced by Noda Time. So I think figuring out "how to explain it to another person" is very valuable.
Temporarily aside from the original question : for example, in Noda Time before 1.0 there is a type that we still have in the code base, it is called LocalInstant. To me it is a meaningful concept, but it is very difficult to explain. And the fact that it’s hard to explain made me hide this type from users. It took some reworking to get it out of the public interface. But it was the fact that I couldn’t explain it that signaled me that it needed to be done. That’s an important detail of the implementation.
Going back to what helps… You can speak on technical topics, you can write about them, and you can do them directly. And one of the best ways to learn more about features in C# is to try describing them. While writing C# in Depth, I learned a lot of new things. I become a better developer when I write about it.
Of course, you don’t have to write a book – a couple of blog posts about a new feature is enough. For example, I learned about it, tried it out, try it with you! Describe your impressions and results.
While here at the conference, I’m experimenting with documentation for Noda Time. We’ve done something similar before with platform libraries. The idea is to give snippets as examples in the form of unit tests. Because they work. There is nothing worse than when you read the documentation, there’s an example, you copy it, but it doesn’t compile or crashes. You want something that will work.
So with the help of Roslyn, I wrote something to transform the examples into snippets that can be included directly in the documentation. I discussed it with my colleagues and we decided it was a great idea for a blog post : both about what can be done, interesting things about Roslyn, and a concrete result.
Of course, it all fits together. And what’s more amazing is that the non-technical things fit together with the technical things. I’m not going to say I’m a great speaker, rather I feel pretty comfortable on stage. I feel much better with an audience of a hundred people than I do in a dialogue with two or three people I don’t really know…well, not counting our conversation now! (laughs).
In all of this, the sermons help me. I preach at church about once a month. That’s how you get the skills of a speaker. Of course, a sermon is different than a report (15 minutes versus one hour). But you have to put your thoughts in a concise and understandable way. All in all, I can say that I have gotten better as a speaker because of being a preacher, and vice versa.
I draw ideas from other areas of my life. My feminism defines my sermons and my behavior in the tech community. I think as an individual, you can’t compartmentalize yourself. I try to have a work/life balance, but that doesn’t mean that the skills I learn at work can’t be applied to my personal life or vice versa. I think being a person is just about capitalizing on all areas of your life.
– This is your first time in Russia. Apart from the conference, you haven’t seen much, but let’s ask anyway: does what you’ve seen meet your expectations?
– I try not to have any expectations about the country as a whole, because that only leads to problems. But I can say that all the people I met were very friendly, and everyone’s English is great. As someone who speaks only English and doesn’t know any foreign languages, I always admire people who speak more than one language well. There are so many people around the world who speak multiple languages and speak excellent English – at least in the IT community.
It was also nice to see a large number of female participants at the conference and I saw that they didn’t feel inferior to the men here. That’s really cool. There was also a lot of food! We had a speaker’s dinner on the first day and the food just came and went. Just when you think you’ve had enough, they tell you there’s going to be another main course. I can say the same about our speaker’s room at the conference. The food keeps arriving. (Laughs) It’s great to see that Russian people don’t look huge with so much food.
– Eating whatever is offered is not necessary!
– In some cultures it is rude to refuse food that is offered to you. In others, you have to wait for an invitation, even if the food is right in front of you. A very subtle point.
– Is there any question you would like to answer that you have never been asked before?
– Yes. There was a question I once wanted to get on Stack Overflow: what is the difference between reference, object, and variable? I think this is the most difficult aspect to understand in C#. At the end of the day, about this asked , and I was very happy. I would also like to see more questions about Noda Time, because that would indicate that people are using it.
I love questions that are considered off-topic on Stack Overflow. The ones that express a personal opinion on the issue. For example : why is the design of the language the way it is? In C# some things are documented, like why inheritance works a certain way. But the way it works seems a bit "broken" to me: if I like C#, that does not mean that I like everything about it. But I can say "he’s trying to solve so-and-so’s problem, and in so-and-so’s case he succeeds, and in so-and-so’s case he doesn’t".
I think there are not so much specific issues, but areas that I would like to see better explained. For example, versioning. I’m planning a post about the impending apocalypse of versioning in .NET. I think the big companies should get together and think about what we can do about it in .NET to avoid versioning problems. This is the kind of question I would ask the whole universe.
– Thank you for such detailed answers.

On the approaching DotNext online John will give two speeches :
Dates and times: Hard, but not impossible : who better than the creator of NodaTime to talk about the intricate nuances of dates.
Versioning, and how it makes my head hurt : he has already complained about versioning in this interview, and he will talk more about the problems and options there.
And besides him, there will be new reports from Andrei Akinshin, Scott Hanselman, Dylan Beatty – The line-up this time is especially impressive.The conference will be held June 15-18. , find out all the details about the program and buy a ticket you can at

You may also like