Coding With Flavio
FAQ
How does this all work?
The first series of lessons, "C# Basics," will teach you how to program in C#. You will learn everything from programming basics to the skills and topics needed to craft your own games.
After the C# Basics series, you can choose between two other series: The Unity Basics series will teach you how to make games by applying the skills from C# Basics to create a couple of simple games. Alternatively, the Advanced C# series will help you extend your knowledge of C# with various more advanced topics. Which of the two you do first is entirely up to you!
By the end of the Unity Basics series, you should be able to make simple games on your own using Unity (and perhaps other frameworks as well).
Why does it seem like not all the content is here yet?
I have not yet completed all the lessons. Both the lesson videos and this site are still being developed, and I will keep posting content as it gets created. Keep your eyes peeled for frequent updates!
My plan is to complete the C# Basics series first. Then I will make the Unity Basics lesson series, and after that I will finish with the Advanced C# series. Depending on how things turn out to be structured, I may also add an Advanced Unity series at the end.
What if I want to learn C# but I don't want to learn Unity?
Then this course is perfect for you too! The C# Basics series mentions Unity in multiple places but the C# skills taught in it apply to any C# project. Furthermore, the lessons learned in the series should easily help you transition into other programming languages, especially Java.
After the C# Basics series, be sure to follow with the Advanced C# series to learn more great stuff.
Why Unity?
Unity is free and it's a fantastic way to make simple games for multiple platforms. What's not to love? We will be using Unity both as a means to an end (learning how to program) and as an end itself (learning to make games with Unity).
Why C#?
C# is a fantastic programming language and a perfect choice for people who want to learn to code. It's the primary language used for Unity scripting and is also extremely versitile on its own.
If you wish to learn something with market value, C# is also ideal, since it's supported in many frameworks, such as .NET, and tons of companies use the language. Furthermore, C# is virtually identical to Java in most respects; by learning C#, you essentially learn Java as well, and Java is quite prominent in the market. You may also find that learning a harder language like C++ is far easier after having some experience with a higher level object-oriented language like C#.
What else can I do with C#?
There are many engines and frameworks which employ C# besides Unity. Microsoft has a nice framework for web application development called ASP.NET, which uses C#. It's a great framework which I may at some point cover in a separate advanced lesson series. In the C# Basics series I also cover Windows Forms, another Microsoft framework which leverages the .NET framework to allow you to easily make desktop applications with a UI-building toolkit which literally uses drag-and-drop. Seriously, it's really great. The .NET framework is quite far-reaching, and you'll find that there is applicability to do many, many things with knowledge of C# with .NET. If you have plans of diving into programming professionally, many companies use C#, especially those which build Windows Desktop applications. In fact, I learned C# in my first job!
Similar to how Unity allows for the creation of cross-platform game development with C#, frameworks like Xamarin now exist to be able to write code for multiple platforms in C#, making it an increasingly more popular language, especially due to the strengths of the language itself. Also, as I mentioned, C# is much like Java, so learning C# will allow you to easily use anything that requires Java as well, including Android phone applications, among other things.
Why Visual Studio?
Visual Studio is a fantastic (and free!) IDE (Integrated Development Environment) which I believe is perfect for learning how to program. Some people advocate that programming novices start without any tools like IDEs so that they can suffer through the pain and hassle of constructing, compiling and linking their project using the bare minimum, such as notepad and msbuild. With this, it could take hours before you even get Hello World to work. In my personal experience, most novices give up right away in this scenario, because they become unnecessarily daunted too early in the process.
In my tutorials we are able to get Hello World to work right away, so that we can start learning how to program before we deal with the more unpleasant realities of programming. I do cover how to build a project without an IDE, but by then, the viewer should be quite comfortable with coding, so things should make much more sense. I do realize that some advocate against assistance such as syntax highlighting for newbies, but in my opinion, this is even more important; early attempts at programming are too often crushed by minor frustrations like missing semicolons or miscapitalized variable references. These minor inconveniences can help you learn things better, but they also get in the way of the more important and complex core material. Finally, Unity uses a similar editor to Visual Studio, and learning about helpful features like Intellisence early on can thus be instrumental.
I strongly believe that trying to learn how to build a project from scratch or write flawless syntax before you learn how to even write a line of code is akin to trying to read Shakespeare before learning the alphabet.
No, seriously, I'm a programming expert and hacker and I think C# and Visual Studio are for lamos - why don't you instead use emacs to issue remote commands to a satelite which bounces through various proxies to invoke a call on a nodejs web server which fires a process that enables an AI to write procedural code which creates your first Hello World script by physically altering bits in the disk drive using a precision laser so that you can circumvent all language abstractions and thus program directly in binary from the start? It's really easy! I did it when I was 3 months old.
First off, that's not a question. Second off, none of that made any sense. Also, I'd do this in vim, not emacs.
I can't understand how people actually keep asking this exact question frequently enough for it to make the FAQ.
C# Lessons FAQ
Why do you sometimes postpone an explanation instead of just explaining it right away?
Unlike many trades out there, programming requires that numerous complicated things be done in order to even get the most basic "Hello World" out there. That is why it's so nice that Visual Studio provides some starting templates which do much of this for us. Without Visual Studio, it could take hours to get the first Hello World project working if you don't know exactly what you are doing.
As a result, Visual Studio creates an empty template with everything necessary... but all those little details like classes, namespaces, usings, etc are still visible from the start. These all correspond to topics which are very difficult to understand without at least having a rudimentary exposure to the language's basics. Therefore, covering topics like these right away would do nothing but confuse the majority of people taking the course. I plan very carefully and very deliberately exactly when the right time is to teach each individual concept, especially because lessons in programming all must build on topics which we learned before.
I take this same philosophy throughout the course; if I say "I'll cover that in the future", it's often because I believe it's too early to get much out of a topic at that point in time. In these cases, it's best to remember the code as it is and come back to understand "why" it is that way later. I also sometimes take the reverse approach and teach something earlier than some might choose to. For example, I take on the concept of Debugging rather early because I feel like it's tremendously helpful for teaching other topics; normally debugging is not something taught early in a beginner course, though I don't feel like there's a good reason for that given a good IDE like Visual Studio.
Sometimes in your code you have things that look like // with some notes. Is this code?
These are called "comments". You can put comments in your code using // followed by the comments. // will basically turn everything following them in that line into a comment, and will be ignored by the compiler. This is a good way to make your code easier to read by others, or to put notes explaining why you did something. I use these in my examples to annotate the code in order to explain something.