I often find my fingers stumbling during long coding sessions as I Alt-Tab (or M-Tab in xmonad) to various windows I have open that reference documentation, Google searches, Stack Overflow, and the like. I may also have local documentation that I keep around in case I am coding off-line. Third, I may have a slew of buffers open in emacs in which I am referencing previously written code snippets that I need to incorporate into my current work. It’s overwhelming! I need information overload control.
I brainstormed what it would entail to consolidate the following items, and my current solutions for each:
- Access to updated documentation, blog postings, forum threads, and general help from others via the Web; Google.
- A way to easily organize and access code snippets; I started a blog for this, which probably wasn’t the best idea. I also use grep when applicable.
- Documentation for all your languages, frameworks, and tools; Google, Firefox bookmarks, and delicious.
- Unlimited access to standard algorithms and explanations for them; Java api, Python docs, and, most importantly, Wikipedia.
- A way to cross-reference language functionality (I know how to do this in language X, how is it done in language Y?); just an idea. This is always the most difficult when picking up a new language.
- A binary and scientific calculator; Google, and the built-in calculator for Windows or Ubuntu.
Ideally, this is accessible in on-line or off-line mode. The idea is similar to a full-featured IDE, but not. It’s not meant for coding, compiling, and sharing projects. It’s meant to be Alt+Tab-able to for speedy access. I envision some sort of functionality in which a user can cut-and-save snippets of information a la my friend Alex’s Snipd. This would most likely be done within a browser as a Gears website, caching any on-line content. Does any such application exist?
For the purposes of this post, I am going to call this idea “Project X.”
Right now, Google is basically serving as the gateway for most of the tasks Project X accomplishes. Obviously, Google is not intended for programming, but information retrieval. Project X is a vertical form of information retrieval for the specific task of programming. Google could certainly serve as a single component in the scope of X, especially if X is Web-based, allowing code snippets and other content found on Google to be grabbed, stored and organized in X.
Another example of a useful reference is Stack Overflow. I was recently converted to Stack Overflow when a question I had been seeking to answer for days was answered within five minutes, by two separate contributors. It is certainly filling a demand that was highly needed by the programming community–consolidation of Q&A for programming questions–but it is limited in it’s extent because of the service it’s intended to provide. It lacks the functional capabilities I cited in X (calculators, documentation, algorithm reference), but it can, like Google, be a single component in a larger toolset that X would provide.
Now, suppose we have consolidated a slew of diverse information in our person Project X database: code snippets in Java, Python and Haskell, documentation for Django, Python, the Java STL, MySQL, etc., along with perhaps some Quicksort optimizations and a graph of all the big O denominations. Bear with me here. What’s the best way of accessing this heterogeneous information?
Telepathy, of course. Pragmatically, I like the auto-suggest methodology that Google has made ubiquitous in Google Suggest via Search, Maps, Firefox, Chrome and others. Basically, type in what you want, and it will find it. Stack Overflow implemented this for when users ask a question with aplomb (in fact, Joel Spolsky has stated that this alone has eliminated many repeated questions from being asked in the first place. Source: unknown.). Suggest utilizes quite a lot of metadata for it’s search, not just restricting users to the main content of the search, but much more. I envision a similar utilization in Project X; add searchable tags to snipped content, search URLs for website-related content, search content categories, and more.
In fact, Project X could even go as far as having machines that crawl code blocks that users save and attempt to identify the language in which they were written. By extension, X could also extract useful tidbits by crawling all saved user data to find patterns related to key infromation and thus improve the retrieval process to make it “telepathic.” But this is probably overkill.
Any ideas? What would your ideal coding assistant entail?
EDIT: Ubiquity from Mozilla Labs demonstrates the exact paradigm I am describing. It utilizes general nformation sources, such as Yelp, Wikipedia, and Craigslist, while my idea is oriented towards programming support forums and documentation.