Last week in class we reviewed the transmission model of communication and information in which Claude Shannon described the goal of transmission to be “reproducing at one point either exactly or approximately a message selected at another point” (Shannon 1948). However, we also specified that in this model, the meaning of the message is irrelevant. Human meaning making, as expressed through symbols and language, is flexible and complex. Any attempt to freeze our symbolic processes for the purpose of “more accurate” communication between humans would have dire and far reaching consequences.
If however, we are trying to communicate meaning to a computational device, the flexibility of language becomes a problem. Instructions, represented as symbols, need to be translated into a computational language that follows clear syntax and grammar. Variables need to be defined clearly. Computer programming languages are what David Evans calls “designed language,” tools carefully crafted to eliminate undo complexity, ambiguity, and irregularity, but to enhance abstraction and economy (Evans 2011). Programming languages such as Python utilize symbols in three ways, as described by Professor Irvine:
- Symbols to represent meanings (eg. + means to add)
- Symbols to described and interpret other symbols (eg. variable = 5)
- Symbols to perform actions on other symbols (eg. PRINT variable)
The clear definition of variables and consistent use of grammar is key. A breakdown will result in the dreaded SyntaxError
Figure 1: Katie’s Python Lesson 1 (“Learn Python” 2017)
Beyond correct grammar and syntax, programs have to be designed from a computational perspective. Jeannette Wing describes computational thinking as “reformulating a seemingly difficult problem into one we know how to solve, perhaps by reduction, embed-
ding, transformation, or simulation” (Wing 2006). In other words, programs have to be built logically, the kind of logic I studied in undergrad because I erroneously believed that class, located in the philosophy department, would be easier than calculus. (At least in calculus the the final exam wouldn’t have been only five extremely difficult questions upon which 70% of your grade would be based).
Coding requires a detailed understanding of processes, to be implemented in a specific order. Only when the ordering and steps are clear can the CPU retrieve programs and data stored in the RAM and compute an output.The recursiveness and the depth of the layering in the code language enables programs to carry out complex processes that appear to run instantaneously by encoding instructions to the computer’s hardware. One wrong key stoke, however, could break the routine and stall the entire system. Leaders of programing teams need to allow time for testing and user feedback to ensure that the outputs match expectations.
Figure 2: The Possibilities of Coding (Apple App Store 2017)
Automated computing feels like a step away from the human computing which existed long before the invention of ENIAC, however, “coding,” like “writing,” is a humanistic pursuit. Most of our more elaborate programs involved teams of hundreds, if not thousands of designers to reach their current state. In order to support this type of collaboration, codes need to contain instructions for people as well as for the computer. If a programmer needs to determine if an algorithm can be improved, they first need to understand the logic of the initial algorithm. Python, for exampled, contains grammar such as the # and the “”” which allow programers to include explanatory notes or instructions to other people who might one day work on their code. Human language is in that way nested inside programming language.
Figure 3: Katie’s Python Lesson 2 (“Learn Python” 2017)
A friend of mine who creates programs to run complex economic models said that he can tell which member of his team wrote which lines of code based on their style. He even suggested that the entire narrative of a program’s creation could be read and understood if a person knew where to look. Coding is another art form, reflecting human intention in its design.
“App Store” Apple. Accessed October 24, 2017.
Claude E. Shannon, “A Mathematical Theory of Communication.” The Bell System Technical
Journal 27 (October 1948): 379–423, 623–656.
David Evans, Introduction to Computing: Explorations in Language, Logic, and Machines. Oct. 2011 edition. CreateSpace Independent Publishing Platform; Creative Commons Open Access: http://computingbook.org/.
Jeannette Wing, “Computational Thinking.” Communications of the ACM 49, no. 3 (March 2006): 33–35.