I was listening to a .NET Rocks! episode with Ian Cooper about starting a .NET Renaissance, analogous to the Java Renaissance started in 2011 after the decline in usage of the language. Ian lists plenty of evidence for a similar decline in C# usage, and what might have replaced it, in his blog post, so I won't get into that, but there is another aspect which I want to talk about. One of the problems briefly mentioned in the podcast is the 'leaky bucket' problem: it is inevitable to 'lose' some developers to other platforms, so unless we fill up the bucket with new ones, usage of C# is going to decline to zero at some point.
There are multiple ways to fill that bucket: showing people who left that we can do all the cool stuff (running on Linux, being blazingly fast, being open source) now too, or showing people who failed with other problems that we can deliver what they need. But the way I want to focus on is getting people completely new to programming to use .NET, since it is something I've tried to do before and something I feel C# has lacked in since forever. Yes, there are people who start their programming journey with .NET: my first real programming language was Visual Basic, but I don't think we should count on people being like me. It's 2017 and I use a Lumia; I rest my case.
Let's be honest: C# is a Microsoft technology, of course it's not one of the cool beginner languages. It's uncool by definition. Yes, there are probably languages that are simply easier to start with (it depends on your definition of easy), but in that case, we should at least be level with Java, and I don't feel like we are. You'll find more Java tutorials on YouTube than videos on C#. I was comparing Computer Science programs at universities in the Netherlands, and almost every one of them teaches Java, and none teaches C#. Even more anecdotally: a friend of mine started programming and he chose Java. Yes, I've talked to him, laughed at him, repelled some myths about Visual Studio, but he didn't switch. C# is just uncool.
We can't do much about the fact that C# is a Microsoft technology. It's also why the enterprisy developers, the traditional .NET crowd, love C#. It's backed by a strong company, with a great track record on backward compatibility and long term support. This enterprisy focus has also heavily influenced the C# learning materials, which are designed to throw huge amounts of information at you, Jump Start style, so you know everything as fast as possible and go on with writing the software you should've finished last week. This kind of education is great if you know what you want to build, or what you have to build, but for people who are getting into programming as a hobby, it misses a lot of guidance and examples.
I know this because I've created such Jump Start-like content myself: in 2015 I published some videos on C# on the Dutch website JorCademy, a website mostly focused on getting children into programming, but we know it's watched by people of all ages. Most of the feedback I got on my videos was something along the point of "that's a very good explanation, very thorough, and easy to understand, but I'm missing some examples of what I can do with it." Roughly said: "Good explanation, but now what?" And I feel like this applies not only to my videos but also to the larger stage of C# learning materials.
On the contrary, the web is full of content to get you started with all the cool languages, with short videos, and quick demos. They lack the deep explanations I've come to love about our content. I really believe the best way to learn something is to get a deep understanding of the underlying stack, but it turns out people are excited to get coding quickly and don't want to sit through a twenty-minute monologue about the pros and cons of compiling vs interpreting and how JIT is different from both. Historically .NET just hasn't been a platform for getting started quickly, and you had plenty of time for such lectures because Visual Studio needed another 6 hours to install anyway. And maybe Visual Studio isn't the most beginner friendly program:
Learning to code is an essential skill in the modern world. Here's a handy diagram showing you how to get started. pic.twitter.com/E5YH6A6WaO
— Dylan Beattie 🇪🇺 (@dylanbeattie) February 16, 2017
Luckily times have changed and with .NET Core and Visual Studio Code, you have your code running in ten minutes and a full-blown editing experience with IntelliSense and debugging in another ten, across Windows, macOS, and Linux. .NET has everything to be a good platform for beginners and getting people excited about programming, now we just need to get a good tutorial out there. But what would that look like?
Ideas for a 'cool' C# tutorial
First of all, as I said before, I'm a little torn on this. I understand people are excited to get started quickly, but I still want to share the full picture with background information so you're not entirely dependent on magic. A way to balance these two extremes would be to have a regular course, which covers just the minimum you need to know to get something running quickly, and some extra material that goes deeper into the matter, provides reasons for, and gives insights into why things work the way they do. Links to this deep-dive content can start appearing very early in the course - preferably in a very subtle way, like with a 'But why?'-link in the margin - and be more heavily promoted in later stages, maybe with inline suggestions. However, the regular course should always be followable without consulting the deep-dive material.
For video content, and let's be honest, all the cool kids watch videos, the extra content could first be suggested via a YouTube suggested link, without any references inside the video itself. In later stages, the presenter can point out the deep-dives and encourage people to watch them when they become more relevant.
The regular course should focus heavily on examples and code, and in the case of videos, PowerPoint should be banned. Death by PowerPoint is very common, and it's definitely not fitting for a 'cool' tutorial. The deep-dive material can sometimes divert from these rules, but even there a live sketched diagram is probably better than a pre-baked slide. In order to get a coherent series, the examples should be related to each other, with each one building on the previous. Since we're shooting for a full cross platform tutorial, the examples should be command line applications, as full cross-platform UI isn't a thing (yet). Maybe we could progress into web applications, but easy hosting for .NET Core is hard to find; Zeit Now is pretty easy, but it does require you to create a Docker container.
So what can we build as a command line application, later progress into a web app, start really simple and build out to a complicated program? Chatbots! They work well on the command line, they can be built out into web apps, we could introduce the Bot Framework, but even Hello world! can be considered a (pretty dumb) bot. Bots might even pass the 'cool' test (even though Microsoft is investing in it), making it the ideal category for examples in our 'cool' tutorial.
Now we just need to make something like that. If you have any suggestions or want to help, please let me know! I'll see what I can do, stay tuned. 😉