Ask HN: What tool makes you most productitive?

59 points by JoelMcCracken ↗ HN
I believe that learning certain tools can make a programmer much more productive. What knowledge about tools do you have that makes you more productive?

Aim your advice toward a competent *nix user who knows a little about everything, but doesn't know anything in any real depth.

102 comments

[ 194 ms ] story [ 375 ms ] thread
REPL
I have a semi-repl with autotest + ruby-debug and it's done wonders for my productivity; I can't imagine going back to alert/printf style debugging/development...
I'd be interested in reading more about your workflow, I'm a RoR dev.
I code Java at work, but Clojure+SLIME+Emacs gives me a way to quickly prototype things that call my existing Java code in a REPL. Once I've demonstrated the concept to myself and have the basic algorithm working, I port back to Java. Clojure and Java sometimes demand a different style, but I sometimes find that porting back from Clojure to Java results in more elegant Java than if I would have started with Java in the first place.
(comment deleted)
Vim and SlickRun (sorry Windows specific but certainly worth mentioning)
Habitually using Compiz workspace switching to get more working area on my laptop, instead of trying to arrange windows carefully on a single desktop and bring them forward with the taskbar.
You've probably had 20 other people tell you about this; but switching to a tiled window manager will remove that whole 'careful placement of windows' thing from your life in a very positive way.
I've tried tiling window managers multiple times, and each time find issues with them that frustrate me until I switch back to Gnome:

- No simple way to keep a small IM status window open in the corner of a workspace

- Limited support for resolution-dependent windows, such as videos, games or remote desktops

- No notification bar for status apps to utilize, such as pidgin or network-manager

- No integration with modern desktop environment features or tools, such as media keys for rhythmbox, launchers like gnome-do, network-manager, automatic disk mounting, screen lock, etc

Gnome and compiz have solved a lot of problems that actually make a Linux desktop usable in modern contexts.

Those are all very fair criticisms, but by simply running gnome-panel with Xmonad, you get 80% of what you want.

Apologies for the evangelism. :)

A bit of a cliché but: Emacs. (Or alternatively vi since that can be plugged into most things as well.)

As a software developer on *nix I spend a lot of my time manipulating text: code, e-mail, news, forums, documentation, etc.

I can do all this from Emacs which is its greatest strength for me. It might not have the latest and greatest editor features but generally it'll quickly pick them up (within weeks, months or a year someone will have written an Emacs version and I've also written them myself).

So I don't have to suffer all kinds of different programs for doing the same activity: manipulating text. Usually all those programs (web browsers, text editors, word processors, news readers, e-mail clients, etc.) only contain a subset of Emacs' powerful editing features.

It is also available for a lot of different platforms.

emacs doesn't have the latest/greatest editor features?
It isn't always the first to have them. Sublime Text's high level navigation took a couple of days to surface in Emacs.
Vim and Emacs (yes, I'm schizophrenic).
You should look into Viper. And if Emacs doesn't start quickly enough for you, you should run it as "emacs --daemon" and then "start your editor" with emacsclient -t (or emacsclient -c, if you want an X window).

Once you've gone the Way Of The Emacs, there is no reason to use vim... unless you have some internal application written in vimscript, of course.

Straight vim is rarely very useable. I wouldn't be comfortable with out tags, minibuf explorer, nerdtree, cscope, and taglist.
Right, which is what Emacs is there for. I don't think there is any Vim functionality (plugin or otherwise) that is not implemented in some Emacs extension.

Viper just gets you insert-mode and command-mode. It's still Emacs.

What about the one where you don't use megabytes of disk space? ;)
The OP says he uses both Emacs and Vim regularly. Emacs alone uses less disk space than Emacs and Vim combined.
I definitely take advantage of the Emacs daemon, and use emacsclient extensively. However Viper just doesn't cut it for me, since I rely on a lot of vim plugins (as Locke1689 pointed out) for extra functionality. It's not just the keybindings or the modal interface.

But hey, these two programs are great. I've tried other IDEs, but always end up coming back to one of those two for real work. Some things are easy in one and annoying in the other so they complement well.

The point of Emacs and Vim is that they are programmable. If something is annoying, you have not programmed one correctly yet.
Oh believe me, I've customized both extensively. My annoyances are extremely minor, but annoying nonetheless.
My brain.

It's amazing how much time you can save if you analyze the problem a bit more deeply. It's much easier to use the correct algorithm/implementation if you truly understand the problem.

I would have to agree here. The productivity gains are remarkable when one takes the time to think a little bit before typing, or learn more keyboard shortcuts for Emacs/Vim, or be able to apprehend a holistic view of the application and problem domain.

A second note: Emacs is the one piece of software that makes me the most productive.

Pen and paper help, too.
agreed. a whiteboard helps, too!
Or a blackboard. I love chalk!
The Feynman Problem-Solving Algorithm: (1) write down the problem; (2) think very hard; (3) write down the answer.
I would have to agree with thinking as well. When I first started programming I would just brute force my through whatever problem. After some years I realized that the 3rd or 4th iteration of something was commonly the best solution and the rest were crap. Then I realized I could skip the coding for iterations 2 and 3 and just think about the problem a little harder, and go do some reading about it. Thinking works and it saves me a lot of time and frustration. Learn an editor Emacs or Vim. I like Vim. Learn a scripting language Perl or Python. I like them both, for me Python gets the edge.
Deeper analysis can help, but I have found I often get better returns from forcing myself to simply contemplate a problem shallowly and more broadly for a while before I start digging. Taking the time to make sure you are analysing the right problem.
Eclipse, oh god yes.
I'm an Emacs guy, but I cannot deny that Eclipse is the superior tool for Java development. I have come to rely on the refactoring tools and would miss them greatly if they were taken away from me.

SLIME in Emacs is comparable (better in some ways, worse than others) if you're hacking in a Lisp. It is really nice to work with code at a higher semantic level than just ASCII text, sometimes.

(I also hear that VC++ has similar or even better refactoring features, but I haven't used it.)

Netbeans, JRuby/Java, and some music
A notebook and a set of habits (my processes). A simple paper notebook which I can write ideas down in meetings, which I can keep by my bedside and scribble down my thoughts if I get a brainstorm when I'm sleeping. There have been a number of discussions. All electronic tools I've used over the years (languages, software, gadgets) change and evolve and I have to port from one format to another. The consistent parts are the habits I've developed over time. Habits on note taking, organizing, question asking.
Definitely Eclipse. The debugger is basically the most valuable feature ever developed. Ever.
Linux/GNU/Unix (don't murder me, I do not know which one applies here):

grep, sed, awk, sort, uniq, shell scripts and pipes now do things in seconds that took me hours if not days to do with Windows GUI tools. Of course my experience plays a big part to that but I don't think that I would be were I am without those.

Ambient Music, mostly http://www.hos.com
Really good headphones. Not necessarily noise-canceling but the more environmental noise they block the better.
I find that the best ambient music is often stuff you really like, but have played so much you know every note by heart. The familiarity of it, particularly if you play it loud enough that it's thoroughly immersive, is really helpful for getting into the "zone".

I find Kraftwerk is gold for this. Try "Computer Love" or "Radioactivity". There's more esoteric ambient stuff like Maeror Tri if you're curious enough to hunt around a bit. Also try Ildjarn's ambient music. (Ignore his heavy metal -- I like it, but it's certainly not for everyone.)

Increasingly, mathematics. Not sure if that would be considered a "tool" for the purposes of this discussion.
A locally running version instance of issue tracking software. Use whatever you're comfortable with, but I go with JIRA; It costs $10 for a license for up to 10 people.

It helps me keep track of side projects. For a long time I had trouble remembering where to pick up a project and would get distracted by unimportant parts. JIRA helps keep that to a minimum and makes me feel more serious about them.

I even keep one project setup in it for personal stuff (renew passport, etc) just to keep all the TODOs in one spot, but whenever you tell people that they always make some wise-ass crack about using it to file a bug report about you personally...

"but whenever you tell people that they always make some wise-ass crack about using it to file a bug report about you personally..."

That could be an interesting way to learn more about yourself and how others perceive you. Let people file bugs against you. How am I doing as a manager? As a husband and father? Are any of the tickets being closed?

It would take a pretty strong personality, though, to welcome that level of criticism.

I actually really like that idea!

Although I would think it would be more useful in terms of filing bugs about yourself. After all if we try to change ourselves to meet everyone else's expectations then were not much more than a shell after a while...

I do a lot of data mining using Hadoop. Hive has become one of my tools of choice for SQL-ing large datasets.
Valgrind. If you are writing c/c++ but not using valgrind all the time, you are wasting time.
s/ but not using valgrind all the time//.
Want to tell me what you develop your type I virtual machines in?
Someone else already wrote that, so it's not my problem.

If you want to use C for your "type I virtual machines", great. But stop writing music players and web browsers in it.

* Bash shortcuts. Learn ^l, ^r, ^a, ^e, ^w, the substitution syntax (^one^two), bang commands (!cmd, !!, !!:0, !!:1, etc)

* Learn a good text editor well. I use vim, but learn whatever you feel comfortable in. Just make sure it doesn't stand in your way.

* Learn the core unix commands and use them often (tail, sort, uniq, tee, pushd/popd, etc)

* Use a configuration management tool (I use puppet, some people like cfengine, there's also chef)

* The second you see yourself doing something for the third time, script it (It goes without saying: learn a decent scripting language well)! Keep typing same long command? Alias or macro it. I can't stress this enough.

* Automate builds, tests and all doc generation. Don't repeat yourself. Use your downtime to reduce repetition. See what can be scripted.

edit:

* Keep everything in source control. Have a 'misc' repo and if you're starting to work on a script just to do some basic maintenance, add it to repo and keep it up to date. You never know when it will grow beyond a toy and you never know if you might break its functionality by messing with it.

edit2:

What really keeps me productive is liking the work I'm doing. Nothing else comes close.

Not to shamelessly plug a YC-funded startup, but with regard to source control, I've found Dropbox (https://www.dropbox.com/) a good solution. Granted, it's more GUI-inclined than SVN, Git, et al. I've read there are CLI interfaces with it, but haven't looked into any myself.
Does Dropbox have any sort of versioning?
Yes actually.

Also, after getting my laptop bricked by the Ubuntu 9.10 upgrade I recovered my entire project from it.

You have to go pretty far out of your way to have an OS update render your user data inaccessible.
- Notepad++/Textpad/Emacs

- Python [You can write quick programs on the command line or use it as a calculator]

- ToDo List/Notes App running on the background.

- Multiple Desktop Windows(workspaces)

- Dual Monitors.

Two things: Emacs and pen-paper (yes, the old-fashioned paper notebook and a pen).

Eulogy follows:

Emacs has helped me eliminate software clutter. Seriously. Computer and software maintenance is a major productivity killer for me. Install this upgrade, update this app... I really hate that process, and even Mac OS does not hide it behind the scenes.

Emacs and org-mode helped me get rid of my mess of "productivity" apps, which also means less thinking about which app to use for what. It helps that Emacs just helps me bend text files into my thought flow, and I don't have to adapt to Productivity-App-Of-The-Day's model of anything. To-do lists go into an org-mode file. Latest thoughts about work can go into a an org-mode file. I can slice and dice them and write them as free-form or as organized as I want. It's immensely liberating. It helps that I don't have to worry about a proprietary file format biting the dust.

I just tried Org-mode and it looks really promising. I've been Omnifocus user for a while, but flexible, almost natural feel of Org-mode is amazing.

And it's telling that there's even iPhone app for it http://mobileorg.ncogni.to/ . Wow. RIP OmniFocus.

+1 on the org-mode upvote
Fresh.app is the core of my activities online. I can't recommend it enough.

http://www.ironicsoftware.com/fresh/index.html

Most of my activities concern the most recent things I've moved with or played with. Fresh lets me handle all of that without worrying about any other workflow. Downloads/screenshots/etc all go through it.

That's really cool. Wish it existed on windows or linux.
Visual Studio, Launchy, Web Developer Toolbar, Firebug
Upvoted for Firebug. This tool makes working on Ajax, Javascript, and CSS a breeze (at least for me).
Upvoted for Firebug. If you've been a web developer for any length of time and you're not using this yet, start now. Prepare for the forehead slap when you learn to use the console!
Most frequently used zsh/bash Shortcut : Ctrl + r

Most frequently used Gnome Shortcut : Ctrl + Alt + Arrow Keys to switch workspaces

Quicksilver like launcher for Linux with numerous plugins : Gnome-Do

Version Control : git

Text Editor : vim

Managing multiple remote ssh sessions : screen

Vim, paper and good quality colors pens. Valgrind, grep, gdb, inkscape for drawings...
I want to like Inkscape but I just find it too hard to use. Can you recommend any resources for learning how to use it?