understanding code - 80,000


Coding is […] the technique of providing a dynamic background to controle the automatic evolution of meaning. (von neumann and goldstine)

I highlight the issue of understanding between humans and machines through the medium of source code, as an ambivalent notion which necessitates a symbolic interface. This concept of understanding is also understood in the light of the different fields of programming practice (professional, amateur (hobbyist+hacker), educational, scientific/academic)

define understanding (perspectives: reader/writer)

1. general overview of understanding theory -

references, between objective and subjective: - simon penny and representation -> mind-body duality - lakoff & turner -> mental models - gregory chaitin -> data compression and simplicity of rules - wittgenstein (formal, absolute understanding vs. felt, contextual understanding)

The narrow understanding of “working” as “conforms to spec”.

Since everything is defined mathematically, it does not matter what words we use to describe the system; we could use words like “plan”, “learn”, and “understand”; or we could use words like “foo”, “bar”, and “baz”. In fact, programmers frequently employ nonsense terms like these when testing or demonstrating the logical behavior of a procedure.


dual-positioning of source code text 1. against text (against literary) 2. against text (against productive software)

[[fedorenko_language_of_programming_cognitive_perspective]], about the cognitive implications of programming languages: does it change something in our brain if we learn more PLs?

[[fishwick_aesthetic_programming]] an answer to this question of the cognitive impacts of PLs, by using aesthetic as a link (un liant)

the problem of understanding in humans and humans

this section redefines the concept of understanding, not as human to human, and not as human to machine, but as human to machine to human, and highlights some of the hurdles that appear in terms of collectivity vs. subjectivity. it makes the claim that contrary to writing literature, in which writing is potentially public and reading private, writing source code is a private act (as illustrated by passages like weizenbaum, computer boys) and reading it is highly public. because of a change in concept, i would argue that the change in manifestation of concept is also necessary.

[[mckenzie_cutting_code]] [[tomov_role_of_aesthetics_in_software]] [[vee_coding_literacy]] [[vee_procedural_literacy]]

Embodiment and tacit knowledge

also note the place and role of tools (IDEs, teletypes, fast compiling, etc.)

\subsection{Tacit knowledge}

%or at least the role of knowledge, mind as matter:

the problem of understanding in human and machines

this section investigates the main challenge that source code tends to address as a human-machine communication tool

temporality (fast) and spatiality (jumps)

[[cantell_smith_introduction]] - computing as meaning mechanically realized <- this whole introduction is a good reference on the tension between the linguistic and the mechanical

another philosophical approach highlighting the tension in software is [[irmak_software_abstract_artifact]]

[[detienne_software_design_cognitive_aspects]], psychology of programmers, beacons

eye-tracking study of programmers of different levels readingn source code

the problem of implementation

The most influential conception of computational principles comes from David Marr (1982), who prescribed a definite format for computational theories. For Marr, each theory had three tiers: a computational theory of some problem, a specification of the algorithm by means of which the brain solves this problem, and the implementation of this algorithm in neural machinery. (agre)

the metaphors of code

this section focuses on the many ways people designate code and digital systems

berry, code as: - engine - image - communication medium - text [[cummings_coding_with_power_rhetoric_coding]]

limits to a literary approach: [[hayles_print_flat_code_deep]], and confirmation via a psychological study [[ivanova_comprehension_computer_code]]

Critical code studies, and rhetorical code studies

the computer as a technical apparatus

this section talks about computation, symbolic logic, math and turing and lambda functions and all that beautiful stuff.

hapoc 21 presentation

and to humans

overall principles:

slide 25 shows the relation between quantity and quality and code and speech in computer systems link

but maybe we can get more by relating it to other fields of aesthetics and see what they have to offer

complexity to understand streams:

the computer as cognitive apparatus

[[rapaport_philosophy_of_computer_science]] [[suber_what_is_software]] [[weinberg_psychology_of_programming]]

this section talks about the computer as a cognitive tool, as a way to think (rokeby, wolfram), along the lines of algorithmic thinking, coding literacy. this will highlight the necessity of translating concepts from one frame of mind to another (formal vs. informal)

“expert programmers know how to choose the level of abstraction appropriate to the task” (sicp)