Before my browser crashed a moment ago, I was in the middle of posting this, so if this doesn’t make any sense, assume that the thoughts I had already typed in were lost in the crash. Also, before my browser crashed, I had something on the order of 15 browser windows open to various sites, and found myself in the midst of taking on a very large project that, maybe, I won’t actually have to do. There is a thing that I want to be able to accomplish, and some programmers have done a similar thing in a Unix environment, with limited usability, mostly to show that the technology would be useful if developed fully. What I had started was learning several different programming languages and protocols so that I could develop first an understanding of how the existing software works, then develop the software that does what I want to accomplish. So, I was examining the existing software products to understand how the features they offered related to the features I wanted, and the languages that the software was written in, and then, before I got too far, I realized what I was doing.
I have had in the past a tendency to re-invent the wheel when I did not need to. I recently came up with a “new” combo discipline for the role-playing game I mentioned; several days later I received a call informing me that the developers of the game had already developed it and published it. If I had researched it properly, I wouldn’t have come up with the character I did, since I would have thought of the discipline in the way the publishers intended, but I would have known the proper way to achieve and use it. Is it better to develop it on my own, to address the obstacle I have specifically, or to try to find out if someone else has done this before, or something like this, and do it the way that someone else already has?
There is a funny story about how one time I needed to divide some numbers, and for the life of me I couldn’t remember how to divide, so I worked out a theoretical model that described division, and simplified from that until I had a process to divide the numbers at hand. After that day for a while, it was still on my mind, and I simplified and simplified and made division more and more elegant until some time later it occurred to me that someone had figured out how to divide before me, and I looked up how to do long division. It was one of the steps in between. My end result (which I can’t recall right now, either) was easier and faster than long division, but something very much like long division was something I developed independently from my understanding of how division MUST work. So, sure, maybe nowadays I just grab a calculator, but I know that if I were pressed, I can figure out how to develop ways of figuring things out. Does that make me a better person that someone who just memorized multiplication and division tables? Does that say something about the difficulties I had comprehending fractions in the fifth grade? Who knows.
Did you know that the design of the back end of the Modern Evil website is basically an entirely new way of storing and parsing content and HTML separately that I developed on my own because of the way I wanted things simplified? I didn’t do a lot of research about what other people were doing to tackle the problems I was faced with, because I hadn’t seen any websites that did what I thought I wanted. What I came up with is a fairly elegant solution that resulted in a total separation of content from layout and style, and a total of two .html files for the whole site. The rest is in javascript files. A “normal” website would have the content IN the HTML files. This causes problems for some site administrators because when they want to change some element of the layout, they have to modify hundreds or thousands of individual HTML files. My method means I only have to update the two. (If I wanted to, I could even narrow it down to one, at the expense of a little load time on archives pages.) My method also solves a problem that was addressed years before by the development of CSS 1 and CSS 2, which effectively separate style from content. Their method puts the content in HTML files and the style in new files, called .css files. This site uses CSS for its layout.
So, was I wrong to develop a solution to a problem that had already been addressed? Was it a waste of my time? Could I have done better with CSS? Possibly. I might even have a little better-looking site over at Modern Evil. As it turns out, I can go ahead and use CSS in addition to my JS workaround, and further separate the style from the content. I would effectively have HTML files that did nothing but call other files at that point. But the point of this message, I think, is about whether I should try to stop myself from re-inventing everything.
Like interpersonal relationships. Sure, I have done quite a bit of study on the subject, both personally and by reading about other people’s first- and second-hand experiences with interpersonal relationships. I have also gone to great lengths to ignore what is commonly considered “normal” and to stay away from “dating” people. I have had so many relationships that there just aren’t words to explain easily in the last five years that I believe I have definitely been re-inventing the wheel. In other cases where I took something that had been done before and re-worked it from scratch, I came up with a novel approach that was different than the original but also successful; is this possible with relationships? Is it desirable? Who knows?
The thing I was thinking of programming for, ultimately, would be a new tool for building/displaying digital comics in a way that has been suggested, but which has no possible, real implementation available at this time. I know a couple of people working on writing comics that use this paradigm, but who are using inferior tools that do not fully implement their vision. The tool I am imagining would not only allow them to fully implement the vision they have in mind, it would be able to draw from the materials they are developing for the inferior environment and improve upon it. Strangely, I do not particularly have a story or idea in mind for how I would personally utilize this technology, except to enable others to use it.
Ah, good old-fashioned horse-before-carriage work. Is there anything finer?