I think part of it is that a lot of IDEs don't "feel" good. For example, Eclipse doesn't feel like a Mac app. Dragging tabs around works, but is ugly compared to Chrome or similar; the icons used are more utilitarian rather than something someone put thought and care into; often times the advantages it provides for the Java language just aren't as good with scripting languages (less mature support for Python and Ruby, less of a need for an IDE for those languages, and less ability to provide good features since they aren't statically typed).
Sometimes you want every feature. Other times, you want something that might have fewer features, but might feel better. When the iPhone came out, it didn't have a keyboard, it didn't have 3G, etc. Yet, it just felt better - the size, the icons, the way you interacted with it. I think that editors like Sublime Text and TextMate really go for that feel.
Users seem to see Sublime Text or TextMate as just missing a feature or two while looking at Eclipse and finding that it has the features, but lacks the basic joy of interaction. They also feel that it would be easier to extend something like Sublime Text than to fix the feel of Eclipse. Personally, I'm starting to warm to Eclipse as I use it and I appreciate the features it brings to the table, but I don't ever think I'll see Eclipse as "feeling good" in the way that TextMate feels right.
Users seem to see Sublime Text or TextMate as just missing a feature or two while looking at Eclipse and finding that it has the features, but lacks the basic joy of interaction
I somehow have this problem with Eclipse too. I really love its features, especially for Java/Android development, but it sometimes handles like you're driving a truck. Even on a fast PC. So its not that much 'fun' to use for me.
Qt Creator is one of the fow IDEs I positively like working with. It is fast, featureful and somehow doesn't get in my way like Eclipse does. The only drawback is that it's very Qt and C++-focused, so outside that area usefulness quickly dwindles.
For the rest I like Sublime Text. ST somehow helps you stay focused on the text. It is very fast and feels smooth. Like other "simple" editors it opens very quickly so can be used for editing independent scripts and configuration as well as source code, and does not impose any kind of framework or project structure.
Another up vote for Eclipse not feeling right. I've been using Eclipse for years and it still feels wrong.
A few years ago when I was doing heavy Flash Actionscript development, I always preferred the free Flash Develop IDE over Adobe's expensive official Flex Builder IDE, which was based on Eclipse. Price wasn't the issue. Flash Develop was simply better—much better. First on the list of why it's better is that FD just "felt right" which meant I was much more productive in FD than Eclipse. Features were easier to access than Eclipse, from keyboard shortcuts to menu options. Eclipse always feels clunky.
Fast forward to today and my least favorite aspect of Android development is interacting with Eclipse.
Functionality vs appearance? I don't think it's fair to boil it down to such primitive comparisons, but in the end, I know which is more important to me on a day-to-day basis. (I say this as an extremely heavy user of both Eclipse (java, antlr, etc) and (G)Vim (python, scripts, go, etc). I can't believe this is a controversial or downvotable post, especially given the context of this article. The feel of tabs is relevant given the dozens of other niceties that Eclipse provides over TextMate? Really? Again, if you're seeking the features provided by an Eclipse/equivalent?
It's a trade-off. An IDE will often provide more and better integration, but is usually focused on a small subset of programming languages and is less flexible.
Most editors less integration, but are far more flexible. Take Sublime or Vim, you can customize every bit of the experience with scripts without too much effort.
Also, I think some languages tend to need an IDE more than others. E.g. Java's relatively small feature set increases its verbosity. An IDE is almost required to avoid too much typing and memorizing. Haskell, on the other hand, is very expressive, making it less fit for smart autocompletion.
Err, I doubt it takes less effort to customize Vim.
OTOH, I like to use an IDE like NetBeans to navigate Ruby code (go to method implementation, go to class implementation, etc).
I'd say it depends on what kind of project you're working on. If you're writing a small one-off script in Haskell, you probably don't need to use an IDE. The same goes for Java.
Once you integrated 3rd-party libraries (like not just one, but say, 5 of them), you either have to memorize those libraries or be grateful that IDE can help you.
I've actually just begun the process of switching from an Eclipse + CDT workflow to Vim in an attempt to understand what attracts people to it. I'm working nearly exclusively in C++ with some python, developing on Linux. Some of the features that I'm not sure I can put up with losing are:
- Reliable code completion. I have to deal with many different third party libraries and APIs, many of which have their own implementation of basic maths classes. It's just not possible to remember them all. I've tried clang complete and it's ok but nowhere near as nice as CDT in Eclipse.
- Inline popup of definitions on mouseover.
- Reliable jump to definition or header.
- Proper refactoring.
- Local file versioning on save with diffs. Incredibly useful once in a while.
On the other hand, I'm appreciating having a responsive editor I can run everywhere and I like having text based configuration and plugins.
I agree with the article that if you want an editor that really understands your code (and you're working in a statically typed language) then you need an IDE, not a text editor with plugins.
At Microsoft we have all types: IDE diehards and those that are happy staying with vim/emacs. There's also a group that uses a text editor 90% of the time and fires up the IDE only for the debugger and perhaps GUI builder. Which of the 3 buckets you fall into seems to be one of those nature/nurture questions.
Re IDE's being slow/bloated - Our group does a Python IDE (free/oss plug-in) and the performance is pretty decent. If you have SSD's, VS can feel pretty snappy. Here's a video to give you an idea: http://www.youtube.com/watch?v=7CoGsSlrxKk . For 1.1 we're working toward becoming more Editor+ like, ie, less Project System overhead - just open a file & go.
Used to be a TextMate lover, bought the license at least 3 times. Then I met http://www.jetbrains.com/webstorm/ - never touched TextMate again, and don't ever plan to. Just thought I'd share for those who have not tried a JetBrains IDE before. No other IDE I've tried has lasted more than a week.
It's a shame you got downvoted. It's clear you thought this through further than the people who downvoted you.
For anyone who didn't get it: You have to actually spell out what you want before you can say if it fits this answer or not. The car vs bike thing only makes sense if you didn't care how fast you got there, how tired you were when you arrived, or how much pain it was to haul the luggage there.
The answer to original question is easy in that light: Because IDEs aren't the only solution to the problem. Just because IDEs have a certain feature is no reason that other things can't have that feature as well.
An interesting point which is perhaps germaine, perhaps not - the bicycle is by far the most energy efficient form of human transportation. This is because it makes best use of the highly efficient biological engine we all already posses.
Try carrying a nontrivial amount of baggage on a bike.
(No, the correct answer to this is not "Don't carry luggage." You can't solve a problem by chopping its legs off so it fits in your problem-solving grid.)
For this particular example, you can apply this sequence of logic (with thanks to wccrawford):
if(Baggage) use a car.
else if(In a hurry?) use a car.
else if(Need to be rested?) use a car.
else if(Need to go 150 miles^ or more?) use a car.
else use a bike.
The same reason I don't use a Space Shuttle to travel to my granny that lives a 100km away.
I don't have to.
But it's got a lot to do with the fact that while IDE's are good for something like Java or C++ programming, they tend to become really crappy once you get into web development and have to regularly work with 5+ different languages at a time.
With most IDE's that would mean I'd have to have 5 of them open to work comfortably with every language.
That's because most IDEs don't have good support for web development. (I wonder what would happen if they are good for web development, would people's opinion change?)
I used Vim to modify CSS and JS but I struggled to navigate JS code because I cannot jump to the method implementation with some sort of magical shortcut key easily. This is pretty tough if I want to know why I don't get my intended result out of calling the method.
To add injury to that, I found out that I have to redo the implementation and call the method something else to describe the intent in full. I can't refactor that easily without going to the path of hell: grep, regex, sed.
Re: jumping to method definitions, have you tried running ctags on your project directory, then pressing Ctrl-] (go to tag) on the method name? It should work.
I distinguish project-oriented IDEs such as Eclipse and IntelliJ from casual IDEs such as Sublime Text.
If I'm looking at something downloaded from GitHub, I use Sublime Text because the focus is on browsing the source quickly. I don't want to have to create or import a project.
Whereas, if I'm actually developing something, I'll use IntelliJ because then I need all the additional build tools.
I think it's a matter of using the right tool for the right job. Opening something in IntelliJ seems like a lot of effort because of the extra step of creating a project, and hence I choose the easier option: Sublime Text.
If you're using a programmer's text editor (SimpleText, vim, Emacs), you should be able to touch type your way through committing code. This is a basic operation.
Here's my workflow using Emacs and magit:
1) Right Alt-G to bring up the magit git interface.
2) Down arrow and tab, repeatedly, to review diffs, with "s" to selectively stage part of a change.
3) "c", a commit message, and Control-C, Control-C to commit. Then I'm working on the next feature. This whole process is in muscle memory.
Obviously, the workflow in SimpleText or vim would be different, but there's no reason it shouldn't be just as fast. Fast commits are not just for IDEs.
Is there really a clear distinction between IDEs and (some) editors? Eclipse has some language modules that aren't really that great, so would it count as an IDE for those? And Emacs is most definitely an Elisp IDE, nearly a CL IDE with slime and quite close with a few other languages, given enough customization…
And while I haven't looked, I bet you can get enough integration with vim, at least on the level of Visual Studio 5…
Meanwhile, Smalltalkers know where to draw the line and tell us that we never used an IDE at all (or an object-oriented language)…
The advantages of IDEs over text editors isn't look or feel. It's code quality.
Especially with statically typed languages, good IDEs make developers significantly more productive.
Programmers spend most time reading code, navigating code, understanding code. Much more than writing code. Unless you've only done greenfield solo projects in your life, you know this is true. IDEs have code navigation features and tooltips over types and methods. Features like this help a developer understand code significantly faster.
Additionally, code occasionally needs refactoring. Most common are the real simple refactorings: A method might grow too hairy and need a split up, maybe a method's name does not correctly convey its meaning anymore, arguments would have to be reordered for consistency, and so on. In a text editor, you have to manually update all references to the changed method. All you can do is compile (or unit test, in case of dynamically typed languages) until all the errors are gone. This is cumbersome, error-prone and time consuming. Search&replace often creates more errors than it fixes. IDEs have direct support for simple operations like these.
Larger refactorings are mostly compositions of smaller, simpler ones like I described above. Being able to trust the tool to have made the change correctly is invaluable in this process; it avoids a full unit test suite run after each step, and significantly speeds up major refactoring work.
The end result is that a team that uses IDEs and understands its navigation and refactoring features find it very easy to increase code quality. A room full of vi users, not so much. A text editor user would prefer to keep things as they are and add new features instead. The cost of minor refactorings, such as method renames, does not weigh up to the gain. This gain is small in the short run, because the developer is actively working with that part of the code. In the long run, repeatedly skipping these improvements makes code ununderstandable.
Also, let's not forget the "not invented here" syndrom. IDEs make it easy to figure out how to use 3rd party libraries and colleague's code with ease. Type the name of the class/object, press "dot" and you get a nice overview of the class's capabilities, including tooltip documentation. A text editor user has to task switch to the browser for docs all the time. If there are docs. Or read the source code that is being used.
This means that for relatively simple operations (say, a Point class, a string operation, etcetera), a text editor user will often find it easier to just write the damn thing right now. Its easier and more fun that scouring the code base for something that looks like it. The result is low code reuse.
In conclusion, correct usage of a decent IDE increases code quality, makes maintenance a blaze and keeps developers happy. Except the first week, when they're not yet used to the slightly odd UI. But if that holds you back, you're not a professional, you're a whiner.
I admit that IDEs have most value for statically typed languages (which, for me, is the strongest case for statically typed languages out there). Dynamically typed languages basically have the problem that they can't get decent IDE support, ever.
<sad rant>Which is why the web crowd keeps using TextMate and vi, keeps using Ruby and Python, and keeps writing increasingly unmaintainable code.</sad rant>
The best code I've ever read was written in emacs. The second best code I've ever read was written in vi. I can't think of code I've seen written in an IDE that I considered notably great code.
If the doohickeys your IDE does for you to improve code quality actually do so, I would expect to see evidence of it.
And, regarding your sad rant...The reason the web crowd (and many others) keep using those tools (though I don't understand the appeal of TextMate, in a world with vi and emacs), is because they are more productive with them than alternatives. One of the best Java developers I've known (famously so, he'd written some Open Source libraries that were in very widespread use), turned into one of the best Python programmers I've known nearly overnight when he got hired by a Python shop. And, while he occasionally lamented the loss of some of Java's tooling (mostly for testing and coverage and instrumentation of the running code), he used emacs for both languages.
In short, when I meet a developer that relies on an IDE, I have suspicions that they may be a cargo cult programmer, rather than the kind of programmer I want to work with. It may not be true, and I'm sure there are excellent coders working in IDEs. But, I can't really take your pro-Java/pro-IDE rant seriously, because I know what happens when good developers get the chance to work in a better language (of which there are many; Python and Ruby are among them).
> If the doohickeys your IDE does for you to improve code quality actually do so, I would expect to see evidence of it.
...and then you bring up examples of superstar programmers. They are outliers, they'd be productive in whatever. That's not where IDEs do anything, instead you should look at average programmers in average companies with large codebases. That's where IDEs shine, because they can analyze large amounts of other people's code and hint you and guide you in the right directions when interfacing with it, without forcing you to read all of it.
Another improvement IDEs offer, especially when doing Java in Eclipse, is that you're always in a compiled state, and any errors in your code are highlighted while you write. You don't have to "context switch" to another mode where you run a compiler to check what you just written for syntax errors and other errors, and then bring that information back with you when you switch back to editing. It's all there, all the time, which increases your productivity, because it decreases the time you spend on fixing small errors, spelling errors, syntax errors, etc.
In short, when I meet a developer that rejects IDEs, I have suspicions that he may be a grumpy old programmer that just refuses to go outside his comfort zone.
I don't see a difference between someone rejecting a newer better language to stick with one they know, and someone rejecting a newer better IDE to stick with an environment they know.
So your critique of IDEs is as much about the language as it is the IDE?
As far as your Java programmer, how long did it take him to get emacs in a state with a similar amount of power as an IDE? I'm thinking about compiling, debugging, source control integration, code completion and API hints, and so on? I do a fair amount of C# coding at my day job, and I've tried to work exclusively in vim, and the productivity hit I take trying to get the conveniences of an IDE in vim pushes me to just Visual Studio and install vim emulation.
As far as other text editors go (Sublime, TextMate, Notepad++), aren't the existence of these just proof that programmers like to build things?
I would say there are two components to it. Language and project size. Java and C# where designed with IDE use in mind. I am not sure I would want to work in either without an IDE. For smaller languages like C and Python an IDE wouldn't be my first choice of tooling, the cost of using the tool just isn't worth the benefit provided. I could see switching to an IDE if the project got a little too large.
C# probably was but I suspect it wasn't a factor in the initial design of Java - I don't even remember there being any IDEs for the first couple of years of Java being widely available.
I would say that Java was designed to be used with committees. Basically a language to use if you're in a design by committee situation. IDEs were then introduced to give individuals their own "virtual design committees".
Agreed regarding C#. I've tried using vim as my C# editor, then switching to VS for builds and debugging, but I miss Intellisense too much (and with vim emulator in VS, I don't lose any of my keyboard efficiencies).
As a counterpoint, the way VS does autocomplete drives me insane. In the middle of a frenzy of flow typing, I have to move my hands away from the keyboard to the mouse to select which autocomplete entry I want. Aargh. It breaks the flow. (Although, I am using the Express edition so have not tried a vim emulator; perhaps their autocomplete is better.)
I'm not going to argue against your points, but an alternative explanation is that Emacs/Vi(m) users have on average lots of more experience than the average IDE user.
(Otoh, IDEs aren't that new anymore. Those programmers might have more of a tendency to exchange the keyboard for a tie?)
My personal problem with IDEs is the screen real estate. On the same screen I get an A4 of shell and two A4 of code with Emacs, the local Eclipse users get at most 40 lines of code...
Disclaimer: I've gotten scared of judging anyone since I saw really cool people speaking at conferences -- and realized they use Windows. :-)
The point you're overlooking is that with your shell+emacs solution, you NEED those windows, because you need to run your compiler in one window, and edit in another, and lookup code in the third, and maybe have a browser for the javadoc or other reference in a fourth.
With an IDE, all of that is in the same window, but in popups and overlays. It's presented differently, and the flow is different, so comparing lines of code on the screen is meaningless, it just shows that you haven't really gotten far enough into it that you understand how it is different.
What you're overlooking is that with Vim, I can code in 80x24 or less and be perfectly fine. Try that with an IDE.. Of course I can also throw more space at it if I wish, and it's just that much nicer.
I also have half a dozen tabs of shell, where I also keep documentation (perldoc, pydoc, etc). (Real Emacs users use emacs buffers for all their shell needs and documentation. I'm a wimp.)
>>comparing lines of code on the screen is meaningless
I have used IDEs (not exactly lately) and have seen people use them quite a bit.
Personally, I don't make non-intuitive claims, and argue that others just don't know what they talk about, without good references.
>>presented differently, and the flow is different,
Obviously the work model is different. But...
You are arguing that all the screen area left to buttons etc is paid for by the IDE's popup functionality.
Screen estate has simple and obvious advantages, since when I write the code, I can see the documentation and/or the functions it calls at the same time.
You need references for your claim.
That said, with a language which gives Cobol fingers (Java, etc) and/or use half a sentence to write a library call, I do see a case for an IDE.
For comparison purposes: The best code I have ever read was written with Sam ( http://sam.cat-v.org ) by Ken Thompson, the second best code I have ever read was written in ed(1) (by Ken and Dennis Ritchie), and the third was probably code written by the rest of the Plan 9 team at Bell Labs written using mostly acme ( http://acme.cat-v.org ).
P.S.: Both sam and acme were written by Rob pike (ken wrote ed), in Plan 9 circles some people would call acme 'an ide', and while I use acme, I would consider sam a better text editor in part because it is precisely just: a text editor and nothing else.
> Being able to trust the tool to have made the change correctly is invaluable in this process; it avoids a full unit test suite run after each step, and significantly speeds up major refactoring work.
If your unit tests aren't fast enough to run the relevant set after each change, you're most likely writing poor unit tests. And if you need to re-run the whole test suite after making a localised change that doesn't alter behaviour, then either your code is too tightly coupled, or your tests aren't really unit tests, they're integration tests. Maybe both.
I also have to wonder at the sort of attitude that prefers to have faith in Visual Studio or Eclipse, rather than in tests that specify the code's behaviour. And how do you know you didn't mess up using the refactoring tool? Faith in your IDE's correct operation is no substitute whatsoever for checking your code's correct operation.
This whole argument is ludicrous, anyway. A text editor that's been enhanced with powerful plugins is, as far as I can see, an IDE. My Vim setup has project navigation, method completion, build integration, you name it. I could even have automated refactoring if I felt the need:
In the end we all use editors with high levels of language-awareness, and varying levels of project- and build-awareness. Some of us put them together ourselves, some of us installed a complete package. Judaean People's Front, anyone?
It's not a matter of forgoing unit tests. Example: rename a method to something more clear. It's used 1000x in your codebase. You can do that in probably 5 seconds and know that it's done correctly. It says nothing about how the method functions, but rather that the code hasn't suffered because of this trivial operation.
Another example: you want to abstract a chunk of code into a new method. Easy, select the code, refactor it out and provide a method name. 2 seconds.
You want to reorder the way the arguments appear in the method? 1 second.
You want to know if a variable is in use anywhere? 1 second.
This stuff is painful without an IDE. I don't know what you do in life, but I find this functionality indispensable.
I was responding specifically to the somewhat alarming claim that faith in the operation of one's IDE is a substitute for regularly running tests. I wasn't denying that automated refactoring tools are nice to have; they obviously are.
Regardless, I don't really think that the examples you give have much to do with the IDE vs (editor+plugins) debate; they're to do with the amenability of one's language to static analysis. Certainly code modification features are available to statically typed languages that aren't available to dynamically-typed ones (and this may explain why users of the latter are less drawn to IDEs), but there are compensatory benefits to using a dynamic language. Let's not get into that one, though, eh? One eternal flame-war per thread is probably sufficient. :-)
Well, here's the thing. I don't have an easy way to do those things, so I rarely if ever do them. And guess what? I don't miss that at all.
And I'm guessing your fancy refactoring tools probably don't correctly handle the case where part of your code is in one language, which then automatically builds code in another language to compile into the main project. I've never seen an IDE that didn't get in my way with that workflow, and that's the secret sauce that my programming style cannot live without.
And I'm guessing your fancy refactoring tools probably don't correctly handle the case where part of your code is in one language, which then automatically builds code in another language to compile into the main project. I've never seen an IDE that didn't get in my way with that workflow, and that's the secret sauce that my programming style cannot live without.
Yes, they do. IntelliJ products are capable of updating XML bindings for renamed Java classes/methods, reasonably good guesses about JavaScript/Python functions used in maps (i.e. with their names used as string keys, outside of the AST).
I don't want to be judgemental here, but it seems like you yet have to meet the really big codebase.
Umm, your XML binding stuff is great, but I would need a refactoring tool to go into Perl code, figure out what bits of it are actually C++ that are going to be output later, and change that. I would be really, really surprised if you have a tool capable of handling that routinely.
It's true I've never really worked on a project with more than a million lines of code, though. My core work is more on the scale of 300,000 lines of code.
Good point. I made the argument under the assumption that the team is, in fact, good. I know that that isn't a common situation. Bad programmers with text editors write unreadable code. Bad programmers with IDEs write slightly more readable code with autogenerated try..catch blocks that do the wrong thing. There's no real difference.
I just downloaded PyCharm to use the 30 day trial; I specifically wanted to test its claimed Vim emulation plugins.
My first impression is that it's the standard, ugly Java IDE, but more importantly, it's awfully slow. Loading a small, five file project from a Github repository took me almost ten minutes to get to the point where the UI was done doing things and would actually respond to me in a reasonable time frame. But even after that point, just about every action, like opening files or even just browsing the window menus, is an exercise in waiting for the UI to catch up with what I'm asking it to do, and there's never any indication that it's actually doing something when I tell it to. I'm left just wondering if I need to try clicking again, or if I'm just being too impatient. I haven't even tried to edit an actual file yet, and I'm already frustrated by the software...
After reading this I looked and saw that PyCharm is on special for $49, which falls into my compulsive purchase zone! (I also have the significant remains of a 1 lb bag of bay leaves in my fridge which I ordered from Amazon under similar compulsive circumstances. That's a lot of bay leaves.)
I cook a lot and I was tired of running out and paying $5 for a jar of about 10 broken leaves. So I got a bag of organic turkish bay leaves from amazon for only $18. There must be at least 1000 leaves in the bag, which I'll leave to my children in my will one day. I'll drop the thread at this point, because I'm sure no one wants to hear more about my bay leaf glut.
Hm, cool. They must be doing some internal type inference, insofar that's at all possible, then, in order to add such refactoring features.
Thanks for pointing it out!
How does it work for you in practice? E.g. does it help you what operations are possible on a function argument? (inside the function definition, I mean)
PyCharm is produced by the same guys who created Resharper and a lot of other great tools like PHPStorm and TeamCity. Been using PHPStorm for nearly a year now, and I still find new things it can do.
Don't get me wrong, I love automated refactoring. It's fun to slice-and-dice a large Java code base using Eclipse, and to leave it tidier than you found it. I like the way that basic cleanup operations are fast and safe enough to do while browsing code.
But I maintain some large, older Rails projects in Emacs, too. And personally, I'd rather maintain a slightly hackish Rails 2.3 application than a typical Java application. Why?
- Rails has rigid conventions for database tables, model classes and controllers. Even in a strange app, the structure is familiar.
- The Rails application will generally express the same ideas using far less code. I can dive in, figure out everything that's going on, fix it, and get out. In Java, I often have to dig through various facade classes, gratuitous design patterns, and parallel class hierarchies. Maintenance is cheaper when the fugly evil all fits on one page.
- The Rails world is in love with cute libraries that (for example) reduce an entire application's access control to 20 lines of code. Even if I don't know the library, I can learn it, and then I've only got 20 lines of code to think about.
Mind you, I keep hearing about fancy new Java frameworks, so I suppose the Java world is getting better. And a truly awful Rails application—especially one without unit tests—can be a Lovecraftian horror.
But in the real world of at least semi-competent teams, it's possible to understand both Elicpse+Java and (Rails|Python)+(Emacs|vim|shiny Mac editor), and still choose the later, even if you're a maintenance programmer.
You are comparing Rails to Java, which is wrong because the first is a framework and the second a language. A fair comparison would be between Rails and Spring or Ruby and Java. And here things are different.
In Spring you also have clearly defined rules about the Model, View and Controller classes like in Rails. However you still get all the benefits of tooltip JavaDoc and auto-complete on . and Ctrl+Space (in Eclipse).
Despite the disagreement, I'll stand by my earlier remarks: Many popular Java frameworks involve a lot of boilerplate. I've never used Spring, so I can't comment on it. But in the last two years, I've worked on multiple GWT and Android applications, and both frameworks encourage people to write a lot of code for something as simple as MVC bindings. Seriously, GWT can easily require 10x as much code as Backbone.js + CoffeeScript.
I'm impressed by newer Java frameworks like Play, which make Java look terse and flexible. And I agree that refactoring IDEs are amazing tools, and well worth some sacrifices to use.
I merely disagree with skrebbel's remark that, The advantages of IDEs over text editors isn't look or feel. It's code quality. The are multiple, valid ways to achieve high code quality. IDEs are one of them. But there are real tradeoffs here, and other legitimate choices.
The code of the webcrowd is getting less maintainable as time goes by? Hah. I suggest you compare the code complexity of a webapp written using the state of the art 10 years ago to one of the same size using the state of the art today.
You will find that if you use tools like Rails and Django then you will end up with a much higher maintainability than if you used the tools available a decade ago.
Ah, now I see your point. I'm talking about code that survives for years. Not about making a new project every half year with the latest & greatest libraries of the time.
There have been some rants about unmaintainable Rails projects here on HN the last months. It's those kinds of projects I'm referring to.
I have to say I feel like I'm an oddball here for happily using Eclipse. With an SSD, it's incredibly fast and features like its static analysis (code completion and error checking), debugger, and even 'open resource' improve productivity.
That said for quick scripts I'll just use something like kate or vi, but for a large project, the IDE greatly simplifies things.
I use Eclipse heavily with a few plugins: m2eclipse, subclipse, EclEmma (code coverage), FindBugs (static analysis), and CheckStyle (code rule enforcer).
Being able to navigate the codebase blazingly quick (go to method implementation, class definition, etc) and get a better overall picture of the class (Outline provides the list of all methods, constructors, member variables complete with access modifier) is definitely more productive than anything else.
I'm not a huge fan of IDE's in general, but Eclipse w/emacs+ keybindings is actually a pretty good compromise on larger projects. It gives you the nicer feel of navigating the code emacs-style, but you still get all the advanced features like code completion and refactoring that Eclipse provides.
Also, for Java projects Eclipse w/emacs+ is way nicer than vanilla emacs(at least for me)
What about code debugging ? How do you guys debug code on vim or ST ? prints, echo, var_dumps?...are you kidding me ?
The main reason I'm still using IDE is mostly because of code debugging and code browsing. If I could debug code on vim or ST and do code browsing I would switch in no time.
You have heard of debuggers, right? Just because every IDE includes one doesn't mean they don't exist outside of IDEs. (For that matter, when I used to develop on Windows, I pulled up Microsoft IDE for debugging only.)
Honestly, though, probably 80-90% of the time I do prefer printfs for debugging. A debugger is great if you can easily get to the problem area. If you're just trying to figure out what is going wrong with complex code, dumping a lot of information in a format you can easily look over with a text editor is generally a superior approach.
I've found those times people can't figure out why code doesn't work at all is almost always related to over reliance and trust of what the debugger is claiming to be truth.
It can be faster, but output (printf or more complicated state outputs) seems to always be more reliable.
gdb is terrible compared to a good integrated debugger. Honestly, its laughable that people try to compare the two. /coming from someone who used gdb for years
Komodo Edit is a really good Open Source editor I recently stumbled into. It gets all the basic editing functionality right (and I am saying this as a VIM user).
For any thing else, I believe the OS is the IDE.
An OS is in particular an integrated development environment.
It contains all your favorite tools to get the job done.
To insist having all the functionality you need stuffed into a single unified plugin-ed application is like insisting to get the entire web into Facebook - it sucks.
That said, I recently had a surprisingly pleasant experience developing a C# project with VS 2010.
As an avid Emacs user, because I like tinkering my development environment. It may not always be productive, but it sure can be fun!
Please do not underestimate the long term benefits of tinkering and discovering new things in the process. For me personally, I noticed that those kind of activities might not seem productive in a short term, but tend to give me important insights (and productivity gains) in other areas of my professional life later on.
That's exactly why I threw away any hopes about Espresso, Coda and perhaps even TextMate, to have more than basic non-semantic features and syntax highlighting. Sure they are pretty and Mac native but I want functionality, not eye candy.
Maybe I'm too used to VS+Resharper and IntelliJ and don't want to waste my time reformatting code by hand. With those two editors I can reformat HTML inter-mixed with Javascript and CSS and even get colored curly waves below spelling errors and calls to functions that do not exist. They are damn good tools for a pedant. :)
Being a Lisp fan for many years(programmed quite a lot in CL, owns every cool book about it), I've come to the conclusion that I think I prefer statically typed languages, especially those with keywords like "var", "val", "def" etc so I don't have to type out something twice. Limitations can be good, it stops me from being too clever "in the small".
Some languages, especially those from Microsoft, are designed to be written in an IDE. That is not a bad thing IMHO. The amount of insight something like Resharper gives you is sometimes totally awesome. On several occasions Resharper has claimed parts of an condition is always true/false, and it's often not obvious but I've never seen Resharper being wrong on those.
I'm now more pedantic than ever with details.
That said, it's very handy to have TextMate in the Dock and in the command line path. I've used vim and emacs a lot in the past and like them too.
I find it interesting that a lot of folks in this discussion seem to accept that an IDE is advantageous for cases involving a large code base or a statically typed language. Why is an IDE any less appropriate to use with dynamically typed languages? A lot of the niceties provided by a good IDE for statically typed languages are still available for dynamically typed languages. For me, the case in favor of using an IDE is the same regardless of the language. The "killer features" an IDE provides are: autocompletion (i.e. intellisense style) and code analysis as you type. I see no reason an IDE cannot provide these features in a dynamically typed language.
Serious question, to those of you who believe an IDE is not useful for dynamically typed languages: Without intellisense like capabilities, how do you remember everything in the language's standard library and for that matter any non-standard libraries you use? Looking up a method or property in the documentation everytime you want to use it seems horribly inefficient. That's the type of job that is perfectly suited for a computer. It seems incredibly ironic to me that computer programmers are manually performing steps that a computer could easily be performing for them. As Albert Einstein said: "Why should I remember anything if I can just look it up?"
As some background I think Vim is a great editor - I use a Vim plugin in Visual Studio all the time, and I often use Vim for editing simple files. I think the addition of omnifunc in version 7 brings Vim a lot closer towards becoming an IDE. Unfortunately Vim's omnifunc capabilities are limited. Contrary to what you'd be led to believe by a lot of well meaning folks - Vim's omnifunc capabilities w.r.t python are nowhere near as capable as the same functionality found in Visual Studio or Eclipse.
I tried an experiment, wondering if I really was more productive in an IDE, and timed myself coding the solution to a couple of simple problems, using python in Visual Studio - I waited two weeks, so the solution was no longer fresh in my mind, and then coded a solution to the same problem again using Vim (note that I even gave Vim the benefit of the doubt here by using it second). For every one of the problems I tested I was significantly more productive in an IDE - sometimes by a factor as high as 2 or 3 times. Anecdotally I think the two features that make me so much faster are intellisense, and code inspection. Having errors appear automatically without the need to run my code is a huge time saver.
I think in the end it's not really about an IDE - it's about the availability of good intellisense like features, automatic code inspection, good refactoring tools, and a good debugger (integrated or not). If those features are available to me when I'm coding then I'll be happy and productive. If they're not then the tools I'm using are inadequate. As much as I would like to use Vim exclusively - unfortunately those features are not available (or do not work well) for the languages I predominately use (C# and python).
Does anyone here consider Emacs an IDE? Because that's my reason: I can give Emacs all the specific 'IDE features' (whatever those are... probably 'enterprisey' things) I want and it's still Emacs.
You're arguing definitions while the grandparent argues features. I do believe that emacs can be considered on par with an IDE in terms of possible features. I personally prefer vim, but that's a completely different story.
Sometimes you want every feature. Other times, you want something that might have fewer features, but might feel better. When the iPhone came out, it didn't have a keyboard, it didn't have 3G, etc. Yet, it just felt better - the size, the icons, the way you interacted with it. I think that editors like Sublime Text and TextMate really go for that feel.
Users seem to see Sublime Text or TextMate as just missing a feature or two while looking at Eclipse and finding that it has the features, but lacks the basic joy of interaction. They also feel that it would be easier to extend something like Sublime Text than to fix the feel of Eclipse. Personally, I'm starting to warm to Eclipse as I use it and I appreciate the features it brings to the table, but I don't ever think I'll see Eclipse as "feeling good" in the way that TextMate feels right.