was successfully added to your cart.

Why do you teach Console Applications instead of Drag and Drop in WinForms?

Why do you teach Console Applications instead of Drag and Drop in WinForms?

By March 16, 2018 Ask Tim 4 Comments

Teaching C# vs. Teaching Magic

If you have watched any “Getting Started” C# tutorials, you have probably seen the drag and drop Hello World example. You have never seen Visual Studio or C# before, so the presenter shows you Windows Forms and shows how easy it is to drag and drop controls onto a form, then you double click a button, add a bit of code and bingo, you have a working application. Seems simple, right? Unfortunately, this has become the default way of teaching new C# developers. In fact, I teach C# at a local college. The book I have to teach out of starts off this way. So what’s the problem? As I see it, there are two main problems.

The first problem is that when you learn WinForms first, you are learning magic. For example, when you click on a button, why does it execute the code? Magic. If you access the text property from a textbox, how do those properties work? Magic. How does putting a new control on a form work? Magic. So why is magic a problem? Let me give you a great example that I hear from new developers all the time. Say you are creating a form that does just the Hello World example. You drag the button on the form and resize it. You go to double click on the button to create the spot in code to put your code but you accidentally click on the form instead of the button. It takes you to your code but you know that’s not right so you go back to your form and double click on the button. That creates the right code bits for you, you add your code, and run your application. Things look great. The problem is that you have that extra bit of code in your code behind (the event from double-clicking the form instead of the button). It looks a bit like this:

So, like any good programmer, you clean up that empty code bit. Cool. Now the code looks right. The next step is to add a textbox so you go back to your form designer and you get this scary message:

Now what? This is why I hate magic. This poor user’s magic just stopped working and they don’t know why. If you learned why WinForms works, you would know that it is based upon class instantiation, events (and event handlers), and partial classes. Putting all that knowledge together, you would know that the issue, based upon the exception message, is that there is an event handler that is wired up to a non-existent method. To fix it, just go to the other partial class for the form class (the one that Visual Studio built) and delete the event handler line like so:

See how much you need to know to really understand the magic? See why it is important? If you know how WinForms works, when you get an error, you will feel more confident to fix that problem. When you don’t know how WinForms works, you end up throwing out your application and starting over. Imagine how frustrating that is.

OK, so that is the first reason why I don’t like teaching WinForms for new developers. My second reason why I don’t like teaching in WinForms first is because there is a lot of work to do before you get to the actual code. Let me walk you through an example: Say you want to learn how to use if/else. So, if you do that in WinForms, you would need to rename Form1 (if you are simulating a real application at all), drag a button on the screen, then, in the event code put an if/else statement. However, now you need to display the results so you then have to learn about MessageBox. We have just generated a lot of magic that we have to ignore. Not the end of the world but let’s contrast that to a Console Application. You need to write a Console.ReadLine() at the end of your code. For inside the if/else, you need to use Console.WriteLine(). That’s it. See how simple that is? You get very little magic (just that the Console works and what the two methods do) and very little distracts you from your actual syntax piece that you are learning.

So, to summarize, WinForms are more complex and you need to understand some object oriented programming (OOP) principles in C# before you really understand what you are doing. Until then, it is magic and when magic breaks, people cry. By contrast, Console Applications are simple and get you right to the syntax you are working on.

Join the discussion 4 Comments

  • Oscar says:

    I agree on this one, Tim. That’s how I got frustrated with my very first developing experience. Tried to make an arc length calculator using WinForms, watched a bunch of videos, drag and drop then click-click-click and suddenly you get all kind of errors you don’t understand. Then you try to google it and go to the site like Stackoverflow where people give all those specific details that confuse you even more… and now you have no idea where to start in order to learn all that.

    Now I use CMD app if I want to try some new function of procedure before putting it into the library. That way it is simpler and debugging is not that complicated.

  • Ruben esquivel says:

    Thanks for creating this article. I had the same problem and I didnt know where the problem was coming from and what to search for in order to fix it.

  • Didier Folly says:

    This article gives me a big smile!
    Few months ago, I started to learn C# and I wondered why people would use a Console App instead of an UI app (WinForms, WPF, UWP).
    After few days of reading articles and watching videos I understood that starting by little steps instead of a bunch of complicated stuffs is better to learn to code.
    I love magic (who does not love magician?) but I prefer to understand than to guess how it works.
    Thanks again for this article which makes me more confident in the path to follow (to learn C#).

  • Jake says:

    When magic breaks, people cry, indeed 🙂
    Helpful article for me. Good to know other beginners struggle with accidentally created events, too!

Leave a Reply