This was originally posted on my blog.
Anyone that has been around me knows that I'm quite passionate about my craft, and if you are reading this, you probably have a bit of that inside you as well.
A huge reason for starting this blog was to try and share some of the pitfalls that I encounter so that I can set up a caution sign so that the person behind me doesn't fall into it. It's the same reason why I've spent countless hours/days/weeks of my life answering questions on forums and sites like Stack Overflow, contributing to open source, and trying to mentor other developers. My hope has always been to impart my love for crafting software onto others and in some butterfly-effecty way, make our entire field a better place for it.
And the key to all of that is passion, but passion often comes at a cost.
If you have a family, then this should unquestionably be your number one priority. No code or job should come between your time with them, and if you start to find yourself feeling disconnected or unable to turn that work switch off, then you might want to consider a change that could provide a better balance. Despite referring to it in the past, I cannot stress how awful the following advertisement is:
Don't be that person.
Life isn't like code that you can just come back to later and refactor it if things didn't go well - you don't get another opportunity to see your little ones grow up, and I highly doubt that you'll look back and wish that you had spent time working instead of reading a bed-time story. Life is short, and especially with kids, it goes by so incredibly fast, so take advantage of it and make sure to spend time with the ones that'll be there long after the project has shipped.
We've all seen the movies depicting the hackers and other variants of software folk. The dimly lit room, the empty cans of Mountain Dew strewn across as desk, and the silhouette of a figure dramatically bashing on a keyboard through the late hours of the night. In our field, it isn't too uncommon for us to easily transform into this. I would know; I do it all the time.
Sleep is important, very important. If you don't think so, just consider that all of us spent a huge percentage of our lives doing it, so there's got to be something behind that. Personally, it took me far too long in life to realize just how important it is. I easily spent my college years running on 2-5 hours of sleep a night, and thought it would always be that way. I'm only 32 years old, but I can confidently say "I'm too old for that shit". If I tried spending even a week running on that little sleep, I'd imagine I'd look and feel something like this:
Just as your machines need an occasional reboot, so does your brain.
Writing software is hard, and writing it without being able to think clearly is impossible. Software engineering generally consists of figuring out how to problem solve and that usually takes quite a bit of brain-power. You need some sleep to let your brain settle down, unscramble itself, so you can get up and tackle those problems the next day. Besides, as any experienced software developer knows, your brain will undoubtedly help you solve a few tough problems throughout your career in your sleep.
Me: How the hell am I going to figure this out? I've tried X and Y, talked to Jim and Bob, e-mailed Jon Skeet, and nothing seems to work.
Brain: Hey! Let's look at some code!
Me: Seriously brain? Right now? I've been thinking about this problem all day and we are going to dream about it too?
Brain: I'm just bustin' your chops, but seriously try using a KNN algorithm, I'm pretty sure it'll work.
These types of epiphanies rarely arise from a power nap or an hour of sleep or two, so it's worth getting a good night's rest. As I mentioned earlier, writing software is hard and pushing your brain every day without giving it a chance to wind down isn't good for you mentally or physically.
You wouldn't run a marathon every single day, so don't try to do that to your brain. Invest in a good mattress, pillows, and all that jazz and your body, mind, coworkers, and codebase will thank you for it.
So we've established that taking care of your own well being and body is important. It's vital to have friends, hobbies, and even just a break from writing code now and then. But if you are here, reading this post, then you probably at least somewhat care about writing software and being better than average at it.
Finding the time can be difficult, but there are plenty of ways to both actively and passively become a better software developer. A quick list off the top of my head for a few of these might look like this:
- Open-Source - I know you might see this and say "Rion, I don't have time for an open source project." and that's fine. The open-source ecosystem is so broad that you don't need to contribute to find value in it. There are countless amazing projects on sites like GitHub that you can go openly browse and look through the code. I know it might not seem valuable, but reading code will help you become better at writing it.
- Podcasts - If you are in an environment where you commute, this is a must. There are some incredible developer-oriented podcasts like Coding Blocks out there for just about every niche in the development world, as well as some amazing general purpose ones that focus on development as a whole.
- Online Video Content - There is a plethora of awesome video content online in both paid and unpaid varieties. Sites like Pluralsight can give you the opportunity to learn the ins-and-outs of just about any major technology from world-class experts. YouTube is also a great place to find content on whatever you are trying to learn.
These are just a few ways to improve your craft, both actively and passively, and every little bit can make a difference. If you find little sections your day to fit things things in (i.e. mowing the grass, sitting in a car on your commute, etc.), these can be perfect moments to work on becoming a better developer.
Priorities are unique to everyone and are extremely subject to change. What's important to me, right now, might not be important to you now (or possibly ever). If you asked me a year ago, five years ago, ten years ago, all three would yield dramatically different results - and that's perfectly okay!
Try to define priorities surrounding work and your craft, but don't let them get in the way of your most important job - living your life and being happy. They'll always be more code to write, more bugs to fix, and another feature to implement.