Coding and Computing

With my background in operations management, it didn’t take much for Jeannette Wing to convince me of how pervasive “computational thinking” is within my field. For example, Wing’s descriptions of computational thinking below could just as accurately describe operations management:

  • Computational thinking is thinking in terms of prevention, protection, and recovery from worst-case scenarios through redundancy, damage containment, and error correction.
  • Computational thinking is using heuristic reasoning to discover a solution. It is planning, learning, and scheduling in the presence of uncertainty.
  • Computational thinking involves solving problems, designing systems, and understanding human behavior… (Wing 34)

Of course, these excerpts describe very broad concepts. On a practical level, there are dozens of operation platforms that can be tailored to meet individual organizations’ needs by performing the operations described in these concepts.  That said, even though the companies I worked for used operation platforms, the tool we most often used was Excel.

Working with the Python tutorial reminded me of using Excel, except with a higher degree of tailorability and functionality. In Excel, the standard grid with lettered columns and numbered rows allows users to define cells in the same way that they can define variables in Python. Furthermore, Excel is equipped with a broad range of functions that can be used to do anything from organize data sets to generate solutions to complex algorithms. In Python, it seems that you can program even more functions to change the nature of data and generate abstractions based on complex calculations. Based on this experience, it seems that while Excel offers various aids, such as auto-filled functions, that help users program computing abstractions, it is limited by the spatial constraints of the grid on which it functions. Python, on the other hand, does not have similar restrictions, giving the user a much greater degree of control and customization. The only catch, in my mind, is that users have to learn and somehow remember the coding language, with all of its syntax rules, etc. on which Python functions.

While that task seems somewhat daunting to me, one thing that I did find more user-friendly about Python was the responsiveness of its compiler. Initially, when reading about a compiler and an interpreter in Principles of Great Computing (Denning & Martell  92), I had trouble understanding the differences between the two. However, using Python I was able to understand how a compiler translates code once the user has completed it rather than continuously translating it through an interpreter. Unlike Excel, the Python compiler was relatively specific in highlighting the exact error within the code that I had written. Excel, on the other hand, will either compute the procedure you’ve designed or tell you simply that it didn’t work, forcing the user to retrace his steps in order to find the error. That said, and perhaps Python also has this option, Excel allows the user to toggle between an interpreter or a compiler. When using Excel, if you are building a system with multiple calculations of large amounts of data, you want to switch to a compiler because, as explained in Introduction to Computing the interpreter, which is constantly translating data, will execute functions more slowly than the compiler, which translates data after an entire set of functions has been programmed. (Evans 38-9)

On the whole, between building on my past experiences with Excel and the readings from this week, I thought that the Python tutorial was a helpful way of understanding computing concepts. However, one of the concepts for which I’m not sure if I understood the direct connection was the concept of stacking. I think I understand the concept in general as described in the Introduction to Computing (Evans 24-5), but I don’t see how it works with coding. I would be interested in understanding this concept further by discussing it in class!

Peter J. Denning, and Craig H. Martell, Great Principles of Computing. 2015. Cambridge, Massachusetts: The MIT Press.

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.