Do What You Love or You Will Destroy Yourself

Warning: Long post ahead. If you’re looking for something useful, skip the first five paragraphs. It’s been 3 months since I’ve said anything here and it’s largely due to a host of life changes. So I’ll start from the beginning: I first started developing software when I was 16. To be fair, it was creating a help site for a small (and now defunct) start up called Intellego Solutions, but it did involve frames – as in, the HTML frameset, not the all-too-easy iframe tag. I wasn’t a whiz kid, but I did love web development. I had been building websites since I was 12, my first being a Nintendo64 cheat codes website using a combination of Microsoft FrontPage and the AOL members' page uploader. Notice how I didn’t list a database…I would manually update the pages with static content for the cheat codes. Perhaps that’s why I went to school to study databases, so I could never make that same mistake again.

If you love your internships, that’s telling you something

Between then and my first job, I spent every summer working as a software engineer at a start up; the smallest full-time team was 2, the largest was over 60. Each had its ups and downs along the way, but I genuinely enjoyed my internships, the atmosphere, and of course, making more money than all of my friends without having to break my back landscaping.

Following your ‘wants’

And yet somehow, all of that front-end software start up experience lead me to two back-end developer jobs at two large, multinational corporations. How did that happen? I would say the largest part was 5-figures in student loan debt in a time where America was suffering from perhaps the worst economic crisis in over 30 years. The other part was thinking about my wants, and not my needs. I wanted a solid resume, a great work environment, awesome perks, a fun culture. I wanted a lifestyle, a sense of accomplishment. Don’t get me wrong, I’ve gained some great experience and met some amazing people, but heed my advice: the allure of wants is ephemeral – ignoring your needs will destroy you.

My biggest failure

I felt the need to do something more. I needed to get back into front-end development, and I needed to be an influential body on a piece of code that I cared deeply about. So I began a side-project in my spare time. For months I barely touched it, but by winter of this year I was working with mentors, and had written over 10,000 lines of Ruby on Rails, HTML, CSS and JavaScript. It seemed like a real product! Success! Joy! No wait…

Failure. Lots of failure. My project was severely flawed. So many things I had done wrong, and so much time wasted. I started caring more about my projects and less about the rest of my life. I spun into a soulless depression – working by day, working by night. Wash, rinse, repeat. I tried to take my projects to the next level, but those pursuits also failed and I was stuck. Hopeless. And worst of all, I had lost the people closest to me – perhaps my only regret in life. I was at an all time low.

Eventually you will ‘wake up’ and find what you need

Failure can wake you up and force you to find your needs. When you’ve hit rock bottom, you’re forced to examine what you need in order to dig yourself out. So what did I need?

  • Love. Love of life, love from people, love of the things you do. Without love, life is meaningless. This is definitely something that type-A software engineers like myself have trouble exploring. Without a doubt a lesson I wish I didn’t learn the hard way.
  • Friends – in work and in life. I’m a social animal who needs to interact with people at all times. Surround yourself with great friends and coworkers and even the most mundane work can feel like vacation. It’s no surprise everyone prioritizes a finding a great team over finding a great company to work for.
  • A mission. I wanted to work on something I loved so much that I would do it even if I wasn’t getting paid. I had already spent countless hours in my spare time doing front-end development with Ruby on Rails for free, so opportunities to do that with people I liked and a product I loved would fit this requirement.

Doing what you love (AKA go out and make it happen today)

I’m happy to say I’m on my way there. I’m fulfilling my needs one day at a time. Perhaps what is most relevant to this blog is the announcement that I have joined StarStreet full-time as their lead front-end developer. StarStreet is the sports stock market where you can invest in sports players instead of companies. It’s the evolution of fantasy sports and great for investment geeks like myself! We’re a Ruby on Rails shop with an incredible team, of which I am 33% of! To have this influence, this team, and this technology, is living the dream. I’ve been presented with an incredible, perhaps once-in-a-lifetime opportunity to directly influence the product and design in technologies that I enjoy working with.

Fulfill your needs, and the rest will work itself out

Now that I am doing what I love by fulfilling my ‘needs’ instead of my ‘wants’, my life is turning around. Living for your wants and ignoring your needs will only get you so far – it got me to become severely overworked and depressed, to commit wanton failures many times, and lead to one of the lowest points in my life. I still have a long way to go, and many bridges to repair, but through my experiences, I hope you can avoid hitting rock bottom and heeding the advice so many people have stated: do what you love. Seriously. It may seem like a complete platitude at this point, but I urge you to act now. Life is too short to act tomorrow.

Ninja Please - Be a Stand-out Developer

Last week I wanted “Application Diabetes” cured from our phones (apparently that pissed off quite a few people on Hacker News, but 45,000 views is pretty cool). This week I lost another nights sleep so I’m running on fumes again, so it’s time for another rant. Good news is this time I have some constructive advice (must be going from 3 to 4 hours in a night that does wonders for my productivity). This time it’s about how I never want to hear ninjas, pirates, rock stars, swashbucklers, candy tycoons, Big Bird…you name it, be associated with developers again. Except for Leviathan. Cause who wouldn’t want to be called a Leviathan programmer? In all seriousness, my message tonight is to be something that is actually at the root of all of these pseudonyms: a stand-out developer. I am not one yet, but here’s a very practical, systematized way that I plan to attack it, and how I think anyone else can in order to achieve Level V Leviathan status.

Procrastinate

Wow dude, bad start. Don’t leave yet, I promise there’s a reason why you should procrastinate at work by doing things like reading Hacker News and Reddit. (NOTE: not a lot, don’t get yourself canned and then blame me) Eventually you will develop patterns for the types of articles you enjoy reading. Why is that important? Because those topics will be the seminal projects to start your stand-out career. They will also usually be problems that can be optimally solved in a certain subset of programming languages, which brings me to step 2…

Contribute to Open Source, Even If It’s Not Code

First you have problems you want to solve. Now you’ve found a programming language that would be interesting to solve those problems in. Only problem is you have no idea what the hell a monad is or why currying reminds you of that delicious Indian restaurant down the street (fact: that is still true for me). Who cares if you don’t know the language, you just found an excuse to start learning it, which will accelerate your learning. Start grinding away at gaining competency with whatever language you are picking up, but again, notice the patterns of pain points you reach:

  • Are they fundamental issues with the language?
  • Or is the documentation poor?
  • Perhaps there are libraries for said language that do 95% of what you want it to do, but need a few more back rubs and gentle code massaging to achieve everything you’re looking for?

If you haven’t figure it out by now, the idea is to answer these questions in the form of contributing to open source, even if you can’t code in the language that well. Think the definition of currying is confusing? Write a blog post explaining it in layman’s terms, and then formalize it into formal documentation that the (insert favorite functional programming language that uses currying here) team can use. As an example, I really like Thoughtbot’s Suspenders gem for Rails, but you couldn’t create a project with it and deploy to Heroku out of the box, so I integrated a Javascript compressor to push the necessary code into the correct directories and save others some ramp up time. Did I part the Dead Sea or beat Chuck Norris in a wrestling match? The answer is yes to both, but I did not do anything earth-shattering in terms of code contribution. And to be perfectly fair, it’s not integrated into the gem yet, but my Github activity is going up, and that’s what’s important. You just have to keep hammering away, which brings me to my final piece…

Gain Rep Like a Boss

Once you’ve found a fun language to play around with and contribute to, you should start getting credit for it. Street cred will help you bitch slap lesser Leviathans that try to steal your thunder and hurt your game. Don’t let haters hate! Translation for you ninja rock stars out there: gain some reputation so your contributions stand out. How do you gain reputation? I mean, for the longest time I felt like a duck in Duck Hunt with 900 grey guns pointed at me simultaneously – show your face and you’re toast. How do you get past that and actually get your posts upvoted and get some coveted hardcore forking action? I could go on for a whole post on how to do this, but for now I would go with an old adage my mom once taught me:

How do you eat an elephant? One bite at a time.

If you’ve got 10 minutes, you’ve got one answer to a StackOverflow question, one interesting article to submit to HackerNews and one GitHub pull request for a small code change in your favorite plugin. Imagine if you did that every weekday in a year? You’d have quite the following on all of those places, which as far as I’m concerned, represents the programming canon of the internet. Bump that up to an hour and you’ve got quite a bit more you can contribute. Maybe even sneak in a single round match over on TopCoder every once in a while on the weekends. If you devoted as little as five hours a week to continuously challenging yourself on TopCoder and increasing your contributions, in a year you could be a decently known, stand-out programmer without ever having written a blog post to assert your authority. Your work and your skill speak for themselves. Who wouldn’t want to someone like that? If you can take an hour a day to exercise, you can take an hour a day to flex your programming chops on something fun, and you will be a stand-out developer. Cause last time I checked, ninjas were clandestine assassins who used martial arts and rock stars played…oh, I dunno, rock music? And none of that sounds like software development.

I Hope This Bubble Kills The App

All of this talk of a tech bubble has me on full tilt, ready to rant about how useless web development seems to have become. When I started making websites back when the internet came on a CD, repeating backgrounds were all the rage and you were a god if you could get JavaScript to work on your site. All of that hard work inspired you to create something meaningful with the limited resources you had. And it’s still true today: you don’t need HTML 5 Canvas or an elaborate concurrent chat server written in Erlang to make an impact (see Craigslist or Wikipedia for details). Yet in the same way that Myspace has given a soapbox to crappy musicians, so has the Lean Startup Movement and the incredibly low cost of development given anyone with a pulse a belief that they too can become the next Mark Zuckerburg. But hey, I guess that’s what happens when you make the web so accessible that anyone thinks he can do it, too. Hence, the birth of the “App”.

Where Did “The App” Come From?

Pretty much when Apple decided that iPhone would be the Moses for developers. That single machine, and the mobile operating system movement, has turned development into a world of apps. Now don’t get me wrong – applications, as a concept, are a good thing; they are the food for us to consume on the plate that is the operating system. We’d be nothing without them. But last time I checked, companies started with one application, sold it, then made a few more. Now it seems like the company IS the app, and when they’re done making the app, they cash out equity and move on to the next app. And because of this trend, our “application food” has quickly devolved from meat and potatoes to candy corn and Twinkies…and I fucking hate candy corn.

The Twinkie App

What do I mean by candy corn and Twinkies? I’m talking small, stupid applications that serve no purpose other than to take up space in some app store or some .com. Basically, anything TechCrunch is jerking off to at the moment, like any one of the thousands of Groupon clones or an app that got 10k signups based on hype alone. News flash: coupons are still boring and I don’t want to give out my email address to a service I don’t even know I’ll benefit from. So now we have an App Store that serves nothing but candy, and we all love candy don’t we? Candy is great when I’m on Christmas break, but not all day, every day. I don’t want my Android to get “app diabetes”. But that’s what everyone is making because it tastes great for a microsecond and then you realize it’s contributing zero to you brain and negatively to your gut. And the proverbial pun-intended cherry-on-top, Color, has truly been the glucose shot that is going to kill your iPhone in stage V, type II diabetes: yet another photo-sharing application. We’re officially addicted to app candy, and soon enough we will go cold turkey.

Lose $5M in 5 Days With The App Diet

So this cluster fuck of apps has become so diluted in human value and so inflated in capital value that Ninja Warrior Agile ScrumMaster and Incompetent MBA Popped Collar actually have a decent chance of landing on the front page of TechCrunch with a title something to the effect of “Man Takes a Dump on an Android Phone: Sand Hill Road Calls First Dibs for $22M”. Eventually a prominent VC will wake up in a cold sweat and realize how totally fucked this is and become conservative on his investments. Others will follow. The bubble will burst. And then what? Then people will have to build something useful. I think I just heard someone say “Oh Shit.” Actually, I can tell who said it because my churn rate is climbing. Anyway, people will have to build something of real, thick value. Something that doesn’t require 3 years Objective-C, but 3 years of banging your head against the wall wondering how to solve this seemingly intractable problem. Something that pains your friends, and their friends, and their friends friends. Something that may, in fact, not be a problem in the social space. In fact, it might be quite personal and yet very curable. And it might be created by a company who intends to solve that problem, and then solve another. And another. And yet another still.

The truth is that you can start doing something meaningful today.

Be bold. Make something you and a billion people would want to use (and benefit from). You don’t need a bubble to realize that the world has very real problems to solve and that you can solve them if you would please put down the iPhone and use your brain that you were gifted with. Life is too short to be spent making Twinkies and candy corn. Help your fellow man, even if it’s not the hottest thing since the sliced-bread app.

How to make a comma-separated list in HAML (correctly)

Learning Ruby on Rails I thought this would be a good idea:

%p
- @financial_benefits.each do |fb|
= link_to fb.name.capitalize
- unless fb == @financial_benefits.last
,

Apparently that inserts a space after a link. Not cool. In order to mitigate these issues, HAML has a series of helpers (e.g. succeed, precede) to abut text next to tags without whitespace. Now to get it right, I have to write this:

%p
- @health_benefits.each do |hb|
- unless hb == @health_benefits.last
= succeed "," do
= link_to hb.name.capitalize
- else
= link_to hb.name.capitalize

I don't like that. I don't like repeating code, especially in a language that I'm still learning to do correctly. Chris said it best, HAML sucks when you have to start using it inline.

EDIT: And since I am learning Ruby On Rails, thanks to an awesome commenter, I can get this down to one awesome line of code!

%p= @financial_benefits.map { |fb| link_to(fb.name.capitalize) }.join(', ').html_safe

I love that the join already takes care handling the last element, and how the html_safe portion handles the correct display of the items. Thanks Jeremy!