I'm new here and I just thought of chipping in (hopefully it's relevant to this thread).
I started game programming 2 years back, using C# + XNA and a sample game as a template. I was able to complete a presentable game within 6 months (just in time for my final year project's demo), and I surprised myself for being able to code a working game for the first time using a new language (I have been using vb.net and php until I decided to make a game for my FYP). The thing was, using the sample game as a base/skeleton, I was able to complete a working engine (although 80% of the engine was already in the sample) and get to game programming after 2 months.
Then this year I decided to torture myself into picking up C++ and SDL because I somehow I developed the impression that "C++ is raw and fastest compared to other languages". I experienced a month-long nightmare of code troubleshooting and researching coding techniques and realized that all the codes I wrote in C# were rather unsafe and messy. I had taken advantage of the convenience of some features that C# had that made programming easier. When I jumped into C++, I was scratching my head figuring out what the hell function pointers were and why there were so many invalid syntax in my codes.
I guess I'm slowly moving into the "C++ isn't that bad, what do you mean?" phase because I'm starting to pick up on things I otherwise wouldn't have learned from using C#. However, I started to think to myself, was it really worth all that trouble? Would it have been better to stay oblivious of what goes on in the lower level as long as the newer languages "does all those stuff in the background for you" while giving you the chance to develop a game rapidly? Or would pushing forward into C++ programming make me learn on aspects that I wouldn't have normally learned while doing C#, but could somehow come in handy when I finally switch back to it? I'm placing my bet on sticking with C++ for now.
In response to the OP's first post, I've always thought of game engines as a set of libraries (wheels/levers/buttons/wings) which you can piece together with your own code (wood/metal/glass/stone) to make something new. While engines provide an easy way for programmers to piece together larger things, I'm the type who doesn't like to use things I'm not too familiar with, and thus I tend to attempt to reinvent the wheel just to see if my version of the wheel works the same as the conventional ones. I'm torn between rapid application developing and writing codes from scratch at my own pace. Sort of like "Naw I don't like these Lego blocks. I'm gonna make my own blocks and build stuff with them. They'll probably look and feel like Lego blocks, but at least I know I made them the way I wanted it". So to answer your topic question, imho, I'd rather write my own engine but I know in the end, I'll eventually have to rely on engines written by people who know better than me.
Considering this subforum is "For Beginners", perhaps I should post this in a new topic but I thought this could also fit in here. I apologize in advance if I've posted this in the wrong place.