If you've not made a game yet, then learning about how to make game engines is counter-productive. The engine should emerge from the game, not vice versa. After all, for code to be reusable, it must first be usable, and unless you have successfully written a game with it, you can't prove that your code is usable for a game.
You might think that reading a book on game engines would tell you exactly what you need, but the fact is that different games have very different requirements. The better the engine, typically the wider a range of requirements it will cover, which means both a higher level of complexity and a more abstract level of working, meaning it will bear very little resemblance to the sort of problems you will face as a beginning game programmer.
As a beginner, you need to focus on keeping it small and simple. Your basic game loop will look like this and you just have to fill in the functions:
init
while 1:
get_input
update_objects
render
shutdown
Obviously you will come across some specific issues, but the best way to approach them is to ask a specific question about the sort of feature you're trying to implement, because it's easier for someone to tell you how to do something than it is for them to recommend a book that covers everything that you might possibly want to do (largely because such a book doesn't exist). If you can cite existing games as examples, even better.
You didn't state whether you are new to programming or just to game programming - often, a lot of the problems faced by game programmers are down to a lack of understanding of basic programming fundamentals. Your Rube Goldberg comment implies the latter, and if so, it's worth picking up good books like Code Complete to get you out of bad coding habits.