ADVICE FROM AN AMATEUR
//From Zero to Amateur over Years of Learning
I would definitely stay away from high level engines like Unity or Torque2D MIT. They are great for small prototypes, but I would never take them seriously to develop my own video game.
Why would I? What is the point unless it was nothing more than a simple SideScroller or Arcade remake?
Most game engines, libraries, or frameworks do nothing more than the simplest of tasks with a whole lot of bloated code with functions and features you'll never use.
When I was new in game development years ago, I started at the top. Very high level engines. Not anything too high like RPG MAKER, but definitely high up there like Unity and Torque. Then I went lower, to XNA and C#, because it had so many resources and tutorials. My primary project needed the performance, or perhaps I'm just obsessive-compulsive about wanting incredible performance in my software, even if it is not a large project. XNA simply did not cut it, and I had a lot of problems with the engine that I read required a headache to fix. What is the point of using something "higher level" like XNA/C# when you're doing the same work (fixing XNA bugs & problems) as you would rolling your own engine in C++?
After quite awhile of learning, I eventually learned about how game engines are designed and began looking into the code of the engines themselves. Reading what most professionals have to say and the complaints of the critics of game engines made me realize, 'Why even use an engine?"
Brushing up on my C++ and really getting into some philosophies used in that language helped me a lot. However, I had spent so much time learning about so much I just wanted to start making a game.
So I ended up with something with quite a lot of praise, was C++, and very low level: SDL. Unfortunately, this was a headache. It is so low level, I see next to no reason why to even use this library. I'd rather simply learn OpenGL and do it myself from scratch. Honestly, it was mostly the fact I needed to implement my own code to do something as basic as flip an image (and other's implementation wasn't working because of how I handled sprites) which drove me to trash SDL permanently. It's great if you want a software renderer, but IMO I'd rather trash it to go lower with hardware (OpenGL) or higher (SFML).
Not wanting to buy another book on amazon and learn yet another API, I went higher. SFML is simply wonderful, not to mention highly praised all over the internet. I have read almost an endless number of positive reviews, with next to no negatives. I cannot say the same for SDL. It handles all of the extreme basics, but leaves the rest up to me and other libraries of my choosing. I've stuck with it ever since.
IMO, a game engine is just silly. Low level libraries are much better choices for both expert and beginner programmers.
Also to note, I have learned more about programming concepts and have sharpened my software development skills when forced to handle things at a lower level than I have ever learned with high level WYSIWYG game engines.
What does something like Unity give you over XNA? Visual editing and a crutch. Newbies will eventually learn you'll still have to code pretty much the entire game just as you would if you had bare C++, and the visual editors are inefficient to something you could create yourself.
What does something like XNA give you over SFML or your own implementation of OpenGL and other useful libraries? IMO, absolutley nothing good. Worse performance, C# instead of C++, a plethora of newbie tutorials but significantly less professionalism, and some headache savers that IMO are once more just a crutch for what you should just learn with C++. I was initially intimidated with C++ and loved C#, mostly because of hear-say and rumors of the opinions of fools who had the same troubles I had initially with C++: I just wanted a good enough programmer. I realized I needed to learn more fundamentals and sharpen my weaknesses in order to overcome the troubles I had with C++, which C# "made easy." Do I ever miss the simplicity of some things in C#? Not even! I know how to do it in C++ without a hassle.
If low level libraries or learning DirectX/OpenGL intimidates you, then just wait until you start getting into the complexity of creating a full video game.
My philosophy on game engines can be summed up in two examples explaining the redundancy and uselessness of engines, except in isolated circumstances.
Newbies who are intimidated with low level libraries, will have a seizure when they discover that even with a high level engine like Unity, (besides graphics rendering, audio playing, content loading; real basic stuff) it will be almost identical to making a game from scratch. The complexity is in engineering a game, not understanding the API or developing the classes to render to the display.
Experts who aren't intimidated by the complexity of creating a full game in something like Unity, have no use for Unity because the time in which it would take to confidently learn the API and requirements of a specific engine is probably more of a headache and more time than it would take to code the few classes required to do the basics.
So engines are useless to newbies, because newbies can't make anything with them because they lack the engineering skills.
Likewise, engines are useless to veterans, because they already have the engineering skills to do it without an engine, and might as well roll their own more efficient, specific 'engine' than to go through the headache of learning both the game engine's API, functions, and performance quirks. Not to mention the massive nightmare of working with engines that you sometimes can't touch because they're not open source (or even if they are, reading other's code can be a nightmare at times).
Heck, even some "low level" "game frameworks" are nothing more than a few classes to create a window, render to the display, and play audio. This is something a professional could do themselves from scratch using other libraries like SDL/SFML or their own implementation of OpenGL/DirectX/OpenAL, in a fraction of the time it takes to actually complete a full video game.
TLDR;
If you want to program, learn to be a programmer.
Avoid using engines, but do not be a fool and ignore incredibly useful libraries.
If you want to be a Game Designer, try an WYSIWYG engine and pump those games out!
If you want to be a Game Programmer, avoid engines like the crutch that they are.
For ME, using higher level game engines crippled my ability to become a programmer. The moment I started using lower level libraries instead or not using any library at all, I began to learn so much that I quickly went from a total newbie to someone that can now create video games without any reference, tutorials, or book alongside me. Just my compiler and a lot of engineering and practice.
The amount of learning I gained from low level libraries in a SHORT amount of time was much greater than the amount I gained in a VERY LONG amount of time with higher level ENGINES.**