Ask HN: How to make coding at home not feel like work?
I program at work most days, for most of the day. I enjoy programming, and when I come home I want to program more (to learn and build things). My issue is, I associate coding with work. Sometimes after coding at home and returning to work I have a "burnout" feeling, similar to that I get after working weekends. In the past, my home computer setup was similar to my work setup (a desktop with 2 monitors). I switched to a laptop at home, which helped. Does anyone else relate to this experience? If so, have you found any ways of solving it?
30 comments
[ 11.9 ms ] story [ 282 ms ] threadI have no concrete data or articles to support this notion, but I truly have found I need to give my brain a little bit of breathing room to work through a problem. Walking outside, when I can be actively distracted by my surroundings but not so much that I have to burn a lot of active energy, helps me to process this background data. This is totally a YMMV suggestion, and I want to toss out a huge caveat that this is an anecdote and me spouting personal pseudo science :)
The last two weeks I've been trying to wake up with the sunrise along with my wife. She wanted to start waking up earlier, and is a horrible snoozer. So, I wake up (I have a good internal clock so I can tell myself to "wake" at a certain time and usually do), and then I get out of bed and open the blinds. This gets my wife up and gets me moving.
My morning ritual right now entails me waking up, getting my dog on her leash, and walking to Groundwork coffee on Main Street in Santa Monica. It's about a 15 minute walk from my house, depending on how often my dog feels like stopping.
I get an iced coffee (preferred beverage of choice in all weather conditions) and then walk down to the beach, which is a block away from their location. There's a small hill with some benches which overlooks the ocean and, if it's not a smoggy day in LA, a clear view of the Santa Monica mountains and Malibu. I'll sit there for an indefinite period of time and just take in the scenery, and observe the people walking nearby on the beach, or watch the waves on the ocean.
When I was working (I'm currently 'funemployed' as part of some time off between ventures), I would often take morning calls from this spot or respond to any emails that came in from the east coast since I went to sleep. My personal favorite was to coordinate this time with a daily meeting I had with some other peers from other departments. It was a general coordination meeting that didn't require any prep or meaningful energy, but was filled with some of my favorite people on the planet. It was my daily chance to talk to some of my friends spread far and wide.
I then walk home along the beach, either down on the bike path area or up on the nearest road. Sometimes I'll listen to a podcast or a book on tape. Other times I'll walk in silence. I try to be receptive to where my mood takes me.
My therapist back in Boston helped me learn how to sleep more effectively through a series of routines before bed. It turned out, for me, that bookending the start and ends of my days with routines proved valuable and welcome. As with all routines, I do add small variations from time to time to keep things fresh and reduce complacency, but I am fairly consistent.
What were you doing before being 'funemployed'? I wish it was easier for me to wake up in the morning sometimes I need to try to get on a better schedule, but I enjoy being up later, yet I somehow still enjoy the morning if I get adequate sleep.
It's my first time off, where I wasn't employed and had minimal obligations, since I was 15. I'm an advisor to vid.me, an awesome company based in LA that is hiring front-end and backend PHP engineers, which has helped to keep me busy and occupied. It's always nice to visit with humans (https://vid.me/lwGS) when your primary sounding boards are a cat and a dog.
This seems to be enough of a change of pace that it's relaxing. Now, sometimes it just doesn't work. The nights I'm feeling particularly burned out or not in the mood I'll just work out and then watch netflix.
- Building something that I really want. For example, the project I've been working on for the past few months is something that's been brewing in my head for several years.
- Sharing the fruits of my labor. At the end of my last large project, I got the satisfaction of knowing the product would get regular public use. In my current project, I've been open sourcing components as I've progressed, so even though it will be months before the project's complete, I have had some milestones of satisfaction. If the end result is something you can sell or profit from, that is a huge motivator as well, although I think my first point about building something you're really passionate about is more important.
I've found that I bounce between coding at home, learning a new hobby, exercising more, building out a non technical skill, or just taking a period of R&R where I'm not actively trying to really accomplish anything in my off hours. The best engineers I've come across are this incredible balance of coding skills and perspective, and that perspective can be acquired in so many different ways.
You state that your ultimate goal is to learn and build things- Perhaps you could take the next four weeks and pick up crocheting or knitting. Or, buy a hard lego set and take a week and build out something in the physical space. Pay attention to what you're doing as you complete your tasks, and the ways in which your brain is coming up with optimization to make you move more quickly and efficiently. Now, think about how you could reapply those learnings in your development process or software design. Are there metaphors? Can you draw connections?
There are software lessons to be learned all around us. Don't fight the burnout. Pivot.
For example, if there's no client library for interacting with a web service at work, I had previously been mentally tasking myself with writing the entire library at a high level of quality, because I felt like writing a library for that hit 1 of N endpoints was aiming too low. Now, instead of burdening myself with writing that entire library, I just write something that just contains the bits I wanna use.
For example, it would appear there's no Rust library on Cargo for Artifactory... https://crates.io/search?q=artifactory
The amount of work it'd take to learn their API from scratch, including all of the options and edge cases, is a notable amount of effort. Especially if it's fast, well tested, handles multiple release versions, etc. I might tell myself that I'm going to write the entire Artifactory REST client, start out all gung ho, only to be defeated by various flavors of things that lead to burnout.
Now let's say I want to learn a bit about how the Artifactory API works, and I'm banging out a proof of concept in Rust. Instead of calling it "artifactory-rust", maybe I decided to narrow the use case. My library is going is going to be called "banana-flinger", and it's going to upload 50GB of banana pictures. There are all sort so of lessons one can learn from attempting to upload 50GB of banana pictures to an instance of Artifactory running on a VM that only has 20 GB of disk space. Can I de-duplicate data at the file system level to increase the effective storage? How does the API work when it comes to rate limiting, max upload size, various encoding protocols, etc? How hard is it to move 20GB of data from one VM to a bigger one vs. using an elastic block store. Yada yada. While 50GB of banana pictures is completely stupid to anyone who isn't me, it's an excuse to play with things I'm interested in that are all related to 50GB of bananas. If I ever decide to get serious, I can apply lessons learned from Big Banana, and apply them to real Artifactory client, or to something completely different.
One silly example is my recent adventure on learning the basics of writing a Vagrant plugin (https://www.vagrantup.com/docs/plugins/). Vagrant is mostly written in Ruby, and Vagrant plugins are essentially Ruby gems, but they use a slightly different convention. I occasionally want a custom Vagrant plugin at work, and explored writing a plugin on my own time. To make it not about work, I decided that I'd write a walkthrough on how to use a Vagrant plugin in which one could declare one's self a potato by running the command `vagrant declare-self-potato`. I learned 100% of what I wanted to learn, and it felt 0% like work. Should you wish to learn how to use Vagrant to become either a naughty or proper potato, you may do so here:
https://github.com/amorphid/my_vagrant_plugin
For now, you might consider learning to embrace the a-peel of bananas. If you ever get tired of dealing with yet another banana, split.
Stop trying to force yourself to code at home. Look at it like music creation, spend your time trying to find inspiration, problems to solve.
Don't follow major development rules like you do at work which are designed for coordination and management amongst groups.
Be okay with crappy incomplete code.
Feel free to abandon it and return to it later...months later.
As PG says...don't code. Hack. It's way more fun.
If it feels like work, that's because it's work (in some way or another). If you don't want it to feel like work, find something to do that doesn't feel that way.
When I don't feel like it (i.e. when I don't feel the obsession), I do something else with my time. Work usually feels like something I have to do, and occasionally something that I find interesting. Hobby coding is always enjoyable. I'd burn myself out if I tried to force myself to do it when I didn't want to. It's not like I don't have a dozen other things vying for my attention, anyhow.
- Use a different IDE/Editor (spacemacs is cool for home use).
- Use a different language (go is super easy to learn and use).
- Use private repositories as this makes writing throwaway code much easier. Bitbucket has them or you can install something like Gogs or Gitlab.
The most important thing is that is it fun.
You wouldn't be able to if you tried. Your subconscious would start pulling you to things you really like.
I have a simmilar problem though with a sideproject where the work is dull web-dev stuff but the product would be so nice to have. Feels so much like work though to build it...
Another thing I do, also for "real work": Going to a café (if that works for you at all). It really helps me to start projects: I leave the house with the plan to start and than sit there, dedicated to it and relaxed with a nice drink.
It's expensive, but electronic music production can be a lot of programming, and offers a whole new set of challenges to solve. It's a great activity that is analogous to computer programming depending on what tools you use. Obviously much more refreshing to come home to after work. If you're not trying to just improve your coding ability and knowledge, I think you could really enjoy this.
Watch some youtube videos about interesting programs. You need to find a project that you really are interested in and energy and time to do it. Try on the weekend playing with 3d graphics or Arduino or a new programming language.
Don't try to do it for more than you really feel like. Could be only 20 or 30 minutes sometimes.
Coding is like a brain workout so yes you will get tired. Try on the weekends or only after a light work day.
This lets me drop all of the development best practices that I normally use "at work" (TDD, Agile, CI, portability etc), and enter a mind-state of just messing around with some code. Sometimes a good idea comes out of it too.