Side by Side by Side
Years ago, back in the days of VGA and 486dx2 processors, I spent a lot of time in apps written by hand in assembler. To today's programmers this sounds ridiculous. My screen was typically 3 panels of text; one for code, one for registers, and one for hex dumps of the binary. This seemed like a really good idea at the time. I didn't need a bunch of windows, just 3 well laid out zones side by side by side.
Some embedded developments I play with are traditional Forths. These programming environments don't suffer files gladly. Rather real men edit raw blocks of memory bare knuckled and raw. Since we edit a screen of memory at a time, there's little room on screen for comments. That's ok, because each of these environments has a "shadow block". For eacheven numbered page of source, there is an odd numbered shadow block of documentation. It is like writing code on the front of a 3x5 card, and your docs on the back. This seemed like a good idea at the time.
In Self we can add annotations to just about any object in the system. These documents are presented in collapsible sections adjacent to their code blocks. As the code blocks themselves are collapsable too, the whole interface is made up of little panels of slots, their definitions, and the associated annotations. Since each reference also produces a visible link which draws a line to it's target, we can trace explicit relationships easily. This seemed like a good idea at the time.
So what do I do all day? Program in vi, keep a separate window for docs, and nothing is shadowed, linked, or debuggable. Well it seemed like a good idea at the time.