Can construals be used to teach computational reasoning? This paper outlines ...... Envisioning process as content: Toward a renaissance ... Weizmann Institute.
Teaching Computational Reasoning Through Construals Errol Thompson Aston STEM Education Centre – Computing Education Research
Abstract Can construals be used to teach computational reasoning? This paper outlines some of the issues of teaching computational reasoning and then endeavours to show how it might be possible, through using the principles of variation theory to design teaching sequences and consequently construals that open the learner up to the computational reasoning ideas being considered. Обучение вычислительному мышлению используя интерпретации Могут ли интерпретации быть использованы для обучения вычислительному мышлению? Эта статья рассматривает некоторые вопросы по преподаванию вычислительного мышления и затем пытается продемонстрировать как использование принципов теории вариации для разработки последовательности обучения, и следовательно интерпретаций, может раскрыть ученику идеи вычислительного мышления.
Introduction Computational thinking is a fundamental skill in computer science aimed at developing models that use computation to solve problems. However, it is contended there is no evidence that computational thinking skills are transferable to domains outside computing even though the problems that computing solves are from other domains. In this paper, we explore how variation theory can be used to design contruals, objects that help us “explore and record our emerging understanding” (Beynon et al., 2015) and to use these to aid in the teaching of the concept of invariants. The emphasis is on the process by which an invariant might be discovered rather than focusing on the outcome of the discovery process. In the first section, we explore what is meant by computational thinking and why we are using computational reasoning as an alternative description. This is followed by a discussion of variation theory and its use to make visible the object of learning. A discussion of constructionism and its relationship to programming and learning lays the focus for looking at the computational concept of invariants. This is the concept that the paper shows how through applying variation theory, a solution to two variants of the game of nim can be solved and the learner can be aided in developing a process for discovering invariants in
relevant problem spaces. It is envisaged that the process could be extended to other games or real world problems that display similar characteristics. We argue that the focus should be on making visible the process of discovery and not simply the conclusion of the process. This is in line with the process as content approach to curriculum development (Costa & Liebmann, 1996). From exploring these games, we seek to draw some conclusions about what makes a good construal and the features that are appropriate. We also seek to explore what should be observable and how this impacts the variations that we should use to explore a phenomenon such as computational reasoning.
Computational Reasoning The common terminology when talking about the fundamental skill of computer science is computational thinking. Aho (2011) says “Mathematical abstractions called models of computation are at the heart of computation and computational thinking. Computation is a process that is defined in terms of an underlying model of computation and computational thinking is the thought processes involved in formulating problems so their solutions can be represented as computational steps and algorithms”. These mathematical models are most often represented as programs executed on computers. The more generic application of computational thinking was proposed by J. M. Wing (2006) when she said “Computational thinking involves solving problems, designing systems, and understanding human behaviour, by drawing on the concepts fundamental to computer science. Computational thinking includes a range of mental tools that reflect the breadth of the field of computer science.” This is demonstrated within computer science not simply by solving problems computationally but also through developing computational models that reflect our human understanding of nature’s processes. Nature inspired computing or evolutionary algorithms draw on ideas from nature to produce computational solutions (De jong, 1999). J. Wing (2010) amended her definition to emphasise the importance of “an informationprocessing agent” in processing the results of computational thinking. Taking a broader understanding of “an information processing agent”, we could argue that computational thinking and reasoning is about helping a human as “an information processing agent” solve problems utilising computational models and techniques. However, limiting the human agent to being “an information processing agent” may limit the cognitive abilities of humanity. The computational models that are built are designed to solve problems in a wide range of domains yet it is argued that “applying computing ideas in daily life is less likely” (Guzdial, 2016, p. 40). That is, there is no evidence that people use computational models or thinking to solve problems in their daily lives despite computational models being developed “to facilitate computing work in other disciplines” (Guzdial, 2016, p. 40). The core argument here is that computational thinking is not utilised away from computing work to solve everyday problems. The computational knowledge is contextualised to the solving of
problems utilising a computer. Does this reflect that most computational thinking skills are taught in the context of teaching programming? Denning (2017) summarises this as “being a skilled performer of an action that could be computational does not necessarily make you a computational thinker and vice versa” (p 38). This also does not rule out the possibility of teaching someone enough computational thinking so they can design tools for their own domain. If we are not seeing evidence of the application of computational thinking outside the context of computing particularly in our graduate students then is it possible that our method of teaching and/or assessing the computational thinking and reasoning skills is too restrictive? Should we be looking to teach for skill transfer? Klahr and Carver (1988) claim that it was possible to teach transfer of debugging skills and in the broader context, it is also argued that it is possible to teach critical thinking and metacognitive skills in a cross domain approach (Halpern, 1998). Alternative issue may be that we are assessing the skills development in an inappropriate way. Denning (2017) suggests that we should be testing competencies since skill accusation is a manifestation of tacit knowledge (Polanyi, 1966). Denning suggests using a model focused on skill acquisition such as the Dreyfus and Dreyfus (1980) model. Other cognitive models (Anderson et al., 2001; Biggs & Collis, 1982) at the higher end of their assessment strategy are looking for evidence of metacognitive understanding (knowledge of one’s own cognition) or connection of ideas across domains (SOLO’s extended-abstract (Biggs & Collis, 1982) or synthesis (Bloom, Engelhart, Furst, Hill, & Krathwohl, 1956)). Knowledge about or application within a restricted domain is inadequate. If we are to see computational thinking as a transferable skill then we need to assess it as a skill in a context where learners are having to transfer the skill in a cross-domain situation. However, we also need to be aware of the resistance that we will get to such an approach because of the learner’s conception of the learning task (Marton & Säljö, 1997) or their expectation of the source of knowledge (Perry, 1968, 1988). Kowalski (2011) demonstrates an alternative approach by utilising computational ideas to review human instructions and to examine backward and forward reasoning. His argument is that applying computational logic can help us as humans to understand the reasoning process and to improve our approach to reasoning. Does the same apply to computational thinking or reasoning or are we talking about understanding more generic thinking skills and utilising a wider range of thinking skills? It is Kowalski’s perspective that has influenced our use of the terminology computational reasoning as opposed to computational thinking. We are arguing that computational thinking that produces a model is inadequate and that we need to foster an ability to reason about problems in such a way that we can verify the logic that helped us arrive at our solution. Many of the problems (i.e. tower of Hanoi, nim, tic-tac-toe, mazes, …) that we use in computer science have solutions that are readily accessible to learners. The issue is not whether they can find these solutions but whether they can apply the process that discovered these solutions. We use our problems not to teach solutions but to teach
processes or the reasoning that helps create these solutions. The skill is being taught should be the problem solving process (computational reasoning). The techniques (computational thinking) form part of the tool kit to aid the computational reasoning process. Should we start our teaching of computational thinking by starting with the issues of reasoning and being able to justify the outcomes of our computational thinking? Our construals endeavour to help the learner understand why these games have the outcomes that they do and not simply to be able to find or implement solutions. That is the learner should be able to reason about their solution and the problem space.
Variation Theory The core principles of variation theory are that for the learner to perceive the required object of learning, they need to be able to discern it from the background of other objects. This means that the critical aspects of the object must become visible to the learner. A possible sequence for achieving this is: Instantiation – Contrast – Generalisation – Fusion (Marton, 2015, pp. 53-54, 220) Instantiation is “the learners’ initial encounter with the object of learning, in the form of a problem that captures holistic qualities of it” (p 221). Contrast involves a pattern of variance and invariance where the aspect to be discerned is varied against the invariance of other aspects (p 49-50). Generalisation applies the opposite principle of keeping the aspect to be discerned constant while varying other aspects (p 50-51). Fusion involves putting the parts together to reform the whole. The learner needs to be able to discern the aspect while all aspects vary (p 51-52). An example might be the learning of what the colour green means. Instantiation would mean introducing the learner to a green object. Contrast would be using similar shapes but different colours.
Generalisation would involve retaining the same colour but altering the shape.
Fusion would mean varying colour and shape while getting the learner to identify the colour.
If we consider a computational thinking technique then we want the learner initially to be exposed to the technique in a way that makes the technique visible and potentially enables the learner to ask questions about what they have seen (instantiation). Keeping the nature of the problem constant, the learner then needs to be exposed to variations in each critical aspect of the technique so that they become aware of that technique and can identify it. This can be verified by keeping that aspect constant while varying other aspects related to the technique. Finally, they need to see all aspects of the technique varied together.
Construals for computational reasoning The basis of the construal work conducted by Beynon and colleagues is the application of a constructionist understanding of learning. The learner constructs a model, a construal, that aids them in developing their understanding the phenomena being studied. A key component of Beynon et al.’s (2016) approach is the use of observables so that the learner can see the changes in what they are modelling. The question being asked in this paper is where does such building begin? Does it come through building the model or experimenting with its operation? Applying the principles of variation theory to computational reasoning means trying to expose the critical aspects of the computational techniques. Combining variation theory with those of using observables in construals, this paper explores how we might construct construals that enable the learner to develop computational based game playing strategies. To illustrate these issues, we will use variants of the nim game that have predictable outcomes. The objective of using nim is to expose the ideas of invariants (Zingaro, 2008) as they apply in developing computational algorithms. Since the playing strategy can be exposed quickly and predictions of the game outcome made from the current state of the game, we endeavour to encourage the learner to think about how they might express a rule for the state of the game that can be used to determine the next game action. Through modifying the rules of the game additional variation is added to the game to see whether adaption of the computational strategy can be applied in more complex variants of the game.
Construction, programming, and learning The Construit environment is designed to allow a user to build a computational model, a construal, to make sense of a situation (Beynon et al., 2016). The intent is not to provide the learner with a blank sheet in which to construct a model but to provide a model with which the learner can observe and experiment (Beynon et al., 2015). This could include using some of the programming constructs within the construit environment to manipulate the model. In programming courses, the learner might be exposed to examples of a programming construct. The learner is expected to start with either a blank sheet or maybe a skeleton of a program, and begin to fill in the gaps to construct a program or method applying the construct being taught. A construal allows the learner to play with the model to observe its operation and then to manipulate the model to see the impact of the changes that they make. This reflects the learnable programming approach of Victor (2012a, 2012b) where the
learner is provided with a coded solution and its output and they can manipulate values within the program code in order to understand the impact of programming constructs. Considering variation theory alongside the construit and learnable programming approaches, we do not want our learners to start with nothing and to try and construct something that demonstrates the computational idea that we want them to understand. We would argue that this puts the focus on the language constructs and not the computational idea. The models that we want to construct must make visible the computational concept that we want our learners to comprehend and to build an understanding of. As a consequence, it is our task to build a construal that enables this type of learning.
Invariants The core computational concept for this example is invariants and their implications in solving a problem. Zingaro (2008) defines invariants as “properties of program segments that remain true throughout the scope to which the invariant applies” (p 2). If we want learners to use invariants to aid them in writing their code then we need to help them identify invariants in the problems that they are trying to solve in the code segments that they are trying to write. The question then is whether it is possible to discern the critical invariants in the problem that would aid the learner. From the perspective of a construal, how do we design a construal that aids the learner in understanding what an invariant is and how you might go about discerning and defining an invariant?
Seven Stone Nim Seven stone nim is a game involving two players. Starting with a pile of seven stones (Figure 1), each player, on their turn, takes one or two stones. They cannot pass on their turn. The player who takes the last stone wins.
Figure 1: Seven stone nim start state.
From the perspective of our learner, creating a strategy to win the game is not the final solution. What we want is a strategy for identifying invariants and applying them to solve problems. It is important to recognise the difference in focus. Applying the principles of variation theory and the sequence to foster awareness and understanding of what an invariant is, we applied the following sequence. This strategy was initially used in tutorials with students using toothpicks as the stones.
Figure 2: A sample game showing the play history
Instantiation The first step is to have the students play the game having asked the question “is there a way to ensure that you can win?” In many instances, the students will play the game and one or other player will win. Can they determine who will win? Generally, not. Part of the issue here is that the student often does not understand the nature of the game or the mathematical principle that underlies the winning of the game. These are not visible simply by playing the game. Contrast To show contrast, we want to vary the critical aspect while keeping the other aspects constant. The problem with invariance is that we want to expose something that does not change. However, there is a pattern of variance with respect to the game state that does expose the invariance and this is the prediction of who will win in relation to the number of stones remaining. If we pause the game at critical points, can the players determine who will win? When there are just one or two stones left, the answer to who will win is relatively obvious. If you pause at three stones, often the person whose turn it is realises they cannot win but not always. At four stones left, can they now reason about how many stones they should take if they want to win? Hopefully, they reason that it is one so they leave their opponent with three. If they have that clear, can they reason about how many stones to take if five stones are left? Can they now predict who is likely to win and why they are likely to win? How general is their theory of prediction? Will it work with six stones and seven stones? How do they word their rule for their prediction? Although the invariant “number of stones left after my turn must be a multiple of 3 if I am to win” is important, it is the reasoning that gets to that invariant that is important for computational reasoning. Can they now turn this around to be a rule for determining how many stones they should take on their turn? For example: The rule for my move is to take the maximum of 1 stone or the remainder of dividing the number of stones by three.
It may take several times of playing the game with pauses and questions for them to come to this conclusion. As the facilitator of their learning, you want to pause and challenge them to think at each state of the game so the invariant is exposed (multiple of three). The critical aspect from the variation theory perspective is the number of stones remaining to predict a win. A key point here is that the student may have concluded how they can win seven stone nim but do they recognise the process that they used to come to that conclusion? If our focus is on computational reasoning then what we are really wanting to expose is the process that enabled them to determine the states that would enable a win. Is that what we have achieved with this contrast variation? Generalisation Our initial thoughts on generalisation was simply to change the number of stones that the game starts with (i.e. will our play rule still apply if we start with ten or eleven stones?). Does this expose the computational thinking process that helped us derive the invariant? It confirms the invariant but we would contend that it is not exposing the process. In fact, our contrast sequence may not be showing the process. Is there a variation of the game or a very similar game for which the same process of deriving an invariant applies? What happens if we change the win rule to the winner is the person who forces the other player to take the last stone? When can we begin to predict a winner? Do the learner’s follow the same process as for the previous version of nim? In terms of the process of revealing the concept of an invariant, we may now have begun the process of generalisation but in terms of the computational reasoning process for discerning invariants, we want to argue that we are still in contrast mode. If we want to generalise the process of discerning an invariant, we want a variation of the game that still has an invariant but has greater complexity. This is possible using three pile nim. The seven stone nim construal The version of the game implemented by Thompson (2017) enables the learner to play the game. It also provides the opportunity to observe the prediction of who will win for each state, and the ability to view the history. To encourage the learner to try and construct an invariant rule, it has the capability for the learner to create a formula for deciding how many stones to take. There is also the option to change the winning rule so that the player who takes the last stone loses. This changes the behaviour of the construal while leaving the features of the game in place. A return to generalisation Nim is what is known as a mesére game (Siegel, 2008). The generic nim game starts with any number of piles of coins. In their turn, a player can take as many stones as they want from a single pile. The person who takes the last stone wins. A pile can have any number of coins at
the start of the game. For our study of the game, we will use three piles from zero to fifteen coins. Beynon (2017) implements this variant as a construal and uses a very similar strategy to that described for seven stone nim to help the learner understand how to win the game. He instantiates the game so that the learner can play the game. He also raises some questions and provides some sample starting points that try to encourage understanding of the invariant. What he makes visible is a number of key observables and the nim sum (exclusive or) calculation.
Figure 3: Nim Coins
In Benyon’s construal (Figure 3), the red dots represent coins while the grey dots are empty locations. The states of the three piles can be represented by three numbers (i.e. [5, 9, 5] for Figure 3).
By looking at the special cases, Beynon encourages the learner to think about what the underlying invariant is for winning the game. Using the losing states [0, 1, 1] (i.e. one pile is empty and the other two have one stone) or [0, 2, 2] and the winning states [0, 2, 7] or [1, 2, 2], it is possible to allow the player to begin to formulate a rule for winning the game. A rule developed by these examples might be that if one column is empty and the other two have the same number of stones left then the player whose turn it is will lose, but is this rule adequate? Examining the losing states of [1, 2, 3], [4, 1, 5], and [2, 6, 4] and the winning states [1, 2, 7], [1, 4, 3], and [8, 5, 3], the previous rule no longer works and neither does a rule which says if two of the columns sum to give the same number as the third column than you are in a losing position. Further analysis of the game states is required. The detailed analysis table (see appendix) reveals that there is something significant about the states [2, 2, 0], [4, 4, 0], and [8, 8, 0]. The prediction would be that this is also true of any other number that is a power of two. A little more difficult to see is that the numbers for a losing state when using their binary form exclusive or (⨁) to binary zero (referred to as the nim sum) (see Table 1). Decimal Number 0, 1, 1 0, 2, 2 0, 2, 7 1, 2, 2 1, 2, 3 4, 1, 5 2, 6, 4 1, 2, 7 1, 4, 3 8, 5, 3 Table 1: Binary Nim Sums (exclusive or)
Binary Number 0, 1, 1 00, 10, 10 000, 010, 111 01, 10, 10 01, 10, 11 100, 001, 101 010, 110, 100 001, 010, 111 001, 100, 011 1000, 0101, 0011
Binary Nim Sum of columns 0 (lose) 00 (lose) 101 (win) 01 (win) 00 (lose) 000 (lose) 000 (lose) 100 (win) 110 (win) 1110 (win)
Benyon introduces the nim sum through an explanation although he also provided an option to make the nim sum calculation visible to the player. The further development is to prove that if you are in a losing state then your move cannot leave your opponent in a losing state. Analysing the appendix table shows this to be true. Mathematically, this can be proven by recognising that the sum after the move (t) must equal the sum before the move (s) exclusive or with the column value before the move (x) exclusive or with the column value after the move (y) (i.e. t = s ⨁ x ⨁ y). Since any move means that x ⨁ y cannot be zero unless x is equal to y, either t or s is nonzero. From a potentially winning position, you can always make a move that would put you opponent in a losing position but if you are in a losing position, it is not possible to leave your opponent in a losing (Li & Gymrek, 2009). Now to confirm whether the learner has understood the rule, we can provide a set of games that involve both wins and loses (i.e. [5, 2, 7] (lose), [10, 13, 12] (win), [10, 13, 7] (lose), [8, 9, 1] (lose), and [10, 13, 7] (lose)). Having completed at least two variants of the game, we take some time to review the process for coming to define the invariant through seeing whether the learner can describe the process and why it worked?
Expanding the context – real generalisation and fusion To this point, we have been using very similar games but we want our learners to be able to apply these concepts in a much broader context including programming and real world situations. How can we achieve this transfer of skill development? This is what is missing from many of our strategies of using programming to teach computational ideas. Before totally leaving nim type games, there is another variation in the form of the game Pylos. This game has the objective of building a pyramid taking turns to place balls on the pyramid. The winner is the person who places the ball at the top of the pyramid. However, a player in their turn rather than adding a ball can use an unblocked ball already in the pyramid to go up a level or if they have a square of four balls with no ball on top, they can remove two balls. Can we apply the same process to arrive at an invariant? We would contend yes. However, there are other games with invariants such as missionaries and cannibals, jealous husbands, or getting soldiers across the river. Like the set of nim games, these all follow a particular pattern to arrive at a solution and have a very simple invariant rule. In programming, we want to talk about invariants primarily so that learners can understand the state of their program code and use this to reason about likely outcomes. What is the state of various variables within a conditional construct or within a loop construct? How does this advance their understanding of the likely outcomes of the code? In our tutorials on invariants, we have used this approach with some success. The learners begin to see that they can identify an invariant in a different context and game play strategies in general. The follow on is to see whether this helps them in reasoning about their code in programming
modules. The next extension is to see them applying similar concepts to real world problems or tasks.
Discussion For the transfer of the computational technique, it is not simply discerning the invariant concept in a particular type of problem space (i.e. the writing of a code segment) but in a range of different problems possibly from different problem domains. We start with games but transfer the concept to programming. We contend that we should include some everyday real world problems to encourage transfer and to verify that transfer is occurring. The construit environment is an attempt to apply the principles of Papert’s (1980) constructivism theory. The learner constructs a model as a way of building an understanding of a phenomenon. With the models discussed in this paper, we are not asking the learner to start constructing a model from scratch. Rather, we are asking them to manipulate part of the model to build an understanding of the problem that they are working with. Although the construit language is designed to aid the learner build a model, we contend that starting with a blank page is difficult for a learner to develop these models. Both Piaget and Papert contend that a child constructs knowledge through interaction with their world (Ackermann, 2001). By endeavouring to ensure that the learner is exposed to the critical aspects of the desired knowledge then we are exposing them to opportunities to construct the desired knowledge. Variation theory (Marton, 2015) helps us identify those critical aspects and guides us in how to expose them to the learner. In the case of seven stone nim, the variations used in the construal were developed through interaction with learners in tutorials where they played the game using toothpicks. It was observed that stopping the game at specific points and asking them to reason about the outcome helped them develop an invariant rule to determine who would win and then to a game play strategy to win the game. Similar strategies have been used with noughts and crosses (tic-tac-toe) and tower of Hanoi. Beynon’s (2017) nim coins utilises a similar approach but instead of allowing the learner to draw their own conclusion as to the winning strategy informs the learner of the invariant rule. We see it as important that the learner develops their understanding of the invariant rule and the process to arrive at a rule.
Conclusion We argue that providing learners with construals that encourage them to focus on experimentation around the critical aspects of the problem can aid their learning. Asking the learner to develop a model of the problem space is problematic as the learner has to learn the modelling environment and how to represent the problem in that environment before they can focus on developing the knowledge to solve the problem. This is a major difficulty with teaching programming. This paper endeavours to reveal how we might be able to expose the computational reasoning ideas through using variation theory and construals but the paper also attempts show how we might use variation theory to teach computational reasoning ideas. The work
is still in preliminary form and needs further verification to ensure that the strategies described produce the desired outcomes.
Appendix: Detailed Analysis of the Nim Game Game State [n, 0, 0] [n. n, 0]
Prediction
Justification for prediction
Win Lose
[n, n, m] [m, n, 0]
Win Win
[3, 2, 1]
[3, 3, 0]
Lose
[4, 4, 0] [4, 2, 1]
[4, 3, 1]
[4, 3, 2] [5, 4, 1]
[5, 5, 0] [5, m, n]
Win Win
Simply take all n coins [1, 1, 0] is losing position and all [n, n, 0] can be reduced to another [n, n, 0] until it reaches [1, 1, 0] Take all m coins reduces to [n, n, 0], a losing position for the opposition n < m. Remove m - n stones from m pile and you have [n, n, 0], a losing position for the opposition All possible move combinations end with a winning state for the opposition (All other combinations with a maximum of 3 coins are covered by the previous cases Note: Only [4, 4, 0] is a losing position where the maximum number is 4 All can be reduced to [3, 2, 1] which is a losing position for opposition
Lose
Reduce to 5, n, 1 where n < 4 which are all win situations for the opposition
Win
[5, 4, n] [6, 4, 2]
[6, 5, 3]
[6, 6, 0] [6, 4, 1] [6, m, n]
Win Lose
[6, 4, n]
Win
[6, 5, n] [7, 4, 3]
[7, 5, 2]
[7, 6, 1]
[7, 7, 0] [7, m, n]
Win Lose
Where m and n are less than 4 and n < m since they can be reduced to [3, 2, 1], a losing position for the opposition Where n = 3 or 2. Reduces to [5, 4, 1], a losing position for the opposition All [4, 2, n] where n < 5, [6, 4, n] where n < 2, and [6, 2, n] where n < 4 are win positions for the opposition
[6, 5, n] where n < 3, [6, 3, n] where n < 5, and [5, 3, n] where n < 6 are win positions for the opposition Reduces to [5, 4, 1] which is a losing position for the opposition Where m and n are less than 4 and n < m since they can be reduced to [3, 2, 1], a losing position for the opposition Where n = 3, 4, or 5 reduced to [6, 4, 2] which is a losing position for the opposition Where n < 5, [6, 5, 4] -> [1, 5, 4], [6, 5, 2] -> [6, 4, 2], [6, 5, 1] -> [4, 5, 1] All [4, 3, n] options are wins for the opposition
All [5, 2, n] options are wins for the opposition
All [6, 1, n] options are wins for the opposition
[7, 4, 1]
[7, 4, 2]
[7, 5, 1]
[7, 5, n]
[7, 6, n] [8, 8, 0] [8, m, n]
Win
[8, 4, n]
[8, 5, n]
[8, 6, n]
[8, 7, n]
Win
Win Win
Win
Lose Win
Where m and n are less than 4 and n < m since they can be reduced to [3, 2, 1], a losing position for the opposition [7, 4, 1] reduces to [5, 4, 1]
[7, 4, 2] reduces to [6, 4, 2]
[7, 5, 1] reduces to [5, 4, 1]
[7, 5, n] where n > 2 reduce to [7, 5, 2]
[7, 6, n] where n > 1 reduce to [7, 6, 1]
Note: [8, 8, 0] is the only losing position where the maximum number is 8 Where m and n are less than 4 and n < m since they can be reduced to [3, 2, 1], a losing position for the opposition [8, 4, 1] reduces to [5, 4, 1], [8, 4, 2] reduces to [6, 4, 2], [8, 4, 3] reduces to [7, 4, 3]
[8, 5, 1] reduces to [5, 4, 1], [8, 5, 2] reduces to [7, 5, 2], [8, 5, 3] reduces to [6, 5, 3], [8, 5, 4] reduces to [5, 4, 1]
[8, 6, 1] reduces to [7, 6, 1], [8, 6, 2] reduces to [6, 4, 2], [8, 6, 3] reduces to [6, 5, 3], [8, 6, 4] reduces to [6, 4, 2], [8, 6, 5] reduces to [6, 5, 3]
[8, 7, 1] reduces to [7, 6, 1], [8, 6, 2] reduces to [6, 4, 2], [8, 6, 3] reduces to [6, 5, 3], [8, 6, 4] reduces to [6, 4, 2], [8, 6, 5] reduces to [6, 5, 3], [8, 6, 5] reduces to [6, 5, 3],
[9, 8, 1]
[9, 9, 0] [9, m, n]
Lose
[9, 8, n]
Win
Win
Where m and n are less than 8 and n < m since they can be reduced to a losing position for the opposition Where n > 1 and n < 8 reduce to [9, 8, 1]
References Ackermann, E. (2001). Piaget's constructivism, Papert's constructionism: What's the difference? Paper presented at the Constructivism: Uses and perspetives in education, Geneva. http://learning.media.mit.edu/content/publications/EA.Piaget _ Papert.pdf Aho, A. V. (2011). Ubiquity symposium: Computation and Computational Thinking. Ubiquity, 2011(January). doi:10.1145/1922681.1922682 Anderson, L. W., Krathwohl, D. R., Airasian, P. W., Cruikshank, K. A., Mayer, R. E., Pintrich, P. R., . . . Wittrock, M. C. (Eds.). (2001). A taxonomy for learning and teaching and assessing: A revision of Bloom's taxonomy of educational objectives: Addison Wesley Longman. Beynon, M. (2017). Nim Coins. Construit!: University of Warwick. Retrieved from http://jseden.dcs.warwick.ac.uk/construit/?load=166 Beynon, M., Boyatt, R., Foss, J., Hall, C., Hudnott, E., Russ, S., . . . Winczer, M. (2016). Playing games with observation, dependency and agency in a new environment for making construals. Paper presented at the Interactive technologies and games (ITAG), Nottingham, UK. Beynon, M., Foss, J., Hudnott, E., Russ, S., Hall, C., Boyatt, R., . . . Winczer, M. (2015). Making Construals as a New Digital Skill: Dissolving the Program - and the Programmer - Interface. Paper presented at the International Conference on Interactive Technologies and Games (ITAG). https://doi.org/10.1109/iTAG.2015.10 Biggs, J. B., & Collis, K. F. (1982). Evaluating the quality of learning: The SOLO taxonomy (Structure of the Observed Learning Outcome). New York: Academic Press. Bloom, B. S., Engelhart, M. D., Furst, E. J., Hill, W. H., & Krathwohl, D. R. (1956). Taxonomy of educational objectives Handbook 1: cognitive domain. London: Longman Group Ltd. Costa, A. L., & Liebmann, R. M. (1996). Envisioning process as content: Toward a renaissance curriculum. De jong, K. A. (1999). Evolutionary computation for discovery. Communications of the ACM, 42(11), 51-53.
Denning, P. J. (2017). Remaining trouble spots with computational thinking. Commun. ACM, 60(6), 33-39. doi:10.1145/2998438 Dreyfus, S. E., & Dreyfus, H. L. (1980). A five-stage model of the mental activities involved in direct skill acquisition. Guzdial, M. (2016). Learner-Centered Design of Computing Education: Research on Computing for Everyone. Synthesis Lectures on Human-Centered Informatics, 8(6), 1165. doi:10.2200/S00684ED1V01Y201511HCI033 Halpern, D. F. (1998). Teaching critical thinking for transfer across domains: Disposition, skills, structure training, and metacognitive monitoring. American Psychologist, 53(4), 449-455. doi:10.1037/0003-066X.53.4.449 Klahr, D., & Carver, S. M. (1988). Cognitive objectives in a LOGO debugging curriculum: Instruction, learning, and transfer. Cognitive Psychology, 20, 362-404. Kowalski, R. (2011). Computational logic and human thinking: how to be artificially intelligent. Cambridge; New York: Cambridge University Press. Li, J., & Gymrek, M. (2009). Theory of impartial games. SP.268 The mathematics of toys and games. Course Notes. Massachusetts Institute of Technology. Massachusetts. Retrieved from http://web.mit.edu/sp.268/www/nim.pdf Marton, F. (2015). Necessary conditions of learning. New York and London: Routledge. Marton, F., & Säljö, R. (1997). Approaches to learning. In F. Marton, D. Hounsell, & N. J. Entwistle (Eds.), The experience of learning : implications for teaching and studying in higher education (2nd ed., pp. 39-58). Edinburgh: Scottish Academic Press. Papert, S. (1980). Mindstorms: children, computers, and powerful ideas: Basic Books, Inc. Perry, W. G., Jr. (1968). Forms of intellectual and ethical development in the college years: A scheme. Fort Worth: Harcourt Brace Jovanovich College Publishers. Perry, W. G., Jr. (1988). Different worlds in the same classroom. In P. Ramsden (Ed.), Improving learning : new perspectives (pp. 145-161). London : New York, NY: Kogan Page ; Nichols Pub. Co. Polanyi, M. (1966). The tacit dimension. Gloucester, MA: Double Day and Company. Siegel, A. N. (2008). Misére games and misére quotients. Course Notes. Weizmann Institute of Science. Rehovot, Israel. Retrieved from https://arxiv.org/pdf/math/0612616.pdf Thompson, E. (2017). Seven Stone Nim. Construit!: University of Warwick. Retrieved from http://jseden.dcs.warwick.ac.uk/construit/?load=236
B. Victor (Producer). (2012a). Inventing on principle [Retrieved from https://vimeo.com/36579366 Victor, B. (2012b, September). Learnable Programming: Designing a programming system for understanding programs. Retrieved from http://worrydream.com/LearnableProgramming/ Wing, J. (2010). Research Notebook: Computational Thinking-What and Why? The Link: The magazine of Carnegie Mellon University's School of Computer Science. Retrieved from https://www.cs.cmu.edu/link/research-notebook-computational-thinkingwhat-and-why Wing, J. M. (2006). Computational thinking. Communications of the ACM, 49(3), 33-35. Zingaro, D. (2008). Invariants: A Generative approach to programming. London: College Publications.