# Introducing Computational Thinking into the Undergraduate Curriculum

NUS President Prof Tan Chorh Chuan delivered his State of the University Address on 4 Nov 2016. It was a visionary and impactful speech, titled ‘Empowering for the Age of Empowerment’. He spoke on NUS’ plans to empower students for the future, enable faculty to stand out globally and create new platforms for high impact. (You may view the event webcast or read President’s speech here.)

Amongst the many educational initiatives to prepare and empower students for the future, President had made mention that NUS is considering introducing Computational Thinking on a large scale. I would like to take this opportunity to share more about Computational Thinking.

What is Computational Thinking?

Computational Thinking has been known to humans as long as we have been thinking. One of the initial formalisations of Computational Thinking happened, perhaps, in Geometry.  Along with Euclid’s axiomatic approach to Geometry, which focused on proving properties of geometric objects like triangles and quadrilaterals, there was a robust parallel development of constructing objects using a ruler and a compass. This approach emphasised constructing objects (for example, constructing a right-angled triangle) over proofs. In fact, one fed the other, leading to increasing intellectual sophistication in the understanding of Geometry. Not only that, there was a pragmatic facet to it as well. It helped put Geometric conceptualisations into practice – in areas ranging from building construction to time-telling to Astronomy.

Another example of Computational Thinking in daily life is cooking! Humans have been cooking for a long time; in fact, civilisations take great pride in their cuisines. Any recipe which can be executed by a non-Michelin-starred cook is a fine demonstration of Computational Thinking. The ingredients of that recipe are precisely specified and the steps laid out clearly for anybody to follow. By following the recipe (think algorithm – a series of steps to the solution) fastidiously, we get delicious outcomes.

Fast-forwarding to modern times, Wikipedia explains that Computational Thinking was first used by Seymour Papert in 1980. It caught wide attention when Computer Scientist Jeanette Wing wrote an influential article about it in 2006 (https://www.cs.cmu.edu/~15110-s13/Wing06-ct.pdf).  It refers to the thought processes involved in formulating a problem and expressing its solutions in such a way that a computer—human or machine—can effectively carry out. Simply put, Computational Thinking involves creating and making use of different levels of abstraction, to understand and solve problems more effectively.

Why Computational Thinking?

Computational Thinking is important because this is the thinking process of creative humans.. First, it compels us to discard inessential aspects of any problem to focus on minimum conceptual abstractions that are salient to the problem. Second, it enables us to successfully accomplish even very complex tasks by breaking them down into a set of elementary simple tasks. (In Geometry, the elementary tasks are (i) drawing a line using a ruler and (ii) drawing an arc using a compass. In cooking, there are basic skills such as chopping, stirring, straining, roasting etc.) Third, Computational Thinking helps us give an idea of the inherent complexity of any problem. Simple recipes comprise fewer steps and complex recipes require more steps in a certain order. The chef who uses Computational Thinking realises the importance of preparing the ingredients beforehand and in the right order so that the meal arrives at the table at the right temperature. No one likes a cold, bleeding steak.

As you can imagine, this way of thinking practically covers most areas of human endeavours. All of us have been unconsciously practising Computational Thinking throughout our lives. What is different today is that many of these elementary steps can be performed by computers. In fact, Computational Thinking is increasingly recognised as a fundamental 21st century skill, especially in this digital and technology-centric era. Together with reading, writing, critical thinking and problem solving, Computational Thinking is ubiquitous with vast applications across a range of fields, so much so that practically no field has been left un-touched. It is therefore time that we, as a university, start thinking about Computational Thinking formally in our curriculum.

The relevance and importance of Computational Thinking is also borne out in the job market. The World Economic Forum recently published an article on 2017’s most in-demand skills, according to LinkedIn data. It is quite evident that data and IT literacy have become a necessity, and at the next level, data proficiency and Computational Thinking are critical, relevant and sought after. This list of top ten most sought-after skills may change with time, but it is an indication of the skills in demand now.

This trend in the labour market is not surprising. Big data and technology developments are shaping the world. In Singapore, the big data sector is set for big growth and EDB expects the data analytics sector to contribute at least \$1 billion to the economy every year by 2017. To stay competitive, companies will have to harness data for better decision-making.

Computational Thinking at NUS

NUS is mindful of these developments and we make effort to ensure that our educational programmes equip our graduates with the knowledge and skills to take on jobs immediately upon graduation, as well as to engage in lifelong learning, so that our graduates can adapt and learn to ride the waves and opportunities in this ever changing world.

A distinctive aspect of NUS’ curriculum is the General Education (GE) Framework. Comprising 20MCs, the General Education Framework serves as a common, core university experience for all students to be exposed to fundamental approaches to knowledge for a broad intellectual perspective and lifelong learning. Implemented in AY2015/16, the revised GE framework is designed as a five-pillar curriculum structure, and is closely aligned with the University’s educational philosophy which seeks to ‘help students become individuals with questioning minds, willing and able to examine what is taken for granted, and who engage in rigorous inquiry within and beyond assumed disciplinary borders’. The five pillars are:

• Singapore Studies
• Human Cultures
• Thinking and Expression
• Quantitative Reasoning

Under the Quantitative Reasoning (QR) pillar, all NUS students read GER1000, a module introducing foundational data competency, taught using a blended format. Lectures are pre-recorded and are available online for students to view, pause and play at their own pace; learning is facilitated and reinforced with face-to-face tutorials. The module introduces students to the role of data in addressing real-world issues, and how to collect and employ data to conduct projections and scenario planning. Students will acquire basic reasoning skills, and learn to quantify and characterise relationships between data.

Given the growing importance of quantitative skills, we plan to take one step further to introduce Computational Thinking as a requirement for selected undergraduate majors and degree programmes. Computational Thinking is a set of cognitive skills and techniques that can be used to support problem solving across situations and disciplines. More specifically, as Google’s website summarises, Computational Thinking entails

1. Decomposition – breaking a (big, complicated, complex) problem into parts or steps;
2. Pattern Recognition – finding and identify patterns and trends in data;
3. Abstraction – identifying the general principles that generate these patterns;
4. Algorithm Design – developing instructions for solving the problem.

Step by step, part by part, the solutions to the small problems can be brought together, and help shed light on and provide a solution to the big, complex problem.

Computational Thinking is useful as a problem-solving methodology, but beyond that, training in Computational Thinking can also help cultivate positive learning attitudes and values, such as tinkering and experimenting with solutions, debugging through finding and fixing errors, perseverance in working with difficult and open-ended problems, and confidence in dealing with ambiguity and complexity.

I hope NUS students will be keen to acquire and deepen their QR and Computational Thinking skills, and that you are curious and excited about the many future job opportunities in these fields. With a good foundation in QR and the added training in Computational Thinking for some of you, NUS students will gain confidence and are empowered to pick up computer coding, even if you are not a Computer Science major.

1. Jeremy Chen says:
2. Eldric Liew says:

Cooking by following recipes is most definitely not computational thinking. Claiming that following a recipe “is a fine demonstration of Computational Thinking” is like claiming that using an iPhone “is a great exercise of Engineering skills”.

A recipe is simply a series of instructions. This series of instructions could have come up through any set of possible means. For example, one might have one’s grandmother tell them something, but through lack of an ingredient or poor memory, change the recipe. Then this recipe may be handed down.

Following the recipe does not constitute thinking. Coming up with one does not require computational thinking, more often than not Edison’s method is used and “natural selection” determines what recipes are shared.

Finally, a recipe only expresses one form of computation – imperative (“how”). This is arguably the least useful form of computational thinking. When deconstructing a problem (“what”) one often gets more sub-problems (“what”). Only at the end is one concerned with “how”. Specifying “how” early removes many important optimizations (ask any compiler writer).

——————————————-

What codifies a computational thinker (at least IMO) is intent, awareness and expressiveness. Now you might say that I’m trying to one-up Google. Those 4 steps are “how to solve problems”. This is a technique, it can be learnt.

Intent, awareness and expressiveness are the “innate attributes” of those who can successfully use computational thinking. This is an internal attribute – it is not learnt, it is trained (much like how you train stamina, muscle strength).

Awareness begins at problem formulation – how well does one know exactly what problem it is that needs solving, most importantly including any implicit assumptions. It then extends to knowing what tools one has to solve the given problem. Finally in solving, more often than not, people “know” how to solve a given problem, but they don’t know how they know how to solve it. For example, most people who can draw or ride a bicycle seldom know the decision processes that go on in their heads. Virtually everyone knows how to sort objects, but only few know explicitly how they do it.

Expressiveness is the ability to state precisely what they are aware of. All the knowledge of how to solve a problem has marginal utility without the ability to communicate it. I’ll skip the academic part of it, but this is what an artist’s explanation looks like if they have good awareness and expressiveness: https://www.quora.com/Why-do-my-digital-color-drawings-look-awful/answer/Val-Choung

Intent is a little abstract. It might sound Wuxia, but its the difference between swinging your sword and cutting your opponent; the difference between a person who follows a recipe versus a Michelin star chef who knows what effect he wants his dish to have on a customer; the difference between having a solution that “just works” and one that works “exactly the way you want it to”.

Expert knowledge is understanding cause and effect. Intent is being (the cause of) the cause of the effect. Expert intent is making all the causes and effects align and dance to your will.

1. Jeremy Chen says:

Yup. That’s the way to cook. Start from an intended outcome with an enumeration of all the salient characteristics and figure out what transformations are required to effect that… effect.

Extra points for working with constraints such as how the usual Sheng Siong bought potatoes will never give you rosti that looks like what you get at Marche. That’s projection, and onto a strange non-convex set.

1. Jeremy Chen says:

That’s also how to design coursework.

But the jury is out on whether intent should be made explicit at the start. That would kill all plot twists. Imagine 6th Sense without plot twists.

1. Eldric Liew says:

Hmm? I don’t think its easy to teach intent, just to give examples of it.

Actually intent and plot twists don’t actually have an issue for the simple reason that humans will never have perfect knowledge. So, one can set out to do something, but on the way serendipitously notice an optimization (basically all dynamic programming). Those are the things you can “hope for, but not expect” (of course, if its on an exam, you can expect it).

There’s a limit to how much (top down) intent one can teach. Theoretically you can top down all the time, in practice human stack size is finite.

It does get quite bad when courses have no intent whatsoever. “Let us begin this topic, definition 1, definition 2, …, , thus we can call this theorem 1 “. . After 15 minutes the student probably has his consciousness stuck elsewhere. Or courses which are like “oh look, a bag of techniques!”

2. David says:

While I agree with your remark that merely following a precise recipe has absolutely nothing to do with thinking, I note that the original blog post did not say it was. Quite ambiguous. It could have been intended to convey that the recipe itself was a product of computational thinking, and that such a process is necessary for the recipe to be a good one. In particular, without a proper appreciation for precision and firm understanding of algorithms, many people are actually unable to write down good recipes, namely recipes that others can follow and obtain the same results! You would be surprised to know that this problem is especially prevalent, and it is incredibly frustrating trying to understand people who are imprecise, not to say exchange ideas.

Ironically, if the intended meaning of the analogy of recipes used in this blog post is as I have surmised above, this imprecision is an actual example of how important it is to make our statements as precise as possible. Unsurprisingly, doing so is not so easy outside of mathematics and the physical sciences, and so we must guard against hand-waving even more there.

Just to give a concrete explanation, consider that if “recipe” was supposed to correspond to “algorithm”, then since “algorithmic thinking” is supposed to mean “thinking and expressing oneself in precise and algorithmic terms”, it corresponds not to “following a recipe” but to “concocting a recipe”. It is *quite imprecise* to say that “an example of Computational Thinking in daily life is cooking” and “any recipe which can be executed by [anyone] is a fine demonstration of Computational Thinking”. Instead one should say “computational thinking in daily life arises in cooking for example” and “any recipe that can be executed by anyone is a product of excellent computational thinking (in contrast with recipes that have unclear instructions)”.

In a sense, the problem is *not* the lack of computational thinking per se, but the lack of precision. Anyone who wants to be precise will very naturally end up thinking and talking in algorithmic terms, but if you just attempt to teach so-called “computational thinking” by itself it is likely to appear to students as just another subject and not something important. I can tell you that the vast majority of students *and* teachers are unable to pose questions precisely. In case you do not believe me, consider the question “Solve x^2 + 1 = 0.” Ahem, what is x? An angsana tree? An axe? An element of the field with 5 elements? No excuse you give can chase away the fact that the question has not specified what x is to be. If we do not show by example how to be precise, it would be hypocritical to expect students to be precise, but that is precisely what they need in order to significantly improve learning.

Algorithms can only be appreciated when one desires to precisely describe procedures, processes and activities. So in my opinion the goal of precision has to be the underlying motivation behind computational thinking, for the desired outcome to be achieved.

3. Ken Kahn says:

There are two views of computational thinking: (1) thinking tools for problem solving ala Wing 2006 and (2) powerful ideas ala Seymour Papert beginning at least 1971. I was a student of Papert and was a participant at the US National Academy of Workshop on the Scope and Nature of Computational Thinking (2010) – https://www.nap.edu/catalog/12840/report-of-a-workshop-on-the-scope-and-nature-of-computational-thinking

What I observed was that about the half the participants were in computer science departments and were focussed on problem solving and coding. The other half had the much broader conception of computational thinking that Seymour Papert wrote so elegantly about. A recent paper (The Long Quest for Computational Thinking – http://dl.acm.org/citation.cfm?id=2999542) describes the 60 year history of computational thinking and argues for a much broader interpretation than Jeannette Wing’s. The provost’s penultimate paragraph touches on this broader conception of computational thinking.

4. Ken Kahn says:

Regarding whether cooking is a good illustration of computational thinking, it can be expanded to address much more than sequence. It can involve parameterisation, iteration, conditionals, problem decomposition, procedural generalisation, concurrent processes, scheduling processes, higher-order programming, meta programming, and debugging. See these slides (https://docs.google.com/presentation/d/1mfscXgIQ7MoTCcktYqynzeQBCZ8Oan_l7Jz53op_Q2s/edit#slide=id.g5fd5a45bc_055) from my USP module on Computational Thinking and Modelling.

5. Tan Eng Chye says:

Thanks for your comments. I will leave the blog post in the original form, so that readers can learn from reading these post on how statements on Computational Thinking can be made more precise and accurate. Another point is that Computational Thinking is but one of many modules, together with the General Education curriculum, to help students develop and improve clarity of thought.

Thanks to Jeremy for sharing a link to a repository of a course design on IT in Business. I agree with him on the importance of IT in business. The challenge for IT courses is to stay continually updated as things change quickly but that is the reality. As a note of interest, prior to 2000, NUS Business undergraduates were required to do a module on coding, but that requirement was removed in a major curriculum revamp in 2001. Recently, Business School has made coding a requirement for incoming Business undergraduates.