CT VS. Programming

I’ve dabbled a bit in learning Java language before via Processing. Readings from this week expanded the foundation of programing and provided us sufficient reasons why we should learn coding. In the video, Wing  also explained why computation mattersShe points to real world examples where machine learning in the sciences has produced results never available to us before. CT allows such data mining to be efficient; it allows efficiency in time, in storage space, and in processing power. Because of CT’s efficiency, these complex, vast projects could be processed by human.

However, I am still struggling to understand the relationship between programming and CT. Jeanette Wing clarifies that computational thinking is not equivalent to programming:

Computation Thinking is “A way that humans, not computers, think. Computational thinking is a way humans solve problems; it is not trying to get humans to think like computers. Computers are dull and boring; humans are clever and imaginative.”

Yet my own experiences with programming definitely feel like an exercise in thinking like a computer. When experimenting and learning this language, the salient feature is that users need to set up global variables at the very beginning of every work, so the following logic will add bricks on the foundation. However, normal human thinking would start from the goals they would like to accomplish. The fundamental structure projects “stack” in language, which is a useful way to keep track of the sub-networks. Similar to the trays metaphor, when running programs, computer will trace back to the global variable settings and run “void setup” and then run “void draw”. Just as Evans described, “We use a stack of nodes to keep track of the sub-networks as they are entered. The top of the stack represents the next node to process. At each step, we pop the node off the stack and follow a transition from that node.” Different from other mathematical process, commands wrote in “draw loop” run as infinite loops.

As Prof. Irvine mentioned “Program instructions are ‘read’ and executed in a linear path (serial processing); that is, processing requires a strict logical and physical synchronized time sequence. ‘Parallel Processing’ must sum up separate serial processes at synced time states.” The indefinitely running feature of draw loop in Processing is intrinsically bonded to the purpose of the software, which is to build electronic art and visual design communities. By infinitely running some variation, the process generates some patterns. As a rookie in Processing, I often accidentally made something interesting and when I scrutinize the “mistake”, I can learn how to appreciate the logic behind it. The fascinating part and aesthetic value of generative art is not the work itself, but also the code, the creative process.

Although experimenting is not the efficient way to work with programing, I think the the essence of CT is thinking creatively about varies possible solutions that could be realized via machine/software. Therefore, the experimenting experience could be used as a learning tool. After all, people can only be highly familiar with the language then could possibly know what  they could accomplish or what should be their goals.

I agree with Wing that CT should be a pervasive part of education, but I’m more skeptical of her proposition that CT can be practiced without programming, or saying people who are not competent and familiar with programming could truly understand CT.