Techniques that "professionals" use are just that, techniques. There are a variety of best practices used in the industry that can definitely provide you a programming advantage. These have been determined mostly by, and for good reason, by individuals for together in large teams, or even good size teams. Object oriented programming allows for modularity in code. In c++, you can use and reuse modules depending on how you structure them, to be adaptable for different kinds of code. Before you start writing your code, it is up to you to determine what parts of your game library you want to be reusable or engineered that way. If you are already an excellent programmer and write all your code dynamically and oop fashion, you can should understand the following about game design:
- Understand what piece of code does in the game
- Get something working
- Refine it until it is object oriented
You can also start, depending on your expertise, from step 3 -> 1. The best way to do this is to do an overall requirements gathering about your game or game project, and then group together functionality that be derived or have similar "factorizations" or similarities. This is like simplification or factoring in mathematics. Once you can do this precisely, you will be able to engineer great building blocks for your games or projects. This is called software engineering and can be a great help to you if you practice enough. The reason why it is a great help is because:
- aEUR'Save time using reusable objects
- You can refine those reusable objects later, and make them more "code" friendly, if you like to share
- Once you have something, you can figure out how to make it more efficient or come up with great ideas on how to use it for something else.
- Helps you appreciate shortcomings in your design, and understand why industry "best practices" were created in the first place.
- Helps you appreciate advantages in making something yourself, once you become an expert, after lots of practice!!
In C++, there are even more advantages because of pointers and addressing. this is important for game design, because if you become great, you can figure out how to create huge performance speedups at little or no space or computation time cost. I mean "huge". personally I have only seen these so far in rendering, game loops, and interactive programs, but I know they also can work for database programming, network programming, input and file i/o, etc... This way of thinking, can definitely also help you creating speed up for mobile programs or web applications, either client or server side, where resources are important to be used wisely.
I'll add some resources and links on these kind of topics in the near future.