This is a quote from the Gamedev.net forums by a user named ApochPiQ about C++. I found it amusing:
Don’t be seduced by the apparent “easiness” of C++ and how fast you can get sort-of-working code written, especially coming from syntactically related languages like Java. It may only take a few days (or even hours) to get a simple program done, and once you’ve gotten that far, it’s painfully tempting to go “hey, I know C++ now, that wasn’t so bad!”
I wince every time I read someone’s personal story where they “learned” C++ in a matter of days/weeks/even months, and then go on to talk about how easy it is and how they don’t understand why people warn against it.
This is why C++ is hard. I know people who have been using C++ for years who can’t answer those quizzes. I know I can’t guarantee that I’d get every question right on the first try, at least not just off the top of my head. And those quizzes just barely scratch the surface of the complexity and difficulty that C++ can present.
There is a vast gulf between “hello world” and a 3D game engine. You can write small, simple, perfectly legal C++ programs forever without running into an issue, and therefore feel justified in your belief that you “know” C++ and can avoid all the dangers of large-scale software development in the language. Then you write something that’s actually large, and suddenly it crashes or leaks memory or does all manner of unspeakable evil and you can’t tell why – because you never actually knew C++ to begin with.
I don’t want to sound like the grouchy old guy who overhypes the dangers of crossing the street; if this sounds hyperbolic or exaggerated, consider carefully that it’s not. I’m being deadly serious here. C++ is an immensely powerful tool, but like most powerful tools, it is very easy to use incorrectly. Worse, you can use it incorrectly for years and not know it, until finally you cross that invisible threshold of complexity and the whole thing blows up in your face.
It’s kind of like people who accidentally shoot themselves in the head while cleaning their guns. You can look down the barrel of an empty gun and pull the trigger, and live; you might even get lucky enough to do that thousands of times. But if you don’t understand that this is a bad idea, and that you’re taking a serious risk by doing it, you will eventually splatter your brains all over the place.
The tragedy of beginners learning C++ is that most of them don’t understand why they shouldn’t look down the barrel to begin with. After all, it only ever goes “click” when you do that, right?
Forum post: Link
Well, here I am, still up at 5:30 AM and filled to the brim with feelings of satisfaction and… well… sleepiness. I just spent about 3 hours tackling quaternions, which turned out to be quite a bit easier than I expected. Using various webpages and other references, I managed to create my own quaternion class in C++ and implement easy rotation around an arbitrary vector in my camera class. Now all I need to do is fine-tune the targeting of the camera and research and implement SLERP (spherical linear interpolation). After that, the camera will be complete and I will finally be able to move the hell on!
I find myself easily distracted the past 5 months. Little work has been done on my engine as my focus has been redirected by video games as of late. The first distraction was jumping back in World of Warcraft which took up at least two months of my life. This was immediately followed by the incredibly addicting game Minecraft which lasted me until this month. And this month… This month has proved itself to be the most distracting month of all. Three games have come out – Fallout: New Vegas, Gothic 4, and Fable 3 – that will keep me busy, I’m sure, for at least another month or two. I really hope that I can make some real progress when my distractions leave me.
Amidst the distractions I have advanced my engine slightly and learned a bit about how OpenGL’s modelview matrix works. I have updated my camera system to avoid Gimbal Lock and allow for more dynamic rotation and movement. Currently, between playing games, I am learning quaternions for use in the camera system. I hope to have that system up soon…
It was about 4am when I finally decided to close my laptop and go to sleep for the night. As I lay in bed waiting to fall asleep, I let my mind drift to how I should to proceed with dabbling in the world of 3D game engines. As I thought, I came to a realization; I realized that I was falling back into my greatest flaw: sidetracking. Whenever I start on a personal project, I spend 90% of my time attempting to get naming just perfect, or shaving of a couple milliseconds from render or loop time, or restructuring the whole of the engine to make it more organized, at least in my eyes. While this may lead to an efficient and organized program, more often than not it also leads to a half finished one.
A thought came to me: If there is one thing in this world I love doing, it is programming games. After accepting that as a fact, I realized that the construction of my engine does not have to be a fast process and I don’t have to get it done before I can begin programming games with it. Instead of programming the engine so that I can make games, I’m going to start programming games to make the engine. In other words, from now on I plan to create a game using my unfinished engine, but I will focus wholly on the game. As I create the game, I plan to save parts of it which I deem useful and dynamic and incorporate these parts into my engine. By building games, I will build upon the engine, and by the time I have a few simple games out, the engine should be on its way to greatness!
Added a Custom Image Page that will be used to store and show my custom made or edited images.
About a week ago, I decided to move on from the world of 2D programming and into the world of 3D programming. So, I started my first 3D Game Engine which I hope will develop quite quickly. But as I just got Dragon Age Origins: Awakening, the chances of significant work getting done on it in the next week or so are slim at best =P.
I uploaded a few more of my old C++ projects to the C++ section of the site. Also, added a “3DMax Renderings” page and some of my old renderings. Nothing too impressive, just thought I’d get some of my old work up here =).
Added the following to the site:
- SDL Documentation
- C++ Project – PSI_Engine
Today I start my first day of editing the site, so there’s really nothing here yet, but hopefully there will be soon!