Also, a note about engines:
There's no shame in using a game engine, in fact that's why they are made- to ease off most of the heavy lifting and let you just focus on creating the game. The only main flaw is that you have to stick with that engine's API, and if that API is lacking in some department, then so will your game. Thankfully, this isn't the case with most modern game engines (Game Maker Studio, Unity, Unreal, etc.)
If you want to make an engine, though, it'll be one
hell of an effort- writing code for game objects, managing memory, file loading/unloading, maps, interactions between objects, shaders... Everything that was handled so easily in a game engine now has to be managed manually by yourself. But, if you think you're up to the programming challenge, making your own engine would be handsomely worth it in the end: you'll have your very own game engine, fine-tuned to your specifications, with all the stuff you need and nothing you don't. Once you've made a game engine, you probably won't need to make another ever again- just keep using that one and tweak it as necessary.
TL;DR If you want flexibility make your own game engine, if you want to make games quickly without worrying about the technical stuff use a preexisting engine
EDIT: Also, on picking a programming language: Obviously, if you're using an engine, use that engine's programming language, but if you're making an engine from scratch, you'll need an
object-oriented language. Games don't lend themselves very well to a functional approach once they pass a certain size. Popular languages used for engines nowadays are C++ (the hardest language, but the most powerful and universal) Java (somewhat easier than C++, but has very bad memory management issues) and C# (somewhere in between)