Will
09/24/2020, 1:06 AMKartik Agaram
Chris Maughan
09/24/2020, 6:33 AMogadaki
09/24/2020, 8:50 AMJared Windover
09/24/2020, 1:58 PMHarry Brundage
09/24/2020, 4:16 PMHarry Brundage
09/24/2020, 4:17 PMHarry Brundage
09/24/2020, 4:18 PMHarry Brundage
09/24/2020, 4:21 PMKartik Agaram
Jimmy Miller
What are some ways in which programming environments could help us record this info / answer these questions without requiring additional effort from the author?I think this is particularly interesting. We all know that getting people to provide documentation is hard. It is even harder to make that documentation good. Short of completely automatic though, what if we could make this easier? What if we could make it more part of your current flow? What if you didn't have to leave your editor, but you also didn't have to mess up the code by leaving some big huge long comment in the middle of things? What if you could decide that something was a good example for later and save it off with a single button press? What if you could make tours through your code bases, or document in those code bases various ways the data flows? What if you could make an interactive introduction to codebase. I think these are the sorts of starting points we should consider. Once we can make these things work and work well manually, then we can start plugging in automations, start making automatic curation.
larry
09/24/2020, 9:49 PMWill
09/24/2020, 11:30 PMJimmy Miller
Will
09/25/2020, 12:14 AMKartik Agaram
Jimmy Miller
Daniel Garcia
09/25/2020, 9:44 PMI've been thinking lately about how our minds have infinite levels of conceptual hierarchy, but our tools are inevitably limited to some finite number. That discrepancy inevitably leads to loss of information and entropy.
Kartik Agaram
x
in some node of this linked list, so let's assume it accesses it in all nodes. That sort of thing.
Regarding the specific idea he proposes: it doesn't actually result in a very idealized commit log, because a) you still have to provide a heuristic test sequence, and that's non-trivial, b) lots of times you get a more comprehensible result if you combine sets of tests in a single 'idealized commit' (but that blows up your search space for a) even more), and -- most important! -- c) no program has complete test coverage. If you focus only on tests you lose valuable insight along the way.
Me, after spending 8 years trying to treat programs as black boxes and apply tools to them, I go back to the thing he dismissed at the start. There's no way to understand programs efficiently when the author didn't design for it from the start. If a program had multiple authors, it's as easy to read as the author least interested in comprehensibility made it. Programs have to be designed for comprehensibility. So toss out the modern social organization and its incentives for creating programs primarily as black boxes for people to use.
(I'll share my approach to idealized commit logs for the umpteenth time, just in case somebody hasn't already seen it: http://akkartik.name/post/wart-layers)
@Daniel Garcia I don't recall the context at work where it came up, but I'm increasingly noticing myself constructing larger refactorings out of what my Java IDE provides, like renaming variables. I renamed a variable here, another variable there, did a few other things, and the end result was that I split up a class that handled some input space into two classes that partition the space between themselves. It would be nice (in a first world problems sort of way) if that was obvious in the diff. This isn't a strong opinion, just a random idea.Chris Maughan
09/26/2020, 6:57 AMWill
09/26/2020, 6:04 PMChris Maughan
09/26/2020, 9:08 PMJimmy Miller
There's no way to understand programs efficiently when the author didn't design for it from the start. If a program had multiple authors, it's as easy to read as the author least interested in comprehensibility made it. Programs have to be designed for comprehensibility. So toss out the modern social organization and its incentives for creating programs primarily as black boxes for people to use.I'm tempted to agree. But I think the key word here is efficiently. I have worked in codebases that were clearly not meant to be understood (one was decompiled source). Where the code was absolutely insane. Understanding them was very very difficult and took a ton of work. But what I found in the end was that the tools I really needed to capture this information weren't there. I could of course write docs, and I did. But that wasn't enough. Nor was my coming to an understanding of the code aided (much) by tools. Of course, a slice wouldn't have told me everything, but it would have helped me start with a simplified case. Being able to ask counterfactual questions of my program would have aided me in understanding. In general, I can think of a number of things that computers are fully capable of that would have made my journey of understanding condensed. And then, once understood, I could convey some of that to people, but helping them get into the right states where they too could repeat my learnings. Designing programs with comprehensibility from the start is definitely a goal. But I just don't think it can be our end state.
Jimmy Miller
Kartik Agaram
Will
10/08/2020, 6:55 PMKartik Agaram
Jimmy Miller
Will
10/08/2020, 7:49 PMJimmy Miller
Will
10/08/2020, 7:59 PMWill
10/08/2020, 8:00 PMKartik Agaram
Jimmy Miller
Kartik Agaram
Jimmy Miller
Will
10/09/2020, 12:10 AMJimmy Miller
Kartik Agaram
our minds have infinite levels of conceptual hierarchy, but our tools are inevitably limited to some finite number.Perhaps Smalltalk's object model + GToolkit is able to scale here.