Probably among top most confusing things in software and game development is where to actually start learning game development and programming and probably among the most damaging ideas for aspiring developer is to think that it needs to be done the hard way from the ground up by learning hardcore language like C or C++ and developing your own engine.
Sure this might work for the rare few people who posses crazy amount of discipline and self-control to actually spend around hundreds if not thousands of hours to learn how to program with bare-bones editors and CLI compilers. But most people tend to get very overwhelmed and discouraged with the slow phase and the barely non-existent visual feedback associated with this method.
Picking the language
Probably the best advice I have heard when it comes to languages is to pick one and stick with it. For beginner it’s important to understand that programming languages are not all that different as you might think and it’s way easier to learn a new language if you’re already familiar with another programming language because the fundamentals rarely change even if the syntax changes.
One good example is that if you already know C# well you basically already know how to write Java. You’ll just need to get familiar with the small differences along with new tools. Even languages like C/C++ become a lot easier to learn because you already have solid understanding on programming which makes these languages a lot less overwhelming. Learning higher level programming language like Python becomes very easy if you only need to learn how they differ from your first language.
Having good understanding about concepts such as variables, operators, loops, conditions, namespaces, object-oriented programming, libraries, frameworks and such is a lot more important than the actual syntax.
Writing code – IDE
For making the learning experience least painful as possible it’s important to get yourself a proper IDE for writing code and developing applications. Using text-editors like Notepad is very archaic for programming because they do not offer any error-highlighting or code completion (a.k.a intelisense) which really help new programmers to spot their mistakes and write working code. If you have to spend an hour to find a missing typo or a missing dot from your source code that prevents it from running you’re just wasting your time.
Personally I prefer Visual studio or visual studio code myself because they’re very approachable and the editor offers proper error highlighting and code-completion for numerous languages.
Let’s face it. Many people tend to get very demotivated with programming command line interface applications when most of the software and games these days have all these wonderful graphical user interfaces. The lack of visual feedback is likely major contributor to the fact on how many people feel inspired when learning something like HTML but quickly give up when they start learning an actual programming language.
Solution: GUI Library
Many languages like Java and C# actually have very easy to use tools for creating simple form applications with text-boxes, buttons, grids, pictures and such which are fairly easy to learn even for new programmers with all the tutorials that are available online. These can be a lot more motivating to work on than simple command line apps.
- C# – Windows forms a.k.a WinForms
- Java – Swing or JavaFX
- Java (Android) – Android studio (IDE)
- Objective-c – views
Alternative solution: Make a Game
Game development is actually a very good way to get familiar with software development. With modern game engines like Unity, Cocos, XNA and maybe unreal it’s easier than ever to get started developing simple games. Games are also good because they combine many important subjects of software developing from user interface to networking and data integration.
Developing games can also be somewhat more interesting than console applications and whatever BMI Calculators and other simple form applications.
Engines and Frameworks
- Unity3D – C# or UnityScript (similar to TypeScript)
- Cocos – Objective-c
- Cocos2dx – C++ (Android & iOS)
- Unreal – Visual scripting with nodes/blueprints and C++
- Allegro5 – C++
- MonoGame / XNA – C#
Start small and scale up gradually
One of the most common mistakes new developers make is that they take on more than they can chew which means the project will never get finished or even “finished” which can hit motivation really hard. Because this I recommend setting up deadlines for yourself.
When starting out you should limit the projects to take 1-3 days at most and make sure that you can finish it before the deadline. This allows you to start from scratch often and really learn from the mistakes made in first projects. By doing this you’re building a proper foundation for your projects and avoiding the need to constantly revisit old code just because you’ve learned a new pattern or just a better way to implement a feature.
From there you can slowly start doing projects that take a week, 2 weeks, month etc until you can finally start working on the software or game project of your dreams. I can guarantee that it will be better than anything you would have made as a beginner.
Workshops and Game Jams
I really recommend participating in to Game Jams and all sorts of software development workshops. They’re usually these events where groups of people gang up to develop software and games within 48 hours or less.
You’ll also meet new people there who can learn from you and vice versa. You might even stumble up on new friends or even career opportunities. The experience of developing a game or application within 48 hours in a group is also a challenge that forces you to think a bit differently and really work on your team work skills.