I finally pieced a bunch of ideas together. When apart, each has always felt like they were missing something. Put together, and there is an epiphany.
There is a quality of perceiving the world which comes to some of humanity. In some cases, one will have an animistic slant. They become shaman, monks, witches. They explore ideas.
They are basically atheists. Very often they outright reject or even directly oppose religion. Not spirituality, which is extremely strong in them, but religion.
They anthropomorphise things. Everything is imparted a sort of humanness, a kind of respect.
They have a view of the world and things in it. Something about all things being connected and being treated the same. They have a sort of fierce and personal morality.
Freedom is paramount need to them. For everyone. A kind of freedom to pursue an inner and individual passion or path.
There is a certain "school" of computer user who anthropomorphise their computer. They carefully name their computers, their network connections. There are joking comments about making sacrifices to appease some great spirit of the computer. There is the notion of "magic".
There is an idea, particularly in the circles of very capable programmers, of "elegant code". Something far above and beyond basic correctness.
It is as though there is a certain obligation to the spirit of the code to make the idea of it as good as is possible.
In common programming practice, one "optimizes" only when there is a cost:benefit ratio that justifies it. But to a hacker, there is some kind of need to perfect the code.
I have come to understand a combination of all these things. A long time ago I only understood pieces, but recently it all came together very strongly.
It was when programming in lua, a language I don't really know and never actually tried very hard to learn.
My goal was pretty simple.. I wanted to take a number of seconds and turn it into hours, minutes and seconds. 60 seconds is 1 minute, 0 seconds.. you get the idea.
So, not knowing lua, I just searched around for someone else's code.. to both steal it and adapt it for my purposes.
function sec2Min(secs) if secs > 59 then myMinutes = Math.Floor(secs/60); mySeconds = secs-(Math.Floor(secs/60)*60); if mySeconds < 10 then mySeconds = "0"..mySeconds; end myTime = myMinutes..":"..mySeconds; else if secs < 10 then mySeconds = "0"..secs; end myTime = "0:"..mySeconds; end return myTime; end
I began working this block of code over, tuning it to my specific purposes. I rewrote it a couple of times. Something didn't feel right.
Then I had an epiphany. I stopped and thought about how a person would break a number of seconds down into hours, minutes and seconds. I wrote some code from scratch, from the heart.
I saw a pattern.
(note that some code is different when programming lua on World of Warcraft, which is what this was for.)
function seconds_conversion( int ) s = int -- h = math.floor(s/60/60) s = s - (h*60*60) -- m = math.floor(s/60) s = s - (m*60) -- return h,m,s end
(I see a pattern there, and I think I could optimize it further to make it a universal idea of breaking one number down into other numbers, which really intrigues me, but that would be beyond the basic goal of working with seconds/time.)
The feeling I had when writing this simple piece of code was exhilarating.. and something else. I felt as though I did justice to this code, as though I helped it become something better.
Then I realised I had been seeing the code as a thing which needed to reach its potential. A thing which I needed to help. I had anthropomorphised the code.
The Code is Alive.
There is a programmer's wanderlust that grips me, where I pursue one project and then the next.. never necessarily completing anything. This is something I have encouraged, just to explore the idea.
I've always felt a sort of wrongness with the incompleteness of my projects.. and now I understand it is a cognitive dissonance caused by the responsibility to the potential of the code.
I think that somewhere in here is the shamanistic reasoning behind free software. Software has a right to be free, because it is alive, and I can quell my sadness of abandoning some code, via my wanderlust, by making the code free to be found and improved by another.