A decade of growing
Posted Fri, 01 Jan 2010
I remember trying C++ outside of the AP class, but the C++ they taught us used this horrible bastard misimplementation what looked like STL - instead of "vector" you'd use "apvector" etc... which I couldn't find anywhere outside of class and thus ended my C++ adventures. Here's a tip for teachers and professors: Always use practical material when doing introductory material. Don't create some crap sandbox that isn't useful knowledge outside of the classroom.
I started my computer science degree at RIT in 2001 and joined the Computer Science House (CSH). CSH turned out to be the best part of college by a large measure. From many perspectives, CSH is the best part about RIT: social, learning, common ground, etc. Classes were sometimes interesting, but were often boring and unchallenging. This fact explains why I had a 2.8 GPA when graduating in 2006.
I socialed my way (by knowing professors) into some senior-level IT classes without any prerequisites. I remember them being fun, but mostly I remember the fleet if whiney IT students complaining of the work which I viewed as necessary and also exciting. I took two or three senior IT classes, and the whining was consistent throughout. Kind of depressing, because I was still trying to find an environment outside of CSH where folks actually cared about what they were doing. This student culture seemed to cause RIT to dumb-down it's IT program frequently while I was enrolled. I don't know if it's improved.
School also helped push me to like meritocracy. One summer co-op, I worked for a professor, who's PhD thesis we were implementing in code. When we had questions about implementation problems, the professor gave us the "I don't know" response. I'm implementing your idea, and you don't know? And you got a doctorate from this? I lost respect for master and PhD status after that; I treat them now like any certification and mostly ignore them.
Respect and status is earned, not given. Apparently PhDs and master awards are sometimes given, not earned.
I started learning PHP in early 2002, then Perl in late 2002, Python in 2004, Ruby in 2007. The first version of this site was written in PHP, then redone in Perl and HTML::Mason, then I migrated to pyblosxom.
In late 2002, I found out about RSS; a friend said I should write an rss aggregator, so I did. I used this project as an excuse to learn perl. I wrote the first version of the aggregator was written using perl CGI and DBI, even had a few folks besides me using it. I let the project die after I didn't really gain from having an rss reader.
Another project was an awesome jukebox software called Pimp. Pimp started as local mp3 player in perl, then became a telnet-controlled jukebox system written. Later versions were in python and sported a decent web interface, multiple simultaneous streams, and some othe cool features. For streaming, I had to reverse engineer the shoutcast protocol to add the in-stream metadata (showing you what song is playing).
In 2003, I wrote an aim client in perl using Net::OSCAR. I used it for a year or two, and don't remember why I stopped. That project taught me a lot about terminal interfaces. I also came up with some clever regular expression tricks for doing line editing.
I've learned a great deal of things outside of code, too. I've read Rands in Repose and Eric Raymond's Hacker Howto. Communication mediums like BarCamp, IRC, Twitter, and others are also important here. These have helped me find communities, large and small, like similar to what I had at CSH.
Then there's my career path. Ultimately, I'm a hacker at heart, so I'm looking for challenging problems to solve. Through college and my early jobs, I've learned more about what I need to help me focus on solving challenging problems. I want an environment that is supportive and productive. I want active communication, especially about blocking issues or direction changes.
I've also discovered that I enjoy learning from mistakes. It is difficult to own up to failures of any size and scope, but I find it is more educational, personally, to admit failures and move on to work on learning from those failures. I've had the C-level folks at my current job (Rocket Fuel) explain this exact thing during meetings - about a problem that was quickly acknowledged, responded to, repaired, and post-mortemed. That's responsibility and passion.
I joined Google immediately after graduating from RIT (seriously, I graduated on friday, and started work on the monday). I knew nothing of negotiations, only that I knew I wanted to work there. As a result, I got a crap salary with crap stock. Now I know. Always negotiate. I left Google for OnLive and it's technical challenge. As a side note, my career at Google was going no where; after almost two years, I hadn't really moved, despite some effort, in areas of greater responsibility or in technical challenge.
I left OnLive because the company was going nowhere. Terrible leadership, poor communication, nepotism, and irresponsibility permeated the employee stack up to (and especially) the C-level folks. If successful startups need great people to succeed, then I can only conclude that OnLive will fail. Leaving was a pity, for me, because the exciting technical challenge was still there. My favorite response from management when I talked to them about company-wide problems was "Wait 3 months" - waiting is hoping, and hope is not a strategy. Despite that, I did stay longer, and that was a mistake. Their other senior operations sysadmin guy left shortly after me for the same reasons. Now, I'm a stock holder and also have friends there, so I still hope OnLive does great things, but again, hope is not a strategy.
Both Google and OnLive gave me great perspective and input on what I should look for in future employment.
More career-wise, I continue to have high expectations of my coworkers and especially of leadership. I value responsibility and passion more than I do technical prowess, because responsibility and passion are more rare qualities and are at least as valuable as technical prowess. I expect good communication. I like to ask 'why' questions, and I expect that an answer of "I don't know" should immediately followed by "but I will find out". Living in the dark is counterproductive. I've learned to be patient and learned to translate. Translation is critical. Using a common syntax and terminology is critical when communicating with others. Patience is critical.
Email is the worst, so to assure you that I am in a cheery mood and willing to assist, I will drown your inbox with smiley-face emoticons - nothing else seems to work. It is extra difficult because of the BOFH persona folks generally attribute to support groups like corp IT and production staff. BOFH is hilarious, but it's an antipattern for treating your users, just like calling them 'lusers'. People have been trained to think they are at fault when some crappy piece of software they use misbehaves, and they have been trained to feel like they are massively inconveniencing you when they ask for support that you were hired to give. It's upsetting - I'm here to help.
I've also found the uncomfortable realization that my jobs are often not just hacking on problems. Politics (and the falsehoods required) are an unavoidable part of the job process.
On the life side, I got married to the greatest girl in the world and got two dogs. Wendy and I had been together for almost six years before getting married. Our first dog died suddenly of an autoimmune disease at age five, and our current doggy is quite goofy and going happy at age two.
While at RIT, I learned to rollerblade, skateboard, and play ice hockey. I still skateboard and would like to get back into hockey.
I also traveled a lot. I lived in Georgia, then New York, then California. I've been to Dublin, Seattle, Washington DC, the Caribbean, Vegas, and New Orleans. I started going with friends to Defcon and got involved with Hack or Halo at Shmoocon. I also went to BarCamps in NYC, Rochester, and the Bay Area.
Dublin, Ireland and Seattle were for Google work trips. Dublin was awesome. My trip coincided with Mashup Camp, where I met up with some Yahoo folks on a after-event bar hop. Dublin's Temple Bar district is good fun and reminded me a bit of Bourbon Street in New Orleans with all its shenanigans. Seattle was more business and less social, only stopping in at Burger Master for some good burgers while in town.
BarCamps were awesome everywhere. The first one I went to was NYC in 2006, where a fellow CSHer demoed the first version of jQuery; I remember staying up until almost 4AM at CollegeHumor's offices (the barcamp location, I think?) hacking with it.
There were also Yahoo! Hack Days; I went to both of the ones held here in the Bay Area. The first hack day had me hacking up del.icio.us and also writing keynav (a project still maintained and used!). My del.icio.us hack resulted in a Wall Street Journal "Marketing" section front-page column, which was one of the most awesome things ever (article also viewable here). I'd never been in any newspaper before.
Two years later, Yahoo! held another open hack day where I wrote SnackUpon, which got coverage on lifehacker and a few other sites. These events weren't my first 12-hour hackathons. At RIT, CSH ran yearly team coding competitions sponsored by Red Bull and Bawls; my team won two years.
These hackathons repeatedly highlight that my productivity spikes after midnight. I've been fortunate to have jobs that understand this and don't require me to be at the office every day at 9AM.
Wrapping up a decade that had lots of travel, learning, hacking, and networking (with people) on and offline, it doesn't seem likely the trend of travel, learning, hacking, and networking is showing any signs of downturn.