The absolute best environment? Sitting on my couch, in my pyjamas, with easy access to my refrigerator and tunes.
However, if I catch one of your developers on my couch wearing my pyjamas and helping themselves to my 'fridge while listening to my tunes, there's going to be trouble.
Ultimately, as a developer my preference is to a) have the entire power of the system in my hands, b) not be tied down by local system restrictions, and c) not being tied to specific developer tools, especially an IDE.
Breaking those down:
- Entire power of the system: I require my own system that doesn't share any resources with anyone else. It has to be a real desktop or laptop. No thin client of any sort. If I'm out in the woods and away from any form of networking and need to build the product (or some subset), I should be able to do so. If the product relies on or is expected to be used in any sort of cloud technologies, then the ability to generate and use cloud instances is certainly a must, however they should be available alongside and via a real machine, and not be the sole development environment.
- Not be tied down by local system restrictions: if IT wants to provide a system so tied down that my local user doesn't have sufficient privileges to install device drivers, tools, or anything else I may need to work, you need to verbally smack them around. That may work for Sales and Marketing, but your most technical people need to have full access to their systems.
- Not being tied to specific developer tools: All of the most pain-in-the-butt projects I've ever worked on are those that rely on a specific IDE to build. And this has always wound up being a bad idea. Projects should be buildable without any sort of IDE whatsoever. Use Gradle or Maven or Ant or a Makefile to build your projects. Pretty much every modern IDE can work with these systems. Your developers can pick and choose what IDE and tools they want to use this way -- they should just be able to just 'git clone' or 'svn checkout' and build from the command line. This also tends to mean that your Continuous Integration system will build the product in exactly the same way as developer systems -- which is a good thing. Anytime I've joined a project that is so highly tied to a specific IDE, the instructions and time needed to on-board new developers is always way too high (I've seen documents with over 20 pages just on how to setup your IDE properly to build a specific project! I've also seen bugs in the code that wound up being due to differences in the way code was built in the IDE vs. how it was built on the nightly build server). Decouple how the code is built from what tools are used to write the code whenever and wherever possible, and then I'll pick the local tools that work best for me to write that code.
TL;DR version: give me a lot of computing power I can carry around with me, don't tie me down to specific coding tools, and then get out of my way. And keep your developers off my couch, and out of my pyjamas and 'fridge.