279

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!

315

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.

301

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.

242

Google

221

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.

166

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

162

VIM!!! Nuff said!

143

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

140

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

134

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

124

pencil and a paper (simple obvious) but still underestimated

123

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

104

Open source.

93

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.

85

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

85

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.

77

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!

71

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.

66

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.

49

Generics. Casting is for pottery.

49

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.

36

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.

35

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

32

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!

32

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

31

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.

30

Closing the browser often.

28

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.

26

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

25

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.

22

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

19

Getting a good nights sleep is pretty underrated.

18

whiteboard

17
  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.
16

That it is OK to say no to unproductive work.

15

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.

14

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.

14

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.

12

Learning to type properly and accurately.

12

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.

12

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.

11

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

11

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.

11

Stack Overflow, obviously.

11

Working on a fun project.

That's the single biggest productivity boost for me.

10

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

9

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.

8

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.

7

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.

7

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

7

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

7

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.

7

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.

7

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.

7

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

7

Stackoverflow. Really.

6

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.

6

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.

5

for me, Linq

5

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.

5

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

5

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

5

Notepad++. Hands Down.

5

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.

5

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

4

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

4

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.

4

Python.

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

4

Exercise- as powerful as caffein with no deleterious, and many positive side-effects. A simple 45 minute jog every other day does the trick for me. Often I find the answer to a difficult problem in the shower after a run, especially if I am well rested.

4

Whiteboards.

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

4

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!

4

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

4

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.

4

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.

3

Code generators like CodeSmith to reduce repetitive coding.

3

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

3

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

3

Two answers:

  1. Screen and ssh -t
  2. Code folding
3

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

C#

3

That I can code after GF goes to bed.

3

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

3

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.

3

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.

3

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.

3

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.

2

Recursive function call.

2

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.

2

Getting rid of .h files in C#.

2

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.

2

ClipX has done wonders for me.

2

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

2

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.

2

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

2

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

2

for me, regexes and design patterns.

2

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.

2

Story cards.

2

Valgrind.

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

2

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.

2

Working at night!!

2

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

2

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.

2

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.

2

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.

2

Object-oriented programming. Nuff said.

2

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.

2

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.

2

A CODE LIBRARY!

2

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

2

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

1

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

1

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.

1

Code completion.

1

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

1

Moore's law for caffeine.

1

intellisense

1

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.

1

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.

1

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.

1

Resharper, it's probably already been said.

1

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.

1

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

1

ReSharper

1

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.

1

Clojure

1

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.

1

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.

1

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

1

asking a DBA for help with database design.

1

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

1

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

1

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.

1

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.

1

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.

1

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

1

Not to use internet at work.

1

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.

1

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

1

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

1

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

1

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.

1

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.

1

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.

1

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.

1

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

1

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

1

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.

1

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!

1

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.

1

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.

1

the discovery that imperfect solutions are the best ones.

1

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

1

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

0

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??)

0

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.

0

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

0

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.

0

Boost...

i.e.: www.boost.org

0

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

0

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

0

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

0

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

0

Streaming/satellite radio.

0
  • Strong black tea
  • Source Control System
  • Bug Tracking System
  • Hippie Completion
  • Taking breaks at the right time
0

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.

0

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.

0

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.

0

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.

0

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
0

Document databases like MongoDb!! :)

0

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)

0

Valgrind.

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

0

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.

0

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

0

google, of cause.

0

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.

0

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.

0

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

0

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.

0

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.

0

StackOverflow !!

0

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

0

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.

0

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

0

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

0

Event delegation

0

Stackoverflow.com, 'enuf said

0

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

0

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).
0

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.

0

CPAN for Perl.

0

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!

0

Notepad++ and a Project in the mind

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

0

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.

0

How about Ctrl+Z.

0

Garbage Collector

0

Learning Haskell.

0

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

!COMMAND&
0

SSH Remote Command Execution

$ ssh user@example.com '<your_remote_command>'
-1

Cigarettes and coffee.

-1

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.

-2

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.

-4

Outsourcing to third world countries