This is the list of things I think are vital to let a programmer do their job effectively and efficiently:
- Unlimited access to the Internet: As we cannot know everything, being able to search on the Internet is just too useful.
- Fast hardware: Do you like to just wait while your source code is compiling?
- Colleagues: Nothing so important as a colleague who can do a code review, help you solve an issue or can give you a second opinion about a design idea.
- Isolation: Although communication and collaboration are key in software development, sometimes you just need to have a few hours on your own to get something done. No instant messaging, no phone calls, no meetings, just work.
And here are some more.