While I'm at work I do not have this problem, but for some reason while I'm at home I just keep geoengineering things a lot.. let me put that in a perspective,
I worked as a game programmer for 1 year, during that time I worked on the UI and gameplay. The UI was done in an Embedded Flash and C++, the gameplay was i"mplemented" in Excel Spreadsheets and C++. I did exactly what I was asked for, I'm confident that i've deviled and everyone was on the team was satisfied with my work including me.
Later for some reason i've decided to change my job (i had 1 year of professional experience in total at that moment). My new job is to write plugins and tools (usually for 3ds Max and Maya) for 3D rendering(file IO, talking to other plugins, UI, scene conversion tool like that, almost nothing around the actual rendering).
At home I'm developing that mini-game engine that I lie to myself that is for educational purposes only, but deep inside me I really hope to quit my job one day and develop a game on my own(probably with that engine that i currently write). The problem is that It has been 3 years of writing after work and during the weekend (while mixing real life).
The development goes extremely slow. For those 3 years I wrote:
- D3D11/OpenGL3+ - wrapper that misses some features
- A shading language (Vertex and Pixel shaders only) that translates to HLSL/GLSL @ feature level of ~ShaderModel 2.
- A flexible 3D models file format with import export. (and a small CPU skinning for that)
- a bunch of other small things (base64, DDS texture IO, Linux support maintaining).
And that's it for 3 years of work. It's just too slow and currently I blame over engineering:
Let me give you and example: for the last ~2 months I'm trying to design and program:
- a general purpose "entity system" (just a small set of features that i think are need my most of the games).
- a basic editor around that "entity system". an example would be a world editor, value tweakers.
- a Undo/Redo system for that editor.
That thing above itself is complex enough for me, but additionally I'm carrying the burden of over engendering. I'm going to give my most renascent example:
IF TL;DR start here:
For my level editor nodes I've implemented a very small structure:
struct Node
{
string name;
std::map<string, int> int_attributes;
std::map<string, float> float_attributes.
};
I imagine that everything on the level is going to be represented by that stricture in the editor(the game would have a different implementation). So far so good, but I remembered that for the 3D Models file format I've implemented a class that holds an "animated value" :
struct Parameter
{
int data_type; // int float, vec3f ect...
void* default_data;
std::vector<animated> data; // basically a set of [animation name, {key-values}]
};
So literally after 5 seconds I've decided that I must use that stricture for the level editor as I may want in the future to have animated parameters for my game objects! But as I think about it how often do you have animated values for your game objects.. Using that "Parameter"
class will sure make thing a bit more flexible, but the code is going to be a bit more complicated and slower(well 3ds Max and Maya aren't that slow and their implementation of ParamBlocks and Attributes is a lot more complicated than mine). And basically I cannot decide. My lack of experience is playing thick on me.
Now imagine doing this ON EVERYTHING YOU WRITE! I literally do it....
In addition to that i needed ~3 weeks to come up with an idea how to implement those features together (I have 0 lines of code on the topic so far), this itself made me super lazy, because the task seems really hard and for some reason I stayed away form Visual Studio and instead I wasted my time playing WoW.
Now I finally somehow recovered form that laziness, but I'm hitting that over engeneering wall...
So my questions are:
- How do you handle complex task and avoid laziness and lack of motivation?
- How do you deal with over engineering?
- Do you think that an average programmer would do more for those 3 years?
- Any thing you wanna add? personal experience and suggestions.
Sorry for the long post and my bad grimmer and spelling, here is a <potato>.