3. Computers are not as good at symbolic reasoning (except theorem provers), and concrete tracing is probably a simpler version of abstract tracing (ie where variables are unspecified and intermediates are properties).https://twitter.com/wcrichton/status/1351684351784849411 …
-
-
Replying to @wcrichton @geoffreylitt
So where does runtime vis fit: if tracing helps us understand how a process works, vis helps us understand what the process produces. These are both important! If I just show the data, the process is obscured, and vice versa.
1 reply 0 retweets 0 likes -
Replying to @wcrichton @geoffreylitt
For example, I played with a Rust game engine (Bevy) recently. Lots of complex interlocking runtime pieces, so my first instinct was to build a visualizer for the world state. Then I ask "where does this Light get a Transform component?" And then I'll start tracing the codebase.pic.twitter.com/mxDGV9Rmll
1 reply 0 retweets 2 likes -
Replying to @wcrichton @geoffreylitt
It's fundamentally hard for runtime vis to capture time, causality, dataflow, abstractions, etc. in a way that's (IMO) easier to see in a program text. Sorry the explanation is a bit sprawling
but that's my general sense.1 reply 0 retweets 1 like -
Replying to @wcrichton
yeah lots of good points. reminds me of
@joshmpollock's PLATEAU paper about how program vis needs to explain "why" / "how" state changes, in addition to just "what" the state ishttps://drive.google.com/file/d/19ippGZyZXEZSzWjW5zeSnm-zuqvZRD4T/view …1 reply 0 retweets 3 likes -
I totally agree that "show the data" is insufficient on its own. But more broadly, I want tools that leverage runtime data to help us answer these questions w/o manual tracing. Whyline is one great example of this -- assisting a task that would normally take lots of tracing
1 reply 0 retweets 1 like -
Abstraction is indeed tricky. Interesting to think about type systems in this context. Can catch issues, but I often have to manually trace to localize the problem. WM aids can help -- eg, hover on variable to see its type
1 reply 0 retweets 1 like -
Based on personal experience, having the code + granular example state available is often a nice combo to understand a process. I can start w/ examples, assume certain generalizations, and then check against the actual code
1 reply 0 retweets 0 likes -
Random example. I personally find this "to_s" method for printing a tic tac toe board hard to read at a glance. But once I've seen an example, I can easily grasp what it does. Don't understand the precise mechanism, maybe cog sci has something to say https://www.geoffreylitt.com/margin-notes/#essay:~:text=Reading%20code%20with%20Margin%20Notes …pic.twitter.com/VywttVjd2l
1 reply 0 retweets 2 likes -
I vaguely remember seeing some work that said most students learn better inductively. Interestingly, example-based teaching isn't just "here's an input/output pair", it's all about "here's some intuition for how this process works, in this concrete context"
1 reply 0 retweets 2 likes
My hypothesis: understanding a procedure requires a mental image of the data. For me, "http://squares.map do |row|" conjures a grid with a highlighted rectangle labeled "row" that slides down. Generalization of data vis for concrete values creates abstract mental images.
-
-
But generally, I agree that connecting program state to program text is a key part of future programming tools. My big thing is that statically inferred properties (eg types) are abstract program state, and similarly need to be visualized effectively.
0 replies 0 retweets 3 likesThanks. Twitter will use this to make your timeline better. UndoUndo
-
Loading seems to be taking a while.
Twitter may be over capacity or experiencing a momentary hiccup. Try again or visit Twitter Status for more information.
cognitive psychology. PhD