I had this idea the other day, maybe someone else has to. I thought, if we have such great source control providers such as Git/Hg, why can’t an IDE be a time travel device?
Don’t you think we spend a lot of effort trying to understand a codebase? Someone new on a team. A contributor to a big OSS project. Anything involving a piece of code. How was it built? What came first? What came later?
I thought, if someone made an IDE that tracked everything that happened or took “snapshots” and coupled that with a VCS, you could literally time travel through your codebase. Fast forward, play, rewind, scrub, whatever. Someone new to the project? They’ll play it from the beginning, seeing what classes you made, how you structured everything.
Furthermore, I remember seeing a proof of concept where you coded by linking off of existing snippets, like bubbles. It was some IDE concept, it was pretty neat. If you tied something like that to this time travel concept, you’d be able to semantically see links between code (which means you can visualize it).
I don’t think it would be incredibly difficult to do this as a standalone app built on top of a VCS. Point it at a repository which has all its history, and you can “watch” it with a playback interface. Of course, it depends on how frequent the commits and whatever, which is why an IDE or something would be way better.
I think there are many things we could be doing to our IDEs that would make them more like interactive, social applications. Someone else working on the same file you are? See what they’re doing next to you in the editor, chat with them. See where your team is in the codebase, what branch, what they’re doing, etc.
It seems like IDEs go out of their way to discourage communication; instead we’re forced to communicate via email, IM, or TFS work items, outside the codebase unless we comment which different people do differently. Why shouldn’t a “codebase” be where all that happens, with annotations, discussions, and a social context?
Overall, I think there needs to be a radical change in how we think about coding… but maybe I’m just insane. What would an IDE look like if there were no “files”? We’ve been thinking in files for a long, long time; maybe that’s not the best way to write or think about a program. Sure, the output can be files (for the web, distribution, etc)… but maybe that’s not how you write it.