views:

10113

answers:

172

Take a programmer that has never used source control, show them what it does, and their eyes light up... the benefits are obvious but until they actually see it most people had never considered the existence of such a tool.

What other such things exist? Tools or approaches or techniques that aren't obvious before you encounter them, but once seen have obvious value. Things that are likely so ingrained in the way you work that it's hard to think of working without them, things almost embarrassing to bring up because you expect the other person to say "duh, that's obvious!"

No matter how petty something seems there is a chance that other people don't know about it yet; I'd like to get an idea on what things I'm missing simply because I never thought of them.

+107  A: 

An IDE!

Seriously some people still just dont know "why" they should use one...

Mark
I am one of them (but let's upvote and try again :) I still can't stand with the mess of buttons, icons, tabs, menus, poststamp-size editors, views, tree views, and the like one usually finds in modern IDE's. I sincerely prefer a fair editor and printf debugging.
Federico Ramponi
But that's probably because I never worked on a 1000000 LOC project. The only thing I miss from an IDE is the 'refactor' menu in the editor.
Federico Ramponi
Oh, and of course autocompletion.
Federico Ramponi
Seriously, I just don't get how the many benefits of an IDE don't greatly out weigh the "mess" as you call it, you can totally customise the look and feel of any environment you work in.
Mark
Any decent modern IDE lets you put the "mess" on autohide, only takes up space when you want it to. Visual Studio also supports a full-screen mode if you want to get rid of things like its title bar.
Greg D
Sure, I haven't worked on any large project, but still the benefits of an IDE doesn't cut it for me. I really enjoy Vim.
David The Man
Actually working in the financial software industry, we have HUGE projects.An IDE Helps keep everything organized, easy access, etc.I have a coworker who still argues that using vi is better for large projects.I have to disagree.using IDEs are v. useful for large projects
Wael Awada
I had two reasons to avoid IDE's: inertia and their steep learning curve. Having worked with XCode for a while now I'm sold on the idea. I think the fact that I could continue using Emacs key-strokes got me through the early stages!
Stephen Darlington
I'm *sure* you all have good reasons to advise to use IDEs. Only, I didn't get that feeling so far. What would you suggest for python development? (Eclipse + python plugin is what I'm thinking to give it another chance)...
Federico Ramponi
I use eclipse in work and am now transitioning to vim. Well configured vim can do everything I do with eclipse, except in a terminal and more efficiently (IMHO). I love vims keyboard commands, syntax highlighting, autocompletion and ability to script in python. I've come to despise eclipse though...
Dan
Eric is nice for Python, especially its refactoring tools.http://eric-ide.python-projects.org/
sep332
I like eclipse for Java development. I find that most of the "clutter" of IDE's is because most people are using low resolutions.My laptops resolution is 1920 x 1200 and the editor window is much much larger than anything else in the IDE.That said ive learned the basics of vim and once you start puttering around in that, man you just spew out code.
Deinumite
@Dan I can't imagine how keyboard command can be faster than good keystrokes...
Nicolas Dorier
If the IDE doesn't have really really good Intellisense I am very nearly as productive without it.
Joshua
People use IDEs instead of editors to write code for the same reasons that people use word processors instead of editors to write text.
Thorbjørn Ravn Andersen
@Federico, most IDE's allow to fullscreen a single thing so you can get rid of all the clutter if you need to and have it back when you need to.
Thorbjørn Ravn Andersen
@federico, also the IDE helps you learning new code faster, as you Can simply see more context and navigate easier without needing to jump hoops to get the metadata your editor needs. Think what difference TAGS does for vi.
Thorbjørn Ravn Andersen
Thorbjorn: The same reasons that people use word processors instead of editors to write text ... because they're not very good with a text editor? I'm not sure what you're getting at here.
Ken
I use Idea at work. But I get my vi/vim fix by using the IdeaVIM plugin.
Vivin Paliath
+38  A: 

Another important concept is ORM and using tools like NHibernate..

Gulzar
This is true, I have seen so many people get scared away just at the thought of an ORM.
Mark
.. and EntitySpaces, and Llblgen, and LINQ-to-SQL, and Entity Framework, and ..
stimpy77
These are all rapidly evolving and are great for development teams with weak SQL skills. From what I have seen, iBatis can be much better for those who want more control over the actual SQL run: http://ibatis.apache.org/index.html
Dr8k
Not sure I really like ORM. I still need to do some research on it.
Terry
+43  A: 

A unit testing framework like JUnit, and a Continuous Integration (CI) server. Also, some kind of build system like make, Ant, or Maven.

Maybe also a team coding standard, to avoid wasting time over arguing with coworkers about tabs vs. spaces and brace styles.

Ken Liu
A: 

I second the suggestion of a Continuous Integration server. Particularly if you use something like Hudson, since you can graph all sorts of interesting data (test numbers, code coverage scores, static analysis) over time.

Dan Dyer
I think you should vote the original post up if you second it in order to push it to the top.
David Holm
+88  A: 

Debugger. I deal with so many computer science students who have not really used a good, GUI-driven debugger.

I hold up Visual Studio as a great debugger (or at least the best I've ever seen).

Of course, I've debugged on a system where the only debug output I had was one LED, initially. That was not terribly pleasant. You don't need a GUI. But it sure helps at times!

Paul Nathan
In my experience, CS students overly depend on visual debuggers and have no idea how to debug code when they don't have access to one. I've even seen students doing something they erroneously called "unit tests" where they just stepped through the code and said "that looks right".
rmeador
My experience is that most students I've dealt with believe that printf is The One True Way.
Paul Nathan
@rmeador - stepping through the code in a debugger is a good thing, though, at the least.
Bernard
printf is often the only way. Because printf to a file is a logging system. And many times you just can't replicate the bug in a visual studio debugger.
Cervo
I'll admit that visual studio blows the gnu debugger away. But sometimes gdb is all you have....
Cervo
@Cervo and sometimes you can't replicate the bug with printfs...
drhorrible
@rmeador: That's a difficulty with senior devs, too. Real unit tests are an extremely hard sell.
Greg D
of course, with `printf` you mean http://log4cpp.sourceforge.net/
msiemeri
Once you learn how to use it, gdb is a great tool. I'd almost prefer it to using Visual Studios debugger.
samoz
Sometimes `cdb` (*not* gdb) and WinDbg are more suitable.
Alex
+1 for pointing out the debugger. There are undergrads who go through their entire CS degree without learning how to use the debugger. It's unimaginable. It should be one of the first things taught as a visual way to trace through code and see what's going on, line-by-line!
+102  A: 

A profiler. A good one will tell you more about what is going on inside your code, than you could have ever dreamed.

EvilTeach
absolutely agree here. It helps you get to that next level where you can really wow people.
TheSoftwareJedi
Noob alert - but what is the profiler you mentioned?
Dominic Bou-Samra
+2  A: 

Coding standards checkers like JTest are capable of giving good advice on programming techniques that you might not be aware of, and they can give you something to think about. Also, any unit testing framework that calculates statement coverage is useful to see what you overlooked in your tests.

moffdub
+70  A: 

Fiddler - HTTP debugger, essential for REST development, link

FireBug - javascript/css debugging used to be torcher, FireBug + jQuery make AJAX development fun. link

JarrettV
+1 for firebug. It's probably the sole thing that keeps me on firefox, as opposed to switching to safari on the mac or google chrome on windows
Orion Edwards
I think it's a bit much to say 'fun', but certainly not to complete horror it was previously.
SpoonMeiser
+1 for Firebug, though I've taken to using it in a separate copy of Firefox Portable dedicated for development work with other relevant extensions, rather than my main installation as it can cause Firefox to crash (especially on Gmail).
Mun
Is "torcher" a Freudian typo? (coming just before "Firebug")
Hugh Allen
I think it was conscious pun :)
JarrettV
Charles Proxy here for HTTP debugging - free and cross-platform (written in Java). http://www.charlesproxy.com/
Artem Russakovskii
@Mun you can enable it only for certain sites (or at least disable it for Gmail and enable it for everything else). @Orion, I haven't looked at much yet, but Chrome comes with something that resembles Firebug
MatrixFrog
TamperData and Wireshark.
Rook
+22  A: 

A large, widescreen monitor. Being able to see two (or more) files for editing at one time is huge.

Matt Dillard
multiple monitors are better. I think 4 is ideal for a corporate programmer. 6 is better.
TheSoftwareJedi
While multiple monitors are important, widescreen is the most critical aspect. Most IDEs need a dedicated vertical area for files and outline, not leaving enough space for anything. I don't know how people edit at 3:4
Uri
It really depends on the IDE. VisualStudio's "main frame" approach doesn't lend itself well to multiple monitors, where XCode, where everything is a window, shines on multi-mon, wide screen isn't as much a factor here. Also, I'd argue it's pixel count, not wide screen, ie 1600x1200 minimum.
Chris Blackwell
I always feel like I'm squinting with a widescreen. I really prefer the vertical space of 3:4 ('course, I'm usually using vi, not an IDE, and have a second monitor for horizontal space).
Brian
Multiple monitors are more cost-effective. I have to admit, though, it might be nice for the middle monitor to be wide.
Alan Hensel
@Uri: widescreen or not is not as important than _resolution_ afforded by the monitor.
icelava
I think I'm alone in this but I find one massive monitor (24inch + with multiple desktops) to be much more comfortable than multiple monitors.
Ali
You really need to get to the 30" (2560x1600) for the word "huge" to be meaningful. At that pixel count, you can really slice it up into 2, 4, or 6 screens and still be useful.
gahooa
@Ali: You wait until you get *several* massive monitors!
Donal Fellows
+279  A: 

A second monitor. One to hold the programming environment, the other to hold either the documentation or to hold the program under testing.

acrosman
A third monitor. To do email and database stuff.
tvanfosson
Widescreen is important too (e.g., Eclipse)
Uri
I wish I could get a second monitor, IT won't let me :(
Nathan W
A fourth monitor. For Firebug.
Dylan Beattie
A bigger desk for all my monitors...
JesperE
A second monitor is MINIMUM.
Jeff Schumacher
A bigger office for my big desk
Vinko Vrsalovic
Longer arms to reach my keyboard on the huge desk
Vinko Vrsalovic
@Nathan - if you're a developer having a second monitor MORE than doubles your productivity. Given how cheaply you can pick-up a decent 22"+ widescreen LCD (a few hours at a software developers hourly rate) it's really madness not to.
Sprogz
A fifth monitor - where else are you going to put Stack Overflow? Sheesh
1800 INFORMATION
A second computer and synergy installed on both computers!
Loris
A 6th monitor. For a spread sheet to help me manage my monitors.
Matthew Scouten
A 7th monitor for monitoring my other 6 monitors.
Bob Somers
An 8th monitor for viewing that amazing background pic you spent 3 hours of work time searching the internet for.
postfuturist
Now if only I could convince my bosses of this at any of the 3 companies I worked at :)
Cervo
Nathan, go buy your own monitor. I do that at work. If you wait for the company to supply everything, that will happen after you have quit. :-D
icelava
Compound eyes to see what's going on on all my monitors at the same time.
mmacaulay
Better aircon, to cope with the heat thrown off by 8 monitors and the frankly obscene graphics card combination required to drive them all.
Steve Jessop
A 9th monitor, so you can browse shopping and auction sites for that new monitor you've felt you needed for the past hour.
EnderMB
haha, all i have a is a freakin crt 17inch with a old p4 system, apparently developers don't need good hw according to my bosses :(
melaos
I don't understand the whole "2 monitor" thing. It takes about as much time to flip virtual desktops as it would to move my eyes between screens anyway.
Ant P.
Two monitors allows your to compare things more easily. You can look at your code and the documentation at the same time. So I can write the code while still reading the documentation. There are other advantages too.
acrosman
Ant, sounds like you have never had two monitors before.
jim
@Ant P. I'll take your extra monitor, then. Have fun with your desktop flipping. :)
Greg D
Interestingly, in 10 years of programming, I have tried working with a 2nd monitor for 3 or 4 times. I always ended up back with one - I just *couldn't* get used to it.
Pekka
+1: Sometimes when debugging GUIs (especially repaint issues when creating your own components) two monitors just rock!
Matthieu BROUILLARD
haha got it to 256!!
dotjoe
+6  A: 

Learning how to take heap dumps of running processes, then using WinDbg + SOS to troubleshoot them for memory leaks and deadlocks. Priceless with large scale web applications!

Good article here

TheSoftwareJedi
+96  A: 

Something we all take for-granted now, but I remember when I first got a mouse with a scroll wheel, and then had to go back to one without.

Joel Coehoorn
For some reason my old Visual Basic 6 IDE would continually ignore the mouse wheel. It was excruciating.
Chris Farmer
It's a bug that has a fix described here: http://stackoverflow.com/questions/147339/visual-studio-6-tips-and-tricks#184984
jpoh
i have gone through the same experience of having to use a mouse without the wheel, for sure we take it for granted
Steve Obbayi
Wish I could upvote multiple times for this one
tloach
I remember when I first got a mouse, on an Amiga 500 in 1989... It was excruciating when in 1995 I had to go back on keyboard on my pentium 100...
Myrrdyn
Sounds like you Will LOVE the swipes ón a modern Mac
Thorbjørn Ravn Andersen
+2  A: 

Debugger. I deal with so many comp sci students who have not really used a good, GUI-driven debugger.

I hold up Visual Studio as a great debugger.(Or at least the best I've ever seen).

printf debugging. I've seen so many CS students who have struggled with good GUI-driven debuggers when they could have simply added a few lines to their code and found their mistake.

(Both methods have their moments, I guess)

aib
"Tracepoints" are nothing more than printf's, pretty much
TraumaPony
+4  A: 

Lint, pylint, JSLint, etc. You don't know just how ugly your code is until an automated procedure goes out of its way to badger you about it.

bouvard
+120  A: 

The Internet.

The amount of information at my fingertips is mind boggling.

BoltBait
You didn't know you needed that?
Jay Bazuzi
I've been programming a lot longer than the Internet has been around.
BoltBait
Back in 1995, I didn't know why I should pay for Internet access when I could dial up a dozen BBS systems for free.
Bruce Alderman
Who are these people - on Stack Overflow - who didn't know they needed the Internet? Is there some direct-mail interface that I just haven't found yet?
MarkJ
@MarkJ: they are people like me who have been using computers since before you were born.
BoltBait
- 1: oh the endless distractions! Procrastination is the plague of early XXI century.
Tadeusz A. Kadłubowski
@BoltBait: MarkJ is 39 years old. Have you been programming for longer than THAT!!?
Vaibhav Garg
+28  A: 

A nightly build.

Jay Bazuzi
We run multiple hourly's per branch.
FlySwat
That is too much for their favor :)
Nrj
Yes, build as often as you can! Some of my experience is with huge projects that take 23 hours to build everything; ouch.
Jay Bazuzi
Several times a day!
icelava
+60  A: 

Automated refactoring tools. Mostly Rename, Extract Method, and Introduce Explaining Variable.

Jay Bazuzi
+1: Agree a must to have for me also!
Matthieu BROUILLARD
+165  A: 

Vacations. Evenings. Weekends. It can be fun to pull all-night sessions and code really cool programs, but in the end family time is what counts.

VirtuosiMedia
Especially vacations. I keep telling myself I'll move to Europe so I can finally get a decent amount of vacation.
Kyralessa
+110  A: 

stackoverflow.com

nickf
this one totally deserves the answer award.
TheSoftwareJedi
What's that? I've never heard of it.
Jacob
@jacob : hahahhaha, me too. i only use it unconsciously
justjoe
+3  A: 

System level debugging and monitoring tools:

  • sar - Solaris, system activity reporter - a system monitoring tool
  • vmstat - Linux, processes, memory, paging, block IO, traps and cpu activity
  • lsof - Linux, lists open files, including sockets, shows the owning process
  • strace - Linux, traces system calls and signals in an already running program
  • truss - Solaris, system call trace
  • dtrace - Solaris, this tool is amazing

Software Development (some were already mentioned): Unit Testing frameworks, JUnit, etc., especially when combined with code coverage tools: Devel::Cover (Perl), Cobertura (Java), rcov (Ruby), sb-cover (SBCL) and Devel::NYTProf (Perl).

Profiling tools: Devel::Prof (Perl), Devel::NYTProf (Perl), YourKit (Java) and ruby-prof.

Oracle's EXPLAIN PLAN for helping to tune SQL.

Kyle Burton
+10  A: 

IM and IRC. At this moment there are 207 people in the ##CSharp chat room in FreeNode, always about ten who are active at any time, and always two or three who are willing to help or discuss technical issues and ideas with you about C#.

stimpy77
Are they nicer than the aholes in #c# of efnet?
FlySwat
MUCH nicer!!! I visited the guys in efnet and only lasted about five minutes before I had to bail out of there.
stimpy77
I prefer all of the Freenode channels to Efnet's channels.
Thomas Owens
But StackOverflow has history...
Thorbjørn Ravn Andersen
+118  A: 

Learn to say NO.

Hapkido
This is more important than many developers seem to realize.
Jeff Schumacher
N... N... N... New features! That's not right...
Bernard
Yes, drugs are bad.
postfuturist
The problem with this is that in general you have to say no to the boss. Then things get nasty.
Stefano Borini
And if you don't, things will get nasty anyway, but it will be your fault... ;-)
Hapkido
this is so true. don't do favor and don't accept job while you already have a deadline
justjoe
+34  A: 

Mastery of a text editor (whether it be VIM, Emacs, etc). At least one that supports replacing with Regular Expressions, macros, and all the shortcuts that allow me to type and edit at the speed my brain sometimes thinks. Learning an editor inside and out is one of the best pieces of advice I ever got from an instructor in Com sci at university.

Kris Erickson
Hear, hear. Learn a good editor Well, but also learn the deafult one ón each platform well enough to dó trivial edits.
Thorbjørn Ravn Andersen
+73  A: 

A good file comparison application, like BeyondCompare.

http://www.scootersoftware.com/moreinfo.php

It is the most useful tool in my toolkit and has saved my hide many times.

Jack
Also some pretty good free alternatives like kdiff3 http://kdiff3.sourceforge.net/
jpoh
Or DiffMerge by SourceGear: http://www.sourcegear.com/diffmerge/
Antonio Cangiano
Amen, I use UltraCompare.
icelava
Another vote for BeyondCompare here.
Artem Russakovskii
I use WinMerge since it was the first thing I found several years ago.
Albert
wow...Windows users discover diff :-)
DavidM
vimdiff. 'nuff said.
Chinmay Kanchi
+41  A: 

Here's one that I don't have yet... but I SHOULD. A reversable debugger. That is, you just run your program until the error, then tell it to BACK UP one step at a time until you figure out what's going on. I have seen academic examples, so tell me: why don't I have one built into IntelliJ or Eclipse?

mcherm
Considering that Borland's Turbo Debugger had a "step backwards" feature in 1991, that's a damn good question! Why haven't IntelliJ or Eclipse caught up with this?
Sherm Pendley
If you're doing AWT work, take a look at Andy Ko's whyline.
Uri
Smalltalk environments have had this since the 80's or maybe even before that... Try [Restart] (the current context) in the Squeak debugger to see it in action!
Sébastien RoccaSerra
The next version of Visual Studio will have a 'historical debugger' doing exactly what you're asking for.http://channel9.msdn.com/posts/VisualStudio/Historical-Debugger-and-Test-Impact-Analysis-in-Visual-Studio-Team-System-2010/
Eclipse has "Drop to Frame", which backs up to the start of the current method (or any other method in the call stack). With small enough methods, the amount of forward stepping is minimal.
flicken
Always wished this feature existed when I stepped forward too much.
blizpasta
next version of VS is supposed to have this
Greg Dean
For Java, CodeGuide www.omnicore.com does that.
michelemarcon
@1 Yep - definitely what programming in Smalltalk feels like.
teapot7
+29  A: 

On a group level, continuous integration.

If an automated build runs per commit, people will no longer freak out when the build breaks because they know exactly which commit broke it.

If the build also runs unit tests, people will smile.

If the build also deploys to test environments and runs acceptance tests, group zen may be on its way.

Solracnapod
That would mean an organization would have to spend money on testing! Why do that when customers _pay us_ to beta test our releases?
Greg D
+54  A: 

VMWare or other virtualization system. Being able to test cross-platform code on 6 or 7 different OS configurations without having to have a mess of spaghetti cabling and KVM switches is great.

Gerald
also great for client server program testing
PeteT
Even greater for developing webapps on top of multiple tomcat/java/database configurations. Previously I would install separate tomcats on my development machine and be completely lost when configuring which java is used etc. Now I have my own VM's per project
kosoant
Just being able to put a new service ón a new ip- number with the deafult port instead of ón a crowded server ón an obscure port, and then announce it with bonjour/zeroconf is fantastic!
Thorbjørn Ravn Andersen
A: 

FullShot9 for putting screen shots of only the areas on code and forms that I am referring to into my documentation and bug reports.

Skittles
+28  A: 

For .Net Lutz Roeder's Reflector for being able dive into the code of some DLL when source code is not available.

Open source Javascript frameworks like Prototype and JQuery that finally make it easy to get a rich clientside experience.

And Tortoise SVN for saving me from my Visual Source [un]Safe nightmares!

jjacka
Email from Lutz re Reflector in Aug. 2008:After more than eight years of working on .NET Reflector, I have decided it is time to move on and explore some new opportunities.I have reached an agreement to have Red Gate Software continue the development of .NET Reflector. ....
DOK
I hope they don't start charging for it, as with SQL Prompt.
Kon
+16  A: 

Cygwin. All the power of the Linux command prompt and associated tools for your Windows systems. If you know some basic bash commands there are a lot of things you can do with a one-line command that would be a real pain to do manually in the GUI.

DrStalker
I prefer http://unxutils.sourceforge.net/
kenny
I second unxtools, along with http://sourceforge.net/projects/console/
Alan Hensel
I use GnuWin32 for the same thing. http://gnuwin32.sourceforge.net/
Chinmay Kanchi
+91  A: 

Holding down alt + dragging, in certain text editors, to select not only lines of code but also columns. This has definitely saved me hours of time.

cole
Wow, didn't know that, yet often i thought "How could would it be to select a column without having to copy/paste it into Excel first... Works like a charm :D
Michael Stum
This is a great tip!
bouvard
If I could vote for this one more than once, I totally would. You're right, saves TONS of time.
Zachary Yates
Jeebus... I can't believe I called myself a developer before.
greg7gkb
Yeah, it's great. I am all the time resorting to jEdit just for this
Camilo Díaz
I just learned something! :)
Ries
Can you provide a few example apps/situations where you use this? I don't follow the description.
Cory House
Say your file is a list of names. Each name is on a new line. First and last name are separated by tabs so that all the last name start at the same column. If you only wanted a list of last names you hold "alt" click and drag a block over all the last names, copy and paste. Works in Notepad++, Word.
cole
Nobody mentioned yet that you can also Alt+Shift+Arrows in pretty much every app that supports Alt+drag... Visual Studio and Notepad2 included.
romkyns
Sweet! Now how do you paste columns?
Martin Cote
I can't believe I didn't know that.
Jason Baker
@Martin Cote: Ctrl+V :-)
Jasper Bekkers
Please name these editors.
Thorbjørn Ravn Andersen
Visual Studio, Notepad2, Notepad++, Textpad, jEdit, MS Word, even MS Outlook. I don't know about any other IDE's, but I'm sure they all would have it. And I've found it works slightly different in different programs.
cole
Also in PsPad you can switch the selection mode from normal to column, it also can save a lot of time.
Matthieu BROUILLARD
@cole I didn't know MS Word and Outlook counted as IDE's :)
Wesley Wiser
Shift-V in Vim to select lines, and Ctrl-V to select blocks (rectangles of text). Ah, I love Vim.
strager
+88  A: 

Source control. I'm amazed at how many people don't use any.

Uri
this was in the original question, so I think it's assumed already.
DGM
But you can't vote it up! :)
David Holm
I figured that whoever would look it up in the future, would go immediately to the answers and not read anything but the question title.I also admit that I wanted to see if this will get votes... </snicker>
Uri
I've only worked at one place that *wouldn't* use source control - but not for long!
Mr. Matt
I'm a recent convert to using source control, so I understand how much I was missing out on that extra security blanket of knowing that if I break something, I'll be able to roll back easily.
dsimcha
+1  A: 

Portable Apps, Linux Live CDs, and classes in C++ have all vastly improved my life.

HappyCodeMonkey
A: 

Finger-Print reader for authentication on a notebook ! Wow !!

Nrj
+4  A: 

Funky things like Dependency Inject or Test Driven Development.

smaclell
+38  A: 

A family. My baby daughter rocks! And shes a good sleeper too!

Craig
not programming related, but I have to agree. Also, I'd add "a van for the family" ... we just got one and it ROCKS.
DGM
You ought to get the suspension checked out. That might be dangerous.
SpoonMeiser
I thought the van rocking was what got you with a baby ;)
Aidan
I'm about to graduate to van. My house now has: me, wife, daughter1, daughter2, inlawDad, inlawMom, basementRoomMate... We can't all go anywhere together, since the Camry only seats 5. >sigh<
Troy Howard
I have to agree though -- I became a better programmer after having kids... Why? I suddenly cared about job security, a stable income, beneifts, etc. In other words, I got "career minded" and that has had a huge impact on my code quality.
Troy Howard
I got 7-month-old twin girls and all of a sudden care a lot more about my medical coverage provided by the employer. Thankfully, my wife is anti-van just like me. So I got myself the new Pilot to fit everything!
Kon
She even writes better code than you? Smart kid :)
Thorbjørn Ravn Andersen
+4  A: 

Backups. Automated, versioned, tested, and useable backups.

DGM
+9  A: 

Uninterruptable Power Supply. Your hard drive data thanks you.

DGM
+12  A: 

A girlfriend that cooks for me while I am at stackoverflow.

gregf
upvoted to cancel a clearly jealous downvote
Steven A. Lowe
I do the cooking here, its a very relaxing activity. Do you know Susan from Desperate Housewives? Well, my GF is just like that :) you should try it out too ;)
Fabio Gomes
+4  A: 

Teach him Test Driven Development way of developing software.

+32  A: 

Firebug: didn't know I needed it, and sometimes wish I didn't need it anymore.

+11  A: 

A coffee grinder

cbp
Grinding coffee from whole beans is one of those 80% things. You can go crazy making awesome coffee, but for me, as long as it's freshly ground it's "good enough".
Jerph
A: 

Textmate bundles. E uses them now too, so I can develop on Mac and PC using relatively light-weight and easy-to-understand IDEs that are very versatile.

hlfcoding
+3  A: 

A mocking framework, like Rhino Mocks, which allows you to work with mocked or stubbed instances while testing.

Without it Test First Development just wouldn't be the same.

vanslly
+58  A: 

code & syntax highlighting and coloring in modern text editors and IDEs

Steve Obbayi
+1 - I find it incredibly off-putting if I ever have to go without syntax highlighting.
Mr. Matt
+1 - it's amazing how it still seems to be 1980 in some editors
MarkJ
I have stared at code thinking something was wrong. The syntax colouring told me that a variable was not declared in the way it was supposed to according to how it was written (in Java, all uppercase indicates CONSTANT which this wasn't).
Thorbjørn Ravn Andersen
+48  A: 

Red squiggly lines under my syntax errors so I don't need to hit compile.

It's saved days of my life.

RichH
+1  A: 

Using a language that supports closures and functions as first class objects, if you've never used anything but a C derivative. These two language features make your code orders of magnitude more elegant. It can take a while to catch on to why they are nice, but much like source control, it's hard to go back once you have them.

Chris Blackwell
+87  A: 

Touch typing.

Don't laugh, I've personally known several programmer who "hunted-and-pecked", claiming that they could do so just as quick as a touch typer. I say, BS. If you can't touch-type, you're gimping yourself.

There are some good free online typing programs. An hour a day for a couple weeks can double your typing speed, and nobody has to know you were ever a hunt-and-pecker.

blindauer
The most important class I took in highschool.
Lance Roberts
I didn't actually learn to touch type in high school. Too boring. :o 'a', 'a', 'a', 'a'. . . Learning vim had me doing it though.
Bernard
if you can't type without looking at the keyboard, you are *not* a programmer.
nickf
remember this?: 'dads' 'fads' 'sads'... (;
keyofnight
Hey! Who are you calling a pecker?
anopres
I count touchtyping as one of the two things that I learned in school.Had to relearn it for Dvorak, though.
tomjen
Part of me wishes I had learned to type properly in Middle School/High School when they made us play Mario Teaches Typing all the time, but I can still manage 80-110 WPM without stopping to look at my keyboard- it's just a matter of feeling the keys
Nathan Taylor
@"[play a typing game] an hour a day for a couple weeks" Am I the only one that taught myself how to touch type by programming and internet surfing?
Earlz
I taught myself when I was 8, on a mechanical Remington typewriter. Back then, I didn't know I needed a computer...
Marco Mariani
A: 

Third party tools that make your job easier / more productive.

For example I work with sql server a lot and there are some great intelli-sense and comparison tools out there. I can compare and sync schemas and data. When I show these to other developers they often turn green with envy.

The tools alone save me hours upon hours a week.

Pace
+33  A: 

Generics - I love you.

John Nolan
I am also amazed that most people don't use them still, both in Java and .net camps
Varun Mahajan
+1, the day I found Generic.List(of T) was a good day!
Pat
+1, Generics was the first thing that came to mind.
Kon
I'd never heard of this before: http://en.wikipedia.org/wiki/Generic_programming
JW
+5  A: 

MacBook's touchpad.

I second this. Being able to do the 4-finger swipe saves a ton of time!
Chinmay Kanchi
+6  A: 

Automated regression testing, preferably run nightly after the nightly build on the nightly build. Huge time saver and confidence booster.

Shane MacLaughlin
+1  A: 

Make-file or now it is Ant-files i will have to learn by heart

Peter Miehle
A: 

lex and yacc for skimming through context free data (of any type, be it languages or structured data)

Peter Miehle
+27  A: 

Google
so that all that I need to know is just a URL away

Vaibhav Garg
"Google - making people on the Internet appear smarter since 1998"
Steven A. Lowe
+4  A: 

Scripting I mean scripting in "scripting" languages. I used to write my scripts in C, and only realised the true power of scripting when a colleague introduced me to Python.

Since, then I have moved on to Scala, but the Python experience was an eye opener.

ePharaoh
You should learn /bin/sh someday...
Thorbjørn Ravn Andersen
+17  A: 

Understanding the end user.

There is no substitute for understanding.

I used to think I understood the end user. Then I was on a project with an on-site customer, and my self-confidence was reset to a different level... I don't think this one will get enough votes, because people reassure themselves. They don't know, or don't know that they don't know, or don't care.
Alan Hensel
Even indentifing the end user is sometimes tricky. The customer is not always the end user.
TFM
+12  A: 

A memory stick

Rob Bell
+2  A: 

Cell phone.

kenny
+1  A: 

By the way, I'm not answering this question per se, but for anyone that doesn't know about source control (as mentioned in the post), here is a great introduction: http://www.ericsink.com/scm/source_control.html

Danielle
+1  A: 

Two tools:

  1. Good Database schema compare tool (Great for generating change scripts on legacy dbs)
  2. Tool to generate Insert Scripts (Lets you annihilate your dev environemnt and restore at any time via query analyzer)
Nicholas
+9  A: 

Intellisense

Dana
+3  A: 

Reflector!!!!!!!

Nicholas
+11  A: 

I keep coding notes. A library of code snippets + text about coding minutiae.

As a senior .Net web developer, I just have too many details to remember in too many languages -- C#, VB, HTML, CSS, SQL, JavaScript and on and on.

I can instantly find the SQL using ROW_NUMBER for paging data, the syntax for applying a regex in JavaScript, or the steps for deploying a web app to IIS, along with my own comments and troubleshooting tips.

Since I've been keeping notes for a decade now, I can find information about older technologies like classic ASP, SQL Server 7, or VB6 -- handy when you're called in to read the old code for an upgrade.

I refer to my own dogpile of notes before going to Google. The particular software I use is InfoSelect (www.miclog.com, I have no affiliation with them). It's like writing everything you know on 3x5 index cards and then being able to search their text. I believe you can also use OneNote for this; no doubt there are many others.

DOK
+2  A: 

Tools like CodeRush & Refactor Pro
Coffee
A comfortable chair (seriously)
Productivity enhancing tools (not programming specific) like Launchy and Ultramon
Someone to bounce questions off of
Silent time
Code Complete 2
Virtual Machines

just to name a few.. but all of these are very very important to me.

Jeff Schumacher
+11  A: 

Assertions. After I started adding them to my own code during development, I was astonished to find how many times they were triggered. When I started adding them to other people's production code, they were astonished by the number of bugs that the assertions uncovered. It was a tipping point in my software development career.

RoadWarrior
+8  A: 

Design patterns

JB King
+8  A: 

wiki - collaboration on the web

Maglob
+4  A: 

A programmers notepad (such as TextPad or Notepad++). Sometimes a full IDE isn't needed and it' nice to have someting light to do quick things.

+1  A: 

Separate compilation. Gone are the days of when I used a BASIC compiler which took several minutes to re-parse a large program after editing one line of code.

da_code_monkey
+12  A: 

Coworkers!

I left my job to do a solo software startup project and by far, by a million miles, the thing that I miss most is having smart people around me. This is not only true in the sense that our coworkers make us smarter, but they also help us stay sane.

twitch twitch

So next time you think you can do it better by yourself, really examine all of the benefits of being surrounded by smart folks. I don't regret my decision, but I can't wait to hire someone!

Ben Throop
bouncing ideas off other people is great, working on your own means silly design decisions are easy to make and long to fix.
PeteT
I've since hired someone and stand by this post.
Ben Throop
+4  A: 

Emacs - Before using it I didn't imagine I could so easily automate all those everyday routines. Now I can't imagine my life without it.

Rene Saarsoo
+9  A: 

Code Complete. Absolutely the best book on software development.

Even Mien
+2  A: 

A "visual" editor. When I first started programming, I learned to use a line editor (think interactive sed... a big step up from punch cards) and got pretty good at working with it. Then some other students started using and bragging about a new "visual" editor (think vi). I tried it, but couldn't see the point; I could edit code faster with the line editor which I had spent a great deal of effort mastering. Finally, after some time, after admitting my stupidity, I switched to the more modern editor and never looked back. Hopefully that experience has made me a better judge of the value of change. In our industry, more often than not the new way of doing things is worse than the old one. But sometimes the new way is in fact an improvement.

ejgottl
I, on the other hand, learned to use vim. It's awesome. I used to use Visual Studio before :)
hasen j
It is not easy having to relearn things you know how to do well already.
Thorbjørn Ravn Andersen
+1  A: 

Maven. It makes integrating the use of various tools into the build process so easy.

Code Coverage Reports (cobertura).

tunaranch
+3  A: 

Ctrl+F5

Ovidiu Pacurar
On my Linux box, this takes me to desktop 5 :). That works, I suppose. Multiple desktops in Linux are pretty handy.
postfuturist
Wow! thank you. In OS X on my Mac that shortcut takes you to the toolbar of the current window. That was one of the things I didn't know how to do without the mouse. Great!
Sergio Acosta
You might want to be more specific (software and os), as in Firefox on Windows it only does a refresh and override the cache...
Franck Mesirard
A: 

A tool to check memory usage (like valgrind, purify or bounds checker). These have been the key to solving some pretty nasty bugs in the past. Because reading through thousands of lines of code looking for that wretched memory corrupting code is not my idea of fun.

Kena
+2  A: 

WinSCP and TextPad.

Kent Brewster
+3  A: 

CruiseControl or any continuous integration tool, and lots of Unit Tests.

Good people in Test.

And "eat your own dog food" use your software every day you'll know the problems earlier.

AlePani
+3  A: 

I've found that having one vertical monitor and one horizontal monitor is very useful. E-books, web browsing and some code (long functions) are better on the vertical one. Mail and wide code are better on the horizontal one.

Jerph
+2  A: 

for me also...

  1. JetBrains tools (ReSharper, dotTrace)
  2. GhostDoc, (VS.NET Addin) (the little push I sometimes need)
  3. Expresso, great regex tool
  4. Enso, program launcher
  5. Google Reader
  6. VirtualPC / VirtualBox
  7. and FreeMind, to keep me organized

EDIT

forgot one

  1. GridMove

EDIT 2

some tools I place on my USB stick. (link / link)

always my mindmaps with me...

bob
Thanks for the FreeMind.I didn't know that that there is free alternative to MindManager
Rinat Abdullin
A: 

Capistrano. Knowing that I can run deploy:rollback if anything fails and also forcing tests to run before deployment is extremely useful. It also means no matter how complicated deployment of a project is, anyone is able to do it since it only requires a single command.

larssg
+3  A: 

Bazaar. Definitely the best source-control software I've ever worked with. First you discover source-control, then you discover bazaar.

Herman Lintvelt
Why bazaar instead of any other SCM?
Thorbjørn Ravn Andersen
+7  A: 

Agile and SCRUM Methodology changed everything

Nick
+3  A: 

Domain Driven Design

Nick
+3  A: 

Basecamp Project Management Software because no one really wants to take the role of the project manager, but this helps everyone become more accountable for what they are doing. Especially in small companies, I think most programmers fret at the thought of using such software because they complain it makes more work for them, but when you are working with programmers who are both on-site and remote, things can get messy. Basecamp helps to keep everyone on the same page. For our team, we use it as a calendar, task list and sometimes a wiki for documentation.

jrutter
+4  A: 

WinMerge for comparing the differences in content of two files similar files

+1  A: 

A second screen

For developping and testing and read the documentation, plus check e-mails once a while...

Isn't this a duplicate of the one currently at the top of the list with over 100 votes?
Alan Hensel
+3  A: 

Scott Hanselman has put together and maintained an excellent list of tools and utilities, many of which I now find indispensable.

The list is here:

Scott Hanselman's 2007 Ultimate Developer and Power Users Tool List for Windows

My personal favourite: slickrun, an indescribably smart and effective utility to launch anything.

Shane
+10  A: 

A great revolution for me was the discovery of delicious.com

It has become an every day tool, completely integrated in my browsers as plug-ins, through which I discover and find pertinent techniques, white papers, tutorials, tools for subjects I'm interested in. The fact, that you can also browse bookmarks saved by other people on subjects of your interest is a related amazing technology-watch feature that I discovered by acccident.

I guess you can't really understand the power of this social bookmarking features as implemented by delicious until you start using them. That's why I think delicious is a good candidate as an answer for the current question.

Lepu
+3  A: 

strace and ltrace on Unix. I have no idea how other programmers get along without them! The output of these tools can take some getting used to, but once you do get used to it, its hard to imagine not having!

dicroce
Also: DTrace on Solaris. Power tool indeed.
Tadeusz A. Kadłubowski
+3  A: 

Synergy, without a doubt. 3 seperate OS's all controlled by one mouse and one keyboard? Magic.

(java) In the last few days, I've also discovered the joys of Spring Workflow. There are other frameworks out there but this is the one I discovered. Re-implementing our core Webservices has not only been a joy, but maintenance and performance have been hugely improved.

How Can you tell after only a few days? Please share.
Thorbjørn Ravn Andersen
+1  A: 

Going backwards in time:

CruiseControl.NET... Resharper... NUnit... Reflector... Intellisense... Struts... Debuggable JSP's... Java... an IDE... Windows... XWindows...

SpongeJim
+3  A: 

Boost

C++ is as bad as all the Java programmers claim without it.

caspin
+12  A: 

Learning about advanced algorithms.

For example, spending the time to read about all the different ways data can be sorted teaches you a lot about manipulating data. Even if you never do anything but call the library's QuickSort. Ditto about how compilers work. Or how to store tree-oriented data in a relational database.

staticsan
+2  A: 

ClipX - A Clipboard extender that lets you access your 20 most recent "Ctrl-C copies". How many times you whished, you had that "second-to-last" copy handy.

Set the shortcut to Ctrl+Alt-V, and you will get used to it quickly.

Oliver
+7  A: 

My wife and son :-)

TheCodeJunkie
+1  A: 

Continious integration...CC.NET

+1  A: 

GoF book and the concept of design patterns as such. I think I never really understood OOP until I read this book. Patterns helped me to take a broader look at my programs.

When you start programming, you think of your code in terms of really low-level things, such as vars and loops. Then you learn functions and start using them (I can remember times when I was about 10 and was eager to write my next BASIC program with subroutine). Even later you meet the classes — and at first it seemes to be the highest level of abstraction. And then you meet the patterns.

For me it was like driving to the top of the hill — when you reach it thinking the road is just over, you suddenly see the whole world ahead.

Stepan Stolyarov
Yes - lot of things 'clicked' for me too when I read the Gof book.
JW
+10  A: 

Learn the keyboard short-cuts of your IDE and ditch the mouse whenever possible. It'll not only make you faster, but also force you think more of keyboard oriented users in your own apps!

Oh, and ReSharper of course! :)

Steve Dunn
+1 for Resharper
Nader Shirazie
+4  A: 

Static source code analysis in the editor.

This has already caught many silly mistakes I made after I got distracted by a phone call or something. For example I seem to often create a while loop with a condition that does a variable != null check, but then forget to update the variable inside the loop (thus creating an infinite loop). IntelliJ IDEA warns me about this before I try and run the code.

Bas Leijdekkers
+4  A: 

A Laptop! Finally I don't have to walk 5 minutes to a warehouse, then back to my desk, then back to the warehouse......

Dano
+1  A: 

Automated nightly build system, saved us the time of a 6+ hour manual build process down to a 15min automated build

bwknight877
A: 

A laptop, Intellisense, dual monitors, teammates, my local developer community, Resharper, Firebug, WinMerge, Subversion, Google, ice cream, and beer.

And the minute I can't add to this list is the minute I've lost the will to live.

Great question.

John Dunagan
+2  A: 

two monitors. definitely two monitors.

Isn't this a duplicate of the #1 answer?
Alan Hensel
+6  A: 

No interruptions would also be high up my list. Often hard to achieve but makes the world of difference

+1  A: 

For anyone with multiple monitors or widescreens, a window management program is a must. Try WinSplit Revolution for starters.

whatknott
+3  A: 

Google.

Before trying to solve any problem, use Google to see if (and how) any one has done it first.*

*Although the answer to who's done it first might well be Google.

David Kemp
+1  A: 
  • SysInternals
  • Reflector
  • Managed Stack Explorer
  • Ghostdoc
  • Notepad++
dviljoen
+3  A: 

stackoverflow :)

Don
+16  A: 

Launchy: The Open Source Keystroke Launcher

I can never go back to using the Start menu again...

Ates Goral
A: 

EJB3...

Death to deployment descriptors! Long live annotations!

Oh, and Java annotations, too. Never saw the need until EJB3 showed me the light. Of course, having done EJB3 annotations for a while, I still see the need for deployment descriptors (don't put host names in source code - that's bad 'um kay?). But the annotations sure makes ORM constructs easier to deal with.

+1  A: 

my six monitors, .NET, Edit and Continue, unit tests, and a STOP button that actually stops the page loading (Thanks, IE8!).

tsilb
+1  A: 

Switching to the Dvorak keyboard layout. It increased my typing speed, and decreased my fatigue.

J.J.
+8  A: 

Test driven development

Lex
+3  A: 

If you haven't really "got" the object oriented paradigm, your eyes will light up when you finally grasp it. OO is a way to think about the "middle chunks" of a complex system and lets you make progress even when you don't understand the whole solution yet.

Leonard
+2  A: 

Google, absolutely that best thing ever happened.

rabashani
+3  A: 

Reflection. Definately reflection. There is just no way I could do my current work without it.

Yes Fish...
+4  A: 

Issue/Bug tracking systems like Fogbugz and Bugzilla.

mnour
I wonder why this essential element (included in the Joel Test for example) is so low! Is it that you don't need bug tracker if you have two computer screens to stick all those post-it notes you use to keep track?
Tadeusz A. Kadłubowski
+3  A: 

Unix CLI tools like find, awk, sed, make. They come handy in all kinds of situations.

porneL
+1  A: 

Unit Tests and Lean software practices generally.

Knowing I have comprehensive automated test coverage lets me sleep at night.

+20  A: 

Regular Expressions. Many people don't know them.

Somehow I worked as a programmer for 4 years without really understanding regex. The day it "clicked" changed my life forever (seriously)
mabwi
+1  A: 

Development, integration and test environments that are identical in software configuration to the live environment to which code will be deploy, as well as a database with a large enough dataset to be representative of the live environnment.

Jon Topper
+1  A: 

Versioning file system. Having worked on a VAX many years ago I'm still somewhat surprised that it's not a standard feature of modern operating systems.

Colonel Sponsz
+3  A: 

GNU Screen. I don't know how I worked without it before I found it. It allows me to use all the other suggestions that were made here in one screen session.

gpojd
+1  A: 

A (dual) monitor that can be rotated by 90deg

No longer scrolling like crazy all over the source code, and can see a reasonable number of lines at a time

ptor
+1  A: 

In Visual Studio, I use code snippets all the time. For example, typing "mbox" then Tab, will auto-complete a MessageBox.Show() for you. There are several others, and it's easy to create your own.

Also, I use the right-click "Surround with" option to surround a block of code in a try-catch block or something similar.

I also use the "Extract method" on a block of code to create a private method and enhance the readability of the code.

I know a lot of programmers that aren't aware of them, or are aware of them, but just never used or got used to them. They're a great time-saver!

Paul Fedory
+2  A: 

Without a doubt, it's the Internet. Those who have always known it have no idea what an impact this has made on everything.

+4  A: 

Virtual Desktops.

Being able to have "groups" of windows (say, a browser window for testing and two code windows on desktop, then a browser window and a PDF viewer for docs on another, and then a group of email/calendaring apps...) is really damn useful.

It's like having an extra dimension; you can alt-tab to switch within the windows on one desktop, and then hit another key combo to switch to another desktop with its own self-contained group of apps.

  • Linux: Gnome, KDE, XFCE, Fluxbox, Enlightenment, twm... They all have it. :D
  • Windows: Virtuawin (beats the Windows Powertoys version hands-down.)
  • Mac: ... Any suggestions?
Rob Howard
Mac: upgrade to OS X 10.5 and it out-of-the-box. They are called ,,spaces'' there.
Tadeusz A. Kadłubowski
@tkadlub: Unfortunately, it sucks if you want to have, say, two terminals or browser windows on different desktops. Alt-TAB and see what happens - it goes crazy switching from desktop to desktop as you cycle through the apps.(You have to use Alt-` to cycle to the application window on the desktop that you're working on before you can Alt-TAB between windows on the one desktop smoothly. And then you change desktop...)
Rob Howard
+2  A: 

Cheat sheets!

Command-line access to cheat sheets using a Ruby gem: http://cheat.errtheblog.com/ Heck, you can even do cheat cheat.

Here are some awesome networking cheat sheets from Packetlife: http://packetlife.net/cheatsheets/

I'm currently in the process of collecting all the best sheets and printing them into a binder format.

Nappy
+3  A: 

A Staging Server: I can't imaging working on a web app then deploying into production without staging it first in the same environment as the production server.

Mr. Matt
I can imagine it, I'm living it, and let me tell you, it's ugly
mabwi
+2  A: 

People skills. Now I can talk my managers out of doing thing(s) that make absolutely no sense without having to write a single line of code, and that saves me a huge amount of time.

plaureano
+5  A: 

wget - is there a better way to download things from the net?

Greg Beech
Voting up although before I found it I very nearly wrote it.
Joshua
bittorrent much better
Eric
+1  A: 

WinGrep for searching quickly and efficiently through a codebase.

http://www.wingrep.com/download.htm

+2  A: 

Git. I didn't have any idea how bad svn was until I came to know the powerful ways of git. (though I think any -distributed- version control system might work).

+1  A: 

In all honesty, DIV-Based CSS Layouts. I fought tooth-and-nail for years, and continued to tell myself "It's okay, tables work with little effort, nothing wrong with using them."

I am so thankful I stopped being so apathetic and lazy.

Jonathan Sampson
A: 

ORM tools. I remember going into a project (early days) thinking I would have to write classes for all entities manually, and then finding out about code generating ORM tools. Needless to say, it saved considerable time and effort.

Ries
+1  A: 
  • Firebug
  • A Macintosh computer instead of a windows pc
  • Eclipse ide
  • SVN, Version control
  • jAvaScript librarys like Scriptaculous and prototype
  • a cellphone with internet
  • a webCam with a motion sensor
Fortes
+4  A: 

vim, find and grep

Vijay Dev
+3  A: 

Life, mate. It's short and it's out there, so don't spend yours in front of a monitor (says the wise guy who's mostly done that).

+2  A: 

IntelliSense, or any similar auto-completion mechanism.

It is absolutely staggering how many IDEs don't have this, even though Visual Studio demonstrates really nicely how useful it is and how much time it can save.

Unfortunately you can't have IntelliSense in a dynamically-typed language.

Timwi
SLIME has been rocking autocompletion in Lisp, the archetypal dynamic language, for years. But even if you insist on only languages that look like C, Intellisense in VS2010 does Javascript, too.
Ken
+1  A: 

A living ornitorynx. I am sure none of you is able to realise the amazing benefit of coding near this incredible gift of god. No ?

e-satis
+2  A: 

a KVM switch for handling 2 computers or more at the same time.

動靜能量
+1  A: 

That totally happened to me with source control! Why they never taught me that in college is beyond me! Actually they started teaching it the year after me.

Similar to the question, but on a little different plane...

i told my co-worker that i hated the second or two it takes for new tabs to load in IE and that was the biggest reason why i preferred Firefox. He said now that i've said that he's started to notice it and it bugs him too.

Jugglingnutcase
+2  A: 

Resharper Proberbly one of the most useful tools I have ever used. Makes my coding experience in Visual Studio so much more pleasent.

zonkflut
+2  A: 

A mock object tool. Specificaly Moq for .Net.

NotDan
+1  A: 

Assembler.

Sergey
+1  A: 

A complete continuous integration environment that performs a rich set unit and system tests.

Those 'quick fixes' can cause significant damage if there's only quick testing.

Jim Rush
A: 

Object Oriented Programming for code reuse!

Mark Redman
A: 

in VIm you can apply a regexp or any command based on another regexp.

e.g.

:/head/,/\/head/s/google.com/yahoo.com/
 ^^^^^^ first regexp. start
       ^ separator
        ^^^^^^^^ second regexp, ends here
                ^ command. substitute.
                 ^^^^^^^^^^^^^^^^^^^^^^ the regexp.
gcb
+1  A: 

App Verifier. It rocks your world.

Alex
+1  A: 

Git

marcgg
+1  A: 
  • Storing code on an external USB powered HDD. This makes swapping between computers very easy, often do not need to carry my laptop.
  • PostSharp: ground-breaking for aspect oriented programming
  • Reflector
+1  A: 

I notice that almost all answers are centered on tools.

Things that I miss most in projects where they don't exist are:

  • Specifications
  • Project Documentation

It really makes a difference if you work in a project which starts out with a set of specifications and requirements, or whether it's just "an idea" which needs to be implemented.

Same is valid for documentation (and I don't restrict this to source code documentation): Consider which documentation is required for whom (technical, setup, maintenance, user; users of different areas of expertise). Also estimate the time required to create this documentation, and plan this as active development time (rather than an afterthought after the "real work" is done).

devio
+6  A: 

It will sound corny, but.... a co-worker. I freelanced for a long time, doing contract work for small businesses where I was pretty much the only developer, brought in for small projects, often working remotely from my house, then moving on to something else.

A couple of years ago, I started working with someone on a daily basis, and improved efficiency aside, it's amazing how much more fun and rewarding work has become. Even the bad stuff is so much easier to get through.

Spider Robinson had it right.

Kelli Shaver
@Kelli Shaver: And if you go the full way and even practice pair programming, it's even better.
kriss
A: 

perl and regex(unseparatable I guess), GUI diff/merge tool, mercurial. That's about it that I can think of for now.

mhd
+2  A: 

3 monitors. A large widescreen monitor for Eclipse (or any other IDE). A second monitor for the documentation/API/tutorials/references/spec stuff and a small third monitor for my entertainment (tv, watching movies, watching series like 24, big bang theory and so on, listen to music,...).

Sounds weird, but if you don't think very hard but just have to code your already thought about solution, its very relaxing to code while wathcing tv or series.

Roflcoptr
A: 

Taskbar Shuffle

On Windows "It allows you to drag-and-drop programs on your taskbar for quick reorganization"

Until I had it installed, during long work sessions I used to spend 10 to 15 minutes closing down all my apps and re-opening them again purely to re-order the tabs on my taskbar. With shuffle it takes a second.

See: http://download.cnet.com/Taskbar-Shuffle/3000-2072_4-10531265.html

JW
+1  A: 

I am thankful to the spotlight on my Mac! and Launchy on my PC!

without it, i would waste a lot of time searching for my programs!

Tarun
+1  A: 

Latin

Learning Latin at school.

Its difficult to quantify the benefits... but every so often I find myself understanding words that I have never seen before and being able to remember them more easily by understanding their derivation rather than simply learning their meaning 'parrot fashion'.

Also being able to pick good names for classes, methods and variables by building them up from smaller blocks like inter-, intra-, ex-, in-, pre-,post-.

Dunno - waddya think?

JW
+1  A: 

Conditions. (Also: Seibel, Pitman.)

Before using them, I had no idea they existed; after learning about them, I find it amazing that most people and systems still get by with exceptions or (gasp) error codes. (In fact, from up here, exceptions look pretty much like a tiny amount of syntactic sugar for "error codes + early return + a struct".) We generally recognize the value of separation of policy and mechanism in other contexts, yet exceptions still violate this horribly. Even in languages that seem otherwise enlightened compared to the old C++/Java way (like Python and Ruby), nobody seems to care that their error reporting and handling facility is pretty much exactly as wimpy as C++/Java's.

Ken
+1  A: 

Monadic query comprehensions (i.e. LINQ)

Gabe
+1  A: 

Portable apps; really helps when your shifting from one environment to the next.

loneboat
+2  A: 

Microsoft. If it wasn't for Mr. Gates, I'd be schleping at Radio Shack !!

user279521
+1  A: 

Logging. I cannot count the number of times that a customer has reported an issue in an environment where there is no possible way to get a debugger in, and it has been solved simply through examining clear, verbose logs to figure out what's going on.

I find a lot of the time people rely on a debugger to step through and see what's going on, and that's how the causes of problems are found. However, you'll end up with customers that have boxes that you're not allowed to access at all, let alone use a debugger.

"Here's the log file. Tell me what's wrong."

Shawn D.
A: 

ReSharper. Enough said.

Adam
A: 

It's another tool, and typically one a programmer encounters early in their life, but one that I've learnt to love in all its simplicity (and that makes me retrospectively curse the fortunately fairly little time I spent without it):

less

Oh, the sweet times I've spent piping svn diffs and large grep results into it. The beauty of console buffer restoration after a simple q. The finesse of navigating through just about any input that can be piped.

Godsent.

So simple it's brilliant.

pinkgothic
A: 

Snoop! for debugging WPF apps FTW!

BenBtg
+2  A: 

File and directory comparison tools.

My two favourites:

TimS
+1  A: 

WinDirStat. Shows a graphical representation of files and folders taking up space on your hard drive. Great for spotting files which can be deleted or moved. Has saved an old tiny server from certain death for the last 5 years!

http://windirstat.info/

TimS
+1. Or even 'just' plain ol' SequoiaView (from which WinDirStat borrows one output mode).
pinkgothic
A: 

Onenote for keeping track of information while writing code and it syncs with the cloud FTW

obelix
+1  A: 

A clipboard with history. I use Ditto.