I am probably a terrible person to talk about this, since I find using IDEs like programming with lead weights on my arms, but I figure it may be useful to get the perspective of that side of the fence. Any interesting or experimental ideas people come up with still need to deal with the basic needs of developer tools.
An IDE is typically an editor of some sort, a debugger, and a compiler. Since those are three distinct parts of the tool, I'll run through them seperately
Here is what I want from an editor
- be fast. i never want to be waiting for things to load. ever.
- give me powerful ways to manipulate and jump around in the code. I don't care about learning curves when it is a tool I use for probably 10 hours a day on average, the flip side is I don't want to waste my time getting good at tools that aren't powerful.
- give me a decent way to open files. open file dialogs aren't good enough, neither are project trees.
- good support for having many things open at the same time. i have a 27" screen, tabs are nowhere near enough. currently I live with splits, but it wouldn't be hard to come up with something better.
- never make me touch a mouse while editing code. again, I don't care about learning curve, what I want is speed, efficiency, and power.
- If you give me a visual designer, it better make me more productive then typing, while producing code with the same level of flexibility as I am able to produce with text. I have yet to find a visual designer that does this, every one I have ever used basically lowers the bar to learning how to do something, but makes you pay down the road in maintainability and flexibility. I consider every single example of programming by drawing pictures that I have so far as a failure, if used for serious purposes (i.e. not just banging something out and not caring about quality)
- automated refactorings. I am using vim now, and the one thing I miss is being able to extract methods from other methods, or hit a button to rename something and feel safe with what the tool will do.
- code analysis. I want to see syntax errors as they happen, see if I am typing redundant code, or see suggestions if there is a better way to do something.
- great test runner. I practice TDD, and poor test runners drive me up the wall, since it has such an impact on everything I do.
what I want from a debugger
- a REPL. this drove me insane when I was stuck with visual studio, and I probably spent more time in the immediate window then anyone else on the team. The whole point of a debugger is the ability to explore what is going on during execution, if I can't type arbitrary code and see what it evaluates to, I feel like I have one hand tied behind my back
- ability to change code on the fly, although with a decent REPL and language, that sort of takes care of itself
- ability to move backwards and forwards in execution.
- speed, dont make me wait
- good ways to jump around in the code. if I am at line 1, and want to jump to line 500 to see what is going on, I should be able to do that
what I want from a compiler
- speed, at least in development mode. google go is able to compile 500, 000 loc in milliseconds on a laptop, that is what I am talking about. If the language needs to be compiled, every second staring at compiler output is just making it harder to do whatever it is you are doing (tracking down a bug, testing a feature, running tests, etc)
- you need some way to hook into arbitrary methods for pre and post execution, or pre processing of your code files in a more general way (think lisp reader macros). if you can't do it with the language, you need to be able to do it with the compiler
- good analysis. tell me where i screwed up at compile time if you can't catch it before
- transparency. i really don't even want to know its there, unless I am directly interacting with it.
What I have
Currently, I use vim, which gives me 1, 2, 3 (with fuzzyfinder.vim/rails.vim), 4, 5, and a very poor 8 (with syntastic.vim). I don't have refactorings or code analysis, and I really miss it, but IMO it is more then worth the tradeoff.
for debugging, I use ruby-debug, which really isn't that great. basically you get 1, 2 (more cause of ruby then ruby-debug), and 3, but thats it.
Don't use a compiler anymore (thank god), but not using one after having to use one for 7 years (at least professionally) really highlights what a terrible impact they have on the development process.