Why don't we have a lot of good web-based IDEs? Which aspects of the system make it difficult for IDE to be implemented as a web application?
Modern IDEs are wrappers around more primitive tools (ie local compilers and debuggers) so you can't really answer the question without considering the limitations of pure web-based development in general.
One huge reason web based dev would be limited would have to be the inability to access local resources:
- Can't communicate with local device hardware
- Can't develop desktop apps without a web-based emulator
- Can't access my local file system.
- Can't setup a socket interface bound to my local network
Some other questions would have to be answered about a web-based IDE's ecosystem
- How do I install dependencies (ie python libraries via a web interface?)
- Could the IDE work with all the tools I need?
- How do I configure required tools via a web interface? How would I configure say reddis? How would I install boost as a C++ dev? What if at the same time I need to do QT dev?
- Will I be able to use arbitrary legacy code/libraries. I was told there would be FORTRAN :).
- How do I deploy my code?
- How do I perform remote debugging on a customer's deployed process (whatever that is equivalent to in this ecosystem)
In short I'd need a different model for development that didn't require config files, use things like stdin/stdout, etc. It'd have to be a web interface to a full VM. How would we do that? All the legacy work to do software installation etc is built around the desktop/command line interfaces.
So you'd be limited to a specific subset of programming. Probably limited to a pre-efined scope in pre-installed tools and libraries. Which likely is fine in a very narrow sense. I could see a web IDE for quickly standing up web apps. But Desktop Apps? Specialized apps (desktop or otherwise) that communicate with a specialized hardware? Apps that live in a very specific network enviroment? Apps that rely on very specific libraries?
I'm excited about the possibilities, especially coupled around VMs like EC2 instances. Some web tools built around your EC2 instance to aid in general development might be a cool area to work on. Don't want to limit the possibilities, but there's plenty of challenges that make this very hard compared to using a desktop dev environment.
Why? Because they are solving a problem that doesn't exist. The only advantages over a downloaded IDE that I can think of is they occupy less disk space. However, as the price of disk space has dropped to $1/10 Gb, I don't see that as an issue. For those who regularly write code, the disadvantages of Web-based IDEs are that they are slower and less capable compared to free IDEs like Eclipse.
There are plenty of web based IDEs. Some of them place an emphasis on collaborative coding. I think that whatever makes you think there aren't a lot of "good" web-based IDE's is probably the subjective definition of what "good" actually means. What features are missing etc...
Personally, I'm always going to stick with my native desktop IDE.
The problem, I think, is that there is so much complexity involved in developing any non-trivial application that a web-based IDE is just not the right environment for it. If you're looking for specific aspects of an IDE that are difficult, I would say debugging and deployment/hosting are the hardest to do over the web.
Then what happens when you need to access features of the web-server that they haven't thought of exposing via their web-based IDE? There are so many configuration nuances for a web-server that in the act of exposing them all via a web IDE, you might as well just give the user remote-desktop access to the machine. And don't even get me started when you need a multi-server environment (i.e. web-server, SQL server, services server, etc.).
This is all assuming that you are working in the web domain. Now imagine creating an IDE that can ALSO support desktop development (i.e. service components, GUI apps). This adds an even greater level of complexity when trying to debug a desktop app via a browser.
Doing these complex tasks over-the-wire is probably possible, but just not practical. Also, the user experiences of web-based IDEs does not seem like it would be responsive enough for the type of productivity that today's developer expects from their IDE. Productivity tools such as Resharper (Visual Studio) require such high processing power that this behavior would be pretty hard to duplicate on the web.
If you aren't compiling and running code on your local machine, then a web IDE does make a lot of sense. For instance, your IDE could set up an Amazon EC2 instance for your development, compile code there, and deploy it. This is nothing that a traditional IDE can't do, of course; in this situation, both web based and traditional GUI IDEs are usable.
However, developing any IDE to the Eclipse standard is difficult. Adding on this debug-to-cloud capability is added effort. There simply hasn't been enough time with a cloud emphasis on development for people to develop high-quality web IDEs.