I checked 'other' as well because I don't actually write a lot of the code I use software to write it for me. The idea of programs writing other programs has fascinated me pretty much since I started with computers and it has never left me. So if I feel that a piece of code is repetitive I write a chunk of code to write code like that and then re-invoke the generator when I need more code like that. As an example: structures, serialization, de-serialization, validation, allocation, freeing, database storage, variations of the same algorithm in different languages and so on.
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.
> And what do the interfaces to these programs look like?
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).
I mainly do .NET development and must admit Visual Studio is the best IDE around (especially with Resharper and other plugins/extensions). I would rate the jetbrains IDE's best in their class (IntelliJ idea, pycharm, rubymine, webstorm etc). I also found the eclipse distros pretty good as well (ex. Galileo).
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.
This is pretty much the exact post I was about the write. Visual Studio at work (with a smattering if Eclipse/Netbeans/IntelliJ). Visual Studio is hands down the best IDE I have ever used. Big fan of it and C# (just wish Linux support was better).
Otherwise Notepad++ for everything, including Linux development (all done inside virtual machines).
I never was a huge fan of Eclipse in the past, but later iterations of it combined with running the huge hunk of junk off of an SSD makes it really quite good these days (IMHO). I'm using it for Python, it has pep8 integration, a nice graphical diff for git and as much syntax error detection as you can expect for a dynamic language.
A lot of Text Editors may act like IDE and a lot of IDEs are used only for certain kind of work. E.g. I'm using XCode for writing (i)OS(X) apps and SublimeText for web development!
I use an IDE(PHPStorm) under OSX( 3 monitor mac pro).. I'm not super thrilled at the IDE's performance under my laptops specs.. but I do get by when I absolutely have to. I write in PHP(i know.. trust me i know... especially around here), tons of javascript etc. but I feel like the code completion in PHP really helps me keep less in my head that isn't really that important. I've heard great things about sublimeText but I haven't really felt a pressing need for it.. yet.
Text Editor (Vim) for everything (HTML, CSS, JS, PHP, Python, bash, txt, markdown…) except for AS3 for which I use FlashBuilder/Eclipse.
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.
I use Emacs. Ostensibly, it's a text editor. But for some languages, it's essentially an IDE. For example, I use typerex for OCaml which takes advantage of OCaml's type system to provide a bunch of high level features like showing errors in the code, auto-complete and some refactoring.
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.
I use PhpStorm for working on very large web projects. When working with smaller frameworks or just writing a script or something, I prefer the aesthetics and simplicity of Sublime Text.
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).
Vim with dwm, TMux/TMuxinator, and urxvt. On the plugin side, I use slimv (I know editing Lisp with Vim is blasphemy, but meh), Easytags, and Syntastic. Just discovered Syntastic: I highly HIGHLY recommend it for everyone ever, just because of how much it shortens the compile-check-fix-compile cycle. Easytags is there basically to make omnicompletion more convenient. Of course, it's all tied together with Pathogen :P.
EDIT: Forgot to mention, I'm primarily editing C, Python, and Common Lisp, but there is some Perl, Haskell, and C++ too.
Oh God, I hate overblown IDEs. If I wanted less control over my development environment I wouldn't be making software, I would rely on whatever already existed.
Meta+Click on a function to take you to that function's implementation is easily one of the most production enhancing benefits of an IDE in larger code bases.
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.
Your point and the point of the comment to which you are replying seem to suggest a 3rd space.
(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.
Yes. You can create a tags file for any header file, no matter it's origin. I like to keep mine (for boost, GL, SDL, etc) in ~/.vim/tags and set that as my default tag directory, then use a plugin (Easytags) to auto-update tags for the current source file. That + Supertab + omnicomplete = win.
What languages do you write in though? I'll agree with that in terms of lots of languages, but I've tried writing Java and C# in text editors and that's just miserable without a full IDE. Would you agree? If not how do you survive in a less than full blown IDE for those sorts of languages?
I think there's a pretty big misconception about what a text editor and IDE even are.
IMHO a text editor is program that edits text, nothing more, nothing less.
The primary function of all development environments is to edit text, so an IDE is just something that adds tools to make this easier. Pretty much all IDEs have some facility to navigate files, navigate to specific functions, check syntax, build, etc. etc. etc.
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.
To be fair, most IDEs I have used have been customisable to almost an insane degree. Plus there's usually nothing stopping you from using a combination of the IDE as well as other external tools.
I use EditPlus and Alt Tab to a cmd window. Certainly not an IDE, but close enough for me. For C++ I either use CodeBlocks or VC10. Much of my class code is generated from document/specification by a Perl script. This works nicely for either IDE given the necessary command line switches.
I did most of my Python work in TextMate for quite a while. I tried Eclipse for a time, but didn't care for it. Now I use PyCharm (IDEA), because its code completion is excellent, and its debugger integration is fantastic when doing web work. Also, it has a decent vim mode plugin.
Editor: emacs with a thick, customized elisp layer for things like inserting skeleton code (blank for loops, blank class defa, etc), documentation templates, etc. I work on simulation and visualization tools in C, C++, Python, and when I can squeeze it in some Common Lisp.
best one online editor: Codiad ( http://codiad.com ) based on Ace (ex Bespin by Mozilla) developped open sourcely in PHP, no bullshit around collaborative tools. Simple and efficient.
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.
I use Vim with the Janus plugin. What I really like about Vim is its ability to be more powerful than any IDE if you take the time to write plugins to give yourself exactly what you need.
I dispute this statement. Vim is more powerful for editing text than anything you will find in any IDE, including "vim modes". However, with or without plugins, it's not in the same league as an IDE like Eclipse when it comes to refactoring, error highlighting, automated imports, etc.
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 use vim because I love the raw editing power. I do use a handful of plugins (Fugitive is nothing short of amazing), and of course I've dialed in quite a few settings, but ubiquity and baseline power is my primary goal over customizability, if it were the other way around I would use emacs.
Tmux and Vim with Exuberant Ctags, Command-T, NERDTree and few a others. Got my workflow down to the point where all I need is a shell and a web browser.
vim is arguably an IDE, because of :make and the ability to jump through build errors without leaving the editor. I don't think one can't debug in vim, but then depending on what you write you may very well not have this need to begin with.
There are plugins that allow for debugging. I was hacking on a web-app that was possibly the worst PHP any one in my office had ever seen. I wouldn't have been able to get ANYTHING done without it. For anyone that's interested: http://www.vim.org/scripts/script.php?script_id=1152
I used to be a vim guy until the visual debugging in RubyMine won me over. That and (jump to function) is much better than keeping ctags up to date via a git hook.
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.