People often say: "never start creating your own engine. If you do so, you will never finish a game".
This may be true. But those people won't tell you what by creating your game, you won't finish it as well.
You can of course create simple game, let's say Tetris, for example. You probably can even write nice, well-organized, object-oriented-and-other-stuff code. OK, few hacks here and there, it's nothing. What next? You can code Snake. Or Arkanoid. How many simple games can you make? But ater how many of them your learning curve will go flat? If you've completed Tetris, Pacman, Snake, Arkanoid and Space Invaders, what can you actually learn from making Bomberman?
You can go deeper and create game with more content. But can you do it by yourself? Most programmers have very inferior graphics skills. You will need a team to do this. But again, most programmers don't have team-management skills. In the end, you'll finish with spending 80% time on team-related issues, and you'll still need to do some artwork by yourself. And that's optimistic scenario. I give a 5% chances of success. In the other 95% your team will just broke and you'll be left with nothing.
That's not a failure. After all, you are programmer, not game-director & team-manager & artist-level designer-musican & everything else. You need to write code.
So we have following charts so far:

creating simple gamesteamwork
But what if you start coding your own engine? Well, you won't need anybody else (profit in non-commercial "bussiness"). You won't have any specific needs nor deadlines. You can throw out 10KLOC just because it's poorly written -- no need to worry about compability issues, something you'll never afford during "real thing". You can experiment and implement every single new graphic technique you'll read about. You can optimize every bit of code down to assembly level. You won't need hacks to do things "fast". And you learn. And don't stop. So the chart for engine programming looks like this:

Yes, it's a spiral. Because you constantly start over and over, but every time with new skills.
You will, of course, never finish such engine. But why should you? After few years of such programming you'll have enough skills to do every single programming job you can imagine (assuming you have Not Invented Here disease and code everything from memory managers and containers to high-level networking stuff). You'll know a lot of APIs and ideas. You'll read tons of documentations and publications. What could "simple games programmer" write in his resume? I've done Pacman, Tetris and Arkanoid. Also Space Invaders, twice! I've never gone into deep details but I can code simple game for food. And someone who has tried teamwork? I am good candidate. I have never finished anything, well, to be honest, I have never gone further than concepts and DD.
And even if you're not going to be a professional (game) programmer, you can always have a decent hobby. Some people fix cars, some take care of plants. You can always polish your engine.
:)
Comments:
-
Gregory:
wow that's me, writing down string or smart pointer classes
why? is it NIH syndrome? maybe, maybe not
it's just my pet project and there are many things to learn coding such bits
the downside is that coding everything requires time, but as long as you decided to sit and code and don't have deadlines, well it takes what it takes :)26.02.2010 20:19:09
-
Xion:
Finishing a home-brewed engine is a misconception because it simply can't be done. However, one shouldn't also assume that it's the only way to obtain skills you have mentioned at the end. It could very well work via more "freestyle" coding experiments like "Today I'm gonna try code X and then maybe Y, but if I don't succeed for now I'll rather take up Z instead".
Of course you wouldn't gain insight into engine design this way but let's be honest: do you expect to take part in designing a commercial game engine during your first several years in the industry? :)26.02.2010 21:20:33
-
w.:
Really enjoyed cv sentences at the end. (because it's truth!)
But what would your engine fella say at the same time? (what seems like 3 months)
"I added shadows to my engine, and got 12 fps, You can move camera using wsad!" ?
"How many simple games can you make? But after how many of them your learning curve will go flat?"
Many. Not bomberman (unless via lan/net, which would be great), but basing on Your example I would suggest making:
+ Mario ( screen moving simple 2d physic)
C27.02.2010 12:45:11
-
w.:
//my comment got ruined! screw u substr()!
+C28.02.2010 09:30:57
-
w.:
//bah, it cut me down!
+ C and C ( pathfinding simple ai)
either Doom or Croc
That could be like 6-12 months (from 0 level), what engine guy got know? 22 fps camera move on WSAD?
"You will never finish such engine. But why should you?"
Because You want to get things done.
Do You honestly think that after "few years" you can apply at any of these jobs:
- Renderer: GI,particles,shaders,fluids etc. (which seems at least 3 jobs)
- Animations
- AI Programmers (for some thousands of units games, many different behaviors)
- MMO Programmers
- some consoles related
?
Beside, in those "few years" "simply games dude" made like 10 arkanoids, sold them on iPhone and lives happily in mountains, and "team guy" learned how to manage projects and got promoted to Senior Java Developer ;)
To sum up: I see no advantage of doing all around projects, instead of small, yet oriented ones. (but I wouldn't call that engine)28.02.2010 09:36:28
-
@Gregory: I see NIH as a good way to learn stuff. I am going to post about this. :)
@Xion: there is a little bit of difference.
If you're say "I am coding Foo ATM, then Bar and later XYZ" you will of course learn lot of things. But those will be "Basics of everything". You probably won't go deep this way. On the other hand, during engine development you usually get a lot of "Basics" and then push them hard (spiral chart) so that you knowledge about bits used is more advanced.
I am not going to say that everyone should sit down and start coding their engine. There are a lot of ways to improve your coding skills. I am only trying to prove that engine programming is not the MOST WRONG one. :)
@w.:
Well, the problem is that I'm talking about programmers. You can create Arkanoid without any sophisticated art skills (just some aesthetics required). As our “simple games” go more and more complex this won’t be enough. You won’t create Mario with just programming. You’ll need a lot of GFX and levels.
You can of course look for team-mates or buy a tablet and few “from zero to hero” art tutorials. But this won’t improve your code by any means. If you’re going to work as programmer your fledgling art skills won’t help.
Besides, most programmers have poor or no graphics/management/marketing skills. Even if they say they do. In many amateur projects, (lead) programmer is team leader simply because he is the only one who knows how things (should) work.28.02.2010 12:00:03
-
BTW could you test posting your whole comment here: http://dabroz.scythe.pl/2010/2/test-foo123 ?
If it will be trimmed again, please mail me some info (see "Contact" on sidebar).
There is no substr()ing comments, well in fact whole blog engine is written in C#. :)28.02.2010 12:02:25
-
w.:
(I did send one earlier, now again from another acc, and done few tests on that testpage)
I also didn't want to make them graphics-wannabe (and can be as simple as 10-32 tiles, that's 1-4h work even if looks like crap +1-2h for level ).
My point is - it's better to make progressive improvements (by choosing 1/2 skills u want to master), then to start overall the time - as completed projects are better cv/morale-wise ;)
Yes it takes time from coding, But on the other hand - (prepare, u don't expect that!) - you gain coding skills from coding. Assuming the same amount of time spend - I believe there are better choices then making own engine.
For example - 6 months, 20h/week - you can either master AI, and use dx/xna/some ql renderer for doing stuff, or try to rewrite everything, and be a generalist. good one, yet not specialised. )
28.02.2010 13:32:12
-
Having written a number of working engines.. I complete agree with writing a engine is _bad_. It just is. Here's why (most of the points quite obvious)
- Time. By the time you have learnt ANYTHING useful your understanding is out of date. And on top of that, learning it yourself will teach you NOTHING. You will need to do the same thing about 5 times before you learn correct ways to tackle problems. Rather than waste this time.. read good books of well founded theory and practice. Solve LOTS of little problems, and examine LOTS of little code sections for problems (Game Programming Gems is perfect example).
- Quality. No matter what you do, you will not be able to SHOW-OFF a polished piece of work. This is to _your_ detriment, because its what people see that make them judge your abilities. Especially when hiring - most people hiring programmers (like I did at a few companies) dont have time to seriously spend ages trying to determine the coding skills of a crap looking demo. Either make a good looking one.. or DONT DO IT!
- Reality. These days developing a game engine will set you back _years_ to make something of decent quality. If your aim is to produce something, learn how games are developed and get into the industry, making a complete engine that works crappy will get you no points. The massive majority of ALL games these days use middleware and open source code for vast majority of engine codebases. You buy UnrealEngine3.. or Crytek.. etc. Then you make your game. The REALITY is that all game developers are under pressure to make higher quality games in the same time segments, there is very little time to 'play'. Only the bigger studio's get this luxury. And even then.. most still use as much prebuilt tools/systems as possible.
- Your own sanity. Consider this. What is more gratifying, getting a decent quality title/app with your own unique style and gameplay out using something like Unity within a month or two (and being able to then publish on net or iphone) or.. spend 2 years slaving away trying to make something similar (remembering the team of 50 dudes at Unity will have jumped 4 or 5 versions in 2 yrs.. and added a tun of features in that time).
These days, it makes almost NO sense to re-invent the wheel. The tools and systems now available (Unigine for example) for their cheap costs is simply incomparable - you cant ever hope to get close to what some of these teams can do. What is important is to learn how to bolt things into these engines, understand scripting and event systems, learn shader systems, and animation tools.. and so on.. this will be far more time effective and get you into the business much quicker with much better experience. We look for flexible programmers these days, not programmers who can code engines..11.06.2010 10:15:56