We (my computer science education world) are creating a new course for all of our liberal arts students to take that is intended to teach them what computation thinking is, why they should know it, and how they will use it. For more details on this, I refer you to
- Computational Thinking – The Liberal Arts Education Challenge of the 21st Century?
- Computational Thinking – What is it? How will we teach it?
- KCEA ‘09 Computational Thinking Workshop
I just came across a current example of how I applied CT skills to solve an immediate problem. I think it will help demonstrate what CT skills are and how they apply to our everyday life. Here’s the background on the problem I faced.
I enjoy competition. As a kid I loved playing Monopoly, Risk, Life, Stratgo. I can remember Risk games with guys in my neighborhood which would go on for days. It was a blast. The thrill of victory. Leaning how to deal with defeat. Working harder next time to avoid it!
The other day I was watching one of these “Amazing Planet” shows where the focus was on animals of prey. They showed a huge crock laying a river as a heard of wildebeests ran threw. Then suddenly the crock lunges up and locks his massive jaws down on the leg of an ususpecting wildebeests. The commentator said “And the crock never lets go”. I got thinking about that as it relates to my bit business ventures. I like to lock onto a problem and never let go until the problem is no more. We’ll part of my education world allows me to track a select group of computer science students to intercollegiate programming contests. Part of this process involves creating a new problem set for each competition. The challenge of the problem set, a job for the judges, is to come up with just the right mix of problems that will
- all be solved by at least one team
- not all be solved by all teams
- allow every team to solve at least one
- keep the contestants problem solving for the entire length of the contest, usually 5 hours
Here are the pieces needed for each problem, usually 7-10 problems per contest
- a concise written description of the problem w/o ambiguities (perhaps the toughest part)
- sample test data with expected results to show an example, yet not give away all the potential “tricks”
- a solution that solves the problem correctly for all possible valid input data
- test data for the judges to use to test the student solutions – here’s where you try and catch the unexpected
- expected results for the test data
So here I am working on my problem, the details of which must remain fairly vague for this blog since the contest is still a few weekends away, and I need to come up with some test data. The problem I created involves roads, Starbucks and distances. I wanted to have several thousand data points in the test. Here are the steps I followed to create the test data
- using google maps I determined the actual distance between the 2 locations (part of the problem)
- using google search engine I obtained actual street names, about 2800
- using Excel I loaded the street names
- the rest of the steps (3) involved using Excel to combine the street names with some other numeric data, the details of which I must keep secret for now
- finally I exported the data out of Excel into the test file needed for the contest
In all I spent about 10 minutes creating a test file of 2800 records that will be used in the competition. None of this required any “computer programming”. But all of it required using existing software to solve my problem. This is an example of what computational thinking is and how it will impact everyone’s life as they live and work in an increasingly computer technologically filled world in which problem solving advances to a higher level as people learn how to combine their creative minds with the power of computational processes. This is computation thinking!
I would also argue that I was “programming”. Of course not in the traditional sense of writing lines of code in some cryptic, non human, language. What is programming? It is communicating to the computer using language it understands in an effort to solve a problem. I was program. I was telling my computer how to use google search, google maps, and excel to solve a problem. This is programming. Using abstractions to solve higher level problems. Man this bit building is fun!!