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. That’s right, it’s all binary data, a certain set of binary digits in a given finite range. 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 that’s 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.
In any case this process is that the idea that I have is all ready working in my mind, and the creative process of authoring the code is not a process of construction, but rather discovery. I am discovering the code that results in a proof of concept that was all ready there in my mind, but is now up and running.
Is what I am envisioning something that has been developed by someone else? If so maybe I should not waste my time discovering it, but rather look into that which as all ready discovered if that makes any sense.
Whenever I get an idea for a project I can start out by doing a little quick 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. I might still make my own static site generator, but that would be a major project at least to get all the features I want. In any case the ideas that I have for this kind of project are not really all that novel, they are all just my own unique spins on something that has all ready been done many times over as there are a lot of other static site generators out there.
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 underlying 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.
This is my twenty fifth blog post for my personal Github pages site, and as such I wanted to start something new that is not just about programming.
Be sure to check out my many other posts on discovery.