My Message close
GAME JOBS
Latest Jobs
spacer View All     Post a Job     RSS spacer
 
May 25, 2013
 
Infinity Ward / Activision
Senior Tools Engineer
 
Airtight Games
Environment Artist
 
App Minis LLC
Senior Unity Game Programmer
 
Electronic Arts - EA PLAY
Gameplay Engineer
 
Airtight Games
Programmer
 
Gameloft
Game Designer
spacer
Blogs

  The Masochistic Programmer
by David Maletz on 12/28/10 08:30:00 pm
8 comments Share on Twitter Share on Facebook RSS
 
 
The following blog was, unless otherwise noted, independently written by a member of Gamasutra's game development community. The thoughts and opinions expressed here are not necessarily those of Gamasutra or its parent company.

Want to write your own blog post on Gamasutra? It's easy! Click here to get started. Your post could be featured on Gamasutra's home page, right alongside our award-winning articles and news stories.
 

My name is David Maletz, and I am a self-proclaimed masochistic programmer. Why am I a masochistic programmer? Because whenever I have a choice between using an existing utility or creating the utility myself from scratch, I almost always choose the latter. Determining what tools to use, and what tools not to use is critical for all game and software development. Choosing the right tool could save months, perhaps even years of development time, but the wrong tool could come with a poorly documented API, bugs or the have the wrong tools and utilities. A smart programmer carefully chooses his tools and learns how to use them well. I prefer to make my own tools, reinventing the wheel, and making it better. Why? Partially for the learning experience. Every tool I write gives me hands on experience with the inner workings of that tool. However, the main reason is because that's just who I am, the masochistic programmer. And isn't it fitting that I am now working in game engine development?


I wont go into details about my history in my first post, but to put it briefly, I'm a graduated computer science major who has been programming, and developing computer games since I was 12 and have made (and failed to make) many games. One of the failures I'm most proud of is Aero Empire, as even though it was not completed, I learned a lot while making it, and was also the first time I tried making a game with a large team. I also enjoy telling people about the pseudo 3D maze-crawler RPG I wrote entirely in x86 assembly code, but that's another story. In graduate school, I developed rendering algorithms and wrote papers as a research assistant (my portrait image is a screenshot from an interactive algorithm I developed), but decided I preferred hands on development to research.


A screenshot from the indie game Aero Empire.


After graduating from college, I decided that I should make a game engine. I've had plenty of experience making the utilities games need because, as a masochist, I have written them from scratch more than once. I also have a lot of experience with advanced rendering algorithms because of my time as a graphics researcher. And making a game engine satisfies my desire to design and program all of the utilities from square one, exactly how I think they should be (to be honest, I use external libraries for model and texture import and export, although I did write a DDS texture import/export tool from scratch as I couldn't find a free one that fit my needs).


I have been working on a game engine for six months now, and am just finishing up the core, which includes just about everything needed for general scene management and rendering with plenty of utilities to make things easy. The core is designed to be incredibly flexible and dynamic, and has integrated animations, accurate collision detection and instancing. It's pretty interesting - but a long way from completion. It doesn't have any rendering effects yet, so it renders basic phong shaded models. A game engine is a lot of work for one programmer, but as the self-proclaimed masochistic programmer, I look forward to doing it all from scratch, and even torture myself with writing good documentation.


Anyways, I'll continue to post updates with more masochistic coding, interesting thoughts that come up during development, and even news on some small game projects I'm making on the side.

 
 
Comments

Giuseppe Navarria
profile image
Hi! I'm a masochistic programmer too :) I'm at my *drumrolls* second engine now.

My first engine, which I wrote years ago, was DirectX 9 based and got me my first jobs in the industry.

It was quite cool but a bit rubbish in certain aspects, and not very portable because heavily linked to direct3d calls.



Now, after few years of experience both on PC and console I've decided that quitting my job and starting up my own indie label was the right thing to do. I've many indie friends and collegues and we use to share a lot of knowledge on a small community of developers at indievault.it (it's a bit like an italian speaking tigsource). Not many of us are doing their own tools, these years seems over, I remember in ~2000-2003 everyone and their mom were doing 3d engines :)



Now the vast majority settle to Unity or UDK (mostly Unity because UDK is often overkill and has high fees for commercial products), few users that are more skilled follows the C++ way, generally using Ogre 3D.



I'm working on my game engine and it's been about four months, I have a nice importexport pipeline that converts models in my own format (both ascii or binary), another file format for defining materials + parser and the engine is all cool and modular, I have two main rendering modules (DirectX9 and OpenGL renderer), a physics module that implements Bullet, an older one with PhysX adapted from my older engine and I'm writing the main tools now (maplevel editor that imports raw .obj, .fbx, .x and let me create new entities, assigncreate materials, lights and so on).



I'm quite happy about it and I plan to get a console devkit in the next months. It's a lot of work but it's totally worth it. People talking about reinventing the wheel are often people that spend the same amount of time learning Unity without the benefits you have in the end, both in experience and in usefulness of the tools.

In programming in general you learn how something works only when you do it by yourself, many people using blackboxes like Unity could improve a lot their programming skills just hanging around a bit with the DirectX SDK.



Good luck!

David Maletz
profile image
Hi! Thanks for the comment. I completely agree that being able to understand the black box allows programmers to both improve their skills and use the black box more effectively. Personally, I've found it great getting hands on experience with the internals of the tools I created, but I'm also trying to create those tools in a way that another programmer (or even artist) could use them without having to know all of the nitty-gritty details.



Your story about your first game engine brought me back to my first engine which was also too API dependent (OpenGL in my case), to the point that I had to make explicit OpenGL calls in the game code for most rendering purposes. The main problem with my first game engine was that it was not designed as a stand alone engine, but as the main tool for a game I was making at the time. This made the engine work well for that game, but ended up not flexible enough to work for other games. With my current game engine, I've designed it from the ground up as a game engine, not linked to any game, and am making it versatile enough to create any kind of game.



In any case, even if the time of writing tools is over, I'll continue making tools at my own pace, and perhaps even bring some competition to Unity and the UDK. That is just who I am - the masochistic programmer.



Anyways, glad to hear from a masochistic comrade, and good luck on finishing up your game engine. Definitely send me a link when you have something uploaded.

Benjamin Smeland
profile image
Excellent screenshot. I'm jealous. I also tend to reinvent over learning someone else's tech. As opposed to masochism as my main drive (although it is still a major factor), I find that it is just more difficult to try to interpret what another was thinking when they devised their solution that is is to just create my own and understand the science. Of course, that approach is not the quickest. I would be interested in seeing what you come up with.

David Maletz
profile image
Thanks for the compliment. I agree that it is difficult to interpret another's code, especially when the documentation is bad. Code supplied with research papers is especially convoluted and poorly documented, and it is almost always easier to follow the paper and write the code yourself than interpret the provided source code (and taking the time to work through the paper is a valuable learning experience). Keeping that in mind, I'm trying to keep my engine and the technology behind it well documented so that it is actually usable, which is not an easy task for me (who is used to writing said convoluted research code), but I will torture myself a little with making sure it's done right.

Kyle Roucis
profile image
Ah, a kindred spirit! Your backstory is very impressive and hats off for the Aero Empire screen shot: looks great! Are you working on this engine alone? What platform(s) is it targeted at? What language(s) are you writing it in? How long have you been working on it?



I too am building a game engine from scratch with the following answers to my questions: Yes, Mac/iOS, Objective-C/MacRuby, 4+ years. Good luck to you and I hope to see more developments in the future!

David Maletz
profile image
Thanks. Even though Aero Empire is put on hold, I learned a lot when adding the tech behind it, and plan to incorporate some of the effects into my current game engine project.



As for your questions, right now I am working on the engine alone, although later I am considering bringing on more programmers to work on tools and will need artists to create tech demos. The engine is multi-platform, right now it works on windows (XP, Vista and 7, both 32-bit and 64-bit) and linux (tested on ubuntu 32-bit), but the engine is designed to be easy to port to other platforms, and I plan to add Mac, android, iPhone and console support eventually. The engine is written in C++ (with a C++ scripting language which can be compiled into the executable in release mode and cg shading language). I have been working on the engine for six months, so it is still in early development with only the core finished.



How is your engine progressing? Are you planning on a release soon? What effects do you have?



Good luck to you too, and I'll be sure to post developments in the future.

Kyle Roucis
profile image
Wow, that sounds great! I'm quite jealous :P. The engine is coming along slowly (one person with virtually no experience developing as a side project to school). I am currently creating a game with it, but the engine itself is far from release. Effects? Like features? Not as much as I would like :P.

Nice to see someone else crazy enough to try making their own engine and actually having success at it. It's endearing and encouraging. Again, best of luck with your engine, I'll be watching for updates!

David Maletz
profile image
Well keep chugging along on your engine - the more you work on the engine, the more experienced you'll get, and don't be afraid to refactor the engine as you work on it. Also, implementing cool features and effects for your engine will make it impressive and reading new papers will keep you up to date on all of the tech you can put in your engine. Thanks for all the comments, and best of luck to you too!


none
 
Comment:
 




 
UBM Tech