Learning path in C#
I'm hoping someone can guide me to fastest and most efficient way to becoming a programmer that can tackle any programming problems that may occur during unity game development. So my questions are.
1.will I be missing out on key programming skills for game dev if I learn to program in c# through unity first?
2.or is it better to learn c# through traditional application first?
Keep in mind I plan on being indie. Focusing on combat systems and animation. I'll be buying environment/character art from content creators since I'm just one person.
There are problems with this:
- I don't believe anyone has comprehensively mapped out the possible concepts and the dependencies between them formally. I.e. Nobody has an exact "tech tree" that you can easily use.
- The resulting network of concepts would be GIGANTIC and very difficult to navigate.
- When you're starting out, you don't even really know which concepts you need to know.
- Not every game uses every game-development concept. You can skip most of them and still make a successful game.
- It's hard to know when you have successfully "learned" something. It's easy to skim over the details but still feel like you "know" the concept. In reality, there are nuances to concepts that aren't obvious, or are only important in particular combinations with other concepts.
This explains why most of the answers you get will be inexact things such as "read some books" , "find some tutorials", "try going to college", etc. Nobody has thoroughly mapped the exact details of everything in a way that lets us answer this question.
There is no "correct way/path/technique" to learn to code apart from the hard way. Does not matter if it is a game or otherwise.
By this I mean you will
- Make mistakes in design.
- Create stupid bugs.
- Box yourself into corners that cause you to re-write massive blocks of code.
- Create code that does not perform well
- Use the wrong data structures
The reality is no course or book will teach you this stuff. It is what you learn by building different non-trivial projects and making the mistakes listed and then learning from them so you can spot them ahead of time on the next project. It is also learning different languages over many years so you have different tools and techniques at your disposal :)
So read stuff, learn stuff and try it out the repeat. And enjoy the journey :)
Oh.... There is a golden rule that should ALWAYS be followed no matter the language or type of thing you are working on, be it just your or a team of people. It will save you a world of pain :)
Drum roll......
Learn how to use source control (Git, SVN or any other, does not matter which) and then use it always.
instead of Unity I'd go with
Otter2D
or
Duality
both use C#
both are for 2D games
both are great for beginners learning to program games
make pong
make asteroids,
make a platformer
make a side scroller
make a tower defense
you'll learn tons of stuff
you can make 2D games with Unity, but Unity just has too much stuff
Unity was built for 3D games first and the 2D stuff was added later
so in my opinion its better to start off with something designed for 2D from the start
then once you get a hang of it move on to Unity and 3D
1.will I be missing out on key programming skills for game dev if I learn to program in c# through unity first?
That is going to happen if you don't go into theory and if you get stuck in one single language. Even today it's possible to be tempted into writing small C++ libraries for C# code (but specially if performance is involved).
2.or is it better to learn c# through traditional application first?
Not really. But the console is a good start.
If you're not used to programming, then trying to make games, even on Unity, before getting some experience in programming, is like trying to learn to pilot a launching rocket before learning what all the controls are: you will crash and burn, and it might be fatal to your motivation.
- Things will go wrong, and you won't understand why
- You'll not have the basic knowledge to roll up your own solutions to problems specific to your project.
- You'll feel stuck, and induced to follow thousands and thousands of tutorials to bring their code to your project, even without understanding them.
Overall, programming is often very frustrating, so you must take care that the frustration does not increase faster than your ability to use your skills or cope with it. In short
Game programming is an unforgiving MVP
Unity wont make learning easier - it'll make learning HARDER. The engine will bring lots of new constraints like the preference for components oriented systems, simulation rules, etc. There's no shortcut, so if you're not in a hurry to make a game (and should not be), take a few months to learn C#. Solve some code kata* until they feel trifling, all the while reading a lot about how game engines works