Thursday, August 27, 2009

My third "last day" experience, and by far this was the most enjoyable. This is because the entire term has been a blast! I've done far more than in previous work terms, and the work itself has been interesting. Analytics was fun, and random math and stats problems were fun too. I had the most awesome boss that I could ever ask for. I also had food! I love food! My evaluation of Tagged is pure awesomeness. If any of you is thinking of a co-op or full time position in software, at least consider Tagged.

As for Tagged's evaluation with me - I was really surprised at how positive it was, and I almost felt guilty. There are many things I haven't done so well. I screwed up a LOT, but my boss didn't seem to mind. Compared to the other interns, I was the clueless one who couldn't remember the command "ssh", who didn't know how to write a batch script, who couldn't spot a geometric series, and who took two days to write a feature that would've taken another intern a few hours to complete. Then it was pointed out, and this is true I suppose, that's it's about expectations. I am a second year math student, and there's a set of expectations attached to that that I'm measured against.

Missing the City

I feel like a child again, with the same nostalgia felt when I first began reflecting the lost times that would never come back. I sit here and think of everything that happened here, in the last four months. At first I was utterly confused, and wasn't sure how long it would take for me to become comfortable. Eventually it got better, Raj and I explored the city, I started getting used to working with the code base for analytics first, then web. Then there are the countless breakfasts at Pat's, walks to the wharf, climbs up Taylor/Lombard, and Ghirardelli's - yum. Is it childish to reminisce also at the trips to the laundry room? And this room... I look out from here: Raj is at his computer as usual, and beyond that there's the large window, the balcony, then Columbus, then the Indian/Irish place we'd always go to, and also Pat's, then the rest of North Beach, then Alcatraz, engulfed by fog ... everything seems so natural, so right, so ... homey. I don't want to leave!!

If you liked it so much, why aren't you coming back?!?!?

It's tempting, really tempting, but if you read my letter to the world, you'd realize that working at Tagged isn't really the goal I should pursue. What I got out from Tagged was really two folds: (1) I gained more focus, more used to thinking, and (2) I learned a new set of tools which I could use for any purpose I choose. Point 1 will still be applicable if I come back, but point 2 wouldn't be. I want either something that resonates more with my passions, or an experience that I can draw a completely different tool from, or... both!

In my blog post "Turning Twenty" written last December, I mentioned "going home" as a large open-ended goal for the next decade. Then life threw San Francisco at me - the furthest thing from home in any way you could think about: I'm far from Greg, I'm far from any place I've been to, it was my first programming job, I had no knowledge of anyone here except a friend of a friend (Adam), and a guy who lives up in the mountains (whom I don't really know). At the time, I thought this was life saying to me again, "No, not yet! You haven't seen it all!" But now that I think about it... maybe life was helping me find home. Maybe life was helping me find home all along. Thanks, life! We're definitely getting warmer! (But we can't settle for anything less)

Monday, August 24, 2009

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.