Now that I have kids I often watch them playing with their toys. Our house has about 2 legos per square inch – often right under my bare foot late at night. I’ll watch them dig into their box of Legos, carefully selecting pieces and parts and assembling the most amazing creatures, vehicles, and towers. They don’t think twice about how the legos got there, or how they were made, they just know that they fit together, and that it suits their play.
I wonder how different their experience would be if they had to pull out the injection moulding machine, pour in the pellets, and wait for the hot, freshly created legos to cool in order to play with them, only to throw all the pieces away after every playtime. I imagine after a while they would stop playing with Legos altogether and watch TV or something.
I strikes me that this is precisely what many game and web developers actually do when they sit down to work on a project. Instead of looking around for that box of “legos” – or reusable open source libraries and software – they start off with an “empty” box and proceed to injection mould their own pieces and parts, or rather write up their own library code and make up a new architecture again. Does this strike you as odd? “Oh, but Andrew, only I know the exact specs for my project. Using someone else’s code means I have to take as much time to learn it as I would to build my own”. I can see how that may seem at first to be beneficial, however I would ask you to think about this: say it took some developer a month to build a library of code. They spend time debugging it, and they post it up on GitHub or someplace. There are two outcomes of this effort: 1) other people check out the code, offer suggestions, and make improvements, 2) other people write their own code and also post it on GitHub (whereever). In the first scenario you have 2 or more developers working on the same code, and it is now that much better. In the second, you have 2 or more developers working on different code, and they are all essentially the same – just perhaps different bugsets.
Here’s another example. Look at nature. Look closer. See that puppy? Isn’t he cute? That puppy was born a few weeks ago and he can breathe, eat, poop, and wiggle his tail when he’s happy. Did nature go and decide that all the puppies before it were crap, and that surely this time we can make a much better puppy from scratch. Nope, nature took what it already had – a nice dog – let’s call her Mrs. Wiggles – and utilized the genetic processes and material from Mrs. Wiggles to create a new dog. Sure, this analogy is flawed in that of course nature is not a programmer – however you have to admit that that dog is a million times more complex and amazing than anything any human has ever created (besides more humans – nyeah nyeah ). Nature got it. You should never ever start from “scratch”. Even if you have decided to create something completely “new” you should build it from previously existing “parts”.
Ok, why am I spending so much time talking about this? Because I want you to PLAY. So often I hear about writers, programmers, and developers who started off with a briliant idea – only to get hopelessly bogged down in the issues of choosing a language, or writing some DLL that manages memory more efficiently, or in writing – worrying about making that first draft perfect.
It’s is a better and higher thing to build something, than it is to make it perfect. Say you are building a game. You spend all your time working hard to create an awesome 3D engine, UI framework, and finally you get to your game. You build it exactly to your own specs and discover that the idea you had was not really all that fun. You discover this months down the road instead of days because of all that overhead. Of course you may say “Yeah, Andrew but now I have this great library I just built that I can use to build another game.” And I’d say ” you could have had that months ago if you’d used another’s library and tweaked it.” And you’d already be several iterations into your next game.
Are you still with me? The room seems less crowded than it was a little while ago. That’s ok, we are the folks who will be getting things DONE instead of worrying about getting things RIGHT. I look at all that code being created by amazingly smart folks. People who eat drink and breathe 3D or networking, or javascript browser nuances. All this code is like a new ecosystem. Right now there aren’t very many species taking advantage of this ecosystem. They are ignoring the “low hanging fruit” and still digging in the dirt to find roots. Are you going to be a successful creature in this new ecosystem or will you struggle in the old?
This is something of a revelation in my own life as a programmer. I’m wanting to build a simple RPG engine in HTML, JS, and CSS. I’ve made several false starts over the years — getting pretty far along before I had some other project interrupt my work and I find myself later looking at stale old code that only myself of a few months ago even know what the heck is going on. I’m through with that.
Instead I’m going to give up on the idea of building this One Perfect Code library for doing everything, and I’m going to fish around for someone else’s open source rpg project, figure it out, and start building (and contributing back). It’s not going to be perfect, or do exactly what I want – but what it WILL do is get me to the finish line faster so I can see if what I’m building is even worth continuing or if I should spend my time doing something else.
I see developers look down their noses at things like RPGMaker and GameMaker or Visual Basic, but I’ve seen over and over again others who’ve created really cool games and apps using these tools – and in a reasonable time frame as well!
I don’t want you to think I’m against custom coding. I’m all for it! I think it’s a very worthy thing to do. However I am against WASTING my time rebuilding something that has been done over and over again. I want my custom code time to be spent on truly novel things, things that nobody else has gotten to yet because they are still rebuilding their lego sets over and over.
So I encourage you to get out there and spend more time playing and less time moulding, because KIDS play and ZOMBIES mould

Pingback: PHILLIP