Sleep Is For Quitters

Let’s say you’re a good CS student. Life is predictable. Challenging, but manageable. The future as a developer is hard to imagine. Are your professors preparing you for what’s next? Or are you at a disadvantage already?

Maybe you’re even an excellent CS student. 3.91 GPA. Dean’s list. Phi Beta Kappa. Maybe you’re still a bit lost. Are you ready for life after the ceremony? Are good grades enough to make you successful? Will your hard work translate into success?


Maybe.

I was a CS student long ago, but still remember the life. I’ve learned a lot since then and have a successful career. Perhaps I could have evolved much faster with a better initial understanding of this profession. Knowing the lessons I learned will help you avoid some of my mistakes.


college: YMMV

It’s easy to say that the $100,000 you paid for tuition is simply providing a piece of paper required by all future employers. That’s a valid criticism, to some degree. Truthfully, most of what you are tested on during your tenure as a student is not useful after graduation.

I never used anything I learned in calculus 2. Basic algebra from middle school has been sufficient. The class I took on algorithms wasn’t of much use either. How do you implement a binary search tree in Java? Don’t. Just use a TreeMap, or type “binary search tree java” into Google.

Much of the technical knowledge you picked up will be out of date or of little use in the field. But let’s put computer science aside for a moment. There are some important parallels between college and “the real world”.

If you skip this experience entirely, you may find the concept of professional responsibility a bit foreign. Customers will expect you to be true to your promised deadlines. “Sorry, I got trashed last night and woke up in detox” is unlikely to be an acceptable reason to miss your product’s scheduled release date. Your college professors probably won’t give you another day to study for finals either.

College can be seen as one big tough project. Being able to start something and see it through to the end is a useful quality. Personally, I also found that my problem-solving skills were enhanced as a result.


front, back, and top

In my senior year of college, if you asked me what I wanted to do after graduation, I would have told you “write software”. I knew I wanted to be a developer, but my ability to articulate my desires beyond that didn’t exist. As an aspiring software engineer, there are a number of paths available to you.

If you’re interested in CSS, HTML, JavaScript, or design of any sort, you might want to seek a position as a front-end developer. Simply understanding CSS, HTML, or JavaScript is not sufficient. Creating a beautiful, efficient, and intuitive site is the overarching goal. Your understanding of the technology and your ability to craft a complex web experience that meets these requirements is what makes you valuable.

As a backend developer, you’ll likely be responsible for creation and maintenance of efficient and scalable server code. On the backend, you’ll also likely deal with databases and creation of APIs both for internal and external use. A good understanding of server operating systems, such as Unix or a Unix-like environment, will be important as well. This is also an ideal role if you enjoy learning new programming languages.

It’s not uncommon for a developer to wear multiple hats. Full-stack developers — those who work on both the front and backend — are more common at smaller companies, or on smaller projects. This type of role attracts developers who want to be involved in the entire story of an application.

During the first half of my career, I was a dedicated server-side developer. While there certainly are benefits to specialization, a well-rounded developer is most valuable, and this is why I took an opportunity to move over to front-end development. There are plenty of jobs out there for server-side developers and client-side developers, but don’t paint yourself into a corner. Be agile, and you’ll always be useful.

While it’s extremely unlikely to start out as a software development manager, this is a role you can transition to over time, with experience. Such a position can be reached via a fork in the software development road. Taking on management responsibilities often mean less time (or no time) to code. As a result, this is a more attractive option for seasoned developers looking for a change of pace, or for those with executive aspirations.

I fell backwards into a management role very early in my career. In hindsight, this was a mistake both for me and my employer at the time. I lacked the maturity and experience to effectively manage others. Frankly, my personality doesn’t lend itself to a managerial position anyway. Before choosing this fork in the road, be absolutely sure that this is an appropriate path for you. You’re a rockstar developer. Awesome. It’s entirely possible that your 1337 coding skills don’t translate into people skills.


startup soon

If you have the entrepreneurial spirit, are risk averse and adventurous, you have a gift. Don’t squander this gift by giving in to doubts. Come up with a scalable product that people will pay for, and sail on to success. Don’t wait until it’s too late.

“Until it’s too late”, that’s arguably a little bit of hyperbole. I’d like to point out that it’s much easier to go off on your own and take on a significant risk (such as starting your own company) when you are young, just out of college, and have no real personal responsibilities. Once you have a family, a mortgage, and a less malleable existence in general, it’s tough to give up your well-paying job and pursue something “crazy”. For these reasons, the younger demographic is preferred by seed accelerators like Y Combinator, TechStars, and gener8tor in Milwaukee/Madison.

Occasionally, I come across an emotionally charged article that claims the age barrier to starting a company is a myth. Age by itself is not a barrier, but a number of things generally happen as we pass out of our 20s and into our 30s. You acquire more items (a house, several cars, furniture) that are difficult to relocate. You start a family. You ease into a fulfilling, stable job. You become attached to your surroundings. These can all make it difficult to start your own tech/software company. This is especially true if you depend on an out-of-town seed accelerator (like Y Combinator) as temporary relocation is required as part of the “mentoring” phase of the process.


sleep is for quitters

Software development is not a 9–5 job. It is possible to eek out a career in this field without consistently putting in overtime, but you’ll be stuck in a boring dead-end role, and no one will ever notice you. This industry is jammed with brilliant people. Being smart isn’t enough. You have to eat, sleep, and breathe software if you really want to leave your mark.

I’m not suggesting you always take your work home. Instead, create or join some open-source software projects. Write about software. Volunteer to speak at software conferences or meetups. Dedicate your time to keeping current. These personal endeavors will greatly benefit you and your employer.

Burnout is real. While it’s important to spend free time furthering your career, do try to maintain some sort of work-life agreement. The scales will inevitably tip towards career, but this doesn’t mean you should neglect your personal life. That isn’t healthy, and a burned-out developer is useless. Sometimes it’s difficult to step away from your work and take a break. Do it. You’ll come back refreshed and thinking clearer.


question everything

You may annoy some of your coworkers by constantly casting doubt, but this is the price you pay for being an inquisitive and forward-thinking developer. In the long run, your unending quest to uncover the best, most efficient, and most elegant solutions will make you a more valued developer.

You’ll often spend a great deal of time chasing down an elusive bug, or a complex feature that appears to be nothing more than a moving target. After spending what feels like an eternity completing this task, shortcuts will become appealing. You’ll see an easy way out of your tortuous predicament. You know your solution is not ideal, but the long hours you’ve already put in are adversely affecting your instincts, or at least marginalizing them. Don’t give in. After a good night’s sleep, you’ll wish you had exercised a bit more patience and determination. Don’t leave sloppy work in your wake. Unless you are reasonably confident in your code, question it. Most likely, there is a better solution out there.

Like any good developer, you’ll follow the work of other more prolific contributors to your industry. These individuals will inspire, inform, and even amaze you. However, no one is perfect. While it is important to avoid discounting other points of view, it is equally important to avoid taking the opinion of another developer as fact without analyzing them yourself first. Be a discerning developer, and you will make the best decisions more often.


don’t say no

When an opportunity presents itself, it’s not always easy to map out the pros and cons. Consider being asked to maintain an open-source software library, or transitioning to a project that is far outside of your comfort zone. Unless this is clearly a direction you do not want to pursue, just say “yes”! I consider this to be the single most important piece of advice for a new or aspiring software engineer.

I don’t have any extra time to pursue this new endeavor. No, you really do have time. If you believe something is important, you’ll find time for it. Don’t use lack of time as an excuse. We’re all busy.

But wait, I have no experience in this new area. I’m not qualified. It’s too hard. The truth is, comfort is a sign of stagnation. The only way you can become a better, more successful developer is to constantly reinvent yourself.

Looking back at my career, the most important moments where those where I hesitantly accepted a new role. I remember stepping out of my comfort zone as an exclusive server-side developer to move onto a new experimental web-based project for a former employer. This was a pivotal moment in my life as a developer. I suspect that my career would have taken a much less successful path had I said “no” (and I easily could have).

Later on, I was presented with an opportunity to maintain a popular but distressed open-source JavaScript library. However, I lacked experience in the concepts critical to the library. The amount of time outside of work required to bring the library back to a stable state, evolve it, and handle user questions was substantial. I considered saying “no” again. Instead, I said “yes”. This turned out to be another career-changing decision.


A professional software developer’s life is filled with stress, long-hours, constant change, a constant need to keep up-to-date, and daily challenging problems. If this sounds more like a list of pros than cons, then perhaps you are ready.