About a year and half ago I wrote down some Rules for Computing Happiness. I based the list off of a similar list by Alex Payne. But in the year and half since then a lot has changed in my life. I graduated from college and finished a year as a graduate student at Cornell University’s computer science running experiments. I’ve also finally joined the world of smartphone users. I spend the greater part of the day writing programs and scripts and spend an increasing amount of time on remote machines. In the light of all those changes I think it’s a good idea for me to revisit the rules I laid down and see how much they’ve changed (or stayed the same). Here goes:
1. Use as few physical machines as possible
This one’s a keeper. I now use only two physical machines: my personal Macbook Air and my powerful Linux desktop at work. I use a combination of Git, Dropbox and Chrome tied to my Google account to keep things in sync between them. In reality the work I do on each doesn’t much overlap so there isn’t a pressing need to keep them in sync.
2. Keep work and play separate
Another keeper. I don’t have any social media apps on my work machine, I generally keep IM closed and I’m busy and in the flow enough that I don’t feel the need to randomly open up Reddit or Hacker News. I should be honest and say that this isn’t a purely (or even mostly) technical thing – in fact it probably has more to do with my shifting perspectives on what’s important. I have my phone near me if anyone really needs to get in touch with me. Since I’m a grad student I have a lot on my plate that is important but little that is urgent so my phone rarely gets used.
3. Get a Linux machine for programming. Use multiple monitors and a tiling window manager
I’m a bit less sure of this one and I’m partly afraid that I’m just plain biased. I do most of my programming on my Linux machine, but I do a decent amount on my Macbook Air too (especially experimental web stuff). I mostly use the UNIX in each so I’ve become fairly agnostic to what skin I’m running on top. I’ve never programmed on Windows so I don’t have anything to add on that matter.
However, I do use two monitors on a regular basis and going back to one can be annoying. I tried using Unity for a while and while it’s not bad, I keep going back to XMonad. It’s clean separation of physical monitors and virtual desktops makes using multiple monitors very flexible and efficient and I always find myself missing it when I’m on a different environment. By contrast, the way OS X does it is complete rubbish, especially if one of your windows is in fullscreen mode.
4. Get a Macbook for non-programming tasks
I’ve had my Macbook Air for over a year now and I love it. It’s the best laptop I’ve owned and probably the best computer ever. I only use a handful of userspace apps but they’re high quality ones like Reeder and OmniFocus. Homebrew is definitely the missing package manager for OS X and makes any programming I do a lot easier.
5. Keep a backup server, either physical or virtual
I’m still running a small Linode VPS that serves my personal website and acts as the syncpoint for my Git repos. I haven’t had any destructive crashes in the past year so I haven’t really felt the need for a backup, but it does offer peace of mind.
6. Learn and customize your tools
Yes, but do realize that it’s not the point.
7. Use public computers as little as you need to
Since I have both a great portable machine and a great workstation I haven’t had to use public computers at all. My desire to work in coffee shops and libraries has also been decresing steadily and I now prefer to work in a private office or a quiet shared workspace.
8. Pay for good software if you need it, but only after you’ve tried it out for a while
I’ve bought software like OmniFocus and Reeder and by and large I don’t regret it. I’m currently considering getting iA Writer. It’s cheap enough that I rarely think twice about gettting something that would make my job easier. However they “trying out” part is harder. My biggest gripe about the Mac App Store is no way to try out apps for a period of time (or stop using them and get a refund).
9. Keep information in open formats, preferably plain text
Yep. The only non-plain text format I interact with regularly is PDFs, only because that’s how most academic papers are distributed. I hold out hope that one day the academic community will move to publishing in hypertext.
10. Use version control on all projects
All my source code, my research data, my configs, my public and private writing are in version control. It not only makes it easy to go back and get something I may have overwritten, it also makes backup easier.