It is recommended you read this book via the gitbook viewer, however you can read it all on github directly if you want.
So before we begin, I just want to discuss the sort of content in this book as well as the reason why we are discussing these topics and why its not just a raw technical book focused on programming but a rounded book covering all aspects of development.
I apologise if you already know some of what is covered or you dislike my way of writing, I tend to make sweeping generalisations and not all developers fail at some of the things I accuse them of, but at the heart of my occasional insulting and tardiness there is some wisdom to be absorbed by the willing reader.
In almost all cases developers often are doing the best they can with the tools and knowledge they have, but without someone showing different solutions to problems they face, how are they meant to improve? So this is an attempt at trying to get to the heart of some important process and technical subjects that if you don't know about them, should hopefully get you up to speed quickly.
Now the general focus of the book can be split into 3 parts:
- Planning & Requirements
- Technical Design & Testing
- Automating & Releases
Now before you instantly sigh and want it to be fully technically focused, there is no point in that. Go look on google or youtube and you will find plenty of purely technically focused tutorials. They rarely address the forethought aspect of development though, too many developers just see themselves as code monkeys and just want to get on with writing code, and while we will do a lot of that, it would be far more sensible to think about what it is you are making and plan it, so you can work with others and share work and see progress without getting swamped when you are waist deep in unmaintainable code.
Remember just because you are learning something else other than raw programming it does not mean that it is any less worth while
The book will try to separate out the technologies based upon use cases:
- General (This is good stuff that you can apply to all disciplines of development, i.e generic C# code)
- Web (This is more tech that is applicable specifically to the web world, i.e ASP MVC, NodeJs, C#, Javascript)
- Game Dev (You guessed it, stuff related to game development, i.e Unity)
Most of what we will be learning are transferable skills, for example learning Dependency Injection within the context of Unity should also be enough for you to know how to use DI outside of Unity. One of the great things about patterns and practices are that they are often able to be applied anywhere, so once you understand the paradigm not just the syntax behind something you should be fine applying what you have learnt in other development scenarios, be it web, app or mobile development.
A surprising amount of skills can transfer from web/app development to game development, such as view separation paradigms, dependency management, unit testing and many other patterns and practices. I know a lot of game developers look down on web developers as some inferior species of developer but there is a lot to be learnt from both sides.
This is not a book for a complete new comer to programming, it is expected that you at least have a working knowledge of C# and hopefully Unity. You may be an expert on both but have never touched design patterns before, or you may be starting out but know a few basic patterns, either way as long as you feel confident to be pragmatic and look at some new approaches (even if you don't fully agree) then it should be a good read.
If you are still fairly new to development then don't panic, just make sure you are at least familiar with classes, methods, generics and inheritance. If you do not know any of those previous terms then it is recommended you go read up on it first, then come back once you know more.