Blue Unit: Computational Tinkering
1A: The Logic of Hardware and Programming
Background Knowledge Probe
Bring to mind an everyday computing tool at your regular disposal. On initial reflection:
- What design motivations may have inspired the original creators of this tool?
- What may have been happening that they perhaps wanted to happen more through creation of this new/improved/remixed tool?
- What may have not been happening that they perhaps wanted to happen for the first time through the creation of this new/improved/remixed tool?
- What may have been happening that they perhaps wanted to reduce or stop from happening through creation of this new/improved/remixed tool?
- Who may have been involved in the design, development, and creation of this tool?
- What may have been some of the motivations for those involved?
An Evolution of Computing Tools
From abacus to tabulating machine, early computing tools were designed to achieve inspirational goals. Who was inspired to guide the design and creation of the tools, their strategies for failing forward in that design and creation process, the motivating factors for their involvement, and the ultimate implementation of these early computing tools varied considerably. Further, the impact of these early tools on more recent computing devices, including the digital computers of today, are sometimes embedded within the design inspirations and creation process of past computing devices, even if they aren’t specifically interrelated.
Keep these knowledge probes in mind as you take 11 minutes to watch this video on “Early Computing” from Carrie Anne Philbin’s Crash Course Computer Science series hosted by PBS Digital Studios:
Knowledge Probe #2
As we gather information on the journeys of hardware and programming logic, let’s build up a picture of real situations and real people as they relate to an everyday computing tool. On further reflection:
- What design motivations may have inspired the original creators of this tool?
- What may have been happening that they perhaps wanted to happen more through creation of this new/improved/remixed tool?
- What may have not been happening that they perhaps wanted to happen for the first time through the creation of this new/improved/remixed tool?
- What may have been happening that they perhaps wanted to reduce or stop from happening through creation of this new/improved/remixed tool?
- Who may have been involved in the design, development, and creation of this tool?
- What may have been some of the motivations for those involved?
Many factors have influenced the growth of human civilization. The ways in which this growth was shaped by the design and creation of computing machines, and the ways in which this growth inspired and shaped the design and creation of these machines varies considerably. What is certain is that the demand for more sophisticated and powerful devices was an outcome of the growth of human civilization, whether it was a designed and planned objective or not.
Next, take 11 minutes to watch this video on “Electronic Computing” from Carrie Anne Philbin’s Crash Course Computer Science series hosted by PBS Digital Studios:
Knowledge Probe #3
As we gather more specific information regarding the hardware and programming logic of electronic computing, let’s work to further build up a picture around real situations and real people as they relate to an everyday computing tool at your regular disposal. On further reflection:
- What design motivations may have inspired the original creators of this tool?
- What may have been happening that they perhaps wanted to happen more through creation of this new/improved/remixed tool?
- What may have not been happening that they perhaps wanted to happen for the first time through the creation of this new/improved/remixed tool?
- What may have been happening that they perhaps wanted to reduce or stop from happening through creation of this new/improved/remixed tool?
- Who may have been involved in the design, development, and creation of this tool?
- What may have been some of the motivations for those involved?
Reading the World, Reading the Word, and Tinkering
As we look through the journeys of hardware and programming logic, and as we reflect on our experiences through reflection probes, we begin a process of codification: bringing together the context and the content of real situations and real people. This work of systematizing, or reducing to a code, a broader range of ideas, practices, policies, and standards into a more ordered plan or scheme, has been an ongoing work of sciencific and professional practices throughout human history. Writing computer programming code is not a radical change to this historic work of codification, but a new technique for doing so using emerging digital technologies in addition to, or instead of, regular analog tools.
Learning these codifications, and then problematizing, or decodifying, these to ask questions and critique more deeply the issues at hand as related to the codifications of these real situations and real problems is at the root of Paulo Freire’s critical pedagogy. It is an educational process that brings action and reflection into praxis through dialogue. While there may be individuals in a specific learning community who serve in lead instructional roles within that learning community, their knowledge is less than complete, thus requiring them to periodically shift to the role of student. And students, while they may have no or limited knowledge and expertise with the specific content and context under consideration, bring other knowledge and expertise to bear, requiring periodic shifting of roles to that of instructor.
This approach stands in opposition to the dominant banking concept of education, in which knowledge is bestowed as a gift by experts to the empty vessels who have come to be filled by this learned teacher. For in critical pedagogy, the dialogue of all within a learning community presupposes equality amongst participants. Each must trust the others as people with expertise in their own rights. An instructor-student comes into the learning community with a significant level of knowledge or skill in an area of study, and so has certain clear responsibilities with regards to learning outcomes achieved using expository techniques such as synchronous and asynchronous audio and video lectures and authoritative choices on readings and experiential learning activities.[1]
At the same time, the instructor-student must also have mutual respect and love for the student-instructor as each one questions what they know. And together, instructor-student and student-instructor must realize that through the dialogic action-reflection cycles of problem-posing, education leads to potentially reconsidering knowledge in ways that further humanize all participants.
A central tenet of Freirean literacy campaigns, which strongly fit within the digital literacies of today, is the essential recognition that in reading the words, in this case of technology, we are also learning to read the world. The instructor-student strives to incorporate strategically selected words, words that generate exploration and can be combined to create generative themes, into co-explorations that identifiy limit-situations built through domination. And for Freire, domination implies its opposite, limit-acts leading to the objective of liberation.[2]
As we enter into this exploration of person-centered computational tinkering, it is essential that we join with a diverse group of others. This is the liberatory literacy work of Jane Addams and the Hull House, of Miles Horton and the Highlander Folk School, and it is the work of community inquiry and community networking today.[3] And it is the work that inspires the construction of the generative themes within this book. This requires that we work across difference, bringing together a breadth of functional diversities, cultural wealths, and knowledges into dialogue facilitating our critical exploration of the sociotechnical artifacts in our daily lives. As we do this, we must work towards decodifying the real situations and real people that are shaping, and being shaped by, these sociotechnical artifacts. Through this, we can begin to identify with aspects of the situation, feeling the ways we are in the situation, reflecting upon and discussing these various aspects, and thereby bringing the picture into better focus through our new recodifications of the concepts and terms at hand.
As Bertram Bruce notes in “Technology as Social Practice,” technology and social practices are not separate. Social relations are encoded in technologies. Conversely, technologies are encoded in social relations. Social relations and technologies are mutually constituted. But as we become enmeshed in these social + technical networks, we are left seeing only the black box. And so we cannot work to codify the social separate from working to codify the technical. Just as the invention of writing could be considered the first educational technology, so too the moveable-type printing press further altered educational practice. But these were mutually shaped, not just mutually shaping. As Bruce further notes: “A given technology brought about educational change, but at the same time, requirements of society operating through the educational system generated changes in the associated technology.” Technologies and social practices cannot be separated. Bruce concludes: “A technology is a system of people, texts, artifacts, activities, ideology, and cultural meanings. It doesn’t so much determine, as become social practices. Our task then must be consider critically what those social practices are now and what they can become in the future.”
Lesson Plan
Let’s begin by considering how all forms of the creative process, including computational tinkering, are social and technical works. Analyzing this can only be done together with others from different backgrounds, experiences, knowledges, wealths, and valued ways of being and doing. We’ll start by working to advance our reflections, more fully bringing together the social and the technical into a new picture of real situations and real people. And we’ll work to use community of practice group discussions and individual reflections, along with the hands-on activities, to bring this into sharper focus in the context of coding concepts and practices.
Our objective is to bring together a complex blend of ideas, concepts, and hands-on practice with components of our everyday sociotechnical artifacts. Along the way, look for innovation-in-use/remix prompts encouraging you to make creative adjustments and expansions of the sociotechnical artifacts to do more of what you and your community of practice value being and doing. What hopes, doubts, values and challenges might be brought into dialectical interaction with their opposites? How might this exchange inform our use of existing analog information systems and our design, creation, and use of complementary digital tools?
Essential Resources:
- Bruce, Bertram C., and Ann P. Bishop. “New Literacies and Community Inquiry.” In The Handbook of Research in New Literacies, edited by J. Coiro, C. Knobel, C. Lankshear, and D. Leu, 699–742. New York: Routledge, 2008. http://hdl.handle.net/2142/15133.
- Bruce, Bertram C. “Technology as Social Practice.” Educational Foundations 10, no. 4 (1996): 51–58. http://hdl.handle.net/2142/13369.
Additional Resources:
- Freire, Paulo. “First Letter: Reading the World/Reading the Word.” In Teachers as Cultural Workers: Letters to Those Who Dare Teach, 31–47. Boulder, CO: Westview Press, 2005.
Key Technical Terms
- The distinctions between , and popular .
- Programming , , , , , , and loops, , and and logic.
Professional Journal Reflections:
In this week’s viewing of videos, reading of text and context, in small and large group discussion, and your hands-on actions with artifacts, consider:
- What ideas have you built or codified regarding hardware and programming logic, its influences, and its influencers?
- What ideas are coming into clearer focus through community reflection and action, regarding the sociotechnical artifacts explored in this book? With other sociotechnical artifacts in your life?
- Drew W. Chambers, “Is Freire Incoherent? Reconciling Directiveness and Dialogue in Freirean Pedagogy,” Journal of Philosophy of Education 53, no. 1 (February 2019): 26-28, https://doi.org/10.1111/1467-9752.12340. ↵
- Paulo Freire, Pedagogy of the Oppressed, 50th Anniversary Edition (New York: Bloomsbury Academic, 2018), 99. ↵
- Bertram C. Bruce and Ann P. Bishop, “New Literacies and Community Inquiry” in The Handbook of Research in New Literacies, edited by J. Coiro, C. Knobel, C. Lankshear, and D. Leu (New York: Routledge, 2008), 699–742, http://hdl.handle.net/2142/15133. ↵
Coding is the practical work of using a system of words, letters, figures, and other symbols to substitute for another set of words, letters, figures, and other symbols. Coding can include the creation of codes of practice and codes of ethics within a profession, codes of classification or identification, and codes of information and instruction within a technology. Decoding is the work of moving a code back to the original system of words, letters, figures, and other symbols. This is compared to programming, which is the creation of a planned series of events, items, or performances using or guiding the creation of codes. Coding is more context-oriented, while programming is oriented towards the bigger picture. DifferenceBetween.net has a helpful page providing further comparisons between coding and programming.
A program is software containing a series of coded instructions to control the operation of an electronic device (noun), and the activity of creating coded instructions in support of a particular task of an electronic device (verb). Programs are created using a programming language that includes rules and a system of symbols. The language must conform to these rules of syntax and semantics, but unlike many commonly used physical electronics, they often are not created as part of a standards body. A programming language may be developed from scratch, but more often they are built within a programming family, using previous programming languages as a base starting point, and may rely on another programming language to effectively function on a machine. This book explores several popular programming languages:
MakeCode: A web-based code editor developed by Microsoft, adapted specifically for the Circuit Playground Express in collaboration with Adafruit. It provides a block editor similar to the Scratch visual programming language developed by MIT Media Lab Lifelong Kindergarten Group. (Scratch is installed by default in the Raspberry Pi OS and with the available extension can be used with the Raspberry Pi GPIO.) The MakeCode programming language itself is TypeScript, a high-level programming language superset of another language, JavaScript. MakeCode is edited in a web browser at https://makecode.adafruit.com/ and provides a simulator of a Circuit Playground Express. Programs can be downloaded and flashed, that is, written to the read-only memory (ROM) of the Circuit Playground Express, overwriting the previous MakeCode program on the physical device.
Python: A popular general-purpose programming language with a relatively easy-to-use syntax. A range of integrated development environments (IDEs) are available in which code is written, tested, and debugged. The Raspberry Pi comes with IDLE and Thonny, two commonly used Python IDE bundles.
PHP: Hypertext Preprocessor: A scripting language used with web server applications in support of web development, as well as a general-purpose programming language.
SQL (Structured Query Language): Used within database management system servers, like the open-source relational database management system MySQL, which can be installed and used in the Raspberry Pi OS.
A unit of code defined by its role within a more general code structure. To execute the function, it is provided one or more inputs, and produces a concrete result. This result may, but is not necessarily required to, be returned back to the caller of the function.
A statement is a single instruction given to the computer based on the rules of syntax and semantics of a programming language. The statement may include both the specific command and clarifying details, such as the color all pixels should be set to.
A convenient name to represent numbers that change from time to time. Look at the top of your smartphone, and you may see the battery percentage charge remaining. A program exists on the smartphone to read this variable and provide a visual representation of it. Variables are often used within code to evaluate changes in patterns to determine which series of code should be executed at a given moment.
Lists and arrays are two commonly used ways to store data. A list is a set of data arranged in some order. Lists are mutable, meaning that the order of the items within the list can change. This allows for sorting, shuffling, adding, and deleting items from the list. One form of lists, called an array, is an indexed set of related elements associating one thing with another; these are especially useful in control flow loops, such as button counters. However, insertion or deletion of items within an array's list can prove difficult.
A control flow statement used to create a function that keeps running a sequence of code infinitely.
A control flow statement that specifies the conditions under which a sequence of events should be executed.
A control flow statement that specifies the conditions under which a sequence of events should continue to be executed.
A command that determines under which specific coding pathway should be executed based on the occurrence of another sequence in the program.
Boolean logic in which the output is based only on the present input.
Boolean logic in which the output depends on the present input as well as a set history of the input.
Social and technical aspects of devices and systems are not two separate side-by-side items, but different interdependent aspects of the sociotechnical whole that have emergent properties beyond the sum of their parts. Sociotechnical information systems include a range of hardware, software, and networking technical layers, as well as individual and group social layers.