In the last year or so, I've become more convinced that detailed, accurate code search technology is critically important to developer productivity, code reuse, and helping to squash pesky bugs on projects/pieces of code that have subtle inter-dependencies. I also believe that, properly implemented, social knowledge management/networking can be applied to further enhance the benefits of accurate code search.
First, let's start off with the major players:
Google does a fairly good job of indexing existing Open Source code from the net, but their interface relies too heavily (in my opinion) on regular expressions, and doesn't provide the flexibility of search targets that Krugle and Koders do. Additionally, Google currently doesn't offer an Enterprise version of their tool for 'behind the corporate firewall' usage.
Now is the time for full disclosure - in my role at my employer, I helped evaluate Koders vs. Krugle. While they both provided a lot of similar functionality (easier search interface than Google, Enterprise versions, limited reporting, syntactic understanding of different programming languages), I ended up recommending Krugle because of the following factors:
- Deployed as a network appliance - based on Open Source components like Linux and MySQL
- Early stage development - the ability to help shape and define this product going forward
- Innovative features such as 'tagging/annotating' files, link creation for sharing, and the 'Show Clones' option
- The ability to have 'related information' easily at hand in the interface (SCM checkin comments, tech pages, related code from external sources)
Now, to be fair, it hasn't been a completely smooth ride during our Beta deployment of Krugle, BUT the team from Krugle has been very responsive to our needs, and have queried us on numerous occasions for input into their product planning process. In a lot of respects, it has felt more like an Open Source community engagement than a traditional vendor/customer model, and I think that in a nascent field like code search, this is extremely important.
Developers in my organization have given a mostly positive review to this initial trial installation, and have provided some feedback which we have shared with Krugle. I mentioned earlier the social knowledge management/networking aspects I'd like to see applied to code search. These fall into categories such as 'voting', 'tagging', 'enhanced annotation', and 'collaboration/discussion'.
I'd love to see the ability for users of systems like Krugle to 'vote' a piece of code up or down. Doing this would affect not only the order a piece of code was returned in while searching, it would give the searcher some measure of what others thought of that particular source code. While Krugle and Koders do provide a rudimentary form of 'tagging', I'd like to see the ability of that tagging infrastructure to be pluggable, to allow integration with social bookmarking sites such as del.icio.us, or internal installations of Open Source equivalents like Scuttle.
Krugle already provides for 'notes' or 'annotation' to a piece of code, but I'd like to see the ability to have URLs added to these notes, and have those automatically show up in the related information 'channels' that are already provided. Finally, the ability to start ad-hoc collaboration 'conversations' (forums, IM chats, shared code viewing sessions) directly from a file listing, or even from search results, would be a useful feature, especially for distributed development teams.
I believe that code search technologies are on the verge of drastically improving developer productivity, but there are cultural barriers that still need to be broken down in enterprises, since peer review and collaboration are not as widely ingrained in those types of development organizations as they are in the Open Source world. I certainly hope that systems such as Krugle can continue to evolve and provide value to independent developers and organizations alike, while helping to break down those barriers.