580 likes | 803 Views
Computational Thinking is Informational Thinking. Greg Michaelson School of Mathematical & Computer Sciences H eriot-Watt University G.Michaelson@hw.ac.uk http://www.macs.hw.ac.uk/~greg. Models. we make models of the world to: understand it change it in predictable ways.
E N D
Computational Thinking is Informational Thinking Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University G.Michaelson@hw.ac.uk http://www.macs.hw.ac.uk/~greg Computational Thinking is Informational Thinking
Models • we make models of the world to: • understand it • change it in predictable ways Columbus Globes http://www.maps2anywhere.com/Globes/columbus_world_globes_01.htm Computational Thinking is Informational Thinking
Programs and models world brain • a program: • maps the abstractions of a conceptual model model Computational Thinking is Informational Thinking
Programs and models world brain • a program: • maps the abstractions of a conceptual model • onto the concrete behaviours of a physical computer model program computer Computational Thinking is Informational Thinking
Programs and models world brain • a program: • maps the abstractions of a conceptual model • onto the concrete behaviours of a physical computer • so the behaviour of the program on the computer tells us about the world • computing model program prediction computer Computational Thinking is Informational Thinking
How do we...? • make models? • solve problems • realise models as programs? • write programs • programming Then a miracle occurs... http://www.sciencecartoonsplus.com/pages/gallery.php Computational Thinking is Informational Thinking
Discourse & method • should we separate out: • problem solving • model making • programming? • are they inextricably linked? Computational Thinking is Informational Thinking
Discourse & method • we need languages/notations to: • solve problems • make models • write programs • should these be the same or different? Computational Thinking is Informational Thinking
Computing Science? • academic discipline • underpins all ICT • model making • tool building • theory & practice of computation • making models of reality from information structures & algorithms • animating models on computers • programming bridges models and computers Computational Thinking is Informational Thinking
Computing Science? • is programming the “new Latin”? • should we teach all students to program? Observer 1/4/12 Computational Thinking is Informational Thinking
Computing Science? • NO! • we need to teach all students to think: • first characterise problem • then choose technology • how to characterise problems? THINK! Computational Thinking is Informational Thinking
Computational thinking • modern approach to problem solving • draws heavily on insights from Computing Science • very widely applicable • not about programming http://chomskyscolorlessgreenideas.blogspot.co.uk/2009/09/chinese-room.html Computational Thinking is Informational Thinking
Computing triangle Computational Thinking problems praxis solutions concepts Computing Science ICT social needs tools Computational Thinking is Informational Thinking
Computational thinking • homage to: • N. Wirth, Algorithms + Data Structures = Programs, Prentice-Hall, 1973 • information + computations = solutions • how do we know when the problem is solved? • what information is relevant to solving the problem? • how must the information change for the problem to be solved? • what computation(s) should we perform on the information to reach the solution? Computational Thinking is Informational Thinking
Computational thinking • hardest part is characterising the problem • two standard approaches: • ask someone else... • look for a similar problem you already know how to solve • what makes problems similar? • similar information + computations Computational Thinking is Informational Thinking
Computational thinking • four core techniques; • decomposition • pattern recognition • pattern generalisation/abstraction • algorithm design Computational Thinking is Informational Thinking
Decomposition • identify the information needed to solve problem • break the problem up into smaller sub-problems • identify the sub-information needed to solve sub-problems http://www.lostateminor.com/2012/03/14/if-stonehenge-came-with-ikea-instructions/ Computational Thinking is Informational Thinking
Pattern recognition • look for patterns amongst problems • have I seen a problem like this before? • how is this problem different? • look for patterns in the information • how is the information structured? • are there useful relationships within the information? • have I seem information organised like this before? • how is this information different? http://en.wikipedia.org/wiki/Bank_statement http://www.moneymatterstome.co.uk/interactive-workshops/writingcheque.htm Computational Thinking is Informational Thinking
Pattern generalisation/abstraction • what is the general case for my problem? • what doesn’t change in how sub-problems are organised? • what does change? • what is the general organisation of the information? • what doesn’t change in structure? • what information does change? http://en.wikipedia.org/wiki/Bank_statement http://www.learndirect.co.uk/campaigns/worth-learning/managing-money/understanding-bank-statement/ Computational Thinking is Informational Thinking
Algorithm design • what is the sequence of steps from the initial information to the problem being solved? • how are sub-problems connected? • how does the information change between steps? Mug design – Le Chat Noir Boutique http://www.lechatnoirboutique.com/proddetail.php?prod=FSFPTS Computational Thinking is Informational Thinking
Applying computational thinking • what does this mean for practical teaching? • where to begin? • are familiar approaches useful? • can we retrofit computational thinking to what we do already...? An armillary sphere and discussion by R. W. Seale, in A New Geographical Dictionary," published by J. Coote, London, 1760 *http://www.columbia.edu/itc/mealac/pritchett/00routesdata/1700_1799/compendia/coote/sphere.jpg Computational Thinking is Informational Thinking
Current approaches • programming language oriented • full strength language • pedagogic or full strength subset • functional/logic • object oriented • pseudo code – language independent • simple to complex • stepwise refinement • structured programming • iterative prototyping Computational Thinking is Informational Thinking
Current approaches • components • modular programming • algorithms • data structures • types • classes • libraries • design • flowcharts • data flow • entity relationship • UML • use case • class diagrams • structure diagrams • sequence diagrams • state machines Computational Thinking is Informational Thinking
Current approaches • fashions change • too many possibilities • none work easily beyond simple cases • all have a strong focus on the final program • programming not hard when you know how to solve the problem... • ...except for vagaries of specific language syntax & semantics & tools • get in the way of problem solving & model making Computational Thinking is Informational Thinking
Forget the past...! • familiar approaches useful • at end of problem solving to realise solution • with more advanced classes when basic computational concepts understood • need to focus on problem without worrying about how to implement solution • key is to characterise information & computations • start with information, not computations Computational Thinking is Informational Thinking
Characterising information • information = base/atomic elements + structure • NB not type, class etc • programming concepts • used to represent/implement problem information Computational Thinking is Informational Thinking
Characterising information • base/atomic elements • things! • at simplest, represented assymbols • sequences of characters • unitary entities that are meaningful • e.g. words, numbers • elements may be composite • made up of sub-elements • structured Computational Thinking is Informational Thinking
Characterising information • information structures • sequences: before/after, unordered/ordered • tables: rows & columns of contents • arrays: index & contents • record: fields & contents • lists: head & tail values • trees: value & branches • graphs: nodes & arcs • NB not data structures: programming concept Computational Thinking is Informational Thinking
Characterising information • structures have equivalences • table == array of records of row/column contents • array == list of index/value records • list == array of records of head & tail • for some problems, base elements in structures are themselves structures • where to begin...? • back to Computing Science...? Computational Thinking is Informational Thinking
Thinking about information • start in real world! • look at lots of concrete examples: • parked cars • numbered houses • supermarket queue • English v Scottish bank queue • shopping list • receipt • bill • account statement • itinerary • diary • calendar • invitation list • address book • seating diagram Computational Thinking is Informational Thinking
Thinking about information • shop catalogue • library catalogue • family tree • cladistic tree • decision tree • underground map • road map • lottery ticket • betting slip • sports league table • mobile contacts • browser favourites • social media friends • eBook downloads • digital photo album • digital music library • music play list Computational Thinking is Informational Thinking
Thinking about information • use concrete problem scenarios: • typically, how to find specific information in structure • start from scratch • try to characterise scenario’s: • elements • structures • don’t yet introduce named structures • do this intuitively Computational Thinking is Informational Thinking
Thinking about information • ask if information is: • simple or composite • linear or grid or branching or cyclical • unordered or ordered • fixed or changeable: • content • size • shape Computational Thinking is Informational Thinking
Thinking about information • ask how to access elements • why do you want to access elements • which elements do you want to access • how does why/which affect access • where to start access • how to continue access • how to know if successful/unsuccessful • what to do if unsuccessful • then ask how to add/delete/modify elements Computational Thinking is Informational Thinking
Thinking about information • next, compare apparently disparate structures • ask what: • changes • stays the same • look for similarities in: • concrete detail • gross structure, ignoring elements • access/update/add/delete • use comparisons to draw out named structures Computational Thinking is Informational Thinking
Thinking about information • finally develop notion of abstract data type (ADT) • operations to: • construct new, empty structure • add to structure • find in structure • change contents • delete from structure Computational Thinking is Informational Thinking
From information to computation • abstract data type defines base operations • like the verbs of a language • computations structure these operations into algorithms • try to make structure of computation follow structure of information • not yet programming... Computational Thinking is Informational Thinking
From information to computation • go back to scenarios • computation solves problems by changing old information into new information • in the scenario, explore sequences of information change Computational Thinking is Informational Thinking
From information to computation • typically want to: • traverse structure • visit each element once • continue visit until some condition is met • do something to each element • accumulate intermediate information Computational Thinking is Informational Thinking
Structure traversal • bounded iteration • from first to last element • notion of next element • unbounded iteration • continues while some condition holds • how to start/continue/end iteration...? Computational Thinking is Informational Thinking
Structure traversal • bounded recursion • base case • at end of structure so return final value • recursion case • do something with current element • recurse on rest of structure • how to start/end/continue recursion...? Computational Thinking is Informational Thinking
Accumulate information • need to keep track of intermediate stages in computation • different positions in structure • partial results from computations • variable • general name/value association • change association with new value from computation, often using old value • use variable to manage stages of traversal... Computational Thinking is Informational Thinking
Do something to element • change element • how to identify element? • position in structure associated with a value • position often found via structure name • position is like a compound variable Computational Thinking is Informational Thinking
How to decide what to do • often want to change element regardless of its properties • may only want to change element if it satisfies certain criteria • choice/condition • may want to change what to do next depending on element properties • use choice to manage stages of traversal... Computational Thinking is Informational Thinking
Characterising the computation • finally explore if computation is necessarily: • iterative, or could it be recursive? • sequential, or could it be concurrent? • linear, or could it be backtracking? • deterministic, could it be non-deterministic? • bounded, or could it be unbounded? Computational Thinking is Informational Thinking
But... • need to describe information and computation in a consistent manner • so why not just use a programming language? • programming is motivating • seeing things work early on is motivating Computational Thinking is Informational Thinking
But... • so, use practical programming alongside problem solving! • but... • choice of language affects what can be described • programming language fine detail gets in way of fundamental concepts • simple small scale intuitive techniques don’t scale to realistic problems • for problem solving, use a neutral notation • e.g. pseudo code Computational Thinking is Informational Thinking
Conclusions • focus on problem solving not programming • CT = decomposition + abstraction + patterns + algorithms • solution = information + computation • let information structure the computation • start with concrete instances • use CT to: • ask good questions • find well kent information structures • guide computation design Computational Thinking is Informational Thinking
Conclusions • CT is a framework not a recipe • CT components overlap and interact • maybe classic CT over-emphasises computation at expense of information? http://affordablehousinginstitute.org/blogs/us/page/251 Computational Thinking is Informational Thinking
Activity • choose two very different scenarios from the following list: • parked cars • numbered houses • supermarket queue • English v Scottish bank queue • shopping list • receipt • bill • account statement • itinerary • diary • calendar • invitation list • address book • seating diagram • shop catalogue Computational Thinking is Informational Thinking