first, a little about me OK, a lot about me
If you don’t know me, don’t care to know me, and aren’t really that interested in me or why I’m spending my time here, skip on down to My Life With Android.
In the mid-1990s, life was good. Planes weren’t running into buildings, grunge music was at it’s apex, I was somewhere between my late teens and early 20s, and had my first desktop with a high-speed connection. Enter: the internet, in all it’s pronographic glory. With e-mail, and newsgroups, and music, and Quake, and IRC where “girls” wanted to talk to me. Sure I was becoming anti-social, but I was part of a new experience. I’m pretty sure we’ll all eventually look back on that time as the birth of the wild west. The time when the world started getting smaller, and things like geography and money stopped mattering quite so much…but time will tell. For now, I’m just trying to give you some context of where I come from (I’m pretty sure context is important, but who knows…I’m no author).
So in between playing with computers and getting as drunk as possible as often as possible, I studied Computer Science, and it was of interest. Mine was the first class who learned C++ instead of Pascal in our first years of study. Then we played with databases and graphics and discrete math and algorithms and data structures. And we built projects…week long binges of cigarettes and Mountain Dew in Smalltalk, ML, C++, Pro*C, and Assembly. Tangentially, we learned about HTML, building web pages, how the internet worked, how computers were built. But it wasn’t until nearly the end of my higher education that I found a language I loved: Java. CS 435, Software Engineering, was taught by Ben Bederson. The class focused on software engineering; how to manage a project, best practices, etc. etc. But the reason it was the favorite class of my college career was that we had a semester long group project that was built in Java. We had a few options for the project, as follows:
- Something lame
- Something lame
- A MULTI-PLAYER ASTEROIDS APPLET
- Something lame
- Something lame
Wait a minute…you mean after all this time of building Oct-trees and figuring out Big O of such and so, and implementing shortest path algorithms, I can now build a game? WTF…let’s go.
Now if you’re at all clued in to the wonderful world of Java, you probably noticed that I mentioned we had a group project to build an applet and immediately a) snickered, b) thought, “jesus, this guy is old”…both valid reactions. But remember, this was back when Java was still in it’s infancy: there was no J2EE spec, everybody was convinced that Java was too slow to run on the desktop or a server (Virtual Machine…BAH!), and the stateless nature of the internet seemed like a bad idea. We sure were stupid back then. Then again, we’re always looking back and saying how stupid we were back then, so maybe we’re just perpetually stupid but never know any better until years later. ANYWAY, so my team built this Asteroids applet, and it was awesome.
It was just a little vector based game, but it brought a lot of things together for me. How can I respond to user input? Ah, event listeners…those seem nice. How do I make this ship rotate on the screen when a user hits the arrow key? Oh, it’s just matrix manipulation…I guess there was something to all the linear algebra after all. The stupid screen keeps flickering when we refresh it…off-screen buffer to the rescue. We’re building a multi-player game, how on earth will we figure this out? Clients, servers, TCP traffic, state machines…oh my. And under it all was this beautiful new Java language. No more memory allocation, no more copy constructors, no more pointers, and the epiphany of the try/catch block. Less hassle, more dazzle (see what I did there with “hassle” and “dazzle”…that’s called approximate rhyme, but who knows, I’m no poet). Not to digress any further, but if you’ve made it this far you’re obviously at work looking for ways to pass the time so you can hurry home to play on the internet, so a brief tangent on the try/catch block and our Asteroids project.
In CS 435, we were all new to Java, and expected to learn it on the fly. So we played around with it outside of class, but nobody was what you’d call an “expert” come project time. Anyhow, I don’t remember the specifics, but we had some situation in our project (code-named ‘Roids, because that’s how we rolled) where we had to check a String for null. So, being a well-educated reader, you’d expect to see something like this:
String foo = getFoo();
if(foo != null) {
foo = foo.toLowercase();
}
But not from the ‘Roids team. No, we were in love with try/catch, so we handled the situation like this:
String foo = getFoo();
try {
foo = foo.toLowercase()
} catch(NullPointerException e) {
//whatever
}
We sure were stupid back then….
And now back to our original chronology. So I graduated with a CS degree, and I accepted a job getting paid to write Java for a living. I was making more money than most everybody I knew, and I was having fun. By this time, people started to realize that Applets were a joke, and that Java made sense on the server side. I think the first draft of the J2EE spec was out, and we were building servlets. Still no no JSP, and no Tomcat, just the Sun reference servlet container, but what the hell, I was building web-based application, rolling my own MVC framework, and I actively contemplated explaining the beauty of design patterns to my girlfriend. I later married that girl, thanks in large part, I’m pretty sure, to my decision to forgo any design pattern foreplay (but who knows, I’m no Romeo).
After a few years of being a code monkey, I obivously had the breadth of experience needed to help run a start-up. I was employee #4 of a business that my friend somehow conned a VC into funding for an un-godly amount of money. This was late nineties, right when everybody and their convict step-brother was being funded for un-godly amounts of money…people were so stupid then. Anyhow, we were going to change the world. We were going to bring internet to 3rd world countries. We were going to be rock stars and party like it was 1999 (ironically, I think it was 1999). Unfortunately, none of us had any idea how to run a local business, much less a global business, so we ended up just burning through a bunch of VC money and getting sued by some company in Russia whom I’m pretty sure was connected to the mob. But what the hell, it wasn’t my money, I wasn’t liable.
I’ve since come to believe that VCs are the most soulless people on earth and that their money is dirtier than drug money and diamond money and murdered babies all rolled into one…so good for us for sticking it to the man…at least we had good intentions when we started. ANYHOW, the startup experience was probably the single best thing I could have done at that point in my life because:
- We had a ton of fun
- I found a sense of professional self-confidence (this is one of the single best thing that’s ever happened to me)
- We built some cool hardware and software
- We became J2EE experts
- We played a lot of Quake
- We worked in the city
- We got drunk often
- I was still young
- I believed in what we were doing
- We threw one ridiculous launch party
- I learned about the beauty of a 4 day work week
Inevitably the VC wised up and we ran out of money, so it was time to do something else. Having no real bills and no real responsibility, I took a few months off and played a bunch of hockey, rode my bike, and just generally enjoyed myself. And then another start-up job fell in my lap, so I took it.
My new job was a series of contradictions. On one hand it was great because I was working a 4-day work week (professional self-confidence leads to powerful negotiating skills) and working on a cool idea (putting animal health information online…hey, it may not sound cool to you, but let me have my moment). On the other hand, the technology we were using (PHP, PERL, and a little Java) felt like a step backwards and half the people I worked with were bat-shit insane. Let me take a minute to quantify my last statement. I’ve worked with many different types of people; technology folks, business folks, art folks, marketing folks, and everybody is a little crazy. But nobody is even in the same universe of insanity with animal people. Stop….reflect…repeat….there are some exceptions, but as a rule, pet-lovers who work in the veterinary industry are bat-shit insane.
Eventually my brand of crazy and the animal-lover brand of crazy couldn’t make it work anymore. I went my way and they kept on keepin’ on.
Next stop….larger company, and the magically world of consulting.
Now people always bitch about consulting. If you’re a consultant you complain about traveling too much, not having your opinion respected by clients, and that you only see a fraction of the money that your company bills you out at. And if you’ve hired a consultant, you’re invariably pissed at how much they’re charging you and maintain the completely rationale fear that, once the consultants leave, you’re likely not going to be any better off than before they showed up. In a nutshell, the whole consulting industry is one big adversarial relationship between the companies who don’t trust their own people to do quality work and the companies who are happy to capitalize on the opportunity.
But I enjoy consulting. Sure, sometimes it seems like the work you do is meaningless and that you’re surrounded by idiots. But, what the hell, there’s a million new things to work on at any given time, you ‘re exposed to a bunch of interesting situations, and, for me anyhow, there’s a lot of satisfaction that comes with solving peoples problems.
So I was pretty good at consulting, still playing with computers and programming, and eventually worked out a four day work week again, and life was good.
Flash forward to 9 months ago…with a wife in school, a cat and a dog, and a house that belongs more to the bank than to me, I came to the realization that I was still working a more or less entry-level job. Sure, I was getting paid somewhere around extremely well, but what was I working towards? Haven’t I done about all I’m going to do with this “technology” business. Hmm, seems like I better think about “career development”. For those of you who aren’t in the tech world, the “career development” internal debate goes something like this (For the purposes of this post, I’ll have my internal debate played out by Sylvia Plath and Ayn Rand….these choices have nothing to do with the opposing sides of the debate, but I like their writing and I bet if I didn’t tell you, there’s a good chance you would have read more into the choice):
Plath: What the hell am I doing with my life. I’m just a monkey working a thankless job making computers work while other people are getting rich.
Rand: Time to make me some monies. I gots to get out of this computer biz-ness.
Plath: But I do /like/ playing with computers. I do /like/ building things and fixing things and helping people out.
Rand: Fuck all that noize. You’s got’s to get your salesman on. That’s where the ballas be at.
Plath: Well, I do have that house, and I sure would like to own more of that house.
Rand: Um-hmm.
Plath: But promise me I won’t completely lose touch with technology.
Rand: Oh hells no. You gonna be right up in that bitch.
Plath: Well, OK, I’ll think about it.
Rand: Think about this sucka (gun, shoot, ridiculous metaphor, etc.)
Ayn Rand sure is ghetto, and I sure was stupid back then.
ANYHOW, so I took a job selling services, and more than one of my co-workers actually said, “So you don’t want to be a geek anymore, huh?” I’m still not sure what to make of that, but I think it’s kind of a compliment in that they consider themselves to be “geek cool” (i.e. over-intelligent and under-appreciated) and put me in the same boat. Or maybe that was just their way of telling me to never IM them again…who knows, I’m no psychologist.
Now I make money money by selling people’s time, which if you really stop to think about it, is a little closer to slave trading than most of us would like to admit. But I have a career to think about, so…you know. Ostensibly, I help place the right people on the right projects, so our customers realize the greatest ROI (Return On Investment, dork) from their software purchase. In reality, I spend a lot of time doing paperwork and harassing contracting officers into signing papers while balancing resource utilization, supporting the sales lifecycle, and trying to make sure our customers are happy. Life’s a game of give and takes I guess, I gave for a while, and now I’m taking.
I’m being overly dramatic for effect here, but the salient point is thus: I’m a bit morally conflicted about my line of work right now, and I’m hoping to find an outlet that will make me feel better about me. Enter….finally, Android. Rather than spending my nights watching TV and playing online poker, I’ve decided that playing around with some new technology might be good for my soul. With any luck, I’ll keep this blog up, and have something interesting to share about Google’s new platform for developing Cell phone applications. But don’t hold me to it, I might get a raise tomorrow and forget all about this moral dilemma. If so, I’ll probably look back and say, “I sure was stupid back then”.
My Life With Android
Google announced the Android SDK preview in the middle of November, and I haven’t slept since. That’s obviously a lie. I’ve slept plenty since then, perhaps even a bit more than normal with the recent holiday. But I have been excited. Excited about a new toy to play with, and what I think is a relatively new paradigm for computing; location-based computing. Everything is converging. We all carry a little computer with us everywhere we go…some people call them cell phones…and these devices know (or will soon know) where we are (GPS). Deep down inside, we all want to connect with people that share our interests, people that will accept us, people that will love us. And the places we spend our time are strong indicators of our personalities. Much better than say, a profile that I fill out on a social networking site.
So now I have a way to track where I spend my time, and have a computer tell me about other people who spend their time similarly. I can find people I’ll like, in the places I already go…all with out lifting a finger? The confluence of location-based services, a priori truths, and social computing tickles me pink.
ready.set.go.