Monday, August 24, 2009

why programmers rock

In a very broad sense, this entry is a pseudo review of the last few months in San Francisco. I'm very grateful that you guys encouraged me to seriously consider this opportunity. This term has indeed been a blast, and I've learned things that helped me become more of myself. One of the reasons why this term has been such an experience is because I've been around programmers. Programmers, I must say, are the more interesting people one could chance upon.

I'm referring to real programmers, of course. I know many programmers who sees programming as something they do to put bread on the table. I know many of them, especially immigrants whom I doubt really enjoy what they do. They are of a different breed. For example, my parents discouraged me from programming, saying that it's a draining job that requires a lot of brain power that I wouldn't have when I get older. That's right, it's just a job to them, just like any other job.

Real programmers don't just do it because it's a job. They're not always like artists or pure mathematicians either, who do their work for the love of its beauty. Elegance exists in programming, but that's a side effect, not a goal. Most real programmers are pragmatists that, beyond all else, just wants to get something done.

That brings me to my first point:

1) Programmers aren't just programmers.

Most programmers have ulterior motives beyond programming. They seemed to have chanced upon programming because there was a problem they wanted to solve: maybe it was to automate something, build something, or find an efficient way to compute something. Programming just happened to be the best mean to an end. It is a tool, and there are many ways that one can use that tool. Programmers, thus, have a wide range of both personal and career interests.

On the same note, if you ask some real programmers what their major was, you would hear all sorts of things: physics is very common, so is math, you might have a few sciences and maybe even arts. This is possible again because programming is a tool that people can learn to solve various problems, problems that people in every day life can chance upon.

2) Programmers are not lazy.

Some of the laziest people I know are programmers. It make sense: why else will they want to program a computer but to do all the work for them? Programmers tend not to want to waste the slightest effort in anything they do. Low input. High output. They strives to be super efficient like that. Yet none the good programmers suffer from the laziness of thought. They can't afford to; almost all of programming is pure thought-work. Unlike the rest of us, programmers have learned that the least-effort solutions requires the use of their heads. So they do.

This discipline that they gain from the "least effort" mentality is really valuable; thinking more is not only the lest cost solution, it is also the most effective solution. I don't need to blabber on about the power of our minds, and how the only way to improve it is to use it consistently. I also already said enough about this being the reason why I wanted a programming job.

3) Programmers have a different world view.

Of course I'm thinking about Steve Yegge's series about the Programmer's View of the Universe. The second in the series was, in my opinion, the most insightful (though the first is very good too). He considers the question "what's outside of the universe" by imagining a Mario car racer asking "what's beyond the wall, beyond which is outside of the game?". He effectively compare the universe to an embedded system, and compares the "outside of the universe" to a place in memory not assigned to this system. The question then becomes, "what's in the position in memory that would have been assigned to the area outside the boundary of the game?" The answer is: it could be anything! This is the notion of the term "undefined".

I understand that his actual answer to the proposed question is not insightful in any way. It's the metaphor he uses to frame the problem that is insightful. Programmers like Yegge avail themselves to metaphors from Computer Science, which they can use to discuss the nature of the universe. For programmers, a metaphysical questions such as "If a tree falls in a forest and nobody is around, does it make noise?" can be more concisely state as "Is the universe evaluated lazily?" These metaphors exist because programmers spend so much of their time designing and building systems, so they can't help but compare it to the designing and building of our universe. Perhaps this allows them to see through the eye of what might have been the creator.

We must be cautious, as these metaphors in themselves may not be accurate. For example, one can argue that one thing that differentiates a system that's evaluated lazily and one that isn't, is that lazy evaluation allows for the definition of an infinite series. Our world allows for the definition of infinite series, and therefore ... the tree should not make noise! Can you tell what's wrong with this argument?

Regardless of how accurate such metaphors are in depicting how the universe works, it is an interesting lens through which one can attempt to view the universe. Even though I may not pursue a career as a programmer, I do value the fact that I'm surrounded by programmers, and that I've dabbed my feet in it for a bit.

End of Entry