Thursday, February 19, 2009

Web-based IDEs

Came across a Slashdot article about Web-based IDEs. The posting also listed some additional pointers to articles and products (Bespin, Eclipse integration with Bespin and a Ruby on Rails example) related to the topic.

From a technology point of view – this all sounds quite interesting and a testament to the amazing services that can be delivered via the web. However, I wonder how we can leverage this approach to truly benefit those that would use such a Web-based IDE. What’s the value to the user?

Some initial thoughts on the topic – first looking at some of the positive aspects:

  • No monstrous downloads
  • Simplified deployment
  • A workspace that is available from any pc. Whether the user wants to access code from a desktop, their PC or some other computer, they can get to their work and their environment.
  • Low powered machines can be used for development. Could even try to do some work via a netbook (limiting factor here would be the screensize)
  • Easily leverage cloud based infrastructure for deployment environments. Rather than looking to run an IDE and a test App Server, Database or other services locally, can easily integrate with such services via the cloud. Latency between these components and the IDE would be negligible as the heavy communication would be within the cloud.
    • In addition to simplifying the developers workstation, could easily speed up the development/unit test cycle as more powerful processing could easily be thrown at the problem – in such a way that it would be less expensive than providing each developer with the horsepower needed to replicate the experience locally (which would be cost prohibitive) This could benefit both the individual developers as well as the development team.
  • Support for pair/group programming. Why limit the collaboration to just two? Many developers could connect to one session to work together in creating a solution. In addition, the pair/group would not have to be co-located, or even on the same network.

And of course, there are a few negatives as well:

  • No network? no development. There would need to be support for a disconnected usage model.
  • Richness of experience? Could a powerful debugging be provided? What about richness in using abstraction and simplification to increase the productivity of developers? We continue to expand the richness of the experience of what can be done via a browser, however, can we compete with what can be done with a modern IDE? (Perhaps the question is, should we?)

Running a bit with the idea – how would a services based approach then impact the implementation?

  • Would compilers be a service that you can plug in to your development process as needed? A DSL?
  • Could you easily connect in an 3rd party provider for test case generation? Test case execution? Transformation from high level model to executable code?
  • Could a service be used then to transfer and automatically deploy a finished app (service?) to somewhere else in the cloud?
  • Services for configuring/setting up the environment for new projects?

Perhaps some of the limitations of the environment and web hosting will drive us toward more and better use of DSLs to keep the environment simple yet powerful? Also, would patterns and transformations then become additional services that we can more easily integrate and weave into our development efforts?

All in all, sounds like a great idea. Hopefully as we evolve and mature the approach we can do so with a focus on providing value to the users of the tool(s) – rather than just doing something because its fun to write a cool app.