While stumbling my way through Python, I found myself asking the question: How can we express human interests through computers?
Python uses a type of language grounded in computation. It’s founded on the idea of meta-function: some symbols can perform actions on other symbols. As Dr. Irvine explains in his video, symbols are a logical bridge – they provide a connection from human interests (also represented in symbols) to electronics and digital processing. We can then interpret and act on software encoded symbolic representations.
Since the symbols we use in software spaces don’t usually represent meaning, is it fair to say that in some ways, they are a means to an end?
We can better understand how creativity and efficiency relate to computation by developing procedural literacy. As Evan explains, “designed languages” are “created by humans for a specific purpose such as for expressing procedures to be executed by computers” (Evan, 19). This type of programming language is precise and unambiguous with a specific syntax.
I wasn’t aware of the level of precision of Python until I entered an invalid input and received an error. I added an extra space in the line: lion.(upper) and as a result, Python produced a message alerting me that I erred in typing a correct string of symbols. One space prevented the input from being interpreted correctly. (This is much different than natural language, which almost hinges on our ability to evolve and accept slight changes and adaptations of certain words and phrases.)
This level of detail seems simultaneously simple yet complex. It’s simple in how details are hidden, so we can focus on higher level operations and it’s complicated in how much control we have, as programmers, over certain mechanical resources (Evans, 38). In this way, we can think about abstraction as a means to differentiate between levels of programming language. In Great Principles of Computing, Denning and Martell indicate that there are over 500 programming languages (Denning and Martell, 84). These versions are based on abstractions, yet they are all precise and free of ambiguity. They are also based on scale, scope and complexity.
As I worked within Python, Jeannette Wing’s thoughts on humans as computers brought up a few other questions. If, based on speed and economics, humans can still solve some tasks better than machines, how can we reconcile this? Or, should we reconcile this? If, as Wing explains, we can do things like process and interpret natural language better than a machine, should we keep these ideas in mind when we measure an efficient, correct, usable abstraction?
References
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/.
Martin Irvine, Introductory Video Lecture on Computational Thinking (Prof. Irvine, from “Key Concepts”)
Peter J. Denning and Craig H. Martell. 2015. Great Principles of Computing. The MIT Press.
Jeannette Wing, Computational Thinking YouTube video, 1:04:58. Posted by ThelHMC. October 30, 2009.