This is where discovery comes into play, and I have come to prefer to use the word discovery rather than creativity. The reason why is because I like to think that what it is that I am developing already exists in a theoretical sense, and I am merely discovering something that is a certain possibility out of a total finite range. So in other words, I am not really creating, I am discovering.
To help better explain what I mean by this, take a moment to think about how all data is stored on a non volatile data storage medium of a computer. Thats right, it’s all binary data. If you are a half way decent programmer, you should know your base two numbers pretty well by now, at least to the point that you know the possible value range of say a single byte of data.
A single byte of a data has 256 possible values, that is there are only 256 possible states that a byte can have, and thats it, it is not infinite, but finite. If I add another byte the range of possibilities jumps up to 65,536 if I double it again to four bytes it increases into the billions at 4,294,967,296. As I keep adding bytes the range of possibilities starts to get into some ridiculously large finite numbers, but they are still just that, finite.
Every possible combination of ones and zeros in say 13kb of data can be considered a kind of index value that all ready exists. When you “create” something that can be stored within 13kb of data, you are not really creating something, but discovering something that was all ready there, as a theoretical possibility within a certain magnitude.
Coding a project can be very time consuming, but envisioning takes little time and effort. All of my projects start with a certain vision, once I have the vision it is then just a matter of making the vision a reality or not. Depending on what it is, the vision can become a reality in just a minute or so, or it may be a kind of project that will take years of my life to complete if I do all the work myself from scratch.
Is what I am envisioning something that has been developed by someone else? If so maybe I should not waste my time discovering it. Whenever I get an idea for a project the first thing that I do is start to do a little Google work to try and find out if someone else has unearthed a project that is what I had in mind. In the past I was very bad with this, but in recent months I have started to make a better effort of checking out what is out there to begin with. I thought about taking the time to make my own static site generator, but I found hexo, and that seems to work just fine for such a task.
If I feel as thought the idea in mind is worthy of an investment of time, I get to work on drafting something together. Often it may be a simple idea, the kind of project that can be slapped together in about an hour or less, if all I care about is a simple proof of concept. As such I often have a working prototype together very quickly, from there I may invest more time to improve it, or just leave it as is and call it yet another exercise.
Part of being a good programmer is knowing when not to program. It’s often hard to make that judgment, as I don’t want to just use other peoples software without having any understanding, or appreciation of it’s underlaying satisfaction. Still I hate spending time re inventing the wheel over, and over again as well. As such I am a bit more slow and calculated when it comes to diving into the deep of it.
Be sure to check out my many other posts on discovery.