We don’t need an online IDE!

I’m on vacation this week, and it’s great. I usually try to take at least one week off in between missions because it’s the best time to do it. Nothing to worry anymore about the one before, no knowledge of the one ahead, my head is free to dream and wander around and I have plenty of time to move forward on personal projects.

Now beyond my work on betRway.com, I’ve been thinking a lot today about the idea of an online development environment. On my last project, I’ve seen a lot of the possibilities AND limitations of current RIA technology, and more specifically the most advanced one IMO, ie Flex. Combine that with some of the modularity offered by OSGi on the server-side, the productivity brought by things like Grails, and more importantly the promise of unification of all of those technologies under SpringSource’s sponsorship… and it’s starting to become more and more interesting.

So I googled “online IDE”, and I found this great article on DZone, which is a few months old but gives a lot of links to some of the services that are already offering both niche and generic online environments. I’ve browsed through all of these and I have a bad feeling of “déjà vu”. It’s like those mobile web sites that try to reproduce a trimmed down version of their web counterpart: it doesn’t really work, and worse, it doesn’t even use all the potential of mobile platforms. It’s like we’re trying to copy our desktop IDE onto the web.

But when you really think of it for a moment, the reason why we need version control systems for example, it’s because everyone is working on its own, and we need to synchronize at some point. But this constraint almost disappears if we’re all working online. And online development can have impacts of similar magnitude on things like continuous integration, deployment, monitoring. Some of these tasks don’t even make sense anymore. And how about several programmers working on the same artifact at the same time? And think about the computing power that could be available for code generation or compilation…

The way I see it, even the programming languages that we use today are not designed to work like that. Think of Java packages correlated with file system directories. Think of all these destructured text files that our IDE’s have to parse and index to make some sense out of them and allow us to navigate through them: what if text files are replaced by databases at some point?

I’m just thinking out loud here, but I’m wondering whether we shouldn’t forget about everything we know in terms of programming paradigms, and get back to the objective: producing working software collaboratively. What would be the best and simplest way to do that, knowing that we are starting to have all the tools we will need in order to move our workspace into the cloud?

As far as I’m concerned, I already know what I would like in such an environment:

More graphical programming, especially for high-level design, because visualizing is still the most efficient way to create and design IMO.

No more boilerplate tasks like “check out”, “check in”, “run tests” and things like that. Just “share my code in the public workspace” and “test on save”.

The ultimate reproducible build environment: everyone is using the very same frameworks and libraries at any time. No more environment variables or shell idiosyncrasies.

Smart client stuff, with offline mode, auto-synchronization and conflict resolution when back online.

Methodology directly integrated into the environment, not some small window on the real thing. Issue tracking, user stories, all of that at your fingertips.

In fact, we don’t need an online IDE, not in the sense we think of an IDE today on our desktops. We need more than that. We need a collaborative environment that uses the full potential of the cloud to help us produce better software more quickly.

What do you think? What kind of high-level functionality would you like to see in such an environment? How do you picture it?

I’ve been thinking about this for awhile now, and actually have a few ideas that could make what you’re talking about a reality. Unfortunately, it will take more work than one developer is able to give in free time, even taking the 37 signals approach!

One thing that’s tough is the inherent limitation of running an IDE in a browser. Even if you’re using AIR, you have to be EXTREMELY careful when programming a resource intensive, all-day use app like an IDE in AIR. I shudder to think of how much attention would need to be paid towards garbage collection etc.

The question is why is your everyday IDE so resource-intensive? Couldn’t it be because we let them evolve that way because of their desktop nature? For example, one of the things that eats a lot of memory in an IDE is those big indexes that store your code structure in memory to ease code navigation. Wouldn’t it be possible to skip that step if we store our code in a structured way in a database?

And wouldn’t smart client features open up new opportunities: constant local versioning with remote backup, automatic synchronization with conflict detection, collaborative edition…

Hi, on Online Development Environment, I am curious what you are to say about our project, Kodingen.com. It is a tool where you can connect your FTP’s, create databases, have your SVN and bugtracking tools -the minute you create your account. Very soon you will also be able to collaborate with your team instantly without exchanging any passwords.

It seems nice. But it seems to me like it’s limited to scripting and web development. Am I right.

Plus, that’s a good example of what I’m talking about in my article: Kodingen is very nice and well-designed. And it’s pragmatic too. But I think the concept, the approach is not radical enough for developers to move massively to online IDE’s. We need to reinvent development environments like Google Wave reinvents online communication.

You re totally right, I can’t agree more. However, this beta release of Kodingen appeals to widest audience on the web, PHP-Open Source Community. In future releases, we will radically change the development environments by including Linux-distro’s in compiling of the code. It is rather hard topic for me to include it in here, but simply, you write your code, choose dev environment and your code will compile into whatever you choose in less minutes than you click and wait for deployment on your desktop computer. One of those tabs you see on Kodingen will be SSH or RDC to your dev environment, if webservers are not what you are programming on.

I think Google Wave is not dead. The public face of it, the emerged part of the iceberg, the chat part is dead. But not the protocol, for me that’s the most important part of it, this federation protocol based on XMPP is very technical but very innovative too and that’s where it will survive.

check out http://www.krazykoder.com
coders can compile & run full-fledged projects online free.
plus you can browse, vote and refork others’ projects too.
seems like a great way to learn a new coding platform, worth taking a look.