views:

49223

answers:

202

This question has been inspired by my recent discovery/adoption of distributed version control. I started using it (mercurial) just because I liked the idea of still being able to make commits at times when I couldn't connect to the central server. I never expected it would give me a large boost in general productivity, but a pleasant side effect I discovered was that making a new clone every time I started a new task and giving that clone a descriptive folder name is extremely effective at keeping me on task resulting is a noticeable productivity increase.

So as a programmer what single discovery has given you the greatest boost in productivity?

Extra respect for answers which involve tools or practices that aren't so obvious from the outside!

+17  A: 
  1. The Internet/WWW! There is often a solution for so much problems. If you want to squeeze knowledge out somewhere or just talk with other IT-People, the www is THE place.

  2. The Libraries for every programming language in the www! I can't live without the Apache Commons, Hibernate, Spring and so on. They make my life so much easier!

  3. High-Level Dialects and Domain Specific Languages, to use the found libraries. Such DSLs can be written in Groovy, JRuby or LISP(Closure) for example. Grails as Groovy DSL for Web (with addons...) has boostet the overall productivity many projects a lot! It's an impressive framework!

  4. Software I've ever used: Things as Subversion/CVS... were ever there since I develop software. Also IDEs like Eclipse and IntelliJ ;) I can't live without them.
Martin K.
typo: did u mean clojure, not closure for the lisp reference?
tommy chheng
That's a good deal more than a single discovery.
mcherm
+2  A: 

Recursive function call.

CDR
Boosted with tail call elimination.
egaga
how it is possible or useful Recursive function call.
AjmeraInfo
(def useful (this) (useful (inc this)))) .. thats how
Arthur Ulfeldt
Overrated. At lease for PHP, where recursion is slow. Recursion is a pretty fun word to say though. Recursion.
Jonah
A: 

My answer: the promise of dual monitors boosting performance while programming/debugging was a lie.

I now prefer 1 monitor. With two monitors you always have too many things distracting you and also you get stressed due to awkward head and eye movements.

I'll never go back to 2 monitors.

(I also use EMACS so I keep my fingers on the QWERTY row much more than ever before... why stop the flow of typing??)

fooledbyprimes
Have you bought a bigger one (Monitor)?
Martin K.
I dunno ... the ability to easily read documentation and write code at the same time, or to run an app and debugger on separate screens has been pretty nice ...
Daniel LeCheminant
I agree, tend to end up with twitter, skype etc all open and visible, we have now switched all of the dual monitors in the office to display the same thing making them good for pair programming and not a total waist of money.
ChrisInCambo
"Awkward" head/eye movements haven't been a problem for me. Maybe you need to try placing the monitors in a different position. Looking at two or more separate screens placed side-by-side shouldn't be any different than looking at a single large screen.
David Brown
+1: A single large high resolution wide screen (Apple 30" cinema display) was far more useful than two 20" widescreens. Two screens has the advantage of an unsightly gap in the middle and only one or none being square-on to your head
Adam Hawes
A wide screen isn't square on your head either if you have several windows open. I prefer the utility of being able to maximize to a screen, using one to remote control another system, flip one monitor between a mac mini and my second monitor, debugging, and testing. I can never go back.
bruceatk
Recently my typical testing has been having eclipse, toad, textpad, and primavera P6 open on one monitor. Tomcat, IE, javadoc, Firefox, and a command window open on the other. I typically need to look at two at the same time. I am really productive with two monitors while wishing I had 3.
bruceatk
I wont downvote, though I do disagree, but to each his own. I think dual monitors are great, but there have been a few people I introduced to dual monitors who eventually went back to one.
Neil N
I prefer two 20" monitors to one (worked that way for 2.5 years and it was always a step down in productivity when I had to drop one), but moving to one 30" (Apple Cinema display, like Adam's) was even better
Phil Nash
im now using multiple virtual desktops (Spaces/VirtuaWin) instead of multiple monitors = 1 screen but endless real estate. RadRails is southwest, Flex IDE is southeast, Eclipse PDT is over on the northeast and thunderbird, browsers and reddit's here on northwest
Scott Evernden
Dual monitors + virtual desktops worksforme. Perhaps your PEBKAC. :p
Frank Farmer
+22  A: 

Formal design patterns and unit testing.

We finally retired a legacy VB6 codebase and are in the process of building new frameworks for our business model and there's really no comparison. We're infinitely more productive. (well maybe not infinite, but you get the idea.)

Jim H.
What do you mean by "formal design pattern" vs "design pattern"?
Bent Rasmussen
+143  A: 

Surprised no one has posted the obvious smart-ass answer: caffeine!

gnovice
I uhm..... forgot... I forgot to take my daily dose of caffeine pill.
Sung Meister
I could use some right now. x_x
strager
Am I the only programmer who isn't addicted to caffeine?
James McMahon
lol Figures that I would get my first Nice Answer badge from this instead of the dozens of other serious answers I've posted. =)
gnovice
It's funny that this gets so may up votes, and nobody even suggests "a full night's rest".
Alan Hensel
Who has time to sleep? :)
Greg D
@memo: No. I don't need drugs to keep me awake.
luiscubal
It seems to me developer productivity peaks around 3am. Or is it just me?
Romain
+1 for the full night's rest, +0 for caffeine. My code quality plummets with poor sleep, and plummets even more with stimulants. I suspect most people's does.
Kennet Belenky
This... caffeine stuff. It really works! Thanks guys. ;-P
Nick Bedford
Coffee - Do stupid things faster, and with more energy.
Khanzor
No, James, you're not the only one. I burned out on caffeine back in my second year of college; couldn't sleep, couldn't focus, felt like my skin was always tingling. Even now, if I have a can of, say, Dr. Pepper any time after lunch, I'll be bolt awake (yet unfocused) until 3 AM, and then the next day is completely shot. The caffeine in Excedrin is my max these days.
Mike DeSimone
lol my first nice answer badge was about caffeine as well.
Neil N
"A mathematician is a device for turning coffee into theorems"
RamyenHead
Curiously, I'm a big coffee drinker, I love the stuff, but if I want to be productive, I must have Tea! Not sure why coffee is so much less effective for me.
TokenMacGuy
+221  A: 

Flow. Try to maximize the amount of time that you can spend in Flow. That means: Close your web browser (the one opened to cnn.com), don't listen to distracting music, close your mailbox, close your IM, etc. You get the idea. If you wanted to be very productive in college, you shut out the entire world so that you can focus. There's no reason why work-life is any different.

People who are least productive tend to lose a lot of time to distraction, entertainment, etc. Look at your co-workers. You'll see that I'm right.

When I'm really trying to concentrate, I've gone as far as turning digital clocks around to face the wall because that changing number once per minute was too distracting. :)
Greg D
hmm on the other hand, when i'm really 'in' the problem .. my all sense organs are automatically paralyzed...
Vardhan Varma
Yeah, I'm told by co-workers that I frequently don't see them walking down the hall my desk faces because I'm so focussed on the screen.
Karl
yeap and i get distracted reading stackoverflow questions too :-D
icelava
Very true...I wish I could save this answer. I am missing the "add answer to my favourites" feature
aip.cd.aish
I thought it's called "The Zone" :)
Strelok
Very much agreed. Learning *how* I work, and what are the optimal conditions for doing my best work, has boosted my productivity more than any one tool.Know thyself ;)
Kyril
egaga
Like this: http://www.youtube.com/watch?v=Lo4GvI6L8Gk
RamyenHead
Music off? Well I prefer to hear Music while working (excluding research, heavy thinking stuff). Sometimes gives me some "boost" just like when doing sports.
Nils Riedemann
'Flow' is a term from psychology, 'the zone' is more general - both describe the same thing in this sense.
nailer
@Nils: when you do sports, music boosts you at the very beginning. But when your body come to its limits, the music gets on your nerves. Why? Because it's when you *need* to concentrate 100% on your body, and *only* on your body, that every other thing that may disturb you will get on your nerves. In other words, when you need real concentration, whatever activity it is, every single thing that may disturb you... *will* disturb you.
Olivier Pons
Unfortunately, still being a kid, I have to put up with whatever my parents are doing. They love to play really obnoxious music, and I gotta say that noise canceling headphones help make getting into Flow much easier.
Wallacoloo
+134  A: 

Programming languages with managed memory. It makes coding so very much easier. Also an IDE that has code completion is a must.

Milhous
+1 for managed memory. It's not a panacea, but for 99% of memory usage situations it requires far less brain power than an explicit allocation/deallocation system.
Kennet Belenky
humanity has far more important things to do than write C or assembler (except for the rare times when its necessary for super-optimization)
CrazyJugglerDrummer
C# rocks my world coming from C++ for years. Well, C# + Intellisense.
Nick Bedford
You should still code destructors for linked list, etc. I remember reading a while back about how a DARPA MIT driving team had a bunch of trouble because it assumed C# managed all memory, yet it was leaking anyways. They had to code something to fully stop and reboot the car every few minutes.
MindStalker
Memo: simple reference counting garbage collection only works some of the time. Try ring buffers!
Tim Williscroft
IMO, C++ works as well as most any in this respect, with the addition of boost::shared_ptr. My main issue with garbage collection is that it abstracts too much away. A computer has memory. Having the programmer pretend that it doesn't isn't the right strategy for writing good programs. E.g. if you have memory leaks in Java (which will happen) you need to start nullifying variables and calling Runtime.getRuntime().gc() which is basically the same as explicitly deleting just more verbose, slow and confusing.
codebolt
I honestly haven't felt the need for code completion in years. C# and Java are the only two languages I've ever felt needed it. Don't get me wrong, I can't imagine writing code in either of them without code completion, but other languages just don't benefit from it as much. Dynamically typed languages with open classes in particular.
Bob Aman
@codebolt good point, c# events give you such a great way to quietly leak memory i wouldn't be surprised if the average c# program didnt have more leaks than the average c++ program
jk
@MindStalker,IIRC they had tested the automatic vehicle indoors with only a few obstacles, when they took it outside it basically crashed because the number of obstacles went up from three or four boxes to like thousands of rocks (or something like that).So it wasn't C#'s fault, the team had just not designed the program to take it into account, I don't tihnk a memory manager can create more memory when it's needed so you can't really blame it on C#
meds
No and no, but I guess we are all different and there is some reason why there are so many job opportunities for me - apparently all these other developers have no idea how memory is managed and take too long to setup their ide while i'm already finished coding using gcc/vim/make ... c++ rulez
stefanB
I would say that not having managed memory would be a problem, its just assumed these days.
Arthur Ulfeldt
@codebolt If you are a bad programmer you will have more memory leaks in C++ than in Java. If you are a good programmer you will have more memory issues in C++ than in Java. Yes, you should know what you are doing--are you saying that because Java makes it POSSIBLE to not know what you are doing and still succeed and C++ does not that C++ is better somehow?
Bill K
+71  A: 

Getting up and walking around, especially in the fresh air, really makes me a much more productive problem-solver. This is when I usually come up with the "Eureka!" solution.

Angela
that's a good answer.
Rainer Joswig
I do some of my best work in the bathroom -- be it on the loo, or in the shower -- and in bed. It seems these are places where I can really let my mind crank on a problem without distraction. I can't tell you how many times I've solved a problem, or mentally identified the fix for a tough bug even though I haven't been anywhere near a computer in hours.
Frank Farmer
Dr. House, is that you?
advs89
I take a shower in that case. Apparently the white-noise of the water falling in the shower helps you think.
Jonno_FTW
For me it the walk to the loo, or whilst on the loo taking a leak :-)
Htbaa
+1 have come up with some of my best ideas while out on a smoke break.
tsilb
@Frank Farmer I remember Alan Kay writing he frequently got his most brilliant ideas while in the shower. Seems to do with sense isolation (feels like in mother's belly).
mlvljr
I personally come up with solutions to most of my programming problems when not programming, eg in the evening. Then the following day I implant the solution. Then I get stuck, stop working, and the loop continues
Jonah
+66  A: 

That it's important to understand, deep down, how your tools work, and how you can use them to improve your workflow and automate repetitve tasks. Regardless of whether you use Eclipse, Textmate, Visual Studio, Vim, Emacs, Notepad or anything else, take the time to learn their shortcuts and, better, understand how to extend them with custom plugins.

Even further, learn shell scripting if on Unix (or PowerShell on Windows). Repetitive tasks can and should be automated, and pain points can be blunted. Automate your deployments. Automate your builds.

Brian Guthrie
I am soooo with you on this one ( It really should rank higher than the "VIM!!! Nuff said" answer). I say, Use the tool *you* feel comfortable in. Not what *others* say is "the best tool evar!". Then learn to use the tool and customize all the kinks out of it. Granted, for me it was vim as well. The rationale was simple: It works on virtually every platform and with *any* programming language. So you learn (and customize) the editor only once!
exhuma
Ha, to be fair... I don't think there's a whole lot that *Notepad* offers you on this front. Ctrl-F, maybe?
Dan Tao
One of my greatest boosts in productivity was learning to automate launching my online website from my local version.
Jonah
+301  A: 

For me it is Code Completion (which Microsoft calls Intellisense although they are slightly different). Things just move so much faster when the information I need right now is right at my fingertips. The savings in keystrokes helps as well.

Mark Brittingham
Yes. I find it actually semi-intuitive now to ~explore~ a library and its functions.
Simucal
I agree with Simucal. The ease of exploration with intellisense on an otherwise unknown library is just superb.
Greg D
What's Intellisense?
David Zaslavsky
David, Intellisense is the little window that pops up when you are typing in Visual Studio (or most any other IDE or editor these days) that shows you matching objects (e.g. all objects or methods starting with "a"), methods, parameters, etc.
Mark Brittingham
Definitely Intellisense. Syntax highlighting, autocomplete, and everything else is nice, but IS is best.
Sukasa
@Mark: thanks, I didn't know it had a name...
David Zaslavsky
Intellisense is Microsoft's proprietary name for autocompletion.
Peter Recore
+1 I don<ctrl+space> ty<ctrl+space> ful<ctrl+space> wo<ctrl+space> anym<ctrl+space>.
Jon Seigel
@Greg D, I tend to agree, but you can get into trouble that way too. Every once in a while a method doesn't quite do what you would think it does from the name and signature alone.
Kennet Belenky
Intellisense is that thing that crops up from time to time on my C++ stuff. I hear it's reliable on C#, which would be nice.
David Thornley
@Kennet Belenky: Of course, but given that most APIs I've had to program against in my professional life have either little or no useful documentation, I'm happy to take what I can get. Ultimately, good documentation always would supercede Intellisense. Goodness knows I use the .net framework docs on MSDN to discover functional details far more than just intellisense, but even then intellisense can be a fast way to explore the library so I can figure out a likely starting point in the docs.
Greg D
C# Intellisense rocks my world. C++ on the other hand is a piece of ... Glad Visual Studio 2010 is finally taking a stance against that.
Nick Bedford
I agree with Nick. C# Intellisense is probably one of the few reasons why I stick with C# and don't even bother learning something else. It's just faster to program, and also allows you to virtually have the documentation right there.
DMan
Intellisense is mediocre at best with Visual C++. Add Boost headers to the mix and it's utterly worthless.
Tim Sylvester
Does this really count as a **discovery**? I guess you mean when you first started using Visual Studio?
Dan Tao
and in 2010, it does more of a `Contains` search--not just `BeginsWith`...which is awesome
Michael Haren
Intellisense/Autocompletion really aren't that useful when you're using languages that don't require so much boilerplate.
ironfroggy
@ironfroggy Calling a function or method ain't boilerplate.
Bent Rasmussen
I prefer using `man` -- prevents you from overlooking side effects... but then I program in C... But when in Java, Eclipse's auto completion rocks! (I will write an emacs extension to find and kill anyone who calls autocompletion "intellisense")
Aviral Dasgupta
for c++ you want dabbrev-expand, also bette rfor TDD as intellisense can't do TDD (currently)
jk
Anyone who has migrated SQL Server 2005 to SQL Server 2008 will know the real boost in productivity in Intellisense. FYI, 2005 doesn't auto complete table names or columns! No idea why Microsoft waited till 2008 to add this feature.
Mugunth Kumar
Why don't you just say autocomplete instead of using some proprietary terminology used only by customers of one company?
Dev er dev
If MS call it intellisense in their products, why shouldn't we call it the same when talking about its use in those products? Autocomplete and intellisense are anyway not the same thing technically.
John
@Nick Bedford, IntelliSense for C++ in VS2010 still fails randomly, thought it seems to recover quicker. I haven't had to delete the IntelliSense database yet.
Matt Olenik
Just to stay technically correct, I've altered the answer to reflect Dev er dev's point.
Mark Brittingham
MSVC intellisense also involves tooltips that show the variable type and function parameter types (while you're writing the function call). Editing the answer and changing that to just "code completion" is not fair to the people who voted intellisense up.
hasen j
Ummm...I didn't change it to "just code completion" - I specifically include Intellisense as an instance of the broader concept. I don't think someone would *not* vote for Code Completion / Intellisense where they *would* vote for Intellisense, would they?
Mark Brittingham
Eclipse's auto complete also shows variable type and function parameters, as well as function description, *full* documentation on that function/variable, hyperlinks to related types, and much more information. It is in every way superior to IntelliSense, so implying that "auto completion" or "code completion" can't have these features is absurd. These are full terms themselves (not just combinations of words) with implicit meanings, so it's not "unfair" to fans of IntelliSense - they're still the same concept. It's just an umbrella term.
JMTyler
Personally I dislike this feature very much. All the little floating popups distract and annoy me to no end. They break my concentration.
Sander Marechal
@Sander - funny you say that. Red Gate installs a little code completion utility with their SQL Tool Belt that drove me nuts until I could figure out how to turn it off (the rest of SQL Tool Belt is *extremely* well done - indispensable even). Every time I would type "Select Count(" it would sense the "(" and substitute in a very rarely-used table called "CountryNames". Anyway, done right - as it is in Visual Studio - I find it invaluable. However, if you don't like it, there will surely be a way to turn it off!
Mark Brittingham
+31  A: 

Tab Completion!

To be honest, some of the other answers are nice, but can't always be applied in every situation, especially day-to-day tasks which we perform hundreds of times.
I find tab completion helpful not only because it prevents spelling mistakes, but allows me to save time, every single time I go to the terminal.

Nick Presta
Tab completion works almost everywhere, except in OpenOffice Calc!
palswim
+35  A: 

Only one answer? I'm going to cheat a little, since my three answers are very closely related. ReSharper, Refactoring, and Test-Driven Development.

John Saunders
I totally agree with ReSharper and Refactoring. I still don't like Test-Driven development, though. Instead of focusing on writing good code in the first place, I get caught up in trying to cover every possible case in my tests. TDD makes me incredibly unproductive.
David Brown
The secret to TDD is not to cover every test case - it's to not write any code unless you can prove the code is needed - needed to make a failing test pass. If there's no failing test, then you don't need the code.
John Saunders
I have one problem with what John said: In some cases, it's easier to validate a solution than to generate it - in other words, it may be easier to write the program first and have it produce a test case that can be manually validated (if necessary).
generic-identity
@generic-identity: it may be easier, but then you will have created code that has not been proven correct by a unit test which is proven correct by the created code. That leaves room for error.
John Saunders
Can't believe Resharper was waaayyy down here. Usings management, stubs, and code cleaning with Resharper (I'm on 4.5) make me code better, faster. Outside of intellisense this is the number one thing that I could not live without. (dual monitors are second).
Bob
@John Saunders: unit testing does not prove anything. no mater if you write the test first or last. as Dijkstra said: "program testing can be a very effective way to show the presence of bugs, but it is hopelessly inadequate for showing their absence."
João Portela
+123  A: 

Learn another language. Eg, learning Ruby, and Ruby on Rails, has helped my Asp.Net programming immensely.

Chris
For me it was Python.
Michael Deardeuff
lol I think you broke Stack Overflow Chris... somehow you're getting rep even though the question is a wiki. =)
gnovice
Is there a badge for that?
ChrisInCambo
@gnovice: He posted his answer before the OP changed the question to CW.
Daniel LeCheminant
That shouldn't matter. Once a question goes wiki, all answers should go wiki too. It's always done that before.
gnovice
gnovice, that's not true.
eyelidlessness
@Chris, can you explain quickly how it helped you? I do Asp.Net programming and I was interested in learning Ruby on Rails just for fun.
GoodEnough
Ruby on rails is a bit closer to the raw html than asp.net is, and taught me a lot about the page request lifecycle.
Chris
Plus taught me to think about ORM's more (eg activerecord / nHibernate)
Chris
+14  A: 

Templates!

I'll spare you the nasty details, but I've written classes before with seperate (overloaded) functions to do exactly the same thing with a different varible type.

Daniel
+3  A: 

Code generators like CodeSmith to reduce repetitive coding.

Gulzar
What about generics to remove repetitive coding?
Burt
I think if you want to reduce repetitive coding, you should use a framework. A lot of frameworks have code generators too (scaffolding).
Jonah
+6  A: 

Due to the types of projects I've recently been working on, OS Virtualisation technologies (Virtual Server 2005) have probably boosted my productivity as a developer by quite a large degree. This is because I can get new development environments for different types of projects (which require 2 to 4 machines to represent a cut down instance of the final production environment) up and running really quickly. To paraphrase from another question I answered about 'How to quickly setup a developer machine?':

I have a couple of different base development environment configurations hosted on virtual machines (Virtual Server 2005). Once I was happy with them I sysprep'd them. Now when I need an environment for a specific project type I clone the VM with the config I require, start it up and and off I go to work. The great thing is that if I wreck the VM all I need to do is start afresh from one of the sysprep images. It's such a timesaver.

Kev
I totally agree. Though we haven't implemented it yet, my company intends to deploy a VMWare ESXi setup so that we can easily test our software in many different environments at the same time. It's so much better than a separate machine/HDD for each version of Windows
David Brown
+85  A: 

Lisp. (Why write programs when you can write programs to write programs?)

Ken
I find it fascinating that Intellisense is up to +6, while somebody spent karma to downvote this. Is the consensus truly that simply seeing a list of methods is somehow more valuable than learning the first homoiconic, and hence programmable, language? The Q specifically asked for the nonobvious.
Ken
@Ken maybe most people can't get their head around meta-programming...
chakrit
Love functional programming, but prefer languages other than lisp :p
CrazyJugglerDrummer
I use write Perl scripts that write other programs. Shoot me now!
Vivin Paliath
Clojure is a very nice modern lisp. < /plug >
Arthur Ulfeldt
Lisp! I love to spend more time thinking than typing.
Alexandre Rademaker
Well, the best autocomplete and introspection implementation I saw so far was for lisp, not java, not C#, not anything else. Just take a look at SLIME.
Dev er dev
Why write programs to write programs when you can just write programs? I don't deny that LISP's homoiconicity is great for bottom-up shaping of DSLs when you need it, but you frequently don't, and then the syntax is more burdensome than other languages I think.
j_random_hacker
(w)(t)(f)(?)( ))(a)(r)(e)( )(y)(o)(u)( )(s)(u)(r)(e)( )(a)(b)(o)(u)(t)( )(t)(h)(a)(t)(?). Ah, crap - malformed comment. :/
CAD bloke
+2  A: 

Write an application for someone else, then maintain it as they ask for things which weren't even considered in v1.0. This helps with better design so you don't have to spend so much time re-factoring. Also, having an IDE which can do a lot of the re-factoring for you (e.g. Netbeans) is nice to take care of things quickly.

+140  A: 

Debuggers. I remember that learning to use debuggers opened up a whole new world for me.

DrJokepu
I can't decide if I've gained or lost net time from debuggers. And if I have to wonder it means debuggers haven't been all that useful for me. Rather, I use the habit of writing code that is written to break early and such that when broken it is immediately obvious the one and only one place it could have broken that way. This and frequent regression testing make debugging trivial. IMO, debuggers solve a problem most programmers shouldn't have.
Plynx
@Plynx: I'm that way, too, for different reasons. A lot of my early work was on embedded systems which didn't have debuggers, and then I moved to real-time systems where a breakpoint would cause everything else to die from buffer overflows, obscuring the real problem. So I got good with LEDs for the former and printf + timestamps to log files for the latter.
Mike DeSimone
@Plynx I can't imagine being a programmer without debugging.
zobier
I have no idea why, but I first read that as 'teabaggers'
Alterlife
I primarily use debuggers for learning other people's code (or my own code that I've forgotten). Following the flow of the code as it actually runs makes a big difference in comprehensibility.
Dan Fabulich
The graphical debugger for .net in VS is a brilliant piece of engineering that has saved me countless hours. No other debugger I've used has helped me in any way.
Daniel Coffman
@Daniel Coffman: gdb can be quite useful, even though it's a bit hard to use, especially compared to the VS debugger. Still, if you have nothing else but a unix shell or do weird things like kernel development, gdb can save an awful lot of time once you learn how to get your head around it.
DrJokepu
Wait until you learn TDD. It will open another world - one without the need for debugger.
David Lin
@davidlin: I do TDD every day. Unfortunately TDD can't possibly capture every possible situation - even TDD developed software has bugs. And you will (possibly) need a debugger to hunt them down. I agree that tests help isolating problems, but very often you can only get to the "last mile" in the debugger.
DrJokepu
Yeah, in the ideal world, you'd never need a debugger. But, when you have to build on top of other people's code, the debugger saves you many hours of pain.
palswim
+162  A: 

VIM!!! Nuff said!

Adam Hawes
I'd +2 this if I could.
Kristo
As someone born after green-screens, why on earth would VIM help productivity?
Karl
@Karl: Because it gets out of your way and just listens to what you tell it do to. You can be the programmer without worrying about fighting the shitty tool (Microsoft, I'm talking about your shitty tools)
Adam Hawes
http://tnerual.eriogerg.free.fr/vim.html
Reef
It's spelt `vim`. No fancy exclamation marks needed or allowed.
mctylr
In the right hands, it can do things most text editors cant.---"To me, vi is Zen. To use vi is to practice zen.Every command is a koan.Profound to the user,unintelligible to the uninitiated.You discover truth every time you use it." (author unknown)
brian newman
@brian Author known: http://jmcpherson.org/editing.html
jleedev
Yes, yes, yes, yes, yes, yes!!!!!
j0rd4n
I'm so used to vim's command/insert modes that whenever I have to type something regularly, I always find myself hitting `<ESC>bb...` whenever I misspell something and then I mess it up even further.
agscala
@jleedev, it is like I had written this cheat sheet. Thanks!
yogsototh
@Adam, you just can't use the tools. I don't use a hand-drill when I have a power-drill available... same with coding.
John
@jleedev: Many thanks!
brian newman
@Adam Hawes: I have used both vim and the MS tools, and I can assure you that the latter have evolved since notepad...
Paolo Tedesco
I logged in just to upvote this. vim makes all the difference in the world. Short learning curve but you will continue to learn and progressively become fast as hell at everything from coding to debugging and updating. Simply one of the best tools available. My brother introduced it to me when I was a junior in high school and it simply doesn't get better.
jphenow
I'm beginning to know a lot of things... thanks to this question I posted myself :) (1kviews) : http://stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim
Olivier Pons
I've started at uni and now, many many - not so many, years after I still keep learning and I keep using more and more `vim` magic. My productivity is 500% compared to other tools used for 'software development' ... I get impatient watching my colleagues to click or highlight stuff with mouse, copy paste, compile and then search for the window with the error output, try to find stuff in file, most 'editors' don't recognize that file has been updated and so on ... vim has it all plus some ... I'm using it on all platforms (mac,linux,windows) ... and it does not freeze while updating intelisense
stefanB
absolutely. went into a vim trance while reading and tried to C-F my browser window..
i find it funny that emacs is not anywhere on this thread (1st page at least)
scottschulthess
+104  A: 

Open source.

Jack BeNimble
My ability to work effectively with Django was strongly afflicted by the framework's weak reference docs. Then I started using the source to look up practically everything!
TokenMacGuy
The fact that you have to look at the source is not a vindication of open source, it's a condemnation of crappy documentation."Use The Source, Luke" is the lazy ass's way of documentation and anybody who "documents" their code in this way should be shunned by anybody who is even vaguely professional.
JUST MY correct OPINION
I don't know whether TokenMacGuy is being sarcastic, but there are /much/ better reasons to use open source than bad documentation. And of course most serious open source projects have good docs (and I'm really not convinced Django's are so bad). The most important benefit is full control over your own software ecosystem. But it also allows you to learn from others' work, and yes, it supplements the docs. Proprietary vendors show source (albeit under very restrictive licenses) for the same reason (http://referencesource.microsoft.com/).
Matthew Flaschen
methinks TokenMacGuy was being sarcastic. Django is renowned for its excellent documentation.
David Johnstone
I was not being sarcastic, I find django's documentation to be fantastic from the point of view of tutorial information, but as far as reference information, it's not that great, many areas are simply undocumented or underdocumented. Don't believe me? look at the source, pick a class, now find its documentation. This is a non-issue, though, if you can actually read the source.
TokenMacGuy
+315  A: 

Not sure it's really my #1 but nobody has mentioned this yet: syntax highlighting.

Maybe it's just because I've gotten too used to it but it takes me twice as long to edit a program in nano (black-and-white) as it does in KWrite (color with syntax highlighting)... sometimes I've been outright unable to do it.

David Zaslavsky
You can enable syntax highlighting in Nano - just google it for your language. And anyway - real men use vi :-).
Lucas Jones
+1 I remember the times when syntax highlighting was considered not to be for real programmers... (I've always found it helpful though - maybe I'm not a real programmer after all ;-)
Subtwo
I've generally made a point of embracing, or at least taking a good look at all the things real programmers disdain. Half the time people disdain things because they're afraid it'll put them out of business.
Kennet Belenky
@Subtwo, I do everything "real programmers" don't. This isn't about being macho, it's about writing great code easily. It reminds me of this XKCD: http://xkcd.com/378/
Mike Sherov
I use syntax highlighting, but honestly, I could probably live without it. No dynamic highlighting of matching braces, parentheses and brackets? Now that would really slow me now.
Matt Garrison
@Lucas Jones And real women. I don't think my vi skills are going to make me a real man anytime soon.
Ellie P.
I once spent days trying to work out why my code had broken, only to discover that it was an unclosed comment. That kind of thing just can't happen with syntax highlighting.
Benjol
Some say that real men need no national health care either.
RamyenHead
@Mike Sherov, I love that strip! :)
Subtwo
Really, you use KWrite... not Kate?
Alex JL
Ah, well of course I use Kate for real coding ;-) KWrite is for random hacks when I don't need advanced features like project management. It was just the first syntax-highlighting editor that came to mind.
David Zaslavsky
@Ellie P.: Fair point - real women use vi, too! "Real people" doesn't have the same ring to it, though, if you know what I mean. Neither does "real [men/women/etc.] (delete as appropriate)".
Lucas Jones
255 votes. I couldn't make myself vote this one up, I just don't want to risk it overflowing and returning to 0 votes! Wow, there's another one at 255 too.
Wallacoloo
lol, actually I'm surprised it got this high. Probably only because this question was linked from reddit (200+ of these upvotes have come in the past week).
David Zaslavsky
Nano is a good choice for gui environment in Linux.
xiao
I like it as a console-mode editor but I find that a typical true GUI editor (e.g. KWrite or gEdit) is usually much easier to use. Some people will feel differently of course.
David Zaslavsky
@Lucas Jones/Ellie P: How about "real men and sophisticated ladies use vi(m)"
TokenMacGuy
+26  A: 

Learning to break down complex problems into a series of simple tasks boosts productivity and improves the accuracy of your schedule.

William Brendel
Bonus: When the tasks are code, wrap those simple tasks(snippets) in well-named sub-functions/private methods and your code will be: easier to re-use, easier to re-factor, more scalable, more readable, easier to debug etc. Sometimes referred to as "Procedural Abstraction" or "Cognitive Thunking". Powerful tools :)
Troy Chard
I wish more people did this. This can be rephrased as "modularization"
Jonah
+7  A: 

If you're doing your own projects as opposed to your employers, taking your own ideas to reality, you are a heck of a lot more motivated and productive than when doing a 9/5. Your project is the first thing you think of when you wake up, and its the last thing you dream of when you fall asleep at the keyboard, waiting for the sun to rise so you can do the same thing again.

Click Upvote
Truth is I've had that experience on my employer's projects. Not all of them. But the things that are truly valuable have consumed hours of my free thinking time.
skiphoppy
Then you *should* be doing your own thing, otherwise your employer benefits from your creativity
Click Upvote
I'll happily allow my employer to benefit from my creativity as long as I get paid. ;)
David Brown
my annoyance is that my days programming isn't overly interesting, I have lots of little personal projects that I tend to think about during the day while working, yet I'm to tired to code on them once I get home :(
Sekhat
Unfortunately, work generated stress is my most effective motivator :(
Spencer
Two thoughts: 1) when you work for someone else, they take on all the risk. If the business doesn't pan out, you move on to the next job. 2) I personally just don't have the drive. I get really excited about personal projects for a few weeks or months, but I get bored eventually. I think self-motivators such as yourself are uncommon.
Frank Farmer
+5  A: 

for me, Linq

Tim Jarvis
I must agree. Linq is a massive productivity booster.
Bent Rasmussen
Some one has to explain the benefits of LINQ to me.
Seamus
+1  A: 

When I discovered I could tell the computer what to do, hit a button, and the computer would do what I told it to.

Drakonite
I tried this, and it didn't work. Do you have to install some special software or hardware before being able to tell the computer what to do?
bzlm
The key is to use a stern voice. The computer is two years old, you have to treat it like a two-year-old.
bta
2 years in computer years are more like teens. Stern voice won't do it. Sexy voice will.
grigory
We interviewed someone for a web dev. position. Their answer to most questions was "Add a button. You can buy those. They do amazing things. I make buttons.". My manager was quite upset when I asked him where the button repositories were for shutting down the internet when you're done with your work.
Ryan Ternier
+25  A: 

I've been around a while so I have several single things over the years and they vary wildly. I really haven't had any productivity discoveries in a while, except for small special purpose tools.

Probably my biggest single discovery is to prototype quickly and get the user/customer looking and touching as fast as possible before wasting time on features that they don't want or will change as soon as they discover that they really don't want it that way. I first realized this the first time I used Visual Basic to prototype the interface of an application I was creating in C++ (late 1992/early 1993).

A bunch of people can sit around a table and discuss for months what they do and do not want, but until they can actually touch it and experience it they really do not know.

bruceatk
I am not disagreeing with the value of this, but the only problem with prototyping is that once you show them the prototype they say, "Great, you are almost done!" and you have to carefully explain that no, it is going to take me X amount of time to get the "real" thing done. Non-techies have a hard time understanding this.
Nemi
I completely agree. My first job programming was taking a "prototype" that was put into production and actually making it do what it was really supposed to do. The trouble is that usually the people in control have a hard time saying no to the people that sign their paychecks. The solution is clear communication about what your prototype does and even more important does not do.
bruceatk
The XP orthodoxy is that you get the customer's hands on something ASAP, but it's a larval form of the final system, rather than a prototype per se. That avoids the "you're almost done!" problem, because you only show them stuff that really is done, but it still gets feedback early.
Tom Anderson
+93  A: 

A decent pair of sound isolating headphones. It still surprises how much more I get done when I block out all the office chatter. It's not a private office but it's a start.

Dave Webb
I'll second, third and fourth this :) Sound can be very distracting. You wouldn't believe how mind-bogglingly distracting it can be :)
ldigas
I agree. We have an open floor plan at work. It works great for people who don't have to write code... Works lousy for me. Unfortunately, they don't seem to like headphones. :-\
docgnome
I can only agree there. Noise-cancelling headphones is a must-have for efficient work in a cubicle.
Romain
I worked in a room with 3 other interns, and it could get a little wild sometimes. Sound isolating headphones were my only option. However, when they were in, it would have helped to have a sign taped to my back that said something like "Smack me across the head to get my attention".
Spencer
That link has an error. Which headphones do you recommend?
Dr. Zim
@Dr. Zim - The link was to Shure SE110 headphones. These aren't listed on the Shure site any more so I have updated the link to be a Google search. However, if the SE110 aren't made any more it may be a good time to buy them as they're probably on sale.
Dave Webb
Another voice of agreement: a good pair of headphones has let me get stuff done in all kinds of environments that otherwise would be productivity-destroyingly distracting.
Sean M
+16  A: 

That it is OK to say no to unproductive work.

idstam
+36  A: 

Lambda Calculus and Object Oriented Programming

or more generally speaking... truly understands what "functions as first class objects" means...

and not everyone really groks how OOP works. Evidences are those large switch statements and if-else spreading out through a large code base that could be eradicated with application of polymorphism.

chakrit
Sometimes it's easier to grok the logic by reading through the if/else statements than to go searching the code-base for a sub-class somewhere.Sometimes "Functional" is easier for getting the job done and easier to maintain long-term.OOP is great, but there are times when KISS is good too.(and what a mess when someone tries to overlay a recursive language like Scheme onto an iterative object model like GIMP's... ah well, tha's my own irrelevent gripe ;)
Troy Chard
Of course, `if/else` and `switch` has its uses and then KISS but **I meant the ugly ones!** ...
chakrit
+5  A: 

The world wide web. I used to spend HOURS every week thumbing through books, going through the MSDN disks, asking other folks etc, looking for answers to questions. The WWW put the answers quite literally at my fingertips. Of course some of those answers are wrong, but even when you factor in the time for filtering out the wrong ones, it's still a lot less than I used to spend in the library alone.

Bob Moore
+85  A: 

Pair programming!

Nothing even remotely compares to that in terms of productivity boost. You could take away intellisense, or even the IDE, and pair programming would still be more productive.

bzlm
It is amazing how two people being together gets each other to pay attention to the task at hand instead of day dreaming.
icelava
I wish I could give you twelve up-votes for this one. For me the hard part is thinking about the big picture and the small picture at the same time. Having someone work with me saves hour-and-hours of "OK, that method is done. Now what?" Also hours-and-hours of "What was that called again?" and "What was I doing before I went on this bug-hunting tanget?"
Jeffrey L Whitledge
I find Pair Programming to be a big net loss of productivity. 95% of the time someone wants me to join them to work on something they are taking me out of a coding groove where I am being hugely productive. It takes a lot of time to reorient yourself after disruptions like that.
Brian Teeter
Even so, when you're working with the express idea of pair programming, that makes it very effective. There are certain people it works better with.
Xorlev
I found pair programming worked horribly for me. I found that having to write code with someone sitting there periodically interrupting me to be very distracting.
cdmckay
Pair programming is not "someone sitting there periodically interrupting". That does sound horrible. Pair programming is 2 people at 1 machine working together. Anything else is NOT pair programming.
Jeffrey L Whitledge
2 people 1 machine
RamyenHead
I think the positions expressed above are not mutually exclusive. Pair programming clearly works for people who are inclined to be more productive when working with someone else. Some people are genuinely more productive when working solo in a state of flow. Horses for courses :)
NM
I personally value pair or team design, where the necessary people work together on designing the program and getting a template in code. Then everyone works independently implementing the rest of the code, testing, etc. Finally, we come back together for code reviews. It helps me break down a problem early on then tackle it independently and finally validate my choices later.
dasickis
I wasn't sure what pair programming was, so I Googled it, and this is what I found: http://www.flickr.com/photos/robbyrussell/2674833047/
Jonah
Pair programming is a great way to learn new keyboard shortcuts!
Arthur Ulfeldt
+1  A: 

In all honesty, probably learning another programming language has helped me the most. Once you have taken a look at one ore more other languages, you find patterns in the code. It helps you better understand how to reach your objectives and will make you a more efficient programmer.

+14  A: 

STL

In my undergrad studies I was hardly aware of it and every time I needed a data structure I had to pull my own. luckily on my first real job they showed me the light that is STL.

shoosh
I remember using the STL for the first time, it was a god send, but then shortly after I moved away from C++ to C# and .NET
Sekhat
STL is hugely better than nothing, though there are languages that make STL look rough around the edges...
Arthur Ulfeldt
+124  A: 

pencil and a paper (simple obvious) but still underestimated

Shvilam
I still prefer to hash out rough designs using a pencil and paper.
Neil N
Pencil and paper are irreplaceable to put your ideas together AND explain to others, which is a big part of any job after all.
Morlock
I use a big dry-erase board.
Billy ONeal
Somebody need to invent something having all pros of pencil and a paper without its cons.
RamyenHead
what are the cons?
jk
@jk...spots of coffee on it?
Scoregraphic
Yes, I always write my code in pencil first, because I can erase. When it's perfect, I carefully type it up in the typewriter and scan it into The Beast. [Pardon the deranged humor - I do understand the OP's point]
Nathan Long
So you were a programmer before you "discovered" pencil and paper?
John Isaacks
+1  A: 

Code completion.

Kriem
+2  A: 

Getting rid of .h files in C#.

Dan
=))))))))))))))
Andrei Rinea
+166  A: 

Dual Monitors for me. Note: I haven't attempted to use one very large screen.

BenMaddox
Dual-very-large-screen also works, trust me. I personally use 3 monitors at work.
Romain
@Roman lucky!!!
CrazyJugglerDrummer
@Romain: Do you eyes bleeding at the end of the day? Explain how do you use it.
Mendy
I had 4 monitors at my previous job. I think that 3 is the sweet spot. One very large screen would be a disadvantage as you'd have to do much more manual positioning of windows.
RobotCaleb
If every programmer worked in a worker cooperative or had managers who knew how programmers tick, they would all have dual monitors.
RamyenHead
I once tried to do some programming after watching a movie on my 42" LCD TV. The eye burn was terrible from trying to view the text after about 10 seconds.
Jonno_FTW
I'm okay with one large screen, but then again, I don't use IDEs. I also don't routinely maximize windows. But if the app you're developing wants to take over the screen (embedded stuff almost always does this), then one big screen might not be as good as two smaller screens.
Mike DeSimone
If two screens are good, three must be better. I love having firefox open on the left screen, email client on the right screen, and my IDE maximized on the center screen. Excellent for workflow.
Pedro Estrada
@Mendy: I have one screen for my Linux box, two for the Windows laptop. I tend to have documentation on one, code on Linux, and the third one is full of mail, IM, excel crap, ... Works like a charm. They are laid-out in a slightly curved way :)
Romain
I have 1 very large screen at work and dual monitors at home. I much prefer dual monitors.
Heather
For home, I switched to a 4 monitor system. I also think 3 is the sweet spot, but I got 4 because I could. :)
BenMaddox
@RamyenHead So true!
jehuty
How many monitors is too many monitors. When do you get to the point it takes an age scanning each screen for an open window?
Duncan
+30  A: 

Closing the browser often.

CLaRGe
but i need browser to post to various communities requesting for them to send me teh codez plz.
icelava
I keep my main browser closed and for looking up docs I use one that I don't like (so I don't spend more than minimum time in it).
porneL
Doesn;t that mean you also open the browser often?
Chris
@Chris He probably has a bunch of browsers already "prefetched" by some sort of a batch script. :)
mlvljr
Though I'd prefer the browser popping back as soon as closed :)
mlvljr
For web-designers like myself, we literally can't even work with the browser closed!
Jonah
@Jonah Than reopen it fast!
mlvljr
Ok, I'm going to close the brow+++AT0+++<NO CONNECTION>
Kelly French
+77  A: 

I'm surprised nobody mentioned this - perhaps nobody knows this? Well, I hope my answer will enlighten everyone...

My discovery that boosted my productivity the most was this:

You don't have to read 20+ blogs, before you can look into that critical bug, that your boss wants you to fix ASAP! You don't even have to read a single post! It is possible to start working on it without reading anything at all!

I know, I know... Sounds crazy, but it's true!

Paulius Maruška
What programming isn't about wasting time surfing the Intartubes? I'm disappointed; time for a career change :p
Adam Hawes
Hey that blog isn't going to read itself! But the bug might fix itself (user gives up).
Travis Leleu
"beginning is half done."
RamyenHead
I guess if you were not required to 'spend' 10+ hours at work you could be finished in 4 hours and have enough time to read blogs on your own time. But as it stands you can't really make people keep working on some code before they get bored because the requirements change, someone broke build, someone changed code and it no longer works with your module, customer quit and noone knows how their code works and so on
stefanB
Just mark it 'broken by design'.
Arnis L.
+5  A: 

Enabling the "Hide When Minimized" option in Microsoft Outlook.

Dan
for me its using a faster, less clunky email client!
frankster
what does this do? im intersted, outlook is mandated here.
Arthur Ulfeldt
It puts a small Outlook icon in the notification area rather than taking up space (and attracting attention) on the taskbar.
Dan
A: 

What single discovery has yielded the biggest boost in productivity? Well, if the measure of productivity is the ratio of desired outcome by work effort, then this single biggest discovery would be that of process and methodology (i.e. learning how to work smarter). RUP is a good example of process and Agile is a good example of methodology.

You want a tool recommendation? Well, I felt so strongly about how important process and methodology was to outcome in software development that I wrote my own tool to accelerate software development called Code Roller.

Glenn
+242  A: 

Google

ksuralta
Thx you for including the link :-)
To1ne
How come I didn't see StackOverflow.com yet? o_O
Romain
Unheard of before.
fastcodejava
@Romain because for some of us, stackoverflow is the single greatest drain of productivity.
cobbal
Yup, probably half the people here don't remember the era B.G., when you just had to keep trying different ideas till you found something that worked. Or order a book and wait till it came by post, then read it to see if the answer was there...
Benjol
I use Google as my Java SE reference.
titaniumdecoy
I believe this is the second gold-badge answer on SO that included nothing more than a link to Google. I may have to change my style.
Michael Myers
+1  A: 

Writing cleaner code by using god text editors like vim, kate etc. I leanred a lot about standard coding when I checked their options.

Xolve
+10  A: 

"Thinking" in a functional language (in my case Scheme).

Paperino
*lisp really changed the way my brain works, not sure if its healthy in general though it really helped me enjoy the code i write a lot more.
Arthur Ulfeldt
+1  A: 

Moore's law for caffeine.

pearcewg
Meaning, every so often, new products will be created which will dramatically increase caffeine delivery, leading to increased programming productivity!
pearcewg
+1  A: 

intellisense

MIantosca
Did you even read _any_ of the other answers?
Pete
+49  A: 

Generics. Casting is for pottery.

Simon Gibbs
Type inference. Why waste time with generics when the compiler can figure it out for you!
Bob Aman
Weakly typed languages. Go on and call methods, assign properties. Who cares if they're really there? Let who executes the program figure it out ;)
Agos
Templates! Generics are just dumbed down versions.
Robert Fraser
Most pottery is thrown rather than cast, i think. 'Casting is for iron', perhaps?
Tom Anderson
+2  A: 

Expectations before taking a new job that it will be much better. For some first weeks/months I get a productivity boost until they dissappoint me again.

User
+12  A: 

Learning to type properly and accurately.

Dustin Campbell
+11  A: 

Stack Overflow! No, wait, you said "boost". Hm.

unwind
"single biggest boost" nothing in that statement about "net gain" so its ok if it gives you a 1000x increase for five min. then eats the next month by distracting you.
Arthur Ulfeldt
Stack overflow definitely boosted my productivity! It's often faster than having to peruse badly written documentation or ad-loaded forums.
StackedCrooked
Oh yes, it greatly boosts productivity when you use it just to find an answer to your question. But I often find myself spending 2 hours reading unrelated threads after the 10 minutes it takes to get an answer to my question.
Wallacoloo
+7  A: 

It's a tie between Ctrl+F and Ctrl+C

Dashogun
Those are things you discovered that boosted your productivity? Don't most people figure those ones out before they start coding?
Frank Farmer
Granted, I did know about them prior to coding. However, as far as raw productivity goes, copy and paste produces much more LOC than even the fastest typing. (P.S. This was meant to be a joke.)
Dashogun
Ctrl+H in Visual Studio saves me loads of time.
Daniel Coffman
No **Ctrl+C** without **Ctrl+V**; and to complete the pair, we also need **Ctrl+X**.
poke
Scroll forward and break execution? :/
progo
+32  A: 

Don’t know this has been posted or if it would make the cut for a discovery.

For me it’s Peer Review.

Working with smart programmers, getting that extra pair of eyes to look into code. Saved me from burning the Midnight oil many a times!

Cherian
That works if you have someone to actually make the peer review. Only your manager can schedule it.
Stefano Borini
You make Peter Garrett sad.
nickf
Using source control with the stipulation that you can't submit anything into the main branch unless it has been peer reviewed has worked quite well for me in the past.Apart from anything else, the knowledge that someone is going to sit down and read your code with you makes you put that bit more effort into the code so they don't find anything wrong with it
frankster
A: 

Not mine, I'll admit, but focused working: link text

Matt W
A: 

It began when I changed my mindset to feel very good whenever I see a program bug. It gives me great pleasure to remove the bug.

The Samurai Coder, Hideo.

+4  A: 

Higher Order Programming. (And on some days: unplugging the phone...)

Niki
The phone!? What about e-mail and IM - the new age of communications. :)
Lucas Jones
A: 

Boost...

i.e.: www.boost.org

Artyom
A: 

Using an IDE as opposed to a simple programmers' editor.

foljs
Amazingly simple answer for taken for granted the IDE is but developing software in notepad (and even emacs) is harsh.
Chris Marisic
+2  A: 

ClipX has done wonders for me.

Mladen Mihajlovic
A: 

For me, it was 'computer progamming is actually human to human interaction'

What that means is, that it's essentially software developer ( designer/programmer ) talking to user .. program just happen to be the medium

Vardhan Varma
In the grander scheme of things, the human interface is absolutely what ultimately matters for many applications, but on the other hand, there's an awful lot of programming work that doesn't really touch interface. For some complex applications -- for example, google's search engine -- there are entire departments full of programmers who work all day without going anywhere near the human interface portion of the application. Similarly, the ffmpeg library's utility is not in its interface.
Frank Farmer
+1  A: 

If i were to choose only one thing that boosted my productivity it would be a moment when I've put down books and learning-only mode to programming and doing stuff instead of only reading about them.

Keyframe
+18  A: 

whiteboard

RN
I used to be intimidated by blackboards in school, but now having a whiteboard in my office is incredibly helpful for the thinking process.
A. Ionescu
+1  A: 

The greatest boost to my productivity has been from learning how to recognize that I'm starting to write some code or text that is very similar to some code or text I've already previously written in the file or the project, and to quickly generalize and create a function, include file, macro, or other appropriate idiom that makes what would have been messy, elegant.

A: 

Debug and Caffeine with Internet is the trio that works for me.

Maksud
+5  A: 

Not checking my email in the morning, and turning off all the associated alerts and popups and warnings and so on.

Anon Guy
A: 

Domain Specific Language for UML and Code Generation see http://reboltutorial.com/blog/easy-yuml-dialect-for-mere-mortals2/

Rebol Tutorial
+9  A: 

Using a Framework

Since I started using a programming framework ,My productivity has increased 10 folds ,Now I dont have to do much work to get what has already been done.

Untopronor
YES. Definitely on of the best productivity boosters.
Jonah
+28  A: 

I'm surprised no one's mentioned this one: Python!! Before Python, I used to use C/C++/Java for most things or occasionally PHP/Javascript (depending on what I wanted to do).

Now, my first step is almost always to prototype the core logic in Python. Having an interactive interpreter, sequences, iterators and strings built into the language (yes, I know C++ and Java have them too, but they aren't quite as easy to use), having a for-each construct, and a billion other things make coding in Python like writing executable pseudo-code.

And the richness of the third-party libraries is amazing! Want to write a parser? pyparsing is your friend (I wrote an adequate chemical reaction balancer/parser in an hour). Want to manipulate images, use PIL! Bioinformatics? Biopython.

Chinmay Kanchi
import antigravity
iconiK
+1  A: 

Realizing the fundamentals of HTTP and Web and how they actually work while working on classic ASP has turned out to be my greatest discovery. I could then think in HTTP and design my own CGI applications on plain HTTP state-less protocol.

This findamental understanding is still helping me learn new web-technologies much faster.

I'm still amazed for what all things we were forced to do in classic ASP which now in ASP.Net is just readily available. Databinding, paging, server-controls and server-side events.

this. __curious_geek
+6  A: 

I discovered that is nonsense to pretend to create something perfect the first time. You have to understand your problem, so it makes sense to grow together with your product.

Stefano Borini
+3  A: 

Definitely the mini-fridge under the desk. Although more frequent bathroom trips may be offsetting the convenience.

Jeff
Mini-bathroom under the desk.
Ipsquiggle
Why not just set you computer up on your kitchen counter?
Jonah
This has a good point to it. When I'm in the flow, it's either thirstiness or my bladder that will quickly stop the show. When the flow fades -- can't solve a problem, then a visit outside helps tremendously.
progo
+15  A: 

Test Driven Development. I was skeptical, but it works remarkably well. I was able to code a chess rules engine (validates all legal moves) in about 40 hours, with only one defect. I have been programming for almost 30 years and TDD has given me the biggest boost in productivity.

Mike Polen
+3  A: 

Realizing that time spent designing is better than inversely proportional to time spent coding.

bob quinn
Realizing that people who pay us refuse to see that.
Codism
I'd say 50% (give or take 50%) of the designing process takes place away from the computer, in your head
Jonah
+3  A: 

Two answers:

  1. Screen and ssh -t
  2. Code folding
robkinyon
Code folding seems like it should be helpful but I never actually find myself using it.
Jonah
+1  A: 

Resharper, it's probably already been said.

Chris Marisic
+4  A: 

I +1ed intellisense and syntax highlighting. But since noone has mentioned it, object oriented techniques, in particular Design by Contract, have done a lot for the quality of my code, hence improving my productivity.

Daniel Daranas
+7  A: 

I'm sure I'll get flak for this, but I mostly use C++, and the boost libraries give a big productive boost.

+4  A: 

Python.

Coming from a C/C++ background, it takes so much less time for me to do what I need in python.

Moe
Read the other answers before posting. Someone else already said Python! http://stackoverflow.com/questions/645237/as-a-programmer-what-single-discovery-has-given-you-the-greatest-boost-in-product/1973020#1973020
Pete
+2  A: 

Control+Space. 'nuff said. In-line documentation for functions and classes, autocompletion, type matching.... I can barely program without it.

limitedmage
+7  A: 

Synergy helps me save a lot of time changing keyboard / mouse when coding on heterogeneous platforms (like Windows and Linux). It basically lets one computer share its HID with another... or a set of others... And it's a life-saver.

Romain
A: 

Streaming/satellite radio.

Jim G.
+1  A: 

Practice and self analysis of your problem solving techniques.

I find I only really understand something once I've done it a few times, and I feel that programming is no different. I've heard programming described as an art form and I agree. It takes years to master.

At the moment I am working on User Interfaces and find myself trying out new ideas and new approaches in my spare time just to see what works better. This has lead to substantial improvements in my work rate and more importantly less re-writes because of bad design.

gencoreoperative
+2  A: 

Take time to RTFM for your frameworks, programing languages and other tools before you use them. Read most of it, you don't have to memorize everything. You want an idea of what the tool can do for you, so you don't go reinventing the wheel.

Frank
+2  A: 

switching from pc to mac helped my productivity the most because I started enjoying spending more time at the computer.

Francois
A: 
  • Strong black tea
  • Source Control System
  • Bug Tracking System
  • Hippie Completion
  • Taking breaks at the right time
Timo Stamm
+2  A: 

A 4'x6' whiteboard. Ok, any size will do but the bigger, the better.

Chris Ridenour
I like using chalk on my nice black paved street to design my applications
Jonah
+2  A: 

for me, regexes and design patterns.

marduk
+12  A: 

Gnu screen. I work primarily from the command line (Ruby/Python/PHP) and it has been, bar none, the single greatest tool in my toolbox for increasing productivity.

Brian D.
+1  A: 

Stochastic unit testing. Don't just unit test: unit test with large-ish sets of random inputs. It'll catch errors you'd never think to test for on a fairly regular basis.

(In languages with accessable parse trees, there's a good argument for mutation testing, too - see the Ruby took "heckle" for a good example.)

John Haugeland
+12  A: 

LINQ. I love not having to write the plumbing for iterating over collections over and over again. Also being able to apply set operations to collections of data is a huge productivity boost.

aastle
+1  A: 

ReSharper

Daniel Coffman
+1  A: 

SLIME. No other editor, IDE or programming environment I've seen offers the same level of integration. Not only does the editor understand the syntax of the language, it communicates with your program while it's running. It knows the value of everything, at all times and, to reference the old saying about Lisp programmers - it knows the cost as well, due to the integrated profiler.

Zak
Link broken, try this: http://common-lisp.net/project/slime/
Bent Rasmussen
+1  A: 

Clojure

Rayne
+7  A: 

Refactoring

I think this change pretty much the way I see code.

Before everytime I need something else I just added and if the previous design didn't match I start doing strange things and after a couple of weeks, everything was a real mess. Going like that every time I need a new feature, the existing code was somehow in the middle.

After getting to know refactoring, everything was much easier, new functionality helped to define the methods, and the design. I extracted methods, simplify conditions and a lot of etc. which make my existing code much easier to work with.

OscarRyz
+5  A: 

Notepad++. Hands Down.

Rob
+3  A: 

One thing that's been the greatest boost in productivity?

C#

Nick Bedford
+2  A: 

Two things:

  1. Breevy, which I use to "autotype" boilerplate code using shortcuts/abbreviations.

  2. My widescreen LCD monitor. Emacs with a horizontal split increases my productivity so much it's not even funny.

BopBeepBoop
Oh man, Breevy looks pretty sweet.
Dan Tao
A: 

Project automation (I include TDD with this). Whenever I discovered the wonders of shell scripting, Make/Ant, automated tests, and one-button builds, programming lost most of its few sour moments.

paul.meier
+1  A: 

Lately, I've gotten a productivity boost with one simple tool: good posture.

Forcing myself to sit with better posture makes it much easier for me to stay on task, for some reason. Whether the improvement will remain robust to time remains to be seen.

llimllib
+2  A: 

Story cards.

fastcodejava
+2  A: 

Valgrind.

If you are using an older version, it is definitely worth upgrading for the --track-origins feature.

Jed
+11  A: 

rotating my monitor 90 degrees. the contents of the display are my brains level one cache, and its measured in (cache) lines from top to bottom so rotating the display greatly increased the lines of code I can see at once.

Arthur Ulfeldt
This is a simple change that surprised me with how much more efficient it made me.
bta
This goes hand-in-hand with dual monitors: One for text and one for image. :) Now, if only more monitors had stands that offered this orientation...
Ipsquiggle
it actually happened by accident for me when i was leaning on the monitor and it rotated...
Arthur Ulfeldt
Jonah
+2  A: 

Diagnosis

The only way you can solve a problem is to be able to diagnose what is going on, and not just bandaid the symptom.

A while ago i read a book on just diagnosis, it wasnt related to computing , but on diagnosising any problem, it really helped develope my deductive reasoning skills.

drfrog
+1  A: 

Humanized Enso

I wouldn't say it is "the" greatest thing for programmers specifically, but it definately saves me time from fumbling through directory hierarchies and windows all day when someone interrupts my programming time to ask a question.

calvin
+11  A: 

Stack Overflow, obviously.

Edward Kmett
HELP ME, I AM TRAPPED IN AN INFINITE LOOP
M28
+1  A: 

Syntax Highlighting, Auto-completion, Source Control and ORM.

plbogen
+19  A: 

Getting a good nights sleep is pretty underrated.

theycallmemorty
A: 

Aside from tools like Intellisense, refactoring tools and all the other answers people have given, I'd have to say good co-workers. People that you can bounce ideas off of and genuinely enjoy hanging out with. People make a huge difference.

nickyt
+49  A: 

Source Control

The day I started using source control for all of my personal projects was the day I graduated from amateur to professional. I can't believe I wasted all of middle school, high school, and two years of college agonizingly writing code without being safe in the knowledge that a known good version was saved away, ready to be reverted to if necessary.

Oh, and don't even think of trying to do a group project without source control.

I just wish my classmates new source control so we could use it for group school work
Jonah
This answer is so underrated!
Josh
This made me think highly of myself. I just successfully used subversion with VS for my personal projects. And no I don't miss VSS.
pymendoza
+1  A: 

asking a DBA for help with database design.

alex
+2  A: 

Working at night!!

jsshah
A: 

Test Driven Development.

This little puppy has improved what my classespublic interface looks like, given me the confidence to refactor, and made it SO much easier to test the living crap out of my code.

Whenver I write something like an email validator, or math sequence, or string manipulator -- OMG -- it's just so fun to throw the boundary tests as it and feel the confidence that the method is strong. So much better than before when I would presume I'd find a failure at some point in the unknown future.

ZaBlanc
A: 

Cigarettes and coffee.

kzh
Cigarettes and coffee are good, but they are the "greatest boost"? Really?
Night Shade
Nicotine aids memory: http://www.scienceagogo.com/news/20031012195753data_trunc_sys.shtml
kzh
A: 

Learning there is no substitute for properly instrumenting your code. Nothing is worse then trying to figure what went wrong with no trace/debug information. I am amazed at the amount of"professional" and "Best of Breed" software out there that does not have instrumentation built in.

+2  A: 

Head Phones, with appropriate music to block out the NOISE!

Steve
A: 

Two things:

  1. Recursion (not just what it is, but when to use it)
  2. Making programs clean and easy to read instead of just getting things to work
In the same vein as your #2: the principle of DRY: Don't Repeat Yourself. If you find yourself copying pasting a block of code for use in a second (or 3rd, or 4th) place, it's a very likely candidate for being made into a function/method.
Frank Farmer
+1  A: 

Bpython is awesome in python, an interactive shell is fantastic when learning a language or framework.

Michael
A: 

Document databases like MongoDb!! :)

azamsharp
A: 

File Sharing.

I've gained the equivalent of a Master's degree in my field by torrenting software applications and textbooks and studying for free at home. I learned more (in far-less time) than the tools spending $50,000 to listen to a disgruntled professor recite a textbook that cost said tool about $80.

File Sharing.

Will.Torrent
So the people that go to college and pay for their textbooks are fools for not doing what you do?
Scott Smith
I didn't go to college, and I'm enjoying a fairly successful programming career. And I've worked with guys with bachelors degrees who couldn't code their way out of a wet paper bag. But I've also worked with some brilliant programmers who've learned a hell of a lot in college that you just don't pick up from the "learn as you go" school of programming -- things like natural language processing, graph theory, etc. They have a much more developed set of tools for approaching really difficult problems (e.g., complex manipulations on terabytes of data) than I do.
Frank Farmer
A: 

Outsourcing to third world countries

Andy
Just not related with the OP
xiao
A: 

MyGeneration to generate all my ORM code and skeleton code structure adhering to the architecture (in other word, it takes care of all the boring and repetitive code)

Fadrian Sudaman
+8  A: 

ASK!

You don't always have to spend hours alone trying to figure out how to do something. Often it is better to email a friend, call someone or post the question on stack overflow.

JonnyBoats
I was trying to figure out what the acronym *ASK* meant. Maybe it's related to AST? After reading - No, it must be something to do with partner programming. Then 30 seconds after giving up and moving on, I realize it's not an acronym at all. I feel stupid.
Wallacoloo
+2  A: 

Matched parenthesis, bracket, angle bracket, and brace highlighting. When you do as much XML as I do, as well as as much Scheme as I once did, it's an incredible time-saver.

Colin Dean
+1  A: 

The discovery that, in the real world, workflows are often constrained enough that it isn't necessary to handle all cases - and much of software requires solving "engineering problems" rather than "computer science problems."

James McLeod
A: 

Valgrind.

Because "Segmentation fault" is ever such a helpful error message.

Graycode
+2  A: 

Lots of great stuff here I agree with: isolation, caffeine, unit-tests, flow, pencil & paper, good CASE tools.

One I haven't seen that I find is critical to getting the job done (especially if you're stalling and don't want to do the work)

Todo Lists

  • Identify the task(s)
  • Write it down
    • Decompose it into smaller steps(I have an odd habit of indenting these items ;)
  • re-arrange/prioritize steps
  • When tasks are completed, come back and indicate they're done (is satisfying :) ).

Every day I start with a todo list (or I throw it together the night before so I can go home... hate breaking the flow like that, but balance is important too).

Once made, start working your way through it. Side benefit: If/when interruptions happen, todo list is right there to help get back in the zone.

Journal/Notes

Also, I find it helps to keep a text file/journal where I can throw anything/everything without thinking about it. Code snippets, urls to helpful articles, etc etc. Sometimes I just work through a problem by writing about it.

Troy Chard
A: 

This should be fairly obvious... Code Generation. Generating an entire data layer on small to medium-size projects saves countless hours.

MyGeneration + doodads C# data layer and any relational DBMS procedures for all the CRUD.

Sean
+1  A: 

These are varied and largely unrelated, but here's my list from the last few years:

Taking notes / record keeping

I'm the "go to guy" for my current project, and the project is a pretty large one. This has two implications:

  1. I get interrupted a lot. Keeping a "todo" list on a pad of paper next to my keyboard makes it easier to context-switch back to my list of tasks that need to get done for the day
  2. I document things in our ticketing system and/or wiki obsessively. If I don't document design choices/the bug I just found/that great feature idea now, there's no way I'm going to remember it -- especially in a couple of months.

In short, there's more going on than I can possibly keep in my head, especially long term, so I have to augment my memory.

Git

Branching and merging couldn't get any easier. And that's just scratching the surface. git stash and git add --interactive are both extremely handy as well. And being able to trivially get your patches to your favorite open source project merged to master (trunk) on github is a pretty mindblowing experience as well.

Profiling

KCacheGrind is awesome. Why waste your time guessing what's slow, when you can get hard data?

Unit Testing

For any piece of code with a large number of test cases, unit testing is the only sane way to ensure that fixing one test case doesn't break the others. Being able to trivially verify all test cases 6 months later is also a must-have.

Memcached/APC/nginx/varnish

If you're using a pure LAMP stack (apache, mysql, php), you're missing out.

Frank Farmer
Several of these are great... but I can't up-vote it because there are too many different ideas together in one comment.
mcherm
+3  A: 

That I can code after GF goes to bed.

Thomas
These days, my most productive coding hours are after everyone else has left the office. Interruptions kill my flow.
Frank Farmer
Until she insists you come to bed.
instanceofTom
A: 

The Eclipse Modeling Framework (EMF) and the whole EMF ecosystem of related projects.

ChrisH
+4  A: 
theIntuitionist
+1  A: 

Ctrl+Click and Alt+Left/Right in Eclipse.

Edit: and how could I forget Ctrl+Alt+h when the cursor is in a function name.

Alex
A: 

google, of cause.

Longda
+3  A: 

Emacs along with the whole new world of Free Software tools.

Vijay Mathew
+1  A: 

Many people stated the things that many of these tools do, but these are the best tools for the job for me. Textmate Bundles, CSSEdit, and Firebug take me about 95% of the way. Omnifocus and GTD for managing my projects.

Description of Bundles:

http://manual.macromates.com/en/bundles

Public Repository of Available Bundles: http://svn.textmate.org/trunk/

Also, for Design Work, CSSEdit:

http://macrabbit.com/cssedit/

And for JS Debugging, Firebug: http://getfirebug.com/

OmniFocus: http://www.omnigroup.com/products/omnifocus/

All well worth the money. About a combined $150, will pay for itself in a day.

ajhit406
+1  A: 

Ruby. Incredible productivity increase coming from both Java and C#. Dynamic typing, blocks, and easy-to-read syntax come to mind.

berlin.ab
+32  A: 

Descriptive variable naming

It's not very hard to do, just rename "size" to "imageSize". And don't abbreviate too much. "op_add" should be "operator_add". I still use "i" in loops, but only when they're small, and never in nested loops.

This makes it way easier to come back to projects you haven't touched in a month. :D

Wallacoloo
I'll second this. A few years back, I adopted a no-abbreviations policy for personal projects, and it's been working out well since then.
Boojum
This definitely needs more up votes
instanceofTom
If you name your variables, methods and classes correctly, inline comments will only be redundant. So name them correctly and forget about comments. In the long run, it will save you a lot of time, especially if it's code you'll ever have to come back to.
Jonah
A: 

Turning my second monitor so that it was vertical. Then adjusting windows such that (for web programming) the window where I was editing code was on the top half, and the browser where I was viewing changes was on the bottom.

At a high enough res, it's basically 3 full-size windows on two physical screens. You'll never go back.

callingshotgun
A: 

Modafinil, a.k.a Provigil. It's the next Caffeine, and the worst kept secret of the working world. Although it's hard to measure, this item is possibly the most prescribed off-label Rx in the United States. If Obama directed the FDA to permit over the counter sales, we'd be out of this recession by Christmas.

+1  A: 

Not to use internet at work.

Lazin
A: 

Haskell is the big one. But after that comes the modern IDEs like Eclipse.

Paul Johnson
+5  A: 

A good 8 hours of sleep every night. Amazingly, this increased my gpa in college by .5 and makes me incredibly more productive during the day. When I am sleep deprived I cannot concentrate on anything.

jle
Oh man, I can't upvote this enough!
Andrei Rinea
+1  A: 

Software: Quicksilver. Nuff said.

Hardware: A wireless mouse (no more losing "flow" at critical moments when the cord get tangled)

Time management: The Pomodoro technique. In a nutshell, work for 25 minutes, take a 5 minute break. But there's more to it. Mix this with a solid GTD workflow and it's amazing how much quality work I get done these days.

Diet: I've never been unhealthy or overweight, but eating like a bear (nuts, berries and fish) really seems to help me concentrate better and solve problems much quicker. I'm never going back to pic-a-nic baskets.

jspash
A: 

Starting linux development which made me realize that hacking up your own solutions is never the best thing to do -- taught me to make healthy use of third party libraries... and really increases productivity.

Aviral Dasgupta
+4  A: 

Whiteboards.

All the fancy tools in the world cannot replace a full-wall whiteboard and a couple of co-workers.

Steve
+1  A: 

For me, stack overflow is turning out to be a great boost.

Sarfraz
A: 

File Versioning using SVN and unfuddle. This has definitely made working in my University programming labs with a partner much easier. We can work on it whenever we want and leave each other comments about what has changed.. not to mention the file versioning and file differential utilities.

AFK
+1  A: 

From time to time: using the other hand to use the mouse :)

It's quite refreshing feeling, it forces you to use keyboard more often and it might increase your creativity (there was such study).

krzyk
+1 for creativity. giving your brain's snowglobe a shake every once in a while is a great way to dislodge bugs and push forward on the dusty corners of a task list.
tenfour
+1  A: 

The discovery of www.stackoverflow.com existence and the way how it works. Nothing is comparable!

rem
+2  A: 

Testing, plain and simple. I sort of had to be dragged to it, but now I'm addicted. And it turns out that it has some great features that will, over time, make you a better programmer.

First, you discover that if something is hard to test, it's a code smell. Doesn't mean it's wrong, but there's a good chance that when you're struggling to test all combinations of those five arguments to a function, you're doing too much in that function.

Second, "fear-driven development" is a thing of the past. Many times developers find themselves afraid to touch a hairy section of code because it's grown over time and has become unmaintainable. Having fear back you into a technical corner is never pleasant. With good test coverage, it's much easier and safer to dive in and make those changes. "Fear-driven development" goes away.

Third, your overall designs improve. As with the first point, not only do you discover that discrete bits of code become more maintainable, you find yourself wrapping global variables in well-guarded method calls to ensure that you can test them easier. Later, when something else break this "global", it becomes trivial to add logging to find out what does it. Further, you find that your code starts decomposing into different sections that are easier to test, but this also tends to be better-designed code.

Fourth, you'll be more productive. The studies I've read tend to show that initial productivity drops between 10% to 30% while testing, but long-term productivity increases because you have fewer bugs. When you implement a new feature, you can code as fast as you want, safe in the knowledge that a strong test suite will catch many errors. Also, when bugs do arise, good test suites generally help you pinpoint their source much faster.

Fifth, you can work as a team better with tests. When Joe and Sally both check in code which passes all tests, often the tests fail when the code is merged. This can be a very subtle issue when working on separate areas of the code. I confess that sometimes I hack together code quickly just to explore an idea, but when I'm working with others, I wouldn't dream of it. Tests will save me again and again.

Sixth, you know where bugs are before you find them. This sounds weird, but over the years, I've discovered that when I run test coverage code, those areas of my code which aren't tested are almost always those areas of my code where serious bugs/design flaws are working. It happens to me again and again. Look for areas where your test coverage falls short and you'll find bugs. Even if you don't see them, write tests for them and those bugs will start crawling out of the woodwork.

Testing is far and away the best tool I've found for making me a better programmer who turns out more code, to deadline, with fewer bugs.

Ovid
+4  A: 

Know thyself!

I've discovered that to truly be productive you have to listen to your biorhythms. My most productive time of day is in the early morning hours between 4am and about 9am.

I can often accomplish more in 10 minutes in that section of my day than I can do in 2 hours at any other time. (Grunt-work excluded of course :) ). So I do most of my planning/thinking at that time.

I know you said "ONE THING", but... The other thing is to use your subconscious mind to figure out the solution to any major problems - it will do a way better job than your conscious mind can!

Longshanks
A: 

StackOverflow !!

Manish
See http://meta.stackoverflow.com/questions/35016/how-does-so-affect-our-productivity and http://meta.stackoverflow.com/questions/39384/after-you-started-using-so-has-your-overall-productivity-fallen-or-risen.
Michael Myers
A: 

The ability to write code without errors. Who would've thought, this whole time, it's just a setting in our IDE's.

Noon Silk
+1  A: 

Former programmer. Best discovery that I ever made was to hire people that knew a hell of a lot more than I did and were more up to date.

Never failed me yet.

Give em hell harry
+1  A: 

Meta-programming. I know someone mentioned Lisp but that's just one tool that supports the technique, there's much more:

  • Using languages like Ruby to tweak how method invocations are handled (like implementing a basic type of AOP in a couple lines of code) or adding a method to only a selective group of instances of a class.
  • Using language tools like ANTLR to generate a small language or notation or the other way around: make some fixed notation of a specification into a formal grammar so you can immediately push through changes (for instance, an access rights table).
  • Using larger scale tools like the Rascal MetaProgramming language to write custom refactorings to modify large codebases (such as remove all public fields).

The reason this has boosted my productivity is because it allowed me to adopt a wildly different perspective on both designing and maintaining software.

Deckard
A: 

When you need to do routine search first for some existing libraries. Someone (from Apache usually) have already done it for you. No need to reinvent the wheel.

Roman
+11  A: 

Working on a fun project.

That's the single biggest productivity boost for me.

csl
Upvoted. If I were working on a fun project, I wouldn't be here...
pestaa
+4  A: 

Hot showers.
Usually there I get my "Aaahhh, of course"-moment.

Berschi
+3  A: 

The idea that computer source code is just an a kind of data you can compute with. This means you can build code analyzers, transformers, generators, ... that reuse your knowledge about code rather than doing all the coding yourself.

The key idea is program transformations, which allow you to code bits of analysis or transformation knowledge as rules you can store and apply many times. This generalizes all the "code generation", "metaprogramming" and "aspect-oriented programming" stuff you hear about.

Ira Baxter
+2  A: 

Object-oriented programming. Nuff said.

jonathanconway
A: 

Creating mock versions of critical backend services. It has enabled our team to develop the front-end virtually separately from the back-end.

A: 

Discovering that clear requirements followed by careful planning and design makes the programming faster, easier, and less bug prone.

Jeremy Singer
+1  A: 

I quit my programing job, started a company and will this year sell millions of worth steel products. I guess leaving my desk was the best thing I ever done. I still love programing, but that´s for fun only.

Mika
+4  A: 

Definitely MVC. As a amateur-turned-professional web developer with a background mostly in PHP I always found it a bit difficult to wrap my head around the idea (PHP naturally doubles as a template engine after all). While I was familiar with templates, I never thought of it as a step towards MVC, which I always associated with Microsoft's .NET stack.

Even when I learned about Java Servlets and I tried having beans for everything and putting all my output in JSP files I never quite "got" it. Beans seemed cumbersome and without ORM (which I always thought to be a fancy way of writing queries without using SQL) I often found myself dealing with SQL in beans and servlets alike.

When I picked up Python and came across Django, it suddenly all fell into place. Sure, Django calls it MTV and the views are really more like controllers, but without ever having been exposed to the architecture directly before, it just all made sense.

I'd say it even gave me a better understanding of OOP. Even though I still loathe PHP frameworks and PHP in general, when I came back to PHP recently for a client, I naturally structured my software the way Django taught me: my ORM classes separate from my views, my views separate from the templates and all that separate from the main file, which now just served as a dispatcher.

Not only that, I think it even gave me a better understanding of software architecture in general. For example, I now understand better why it is a good idea to keep your GUI code out of your business logic in desktop applications. In fact, I don't even think about it much anymore, it just seems obvious to me now.

tl;dr Learning MVC gave me better insight into OOP and software architecture even in languages I otherwise find messy to code in.

Alan
Those who don't vote this up, probably never tried MVC or a framework
Jonah
A: 

Event delegation

Plugawy
+2  A: 

Learning how to touch type. I had developed my own homebrew technique over the years, but still made a lot of mistakes when typing. I forced myself to spend an hour day with a couple of free typing programs and saw my accuracy soar. This made programming much easier as I didn't waste time hitting the wrong keys and could focus on what I was trying to code.

Pedro Estrada
+1  A: 

The USENET!

Yes, little children, there was a time when your compiler/tool/SO/library would spit a cryptic error message and you had no option but read the thick manual. After being stuck for days, you would just reimplement everything in a different way.

Then there was the USENET. You would ask a question and the greatest specialists in the world would answer you. Then there was Dejanews. You'd find similar questions already asked. Now you just put your error in Google and you solve your problem.

neves
A: 

Stackoverflow.com, 'enuf said

Jama22
Why spend ages hunting for the solution to a bug on google when it's likely it's been asked on here already
Duncan
A: 

COPY & PASTE shortcuts. This is the foundation of my career.

CToivola
Not a good way for programmer
xiao
A: 

Since I am a bit late to the party most of things that have boosted my productivity have already been listed. To add to the list (which are not programatically related per se) are,

  • Usage of keystroke launcher like Launchy
  • Religious usage of TODO Sticky Notes & actually sticking them on to Monitors (at the bottom).
Chantz
+2  A: 

Particularly when programming in C or C++, liberal use of the assert macro has saved me countless hours of debugging.

For those of you who do not know, assert is a preprocessor macro takes a boolean expression as its argument. When executing the program, if the boolean expression is false, location information (source file and line number) is printed to standard error with an ``assertion failed'' message, and the program aborts. For a production release, the macro NDEBUG is defined, and the asserts are compiled out.

assert can be more useful than comments, as it is mechanically checked as the program runs. By making your assumptions about the program explicit in this way, when those assumptions are violated, you learn about it sooner rather than thousands of instructions later when your program segfaults far from where the actual error is.

This early detection complements the use of a debugger as well: rather than working backward from a segfault, you add enough assertions so that your program dies with an assertion failure. This helps narrow in on the bug.

assert exists in most languages, although I find it most useful in languages that use manual memory management.

Bradford Larsen
+1  A: 

Automatic code indentation and following a code convention always helps me spot small problems before the compiler.

antonj
Obviously not for Python
antonj
+4  A: 

Visual Studio - the fuck***g best IDE in the world!

since its still a pain in the ass its just the best one gets! the editor is cool / debugger is as one needs it + you get edit & continue which is very nice. Customizable as hell + good plugin interface + good external buildtool integration like cuda- or other microprocessor-compilers - and its a fast IDE - not like other java-written IDEs.

i tried many IDEs and did also larger projects with for example eclipse or netbeans - but they all cannot reach the quality of VS.

I hope MS will forget about their company politics someday and support cross platforming better in the future. But this is quite unlikely to happen.

henno
+5  A: 

Losing my girlfriend. Not that I was really thinking how much more productive I would be, but it is a side effect.

Woot4Moo
A: 

The book Getting Things Done and software that implemented it (I use Things for Mac). Being able to focus on the next action, and not having the 10 other things I needed to do swirling around in my head gave me a big productivity boost.

A: 

CPAN for Perl.

Brian Carlton
+2  A: 

A CODE LIBRARY!

Brice Richard
+7  A: 

The realization that keyboard > mouse

It started with launchy.

After a while, I learned vim.

Then, I starting using the command line.

Then I switched to linux.

Then I started writing scripts that automate the mundane tasks that I always need to perform.

hasen j
This is so true. Keyboards offer so much and you only need your fingers with muscle memory instead of visual aid in case of the mouse. +1 for Vim, +1 for command line and +1 for scripts. Too bad they only count as one.
progo
+1  A: 

Dependency Injection/DI and the type of code it enforces (loose coupling, MVP, etc).

DI might have a steep learning curve (especially if you've programmed for a long time without DI), but once you get the hang of it, the code gets easier to test, refactor and read (by you, the author or someone that will "inherit" this code when you leave the company for Google, where they use DI and strongly recommend it).

Recommended reading: Misko Hevery's blog and the "Guide: Writing Testable Code" it hosts.

Plus, it adds another one of those nice expressions that can easily be misinterpreted by a non-programmer person, like: "Have you injected the Client?" or "Wow, this Guice makes work so much easier."

Igor Klimer
+1  A: 

Discovering how bad I am at programming -- after a job search where I got a terrible test.

For me (now), knowing how much you are bad, as a human being, because your memory is terrible, your logic is flawed, your attention is bad, is the best skill for a programmer. It allows him to code according to his flaws and make the code point him his errors fast. It also gives you a chance to learn from everything around, by not assuming you "know".

Those answers somewhat reflect my feeling : http://stackoverflow.com/questions/242293/are-you-a-good-or-bad-programmer

This article totally refflect my feeling : http://subwindow.com/articles/2

After the test that made me admit how bad I was, I relearned everything from the start, the languages, the computer theory, helped by search habits from a self-made background.

Klaim
+1  A: 

Databases - as a newbie programmer the hardest pieces were writing and reading data to disk in an organized way, then later it was sorting information, then it was finding information, then it was network-accessibility of information, then it was concurrency concerns, and security concerns.... DBs provide for every one of those needs!

evanda
+1  A: 

Stack Overflow really helped to resolve many of the Critical Issue which were quite difficult to search on Google also.

Thanks for giving such a helpful site.

Shivkant
A: 

To find that there are other options for data storage than relational databases (for example: velocity). This really helped me to solve way quickly certain types of problems.

Abel Morelos
A: 

I've had a Logitech MX Revolution for a while. Today, I assigned copy, delete, and paste to the secondary mouse wheel. Now, I can use my mouse thumb to do all of those operations!

Buffalo
+1  A: 

Mathematica taught me the value of a really high-level language but it took OCaml to make that style efficient enough to let me replace C++. Now I use F# for its multicore support and nothing else comes close.

Jon Harrop
+3  A: 

My single most productive move was to get rid entirely of the debugger.

Don't get me wrong: I've start in 2nd generation language (manually entering hex codes, not even assembly yet) and I've spent more time in more debuggers than most programmers on this site.

But since unit testing and multi-threading (you know, the present) came around me I realized that the old "debugger" concept was such a waste of time when working with high-level languages.

Sure, I still use one when I'm doing the occasional C hackery but besides that, learning to "find problems" by thinking outside the box, on a higher level, and never using a debugger again was my single biggest productivity boost.

Webinator
+2  A: 

in C# LINQ-to-[Everything] is extremely helpful especially coding in Lambada.

Martin Ongtangco
"Lambada"? Certainly you mean "Lambda"?
stakx
+7  A: 

ctrl+r in bash terminal (and other bash terminal shortcuts)

Wojtek
I had to test this just now, and oh my god, that's amazing! Thanks :O
poke
A: 

Notepad++ and a Project in the mind

This is how I started to learn and to really love programming :)

Nuno Peralta
+1  A: 

the discovery that imperfect solutions are the best ones.

tenfour
Care to elaborate?
David
A: 

Hyperlink navigation through the code

Not sure if it's correct name, but it's when you do ctrl+click in Eclipse on a method call and it goes to its declaration. It blew my mind first time I tried it.

serg
A: 

How about Ctrl+Z.

THEn
A: 

Garbage Collector

iChaib
A: 

Learning Haskell.

arsenm
+7  A: 

Stackoverflow. Really.

Michał Pękała
+1, I agree completely.
Night Shade
+3  A: 

Time pressure. Nothing makes me more productive than knowing I have to be done soon. I usually end up having my most effective code sessions when I am in a hurry. If that deadline is not real, even better, as that means I can still spend a bit more time reviewing what I did.

poke
So true. Having really small incremental deliverables is a great cure for student's syndrome.
Iain Galloway
To me, very often, it has the opposite effect..
Andrei Rinea
+1  A: 

It may be some small small productivity say: the production tools, production ideas, some more home works to plan the process all make together a complete boost in the whole programming.

Basically we should have a better strategy than hard hard-works otherwise or unless it seems to have nothing else to complete even 75% remain pending to complete

GOOD Strategy - with a complete idea of what you have done and whats next will get you a big boost. On the run we should not feel lack of ideas for the next step

good luck

Rahul TS
A: 

The !command& command in MATLAB to open up a windows command line:

!COMMAND&
dewalla
+1  A: 

A GNU screen session inside another GNU screen session. It blew my mind when I first accidentally did this.

cool_me5000
A: 

SSH Remote Command Execution

$ ssh [email protected] '<your_remote_command>'
OTZ
+3  A: 

For me the most important but seemingly obvious lesson I've learned is in naming conventions for my objects and the ability to define through names the processes that are going on. Familiarity with a framework's object names is also very important.

AlexW
+2  A: 

I'd say my wife and Kids. Honestly, yes Google, MVC, this and that give a productivity boost, but it's incompatible to what my spouse / kids give by just being them.

But for those married dev's out there, or those with kids, there is no single entity that can give a productivity boost like your spouse / kids. Especially when you are the sole provider.

You want to increase someone's productivity, give them something to work for that's not themselves.

Disclaimer: I am not saying for employers to sign up all their single staff on eHarmony or anything else like that. Just sayin'.

Ryan Ternier