To a lisp programmer this would be second nature (they'd wonder why it's so special) but in other languages it can be quite a hassle to keep multiple instances around of similar code.
Code generation is a real booster, the biggest gains I'm getting are 100:1 (a small 10 line definition spitting out a 1000+ lines of code), there is nothing to re-factor just update the generator inputs and hit 'make', old generated code is stripped, new generated code will be inserted into the project so you can inspect it afterwards (and to the compiler it looks just like ordinary human written code). The code generator writes comments as well to clarify the output.
Writing the generators can be quite tricky, you have to think on two levels at once (the code you're writing and the code you want to generate). There are some shortcuts here to make that process easier.
The end result of this process is to have code produced very with - once a single example has been produced and debugged - a much reduced chance of errors.
I'm guessing you still write code.
You get a bunch of readably named functions that you talk to just as if you'd written a library painfully from scratch.
> Are they off the shelf programs or do you have to write (parts of) them yourself?
The interfaces themselves are generated, the code that uses the interfaces is written just like any other program. Unfortunately I can't generate 100% of the code, the business logic bits still need to be written. But even there we're making progress in identifying bits and pieces that are more generic. As more and more code moves to the generated input the whole thing starts to take on the guise of a very high level DSL.
The real knowledge is vested in the generator and how to keep it flexible and still be able to generate code specific to the problem at hand. This can be quite tricky.
> I'm guessing you still write code.
Absolutely, just far less of it than I would have to write otherwise. It's been slow going getting this set up but now that we have it the speed is phenomenal.
That should get you going, be sure to read the introduction.
In the past I've used this trick for many different purposes (for instance, writing driver code for a large variety of graphic cards with various memory lay-outs and port setups, greatly reducing the amount of code to maintain, for performance reasons you don't want that code to be too generic), but lately it has come into its own in a project that I'm working on where the large majority of the code is generated.
Unfortunately I can't share any code (it's written under contract).
Overall there are some pretty good IDE's around, just need to shop around a bit.
I personally use notepad++ as a text editor, although lately I have been favoring sublime text 2. Geany on Linux seems pretty solid as well.
The point stays that IDE's generally favor statically typed languages while text editors are generally used for dynamic, scripting and low level languages.
Otherwise Notepad++ for everything, including Linux development (all done inside virtual machines).
Before switching to Vim a little more than 2 years ago, I had been using TextMate for about 3 years, before that I used BBEdit for a while and before that I learned the basics in Dreamweaver 3.
Neither Dreamweaver nor BBEdit were really "chosen". A friend advised me to start with Dreamweaver which was indeed very helpful and confortable when I began coding in the late 90's but after a while, I got fedup of the constant spoonfeeding and I didn't really need all the wysiwyg tools anymore so I switched to BBEdit which was the de facto text editor on Mac OS at the time.
I still used BBEdit and/or TextWrangler until I fell in love with TextMate sometime between 06 and 07 and, later, the command line.
Then I got bored and decided to switch to Linux full time. I spent almost a year looking for a TextMate alternative and found Vim to be the best candidate. And ultimately blow TextMate in every ways. To be honest, I'd have gone with ST2 if it existed at that time, though.
Give me a real keyboard, an UNIX-y system, a terminal emulator, exuberant ctags and Vim and I'm a happy man.
My main point (apart from the fact that OCaml and Emacs are awesome) is that there is no clear delineation between text editors and IDEs.
When working on large projects I find that having a good debugger can save a lot of time. The first thing I do when installing PhpStorm though, is reconfigure the look and feel of it. I definitely agree that "less is more" when it comes to having a clean environment, but I have also seen way too many developers using Vim or Sublime that take twice as long to do something because they are not using a real debugger, and they have to look-up every function definition, when PhpStorm would just autocomplete the function names and let you know what the params should be.
As RyanZAG pointed out, being able to click on a function and go right to it is an awesome benefit of IDE's as well as function definitions, autocomplete doc comments, and simply a better understanding of language constructs (it can show you errors based on syntactical error).
EDIT: Forgot to mention, I'm primarily editing C, Python, and Common Lisp, but there is some Perl, Haskell, and C++ too.
Also, don't knock the ability of some IDEs to show function documentation on mouseover - this can save a huge amount of time in reading API docs.
(1) There are IDEs, which include things such as build automation, debuggers, function lookups, etc. (2) There are text editors which maybe give you syntax highlighting.
I don't think I'm saying anything novel by suggesting that there is also an in-between: something that provides syntax highlighting, function lookups, etc., but which doesn't try to build your project for you.
You can use emacs like this, and you can use an IDE like this. So, many people voting for text editor and many voting for IDE may actually mean something more like this.
So with this definition Vim (and Emacs too) are both IDEs; they're just stripped down so that the developer can choose what features they want to add, or extend it with their own. I'm using Vim for Python, Java, and in the recent past PHP. With the right plugins Vim easily rivals any IDE that I've ever used (to be fair I haven't used that many). It has the added benefits of being widely available, having a bare minimum of requirements, and since it's purely character based it's usable through nothing more than a terminal.
I can't go wrong :) I have a simple keybinding bound to opening the buffer I'm working on in the IDEA to open the file in Emacs if I need to slice/dice text using my emacs-fu, but IntelliJ + its plugins are eff'ing amazing.
Now you can argue that many of these features are only necessary for languages like Java or C#, and that you can get by without them for everything else.
I also create my own tools and IDEs to do things nobody has automated faster.