Computational Thinking

I found this week’s readings on the principles of computing to be especially interesting. The computer science courses that I’d taken only covered the syntax of programming languages. In these courses, I learned how to make remedial programs with C++, JavaScript, and Jython (a Java implementation of Python), but I never really understood the underlying design of the computing technology that they were implemented on. In one of these courses, I even remember talking about bits and bytes and learning how to decode numbers and letters into binary. But, we never talked about what the bits were. Even though we talked about information theory last week, I found Evans’ (2011) book to be extremely helpful when explaining how binary questions lessen uncertainty. His example of the number of bits in the outcome of tossing a six-sided die really helped me to conceptualize how computers can efficiently convey information. Instead of evaluating whether or not the die landed on one number, the computer can speed up the process by checking if it is greater than or equal to 4. By doing this, the program has a 1:1 chance of being true rather than a 1:6 chance.

On a broader level, an overarching theme that I noticed throughout the reading was that computer science is an interdisciplinary field. Wing (2006) argues that students, teachers, and parents need to know that “one can major in computer science and do anything” (p. 35). Her reason for thinking this is that computational thinking is a way of analytical thinking that could yield solutions to problem in any discipline. Further, Evans (2011) argues that computer science has roots in engineering, hard science, and the liberal arts. It is intuitive to think of computer science as a form of engineering or science, but the link between computer science and liberal arts seemed less clear. However, Evans’ argument that computer science has strong connections to the Trivium and Quadrivium was quite compelling. These arguments re-framed the way that I viewed computer science.

I also really enjoyed the LinkedIn Learning course on programming. Davis’ (2019) analogy of programming being like a recipe was particularly insightful. While this course was helpful, I’ve been taking a course on LinkedIn Learning called PHP for WordPress by Casabona (2020) and I encountered a common theme that we’ve been discussing in this course: modularity. For this reason, I’ll focus on the PHP course. In the course, Casabona (2020) kept referencing functions that PHP has created. He then mentioned that WordPress built on the functions that PHP created to make functions that are useful to WordPress developers. When he said that, I immediately thought of this course. Irvine (n.d.) writes that modular designs are “conceptual models of systems with interconnected subcomponents that can be implemented in real constructed things” (p. 1). While a program isn’t exactly physical, PHP developers defined functions based on the existing subcomponents of the programming language. WordPress developers then expanded upon these functions to make certain tasks easier for theme developers. These layers of abstraction make it easier for new developers to perform certain functions. But, if developers need a function to do something that no predefined function can do, they can always create their own function using the subcomponents of PHP. This example wasn’t a part of our reading, but I found it really interesting that developers could collaborate and modify things using the predefined PHP functions in WordPress.


References

Casabona, J. (2020). PHP for WordPress. LinkedIn Learning. https://www.linkedin.com/learning-login/share?forceAccount=false&redirect=https%3A%2F%2Fwww.linkedin.com%2Flearning%2Fphp-for-wordpress%3Ftrk%3Dshare_ent_url&account=57879737.

Davis, A. (2019). Programming foundations: Fundamentals. LinkedIn Learning. https://www.linkedin.com/learning-login/share?forceAccount=false&redirect=https%3A%2F%2Fwww.linkedin.com%2Flearning%2Fprogramming-foundations-fundamentals-3%3Ftrk%3Dshare_ent_url&account=57879737.

Evans, D. (2011). Introduction to computing: Explorations in language, logic, and machines. http://computingbook.org/.

Irvine, M. (n.d.). Introducing modular design principles. Unpublished manuscript.

Wing, J.M. (March 2006). Computational thinking. Communications of the ACM, 49(3), 33-35.