I have started my latest project, which, for lack of a better name, I am now calling project Z. (There are too many Project X's on github.)
What is Project Z? This is an attempt to take several years worth of writing random graphics or sound related programs I've written, and attempting to extract the useful bits out of them and create a working game development / game engine library.
The project is 'on' github here: http://wiki.github.com/carangil/ProjectZ/ However no code has yet been posted, only a couple of wiki pages.
This project seems huge... Where do you start? Well, many of my projects end up recreating some of the classic structures, such as linked lists, hashtables or vectors. Also, many of them also utilize some kind of thin wrapper on top of malloc, with various stupid names such as xmalloc. These usually end up being a call to malloc, followed by a NULL check, with the program exiting if allocation failed. So, I will begin there. I am currently working on a simple malloc wrapper, which has better options than just 'die on fail.' I am also selecting my 'best linked list', 'best vector', and 'best hashtable' implementations from the code I have, and cleaning them up.
You may be wondering how a professional's personal code base can become so disorganized. Well, the code has been around since before I went 'pro'... I started playing around with OpenGL in high school. In college, a lot of my time was spent on school projects. In both H.S. and college, I didn't want to 'waste' my time with writing design docs and doing actual 'engineering;' I just wanted to jump into some code and see what happens. Now that I have been developing software professionally for a couple of years, I find most of my old designs rather gross. However, I would not go back and change anything; I am very glad that I have recklessly jumped into coding. If I had spent the time to properly design these things, I might not have had the time to code them. By just diving into it, I have lot of working code that does a lot of interesting things. It is messy, messy code that must be cleaned-up, rewritten, and restructured into a well-engineered framework, but at least I have seen the algorithms work for myself; it is not just a theoretical design sitting on paper.