Critical Code Analysis
is an approach that applies critical hermeneutics to the interpretation of computer code, program architecture, and documentation within a socio-historical context. CCS holds that lines of code are not value-neutral and can be analyzed using the theoretical approaches applied to other semiotic systems in addition to particular interpretive methods developed particularly for the discussions of programs. (CITEREFMarino2006)
How does one go about this approach, from a practical point of view? What are guiding questions? What is the method?
Possible approach
who created it, when, where, and why. This begins the historical, archaeological, and sociological research that will ground the reading. If the authors of the code are still alive, I may try to interview them.31 Otherwise, their documentation is extremely valuable in this process. [@CriticalCodeSMarino2020, p.24]
- Create context: Who wrote the code and why? How do (historical) contexts frame the software?
- Classify software at hand
- Read the code
- use IDEs “for tracing variable states, arguments, and functions while providing a nonlinear means for exploring code”
- “read the code and its documentation to determine what the code does; discuss the code with its authors; reading code with one or more others to discover a variety of perspectives”
- “scan the overall architecture while reading comments if available; commentary texts are priceless”
- Run the code
- Use external monitoring software to look out for internal changes
Some guiding questions
How does the implementation of the code (inside) reflect or contrast the functioning of the software (outside) or vice versa? How typical is this code within its more general class of software or algorithms? Where do its core ideas lie? What is anomalous about this code (for so much code is reused from similar code found elsewhere)? What methods or other sections of the code seem to capture the central idea of the software, its key contributions? (See the final chapter of this book for more of these initial questions.) But the code is not enough in itself. It is crucial to explore context. Who wrote the code? When and why? In what language was the code written? What programming paradigm was used? Was it written for a particular platform (hardware or software)? How did the code change over time? What material or social constraints impacted the creation of this code? How does this code respond to the context in which it was created? How was the code received by others?