Do you know of any resources that attempts to outl...
# thinking-together
j
Do you know of any resources that attempts to outline the various things a developer holds in their head while working on task x?
w
Give me a value of
x
and I can provide some pointers!
j
Ideallly
x
would be highly specific, like adding a feature to these classes in this precise situation. If it's more vague, that'd be helpful too:
x
might be "Editing a function", "Adding a class", "Refactoring between these two design patterns", "Making sense of how this method is used"
It might help to share where I'm going with all this... When looking at the same code, we internally ask different questions depending on what we're trying to accomplish. I want to explore and curate this information to apply it to a better coding editor/viewer.
w
This is a good resource for overview of specific questions that developers ask during maintenance: https://faculty.washington.edu/ajko/books/cooperative-software-development/#/comprehension
This is a good study of how developers pull together different information sources while debugging a complex system: https://ieeexplore.ieee.org/abstract/document/4016573
This is a good example of how to design a programming UI to better match a programmer’s mental model of debugging: https://dl.acm.org/doi/abs/10.1145/985692.985712
This is a great overview of models of cognition in programming, which more directly answers your question of “things a developer holds in their head”: https://ieeexplore.ieee.org/abstract/document/402076
More broadly, I don’t think there’s a comprehensive model of cognition in arbitrary software maintenance tasks, particularly for software in 2020. So if your goal is to design an IDE for improving code comprehension, you’ll want to get as specific as possible to find related work.
👍 1
❤️ 2
j
This is amazing! Thank you so much!
When you think about "getting as specific as possible", did you have any levers in mind?
w
Sure thing. And this is a slide from a presentation about dimensions (“levers”) in designing for program comprehension. For me, it’s been a useful compass to locate where my interests lie.
❤️ 2
e
what comes to my mind: when the programmers works on a piece of code, they are working with 3 views or layers: syntax, semantics, domain-specific knowledge. At the syntax level are the keywords, the spaces or brackets, the specific symbols that they have to chain in the right way for the parser to make sense of. At the semantic level they are working with the nodes of the AST. They are creating, modifying or destroying a conditional, a pattern matching expression, reference to a variable, a literal, etc. At the domain-specific level, they are working with the rules that govern a system. You authenticate something, like a
User
, you commit or rollback
Transaction
. these are your types or classes and the operations they support
👍 1