# Yanjun Liu – Final Project: Analysis of Computation from Coding Procedure

## Analysis of computation from coding procedure

What is computation? According to Merriam Webster Dictionary (https://www.merriam-webster.com/dictionary/computation), it is 1) the act or action of computing: CALCULATION, 2) the use or operation of a computer, 3) a system of reckoning, or 4) an amount computed. In short, computation is a procedure of the change of numerical values under systematic rules, which can be executed by people or digital devices. Alan Turing (1912-1954) regarded computation as “the evaluation of mathematical functions”. (Denning & Martell, 2015) Looking back at the history of human beings, from the distribution of weapons and food among clans in the Stone Age to the complex analysis of data and writing of code via computers today, computation has filled every stage of human history. Bohm and Jacopini (Böhm & Jacopini, 1966) pointed out that generally, we calculate numbers because of three kinds of things: 1) Perform instructions in strict sequential order (sequencing), 2) make a choice between two alternative calculations based on the outcome, true or false, of a test (choice) and 3) repeat a calculation many times until a test says to stop (iteration). With the development of computing devices and information technology, though nature remains the same, the interpretation of computing is changing and becoming more diverse. What does computation mean nowadays? Why are we having different ways of computing? How are we going to do that? What exactly happened when we are using a computing device? In this article, the above questions of computation will be answered by analyzing the procedure of coding using Python language. The main body is divided into two parts: 1) definitions of key concepts and 2) analysis of coding procedure.

Code as a noun means “a system of symbols (such as letters or numbers) used to represent assigned and often secret meanings”, while it means “to put in or into the form or symbols of a code” as a transitive very and “to create or edit computer code” as an intransitive verb. (https://www.merriam-webster.com/dictionary/coding) Since code equals to symbols or congregation of symbols, we need to discuss the term “symbols” and its main carriers “language” before we go to the coding procedure.

Symbols are “theories of signs” (Chandler, 201), a sign is defined as “something which stands for something. All meaningful phenomena (including words and images) are signs” (p.8). That means when we say a word (no matter using what language), or do a gesture, or see an object, except the physical existence of them, there are other meanings behind them that originated from different cultures and can be interpreted differently.

Language is the main carrier of symbols and human being is the only species that can use it because of our cognitive system. From the linguistic study side, language consists of words, rules, and sentences. (Pinker, 1999) When we speak of language, we usually refer to “natural language”, a term that means “any human language acquired ‘naturally’ by being born into a language community”, or say, “our mother tongue”. (Irvine, 2020) When we are coding, instead of natural language, we are using programming language. According to Denning and Martell (2015), a programming language is “an artificial language with its own rules of syntax, used for expressing programs” (p.84), which is a “metalanguage”, a language developed for logic, mathematics, and computer programming. (Irvine, 2020)

Why must computing on a computer require a different language? There are two reasons. First, the computer as a computing machine, can not recognize the natural language. Instead, it can only read binary code that represents everything by 0 and 1. A programming language is a language that can be translated into binary codes, thus enable the computer system to understand the orders from the input and then execute them by running programs.  Basic binary units are “bit” and “byte”, a byte consists of eight bits and it is also the basic unit of information processing. A program is “a set of instructions arranged in a pattern that causes the desired function to be calculated”. We are using computers in our daily lives because of their ability to run programs such as reading an e-book using PDF viewer, using Zoom to have meetings, or editing videos by using Adobe Premiere. Second, compared to natural language, the programming language is way more precise. Unlike human being, a computer cannot understand ambiguous information and it can only execute functions with clear instructions. We understand things and meanings of symbols by being in that related cultural or social environment, therefore we get it when a different word is used in various situations, while computer requires a clear definition of everything. You can’t tell a computer something simply like “let’s go!” and expect it “goes with you”. Maybe your friend understands it because you have a shared understanding of that expression, but for computer, you need to tell it what is that action and where that action leads to. We will further prove the necessity of this preciseness in the following part of analyzing the coding procedure.

In my coding practice, I used Visual Studio Code as the code editor and Python as the programming language. Visual Studio Code is a source-code editor made by Microsoft, it can support many programming languages and have multiple functions such as automated debug, highlighting syntax, compile code, and so on. It is an “IDE”, integrated development environment that provides features that speed up code development. The programming language I used was Python, an interpreted language that is widely used in different areas with readable syntax rules, and a more general design purpose. It is been widely adopted because of its understandability, which can help the programmer to write codes and programs with clear logical expression. There are also many other programming languages existing for different purposes such as C++, Java, Javascript, Ruby, and so on. These languages usually have different syntax rules and a different definitions of functions.

The code I wrote is really simple. The content is a little grading survey about the past online semester. The purpose is to get feedback from students about their general feeling about past experiences and their suggestions for the coming semester that is still going online if they gave a low grade. So, in my programming design, I need to present three basic parts: 1) Greeting and introduction about the survey, 2) proper questions, and 3) interaction feedback. Here is the screenshot of my source code (P1):

(p1)

As you can see, I wrote 17 lines of code, which are pretty short but have basically covered all of the requirements that I mentioned above. Different color indicates different construction parts and functions. For example, the orange part inside of the parenthesis is the text that will show on the screen; the green part is a unique function of programming language called “comment”, which will not be presented publicly but only among those who have the access to source code. It is designed to help programmers to have a better understanding of what exactly these parts of codes do, as a big program will usually be separated into different parts and programmed by many programmers. The other colors indicate rules and statements of Python of different functions, which I need to know beforehand, or there will be no ideal results, but errors come out because the computer cannot recognize what I mean. Usually, the wrong use of programming language statements that causing errors are called “syntax errors”, which happen when the written codes do not fit in the expected rules. Below are the running results of my codes:

Situation 1

In Situation 1, when asked “are you ready?”, respondent typed “No” or any other answers that are not “yes”. the respondent did not prepare well (or simply don’t want to cooperate), thus, the program will end unless the respondent goes back to the first greeting part (like once again click on the link, if this survey is truly published somewhere online.)

Situation 2

In Situation 2, the respondent typed “yes” and officially started the grading by following the rules “grade your online learning experience for this semester from 1 to 5”, 1 is the lowest while 5 is the highest, which includes the designs in the source code, the two “if” statements as they show in P1. Here, the respondent typed “5”, the highest grade, which means “very satisfied about the past online learning experience”, then, the program offered its feedback and ended the session.

Situation 3

In Situation 3, the respondent inputted a negative result, marked the experience as very bad, and only gave 1 point as the grade. The program, as set in the “else” part in P1, offered feedback and asked the respondent to email her suggestions to an email address.

In all, the basic logic of this little program is as below:

↗ Grade > 4   →   session end

↗ Yes

↘ Grade <= 4 → session end + suggestion feedback

↘ other answers   →  session end

In every application that we use in our daily lives, similar logics are presented in the source code using statements like “if…else” or “def” (definition). I would like to make a connection between programming and teaching, which both of the actions mean that you have to define things and follow certain rules, and the target audience, no matter it is a computer or a child, is learning from your statements to try to understand the meanings behind and act according to your instructions. The programming procedure clearly indicates the necessity of programming languages’ preciseness, it is also a procedure that the programmers translate their ideas into another language, programming language, just like what I did.

But what exactly happened inside of the computer when I was programming? First, we need to know some basic knowledge about the hardware — the computer. Two main hardware devices are working when I am running the Visual Studio Code and writing codes. A CPU (central processing unit) is a hardware device that reads instructions from a program and executes them, one at a time, in the order prescribed by the program. A RAM (random access memory) is a hardware device that holds data values in locations that can be read or written by the CPU, it is called “random access” because it can access any random location in the same amount of time. (Denning & Martell, 2015, p.65) When my computer is on and I am doing something using it, my computer loads memory to RAM. Besides hardware, the interpreter (here as Visual Studio Code) is also functioning, it processes my source code each time it runs, line by line. Basically, there are three main ways to translate source code into machine code: compile it, interpret it, or a combination of both. (Davis, 2019)

Also, when I am writing codes in a program, I am staring at a screen, typing on a keyboard, and click buttons with my mouse. These are called peripherals, which can be regarded as the extension of the human body.

One last thing that I want to introduce is computational thinking, which is also something that I learned from the little programming experience. Computational thinking is a method, or say, model that we can apply in solving big and complicated problems. As Wing (2006) pointed out, “computational thinking is using abstraction and decomposition when attacking a large complex task or designing a large complex system.” By applying computational thinking, we redefine, decompose, create new concepts, and integrate small solutions together to form a complete answer. This way of thinking can be accessed by simply trying programming like what I did, by having a goal in my heart, and then separate it into different parts to explain and seek answers.

Computer-related knowledge like programming is always confusing as people usually focus on its practicability instead of knowing the reasons behind usage and actions, it is something hiding in the black box but definitely not something that mythical. Programming does enable me to look at computer and computation from a brand new perspective.

Reference

Böhm, C., & Jacopini, G. (1966). Flow diagrams, turing machines and languages with only two formation rules. Communications of the ACM, 9(5), 366-371. doi:10.1145/355592.365646

Coding. (n.d.). Retrieved December 13, 2020, from https://www.merriam-webster.com/dictionary/coding

Computation. (n.d.). Retrieved December 13, 2020, from https://www.merriam-webster.com/dictionary/computation

Davis, A. (2019, July 22). The fundamentals of programming – Programming Foundations: Fundamentals Video Tutorial: LinkedIn Learning, formerly Lynda.com. Retrieved December 13, 2020, from https://www.linkedin.com/learning/programming-foundations-fundamentals-3/the-fundamentals-of-programming?resume=false

Denning, P., & Martell, C. (2015). Great principles of computing. The MIT Press.

Irvine, M. (2020). Linguistics, Language, and Symbolic Cognition: Key Concepts. Retrieved December 13, 2020, from https://drive.google.com/file/d/1DIN2gFzjugV8J7iCWyqTLY4zxWBzJqna/view

Pinker, S. (2000). Words and rules : the ingredients of language (1st ed.). Basic Books.

Wing, J. M. (2006). Computational thinking. Communications of the ACM, 49(3), 33-35. doi:10.1145/1118178.1118215

# Week 13 – Yanjun Liu

So far, we have deblackboxed so many things around computation and computer. I now have the basic understandings about not just the hardware of computer construction, but also about how programs are executed  inside the computer memory system. I have tried basic programming using python and therefore deepen my knowledge of how program is wrote and the logic relations behind each line of code.

I also learned how to view computation and technology in a brand new perspective. By combining symbolic culture and human cognition knowledge, I now understand what is code, why are human-machine interface and peripherals designed like this, how do we connect natural language to program language…

All above and so many other definitions I have not mentioned are something new for me. Interestingly, this semester, I am also taking Prof. Turner’s Communication Theories class, which we learn about interpersonal communication theories and applications, and Prof. Zalman’s Foresight Method, which we examine signs and trends of our lives that can lead to future change and impact.  These two courses also focus a lot on technology — how technology impacts human relations, our behaviors and future. I feel like these three classes are all connected: symbols & technologies.

I am very interested in how people implying symbols to machines and in turn, some of the original symbols are reconstructed in their meanings level. I wonder if I can apply what I have learned in this class to human behavior studies.

# Week 12 – Yanjun Liu

### Notes:

-Compiler: A specialized program that transforms “source” code written in a programming into a low-level language, like assembly or the binary” machine code” that the CPU can directly process.

-Control flow statement : if statement and others

– Things are absolute. There’s only yes or no, true or false, one or zero. Any expression that breaks down to either true or false is called a Conditional or Boolean expression.

– Relational operators work with two operands, and they return a value, true or false, based on their relation to each, thus the name.

– Equality operator: ==

-Not equal to : !=

-4 steps of computational thinking: a)decomposition: breaking a complex problem down into smaller, more manageable parts; b) pattern recognition:  Identifying patterns or trends within a problem; c) abstraction:  Identify specific similarities and differences among similar problems to work toward a solution and 4)Algorithm design: develop step-by-step instructions for solving the problem, which can be used to solve other similar problems.

### Learning Process:

(Practicing the “if else” statement)

(Operating the “if” statement)

(my first python program!)

One thing that I think I have learned during the practice is that whenever you are coding, you have to be PRECISE. In the above picture, the correct output will not show even when I just typed one more space after the question mark.  Also, I have tried several times to test my codes and debugged it until I succeeded. (I was very angry and found it hilarious when I found out the reason: lack of the tiny “:” when operating the “if” statement).

### Question:

1. What is source code? (Is it a code that gives all instructions to other executable code?

Reference

Video: Computational Thinking: What Is It? How Is It Used? (Computer Science Intro)

n-Learning: Programming Foundations: Fundamentals

# Week 11 – Yanjun Liu

### Notes (partial):

– Programming is the process of converting ideas into instructions that a computer can understand and execute.

– Compiler: The other person would never see your original letter, only the one that was in Mandarin. That’s basically what compilers do. They take your high level programming language and turn it into an executable that contains low level machine code. This way, users can run your code on their machine without every needing your original source code.

– Interpreter: This is essentially what computer interpreters do: they process your source code each times its run, line by line, and it’s up to the other user to have the needed interpreter available on their machine.

– IDE: enhanced text editors called integrated development environments, or IDEs. IDEs provide features that speed up code development. An IDE is an application that provides the special tools needed to write, debug, and compile code.

– Statements are the building blocks of any program and are the individual actions that you want your program to take. Without statements, there’s no program. Each statement can be made up of keywords, expressions, and operators.

– Errors: 1) Syntax, you somehow broke the rules of the language. 2)Runtime, the computer was unable to execute a portion of your code. And finally 3) semantic, the output of the program is not what you expected.

– To comment: #+space → The comments do not impact the output of our code.

### Experience

I find the video instructions very helpful for me to  better understanding how computer language is used in real life. I followed the instructions in the video and tried the exercise in the Visual Code Studio as well as Python 3.9. It is very fun to play, kind of reminded me of how people trained dogs — by naming certain behavior (adding value to certain symbol), the dog would follow the order when it hears the keyword (computer run the code you wrote), but you have to follow certain rules when you are creating the order for the dog (training is based on the reward and punish)→when writing the code, there are rules you have to follow, or the computer will run in errors, or simply not recognizing the order, thus not execute it.

Also, for me, the differences between two terms interpreter and compilers are becoming more clearer. Basically, a compiler allows the computer to execute low-level codes without showing the source code, while a interpreter have to run the source code line by line. The metaphor in the video is great.

By using the “if”, “else” and other keywords, the logic relationship is built in the code, which is something that can be connected to the reading in this week about “computational thinking” — establish logic in your mind and “run” the possible scenarios “line by line”. The function of comment is the one that attracts me the most, which enables the programmers to communicate with each other without influencing the output. To some extent, the human-human communication function is presented here.

### Questions:

(not sure I understand what this question means)

How  these ballots were entered into the system and then instantly presented on the map as well as the media?

### Reference:

in-Learning: Programming Foundations: Fundamentals

# Week 10 – Yanjun Liu

“Interactive system and interface designs begin with understanding the nature of our symbolic capacities and symbolic systems, and why we always need material representational “interfaces” for “interacting” with symbolic forms that we create, receive, and interpret in a community of other interpreters.” (Irvine, 2020)

Just as Professor Irvine mentioned in the article, the nature of our meaning interpretation procedure decides how we design interface and establish human-computer interaction. Take “compiler” and “interpreter” of the computer system as an example, they are created for processing input information from human side and then translate into computer-understandable orders.

Meanwhile, the computer screen can also be regarded as a symbol processor because it displays both the input and output in visual ways that can be captured by human eyes.

“The layer of level for HCI/UX design is in what we call the “user facing” or “presentation” layer in a PC or device. This design principles now enables a user as “agent” to become the  conductor of the “orchestration,” that is, giving instructions and choosing directions for the software to follow in a two-way dialogic interface:

system representation + human agent interpretation → human agent response as directed action with an interface → re-representation from system. ” (p5)

Let’s take adobe premiere as an example to explain how symbols can be built-in software and is offered new meanings after interaction between human and the software based on the rules above.

I open a video in the adobe premiere and I want to create a new video with new story line and new background music by editing it. So I drag the video in the editing track and start cutting, pasting, deleting, and attaching music as well as filters on it, then I add all components together and click on the button, the software will generate a 2.0 version video that automatically save in my computer.

In this process, I am generating new meanings by interacting with the software (adobe premiere) and using the functions it offers inside the application.

My question: It seems that humans have invented computers and computer peripherals based on their own physiological features, such as screens for eyes, keyboards and mice for hands, and audio equipment for ears. So if humans did not have the physiological structure we know today, but had, for example, eyes on the soles of their feet and hands on their necks, would we have designed our “computers” differently?

Reference

Martin Irvine, Introduction to Symbolic-Cognitive Interfaces: History of Design Principles (intro essay).

# Week9 – Yanjun Liu

This week’s learning about HTML/CSS is very interesting! Though I have to go back and watch some videos again to make sure that my text input is correct, in all the experience is very fresh and fun!

My questions:

1. Since HTML and CSS is a text-based computer language, is it means that the complier is at the same time translating my input into binary code so that the web can run my orders?

# Week8- Yanjun Liu

This week, I have learned a lot of information about computer’s construction and history. Below are two components of computer that I find very interesting.

CPU (central processing unit): an essential component of computer that can be regarded as its “brain”. CPU is basically a chip with intergraded electronic circuits in it that enables a computer to execute any orders it received. For example, If I want to open a word document, I click on Word icon on my desktop, and this order is immediately processing by the CPU, who then runs this software and reads the binary code in the document. It is called “the brain of computer” because it is just like how  our brain work in our daily lives that “order” us to eat when we are hungry and to drink when we are thirsty. When this concept is applied according to Peter Denning’s concept of information, CPU can also be seen as the “observer” of information, who learns and actively interpret the relationship between user and software.

Compiler: compiler is ” is a computer program that translates computer code written in one programming language (the source language) into another language (the target language).” In short, compiler serves the function as the language center in human brain that can automatically translate languages we know to our mother tongues and then interpret the meanings from the signs we see.  For example, I am learning Korean right now, when I see Korean words, I automatically translate it into Chinese in my brain that help me to know what it means.

Reference

Denning and Martell, Great Principles of Computing (selections)

https://en.wikipedia.org/wiki/Compiler

Crash Course Computer Science: Video Lessons

# Week 7 – Yanjun Liu

Notes of some basic contents that I took from the video introduction:

-ASCII is a 7 bit encoding system for a limited number of characters.

-Extended ASCII resulted in lots of incompatible code pages.

-Unicode allows every character in every written language to be encoded.

-Unicode is backwards compatible with ASCII.

-Unicode is space efficient.

-Unicode Transformation Format (UTF-8) uses 1, 2, 3 or 4 bytes.

-Unicode is universally supported.

——Video: ASCII and Unicode Character Sets

-Pixel: tiny dots of little light of different colors

-Resolution: is basically the dimensions by which you can measure how many pixels are on a screen. (More pixels can one screen display, higher the resolution)

-R: red; G: green; B: blue. (range from 0~255 represents dark to bright; triplets of these values together compose a single pixel.) →different intensity per color channel. One byte represent each of the numerical values of the R, G and B.

——Video: Images, Pixels and RGB

Text: 2020年的感恩节即将到来。(The Thanksgiving Day of 2020 is coming soon.)

When I am typing the above Chinese characters, the computer is generating a series of  1s and 0s that are encoded based on the Unicode standard, which has set default binary code for every letter from every kind of Language. Meanwhile, the computer is accessing my order of typing by translate the date I have entered in its own system and then create output on the screen that are something I can read and understand according to my own language background. The sequence is: human language input → binary codes (computer language) → binary output → human language input.

However, sometimes my computer (which I have bought in the United States and set the default language as simplified Chinese) cannot successfully recognize a Mandarin file or run a Chinese application (I open it and there are things like ???K口口??) I think this is something that was mentioned by Yajing Hu in her blog post that Chinese does not has its own encoding system and when its characters are typed on computer with ASCII system, the system itself can be confused, therefore can not fully display the output.

Question:

How web apps like WordPress or google doc successfully save the data that I have typed in even after I shut down my computer? (Does it save my data in their own server or cloud storage? I am still confused about the technical procedure of it. )

References

Han Ideographs in the Unicode Standard,” Yajing Hu (CCT student, final project essay)

Digital Character Sets: ASCII to Unicode (video lesson, Computer Science)

Images, Pixels and RGB (video lesson from Code.org, by co-founder of Instagram)

# Week 6 – Yanjun Liu

• From what you’ve learned about symbol structures so far, can you describe how the physical/perceptible components of symbol systems (text, image, sounds) are abstractable into a different kind of physical signal unit (electronic/digital) for transmission and recomposition in another place/time? (Hint: as you’ve learned from Peirce and semiotic theory, meanings aren’t properties of signals or sign vehicles but are relational structures in the whole meaning-making process understood by senders/receivers in a meaning community.)

The physical/perceptible components of symbol systems are abstracted into a  electronic/digital units by using 0 and 1 (bit) to construct And / Or questions (true/not true)to narrow down a question until there are no more decisive questions and therefore gets the answer, which is the physical components we refer to.

According to Hillis, bit is “the smallest ‘difference that makes a difference’ ” — “A signal that can carry one of two different messages (like 1 or 0) is called a binary signal, or a bit.  Bits are designated by 1 and 0. “The computer represents numbers, letters, and everything lese with patterns of bits.”

“Computers can use combinations of bits to represent anything; the number of bits depends on the number of messages that need to be distinguished.” (p28)

The meaning-making process of computing is represented by how logical decisions are made in the And / Or (true/not true) questions.  Since every object (physical existence) can be “translated” into bits that can construct questions above, bits can represent basically anything.

I have read the meanings but I am still lack of a procedural understanding of how physical presence can be translated into computing language and digital units, therefore I don’t know how to literally answer this question. It’s like the information I have are all fragments (“entropy”/logic gate/true or not true questions…) but I don’t know how to install all of them in series.

References

Daniel Hillis, The Pattern on the Stone: The Simple Ideas That Make Computers Work (New York, Basic Books: 1998; rev. 2015)

# Week 5 – Yanjun Liu

“The major perspective we adopt in this book regards a language as a cognitive system which is part of any normal human being’s mental or psychological structure.” (Radford, et al, 2009)

“In linguistic terms, a “natural language” is any human language acquired ‘naturally’ by being born into a language community. “(Irvine, 2020)

According to Stevin Pinker, language includes words and rules. From my personal understanding, a language is a specific phonetic system conveys meaning and can only be understood within the same cultural context.

(parsed result of XLE-Web)

It is very interesting to find out that we are speaking according to particular rules and sequences without actually knowing it. Also, I find that human being has the instinct of reordering words according to the rules that imbedded in our heads, which enables us to interpret meaning of a sentence without correct word orders. For example, ”吃了吗您？“ is a way to greet people in northern areas literally meaning “Did you eat？” (“how are you”, in fact”). However, the correct sentence order should be “您吃了吗？“(the verb “吃” should be placed in the second position). When people are saying that without correct order, everyone understands. When I am speaking English, sometimes I don’t follow the particular orders but native speakers can always understand. These are proofs of a cognitive interpretation system that related to Broca’s area and Wernicke’s area.

References

Steven Pinker, “Language and the Human Mind”

Martin Irvine, “Introduction to Linguistics and Symbolic Thought: Key Concepts” (intro essay)

Steven Pinker, Words and Rules: The Ingredients of Language. New York, Basic Books, 1999. Excerpt, Chapter 1.