Human-Centric Tools for Navigating Code [pdf]
web.eecs.utk.edu
web.eecs.utk.edu
Developers spend a lot of time and effort navigating code. I designed three tools for code editors to help with this: (1) Patchworks for navigating among your already opened code documents, (2) Yestercode for viewing previous versions of a code document, and (3) Wandercode for exploring code based on structural relationships. These tool designs were influenced by several empirical studies that I collaborated on regarding how developers seek information in code.
For each tool I evaluated them with a lab study (two for Patchworks) to measure their affect on things like task time, task success, cognitive load, developers' opinions of the tool, and qualitative observations of how people used them.
In the future I would really like to release them to the public as VS Code or Atom plugins.
I think there is a huge amount of progress to be made when contemplating code from the "read and comprehend" use case rather than the edit use case.
Personally, I've taken to using command line syntax highlighters to render code to svg images, which I then open in a vector graphics program and mark up using a pen tablet (wacom). It reminds me of the days of printing out on a line printer and marking up with red pen offline. I just love it.
What code navigation features are part of literate programming and would be appropriate for inclusion in this dissertation?
Do any of those actually implement Literate Programming as DK intended? As in "you can move the code around to wherever makes most sense for your narrative"? As best I know, almost all "literate programming" today is just the intermingling of code and text blocks (e.g. Docco et al) in the same order the code would have to be anyway (i.e. there's no TANGLE, only WEAVE.)
That could be.
Are there any novel navigation approaches that have fallen out?
In one of the "internals of TeX" videos, Knuth mentions how when he got to a particular section of the code, he had to move to a larger desk (yes, desk) so that everything could stay in sight. If you're comfortable with such a style of programming, paper gives you a lot of freedom: you can have a very large number of (literal) "tabs", cover parts of pages, make throwaway annotations while reading, etc.
Anyway, as far on-screen navigation goes, with pdfTeX there are hyperlinks: you can navigate from the mention of any section to its actual code, and backwards. (E.g. start at section 4 http://texdoc.net/texmf-dist/doc/generic/knuth/tex/tex.pdf#p... and go to one of the mentioned sections, and back from them to 4.) (It would be nice for there to be even more hyperlinks, but no one seems to have implemented them as Pascal isn't exactly popular these days.)
And to answer your question most concretely: the (recent) online version of the Literate-Programming book Physically Based Rendering: From Theory To Implementation has some innovative navigation aids IMO. (Random "page" / section from the book: http://www.pbr-book.org/3ed-2018/Camera_Models/Realistic_Cam...)
Is that code extension already available somewhere?
If anyone would like to help with a VS Code or Atom plugin, let me know :)
The Wandercode interface on the other hand I can't find a quick replacement for. From a quick skim it seems like it hits a good balance of making navigation easier without putting so much information on the that it becomes noise. Really would like to try that out!
It is possible that Wandercode may be released to the public in the near future. It is an Atom plugin in working state, it just needs some fixing up on how it generates the call graph to make the recommendations. Stay tuned!
Wandercode looks very similar to an idea I had for navigation while working on a task that was 100% code review and comprehension. I wanted similar graph displays for inheritance, and data flow through variables. I envisioned all of this displayed together in a large window, basically with multiple DAGs overlaid on each other in different colors. Now, seeing Wandercode, I imagine a handful of small, "localized" displays, focused on a selected function/class/variable. Any thoughts on that? Or are function calls more interesting for you?