Learning from previous works is a great way to boost your learning curve. This is as relevant to newbies as it is to old fixed-in-our-ways dinosaur coders like myself. Every piece of code and software is someone’s attempt to solve a problem. Understanding why the authors chose to solve the problem the way they did, will make your future decisions that much more informed.
Learning from other code
Often, through my professional career, I’m forced to work in other people’s frameworks. Most often this is very frustrating as their way to solve a problem is in contrary to how I’d prefer the problem solved. However, its important to keep a cool head and try to understand the philosophy behind their code. In most cases, there are a few things that do work well in the framework, and often, once you understand it all, you may even be swayed over by the advantages of their technique.
Learning from other languages
I recently had to code a simple utility in C#. I don’t write utilities often and have very little experience in C#, so the process was a small learning curve. However, by learning some of C#’s string handling interfaces, I was then inspired to add some new helper functions to my C++ codebase to make certain things easier to do, like having a simple Split function that divides strings up into arrays of smaller strings. Some languages are very cleanly designed and have some great features. You’ll often find you can duplicate those features to a reasonable extent in your own language of choice. So as well as having another language available to you, when you need it, you also have absorbed interface design skills from that other language. It’s not just a case of every language having its use. It’s more that every language has found creative ways to solve common problems.
Learning from other engines
You will have seen other articles about the importance of home projects. Your “paid” projects are generally restrictive as to how much experimentation and personal growth you can pull out of them due to design, production and time constraints. Personal projects are also grant a great opportunity to experiment with other engines. Some of the top engines out there have very mature and well thought out pipelines and programming methodologies. Producing a game prototype in various engines is a great way of gaining insight into how your own pipeline can be improved. Always remember that the intention here is not (necessarily) to find a new engine to replace your current engine. The purpose of doing a home project in a new engine is mainly to boost your knowledge by seeing how a problem can be solved in a very different way from how you would normally solve it. Until you have completed a substantial project in another engine, you never really know how these different techniques will cope with all the bits and pieces you need to tie together to make a deliverable game.
Taking the time to learn
Certainly, experience can be attained by just solving new and different problems, evolving your skillset to meet the new challenges. However, when you look at other people’s code, languages, and engines, what you are seeing is the result of those people’s already evolved skillsets. Understanding the decisions made there is a way to rapidly enhance your own ability.
It’s not always fun to have to learn how other people have done things, and generally we code at home because we enjoy it, so we avoid things that aren’t fun. So I like to look at it as “professional homework”. The pain of learning other peoples techniques is often because your brain is being challenged to solve problems in ways it is unfamiliar with. Like everything in life, the healthy things often taste terrible. Taking the time to do your homework will make your decisions much more well-rounded in future.