When I first started writing code, I was curious to see what a professional software developer’s setup looked like. After making that jump and spending a great deal of time thinking about the tools I use to support my workflow, i’m happy to be in a position to share this information with you.
As I took a step back to think about this topic, it reminded me of a Steve Jobs interview I watched many years ago, here’s an excerpt:
“I read a study that measured the efficiency of locomotion for various species on the planet. The condor used the least energy to move a kilometer. Humans came in with a rather unimpressive showing about a third of the way down the list … That didn’t look so good, but then someone at Scientific American had the insight to test the efficiency of locomotion for a man on a bicycle. And a man on a bicycle blew the condor away. That’s what a computer is to me: the computer is the most remarkable tool that we’ve ever come up with. It’s the equivalent of a bicycle for our minds.”
It’s a fascinating description of the personal computer and it really cemented this idea in my mind - humans are tool builders and we use these tools to magnify our abilities.
You could write books on this topic and it’s application to software development. In the interest of brevity, I will leave out discussion of programming languages and libraries here, instead I will focus on the tools that help you write code [1].
Developers are generally quite passionate about this subject and I have never seen two developers with the same setup. Ultimately I think it’s about finding out what works for you. I think my setup is fairly minimal without too much customisation, you could probably replicate this within an hour.
It’s great to learn about new tools that can make you more productive so please feel free to share your favourite tools in the comments!
For completeness I thought I should mention that you are not going to be able to write software without a computer (who knew, right?). Most modern computers have sufficient performance for building web applications so you probably only need the top specs if you are regularly doing computation on extremely large data sets. My general advice would be to follow the crowd and use whatever machine the majority of the community uses for your chosen language(s). i.e. if you are building iOS applications, there are ways around it, but your life will be far easier if you are working on a Mac!
I use a 15” Macbook Pro. Once you are past an inital learning curve OSX is very intuitive. They are expensive but when you consider the fact this is a device you use for hours daily, I think it’s not such a bad investment.
Keyboard
Screen
I would highly recommend installing Flux, it adjusts the colour settings of your screen at night so that your screen essentially looks warmer. I find it helps prevent eye soreness when working on something late at night. Also there are many studies that report the default ‘blueish’ light of the screen can distrub your sleep by supressing melatonin (the chemical your body produces to let the body know it’s time for bed).
Another setting I have found useful within the operating system is to Invert Colors. This makes it easy to read online documentation and PDF’s late at night by switching to a black background with white text. You can find this option System Preferences > Accessbility > Display > Invert Color
.
This topic is the usually the catalyst for a flamewar: Vim vs Emacs vs Textmate vs Sublime vs Atom vs Notepad++, IDE vs Non IDE and on and on…
In my case I don’t use an IDE, my first programming language was Ruby and Textmate was the most popular editor. I then moved on to Sublime and now currently use Atom. I’ve never felt the need to move to an IDE but I will probably try one of the JetBrains products at some point just to compare the difference. Similarly, I am interested in using Vim keybindings within Atom to see whether that adds a speed boost.
With version 1.0 I think Atom has just surpassed the level of Sublime and with the vibrant package ecosystem it will only continue to get better. Here are the Atom features and packages I use most often:
Key Bindings
Packages
Version control systems are essential for keeping track of your work and enable you to freely build new features without affecting other developers on your team.
I have always used Git and while there are other options I haven’t really felt the need to explore them because it works so seamlessly. Git allows you to work on separate branches so your work is independent of others, commit changes to your code on your local machine and then publish them to a public or private repository. When your changes are ready to be integrated with the main codebase (usually the master branch) you can then merge your branch to master.
Atlassian has some great documentation to help you understand the core concepts and Github or BitBucket are common choices for storing your work.
gp
than git push
all day. Of course you need to be wary about making adverse operations easy to execute but in practice I have not found short alias’ to be an issue. Here’s a simple bash profile with a bunch of alias’ which you can add to ~/.bash_profile127.0.0.1 news.ycombinator.com
preventing you from accessing them.Having a 15” laptop means that I don’t always need a monitor so I don’t personally own one but I do use one at work and I think it’s essential when you are working on a complex project. The nicest one I have used is the Apple Cinema Display and they are due for a Retina update so given a choice, that would be my top pick.
I find headphones are a necessity in open plan offices where noise/interuptions are common and you need your own space to think. These ATH-M50X’s are the best I have found at a reasonable price level. The sound quality is great and they are over-ear so they have decent protection against outside noise. I highly recommend them.
Hopefully you found this useful, I will continue to update it over time and as my choices evolve and definitely let me know your favourite tools in the comments over on Hacker News! :-)
Sidenotes
[1] However, this is something I will revisit in the future because I wouldn’t be surprised if programming language and library choices have the biggest impact of all on productivity.