
Ask HN: What tool makes you most productitive? - JoelMcCracken
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?<p>Aim your advice toward a competent *nix user who knows a little about everything, but doesn't know anything in any real depth.
======
yan
* 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.

~~~
Mongoose
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.

~~~
cmelbye
Does Dropbox have any sort of versioning?

~~~
joeycfan
Yes actually.

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

~~~
jrockway
You have to go pretty far out of your way to have an OS update render your
user data inaccessible.

------
kunley
Emacs. Kudos to an univ professor who made jokes of anyone who was not using
it. He used to say we'll be using emacs for decades if we really invest some
time learning it. He was right.

A REPL for any language used atm. Cool if coupled with the above.

REPL/shell history with incremental search, like readline. This is the most
powerful single feature I use. Hitting Ctrl-R and typing usually 2-3 keys
gives me back the previously entered line I intended to find. If your REPL
doesn't have it embedded, use rlwrap. Look at -H option to control where your
history is saved exactly. Use big history size if you want to be reminded what
you typed months ago - having 10/100k of history entries doesn't hurt really
as it's still quick.

Tab completion is cool as well. For rlwrap you can pregenerate keywords for
completions (eg. your favorite libraries) and it will add completions for
terms entered during current session.

A good SCM for tracking changes even if working alone. I find centralized ones
annoying; hopefully we've got Darcs & Git, both awesome.

Using multiple desktops/workspaces to try new ideas in a space which doesn't
clutter your current visual, so you don't waste your time rearranging it.

Pen & paper. A habit of using it to get some distance. You can always scan a
sheet of paper if needed. I know not every boss is going to accept such scan
as a documentation ;), but preparing deliverable docs is something different
than making useful notes to yourself.

Lack of running IMs, MUAs, popup calendars and other disturbances during
coding. All that stuff can wait. The focus is everything. One exception is
when you do remote pair programming, then some VoIP app is handy. OTOH not
many people work this way.

A sign of a good tool is when you still enjoy using it after, say, ten years.
Most of the above apply here.

[edit: I meant MUAs not MTAs of course]

------
aerique
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.

~~~
drhowarddrfine
emacs doesn't have the latest/greatest editor features?

~~~
aerique
It isn't always the first to have them. Sublime Text's high level navigation
took a couple of days to surface in Emacs.

~~~
capablanca
Hm, but it doesn't really do that.

------
Anon84
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.

~~~
panic
Pen and paper help, too.

~~~
_giu
agreed. a whiteboard helps, too!

~~~
eru
Or a blackboard. I love chalk!

------
jey

      echo "127.0.0.1 news.ycombinator.com" >> /etc/hosts

------
gcv
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.

~~~
dirtyaura
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.

------
aw3c2
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.

------
Freebytes
I use Joe's Own Editor. You must configure it to prevent it from making backup
files (which are security risks) and to highlight based on your language, but
overall, it is excellent in terms of its speed and intuitive interface.

I use putty for my SSH connections. It is a nice way to remotely access your
server from a Windows client.

The programming language you use should fit the job so that is something that
is specific to the project.

Using subversion for version control is really one of the best tools
available. I would fear making changes in my code even if I had backups
because changing it might break functionality, and I would spend a long time
hunting for solutions of what I did. With any kind of version control system
(and subversion is very easy to use), you can make changes without worry, and
you can get old code you wanted to keep even though you were not using easily
(because commented code is evil). It encourages you to clean your code, remove
dead code, and to refactor your code because you know you can always go back.

You should learn vi in case you must use an archaic machine where you only
have remote access and do not want to try installing new apps. (Some very old
yet very stable telephone switches running with Solaris interfaces come to
mind.)

Grooveshark for listening to music. The site is fantastic, and I do not need
to waste time hunting for music that gets me in the mood to work.

Lastly, a notepad. I keep a notepad beside my bed. I find that it helps me
sleep. I will be thinking of code, and one idea leads to another as I relax.
So, instead of staying up for hours focusing on it (This has happened to me
hundreds of times.), you can write it down. My brain then relaxes because it
knows I do not need to remember it. Then, I can go to sleep. In the past, I
would not be able to actually fall asleep unless I got up, coded what I was
thinking about it, and then went back to sleep. Now I know I can put it off
until tomorrow and actually get a good sleep for the night.

~~~
kunley
You are right with the notepad near the bed.

Slight modification:

I practice a certain kind of meditation. It has side effect that many things,
including hacking solutions, come to mind during a session. I use a notepad to
quickly scratch one catch-phrase which will bring back whole idea later, and
let that idea go which is the purpose of this particular meditation. Often I'm
quite full of fresh ideas after such session. It's amazing and I'm very
thankful to the teacher who gave me this method.

~~~
hariis
What is the name? -thanks

~~~
kunley
<http://www.diamondway-teachings.org/>

------
r11t
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

------
txxxxd
A computer not connected to the Internet.

~~~
detcader
Absolutely, +1

------
imack
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...

~~~
jimbokun
"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.

~~~
aarongough
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...

------
aceofspades19
Git, or any distributed source control software. Even when you are working
solo, it helps to have something like git

------
nkohari
I don't mean to spam, and I'm admittedly very biased, but my product Zen
(<http://agilezen.com/>), helps me stay organized and makes me much more
productive and happy. I always have a million things to do, and Zen stops me
from being overwhelmed. (That's why I wrote it!)

On a less self-serving note, I'd also suggest (at least) two monitors, a good
keyboard, and a good desk chair. Fatigue, RSI, and task-switching are all very
real productivity drains.

------
gourneau
Ambient Music, mostly <http://www.hos.com>

~~~
tyrmored
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.)

------
code_devil
\- 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.

------
sidsavara
RescueTime!

[http://sidsavara.com/product-reviews/review-of-rescuetime-
fr...](http://sidsavara.com/product-reviews/review-of-rescuetime-free-time-
tracking-software)

Of course if you're using Unix, you _can_ get the linux version (which I don't
believe is officially supported).

Just knowing where I am spending my time makes me more productive and less
likely to randomly web surf etc

------
natch
Knowing well how to do for loops on the command line of whatever shell I'm
using at the time.

Saving snippets of how I get things done.

Always saving command lines in shell scripts, sometimes with parameters,
instead of just trying to remember them. Bash history is great, but it isn't
available when changing systems, hosts, and jobs.

Always making a sandbox directory for every idea/project, under a directory
named for the current year. This includes my own ideas as well as stuff other
people did that I download to play with. When a new year rolls around, most of
the directories don't get carried over; they just stay in the old year
archived.

Tagging every new project with keywords.

Automating everything possible.

Most fantastic win ever: VMware images that are preconfigured to whatever
state they need to be in to debug whatever I'm working on. Could be Amazon
AMIs; I use VMware atm.

emacs, vi, sort, uniq, comm, find, ack, diff, patch, perl, perltidy, man, git

------
spudlyo
GNU Screen

My top level screen session is a list of hosts I log into. On each of those
hosts, I also run screen (screen within screen) to give me virtual windows on
that host. As a UNIX admin this makes my life a lot more productive, as I'm
often logged into 5-10 machines at once. Instead of hunting around for the
right window, I can jump to screens and/or subscreens by name, without taking
my hands off of home row. For me, one large multiplexed terminal window is
best. It also helps if your terminal program can go full screen (like iTerm)
for maximum old-school terminal concentration.

Emacs

Learning how to edit text without taking your hands off home row (control key
sequences) is invaluable. This skill will help you in your editor, at the bash
prompt, inside of any program you can run with rlwrap, and in OSX (or windows)
edit widgets. With a bit of work you can configure emacs keys in every GUI and
non-GUI application you use. For Windows users XKeymacs works well for this.
Linux users can configure GTK to support emacs style editing. Having fast and
universal controls for text editing makes me productive.

strace

Why wonder why the a program is misbehaving? See every system call it makes as
it makes them, complete with arguments and return codes. Even attach it to a
running process to find out what it is doing in real time. This tool has
allowed me to diagnose and solve more thorny problems than any other in my
arsenal. For example, you're trying to figure out what arguments that gcc is
using to invoke the linker in a Makefile, or which order that the linker looks
for libraries, strace can tell you all of this, when you'd be otherwise
scratching your head and guessing.

Regular Expressions

Knowing Regular expressions can make your life a lot easier. In your editor
they allow you do all kinds of advanced text manipulations, even some dumb
refactoring. Knowing them also allows you to do some great parsing in sed,
perl, grep (ack is a better grep btw), whatever. Once the regexp lightbulb has
turned on your productivity can go way up.

Server Side IMAP Email Filtering

Regular expressions reminded me of this, but if you have all your email
handling rules (filtering, organizing into folders etc) done on the IMAP
server side, it frees up your email clients to be stupid. They don't have to
do any of that. Your email inbox will look the same in Pine, Mutt, Mail.app,
Outlook, your phone, whatever. This is the promise of IMAP. I use maildrop on
my own IMAP server for this.

------
tyrmored
Familiarity with functional/declarative programming methods. I'm not a guru on
this at all but learning a different way of thinking about programming like
this has been terrifically helpful -- in some languages more than others. You
can write functionally to at least some extent in almost any language -- even
Perl has a level of support for it that surprises a lot of hackers.

So if you haven't already, learn a Lisp, or Haskell, or even JavaScript.
Something that lets you pass around functions as parameters, and does
closures.

It's superb for JavaScript, for example, once you realise it's basically a
slightly weird Scheme with C-ish syntax. Suddenly all that ranting about
closures and lazy evaluation will seem so much more relevant!

------
xcombinator
Vim, paper and good quality colors pens. Valgrind, grep, gdb, inkscape for
drawings...

~~~
tyrmored
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?

------
ScottWhigham
I was surprised to see no one mentioning calendar/reminder tools. Maybe it's
because this is Hacker News and more folks are focused on, well, hacking and
therefore when they hear the term "productive" they think about being a more
productive hacker - I don't know. I do know that I would be far less
productive without a tool to set reminders - the idea of "Set it and forget
it" leaves room in my brain for more. Oh sure I have lots of other tools for
productivity including programming-related tools but the most productive tool
I use is my calendar with reminders and tasks.

------
mquander
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.

~~~
Dav3xor
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.

~~~
nuclear_eclipse
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.

~~~
Dav3xor
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. :)

------
blogimus
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.

------
misterbwong
Visual Studio, Launchy, Web Developer Toolbar, Firebug

~~~
tyrmored
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!

------
unalone
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.

~~~
aik
That's really cool. Wish it existed on windows or linux.

------
va_coder
REPL

~~~
jcapote
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...

~~~
PStamatiou
I'd be interested in reading more about your workflow, I'm a RoR dev.

------
nathanwdavis
Graph paper and a pencil. Just pull it out and start drawing, jotting down
ideas, and organizing a strategy of executing on the project at hand.

Also, Excel (or other spreadsheet program). Not usually thought of as a tool,
but putting small functions in cells and passing inputs/results cell to cell
is a good way to start the actual implementation of a solution.

------
jonallanharper
Learning the ins and outs of regex is well worth it. I find myself doing regex
search/replace almost daily within textmate.

~~~
tyrmored
Some people seem to find Jeff Atwood ranting about how fantastic regexes are
annoying. Every time I read another article like that, though, I just find
myself smiling and nodding.

Only thing that's kind of annoying is that the whole world hasn't moved to
Perl regexes yet (with which I'm most familiar and think most fluently). I
nearly punched the air when I learned Apache used PCRE for stuff like
mod_rewrite.

------
jamesbritt
* vim + numerous custom scripts and mappings

* JotBot (note: it's my own commercial app, but I use it every day)

* Todoist.com + a few custom apps that work with it

* Scores of little scripts to automate assorted tasks

* My G1, for notes and reminders

* git; almost everything gets a repo, so I more easily try things out while not risking losing previous work

Not at all related to 'nix, but most important:

* World's greatest wife

* Smart & good friends

------
iamwil
For me, just recognizing that something was painful and I was doing something
repetitive. It's easy to get lulled into a sense of 'this is how things are'.
When you're conscious of it, you can then start looking for features in the
tools you're already using, other tools, or build your own.

------
AhtiK
I'm somewhat biased being one of the TimeGT ( <http://timegt.com> ) developers
but after we finished it to a point that we were not that embarrassed to
publish it -- it has saved us time and made life much more productive.

------
raintrees
A good cup of orange pekoe. More often than not, a quiet time to meditate with
a warm cup in my hands gives me the greatest productivity breakthroughs.

I fear I have fallen to the monks of old: "First, boil water."

------
ekarisor
Vim and SlickRun (sorry Windows specific but certainly worth mentioning)

~~~
drhowarddrfine
Not worth mentioning since it's not remotely answering the question.

~~~
jrockway
Uh, what?

------
TomasSedovic
A web browser, actually. Plus that whole Internet thing.

------
fjabre
TextMate for mac

Django for framework

~~~
dkasper
+1 TextMate. Search Project and Go To File take it over the top for me when
working on more than one file at a time.

~~~
PStamatiou
have you tried Ack in Project? shift+cmd+a (once you have it installed)... i
do that many, many times a day

------
ludwig
Vim _and_ Emacs (yes, I'm schizophrenic).

~~~
jrockway
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.

~~~
Locke1689
Straight vim is rarely very useable. I wouldn't be comfortable with out tags,
minibuf explorer, nerdtree, cscope, and taglist.

~~~
jrockway
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.

~~~
Locke1689
What about the one where you don't use megabytes of disk space? ;)

~~~
jrockway
The OP says he uses both Emacs and Vim regularly. Emacs alone uses less disk
space than Emacs and Vim combined.

------
physcab
I do a lot of data mining using Hadoop. Hive has become one of my tools of
choice for SQL-ing large datasets.

------
plinkplonk
Increasingly, mathematics. Not sure if that would be considered a "tool" for
the purposes of this discussion.

------
fiaz
Netbeans, JRuby/Java, and some music

------
slackerIII
Valgrind. If you are writing c/c++ but not using valgrind all the time, you
are wasting time.

~~~
jrockway
s/ but not using valgrind all the time//.

~~~
Locke1689
Want to tell me what you develop your type I virtual machines in?

~~~
jrockway
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.

------
jlgosse
Definitely Eclipse. The debugger is basically the most valuable feature ever
developed. Ever.

------
mightybyte
GNU screen, vim, git, and Haskell

------
wlievens
Eclipse, oh god yes.

~~~
jimbokun
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.)

------
pcestrada
Cygwin makes life bearable on Windows.

------
hariis
the key productivity enhancer:

Having a good reason why you are doing something

------
mistermann
LLBLGen Pro (ORM)

------
maglob
Jira

------
mailanay
textpad

------
vlisivka
1) bash/perl(regexps)/other command line tools;

2) trackers, task focusing software: GTD-free, Trac, Mylyn, pyroom, etc.;

3) blind typing (to type fast), workrave (to stop typing);

4) somebody else, which will review my work.

