Skip to content

Latest commit

 

History

History
151 lines (91 loc) · 6.86 KB

File metadata and controls

151 lines (91 loc) · 6.86 KB

Notes on Computational Thinking

"Computational thinking will be a fundamental skill used by everyone in the world by the middle of the 21st Century."

  • Prof. Jeannette M. Wing, Computer Science Department, Carnegie Mellon University

Collection of Resources on Computational Thinking

Personal Take on Computational Thinking

To me, computational thinking embodies problem solving, logical reasoning, and applying concepts such as abstraction and modeling to solve problems. So, fundamentally, everybody uses some amount of computational thinking. The difference is that students and professionals in computer science, computer engineering, or electrical engineering use computational thinking a lot more than others.

The challenge is to educate youths with skills in computational thinking without necessarily forcing them to learn computer science, computer engineering, or electrical engineering. Computational thinking can be taught in classes in economics, sociology, physics, mathematics, music, and biology. Pedagogical styles, especially in K-12, need to incorporate computational thinking.

Competence in IT is not the same as acquiring knowledge about computer science (CS). A decent academic program in CS at a college/university is very rigorous, while programs in IT can be targeted to people of all ages, including children in kindergarten.

Apply equivalence checking to my intentions and what I say. Check if what I want to say matches with my intentions, and say exactly what I want to say. This would keep me out of trouble... Extensions and bug fixes, and additions of references, to this preliminary version will appear in the “real paper” of this draft of my abstract on “Application of ATPG and formal verification in conversations”

Concurrency and Parallel Computing

Coroutines

A coroutine is a means "to voluntarily suspend and resume execution of a process" \cite[\S3.4, pp. 88-89]{Tate2010}.

A coroutine can only change its own state; hence, the concurrency model is more predictable, understandable, and need less blocking states (i.e., bottlenecks) \cite[\S3.4, pp. 91]{Tate2010}.

Actors

An actor can modify its state and access (find out about, inquire, or determine) the states of other actors only via closely controlled queues; in contrast (on the other hand), threads have unconstrained ability to modify the states of other actors, and hence they are prone to race conditions (a classic problem in concurrency, or a classic concurrency problem) \cite[\S3.4, pp. 89]{Tate2010}.

When a race condition occurs, multiple threads can modify/access the same resource at the same time; this can cause unpredictable results to occur from execution of these threads \cite[\S3.4, pp. 89-90]{Tate2010}.

For the programming language Io, make objects actors by getting them to communicate via asynchronous messages \cite[\S3.4, pp. 89-91]{Tate2010}.

Futures

"A future is a result (or resultant) object that is immediately returned from an asynchronous message call". Before the result becomes available, the process is blocked and access to the future object is also blocked. After the result becomes available, the future becomes the result object \cite[\S3.4, pp. 90]{Tate2010}.

A future object can also provide automatic detection of deadlocks \cite[\S3.4, pp. 90]{Tate2010}.

Miscellaneous Information

Tail recursion optimization (in Prolog)

Tail recursion optimization optimizes the call so that the call stack, and hence memory usage (i.e., stack space in the call stack), can be kept constant; however, the recursive subgoal must be the last goal in recursive rule \cite[\S4.3 pp. 111]{Tate2010}.

References

Citations/References that use the LaTeX/BibTeX notation are taken from my BibTeX database (set of BibTeX entries).

Author Information

The MIT License (MIT)

Copyright (c) <2016> Zhiyang Ong

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Email address: echo "cukj -wb- 23wU4X5M589 TROJANS cqkH wiuz2y 0f Mw Stanford" | awk '{ sub("23wU4X5M589","F.d_c_b. ") sub("Stanford","d0mA1n"); print $5, $2, $8; for (i=1; i<=1; i++) print "6\b"; print $9, $7, $6 }' | sed y/kqcbuHwM62z/gnotrzadqmC/ | tr 'q' ' ' | tr -d [:cntrl:] | tr -d 'ir' | tr y "\n" Don't compromise my computing accounts. You have been warned.