What Computational Thinking Skills Do Students Learn in Programming Classes by Debugging and Implementing new functions?
Over the past decade, teaching and learning computer science (CS) received a lot of advocates from educators, world leaders, celebrities, and politicians around the world. In the kick-off event for Computer Science Education Week in 2013, former President of the United States Barack Obama said, “We need young Americans like you to master the tools and technology that will change the way we do just about everything” (Code.org, 2013, 0:20). Justin Trudeau, the Prime Minister of Canada, also said, “Every job we’re going to do in the future will rely on technology and be benefited if you are powerful users of the technology that surrounds us” (Code.org, 2022). In addition, recently, the number of CS classes has increased rapidly. On only the Code.org platform, the number of registrations to learn programming increased 21 times over the last seven years, from 2014 to 2021 (Code.org, 2022). The funds allocated for CS education in the U.S. also increased seven times over five years, from 9 million dollars by the end of 2015 to 63 million dollars by the end of 2021 (Code.org, 2021). Thus, there is no doubt about the necessity of CS education to help prepare all students for future careers.
K-12 Computer Science Framework Steering Committee argued that “the goal of Computer Science education is to develop computational thinking skills, which refer to the thought processes involved in expressing solutions as computational steps or algorithms that can be carried out by a computer” (K–12 Computer Science Framework, 2016). Thus, besides the purpose of preparing technology skills for future careers, computer science education also aims to develop students’ computational thinking skills. Computational thinking (CT) was first introduced to the mainstream by Jeannette M. Wing as “the thought processes involved in formulating a problem and expressing its solution in a way that a computer—human or machine—can effectively carry out” (Wing, 2017, p.8). She also stated, “Computational thinking is a fundamental skill for everyone, not just for computer scientists. To reading, writing, and arithmetic, we should add computational thinking to every child’s analytical ability.” (Wing, 2006, p.33). As a result, CT should be the main focus in CS classes.
There are six core elements of CT that are essential in the processes of forming problems and designing solutions: decomposition, abstraction, data, algorithm, iteration, and generalization (Barr & Stephenson, 2011, ISTE & CTSA, 2011; Shute et al, 2017; Wing, 2017; Yadav et al., 2016.) Decomposition divides big issues and requirements into smaller parts to make them become more accessible to solve. Combined with decomposition, abstraction helps remove the detail to formulate the problem easier. For example, when students need to investigate how microwaves heat up food, they can focus on the parts that create the heat instead of paying attention to all the components of the microwave. In other words, the abstraction helps remove unnecessary information and focus on the main problem. Data is essential in facilitating problem-solving and decision-making (ISTE & CTSA, 2011). The data element here includes data collection and data analysis or interpretation. With data evidence, it will be easier to find out the problem as well as validate the solutions. An algorithm is a step-by-step instruction to solve the problem. Algorithms are powerful because they are the guideline that helps humans or machines execute the solution. A good algorithm will be optimized to have the highest efficiency. Iteration is the element that focuses on the loop of the computational thinking process. Defining a problem, designing a solution, and implementing it is not a one-way flow process. All steps should be in the feedback loop in order to debug, improve, and optimize. Generalization extends the problem and the solution to be applied in various situations. Generalization and abstraction are sometimes not distinguished. Abstraction removes unnecessary characteristics of the issue, so we can focus on solving the main things. On the other hand, generalization expands the solution, so it can be applied in similar situations or even the current solution in the broader problem. In conclusion, these six essential elements: decomposition, abstraction, data, algorithm, iteration, and generalization clarify the definition of CT, and are used as a guideline in assessing CT skills for students.
What do CS classes for students from 6 to 15 years old look like? CS can be taught in a variety of ways such as programming, robotic and even unplugged activities. However, programming, especially game programming, is the most appealing method for most students (Basawapatna, 2010). Learning programming with Scratch is one of the top activities for K-9 students to start learning to program. Indeed, Scratch is the most popular block-based visual programming language with more than 84 million users worldwide (MIT Lab, 2022).
The classes I have taught are not an exception. I have been teaching CS through programming to thousands of K-9 students over the past seven years. In my class, I mostly use Scratch to help children learn coding through creating games, animations, simulations, and other software programs. My students love Scratch because it allows them to creatively create games, animation, simulations, and many other projects. Over time, students’ products are more and more complicated. I can clearly see students’ mastery of coding concepts as well as their growth in coding skills. However, there are no clear connections between CT skills and coding skills. Thus, I wonder what CT skills my students gain through learning computer programming with Scratch? Does my class support students in developing their CT skills? This study will assist me in answering these questions. In addition, it will benefit CS education by presenting a clear picture of CT skills that can develop through programming activities and giving suggestions for teachers to enhance these practices in their classes.
My original research question is What Computational Thinking (CT) skills do students develop as a result of learning to program with Scratch? The idea for this question is to list all CT skills students gain through programming classes in general. However, my interview questions were designed based on the primary activities of programming classes, which are debugging and developing new functions. These two tasks do not cover all of the numerous programming class activities. If I take the results of the interviews to draw a conclusion about all of the skills students gain in programming classes, the conclusion is inaccurate. In addition, in the analysis process, I want to go deeper to find the relationship between learning activities and the skills that students gain through them. Thus, the new goal for my research is to determine which programming class activities lead to the acquisition of specific CT skills. I narrowed my research question to What computational thinking skills do students learn in programming classes by debugging and implementing new functions? Even though the study question is narrowed, it still can help teachers identify what CT skills their students learn via debugging and implementing new functions, as well as what skills are lacking and require further analysis to develop new learning activities.
I used the “think aloud” interview method to investigate students’ thinking processes. The interview includes four parts: general introduction, fixing bugs, implementing a new function and daily life connections. Please see Appendix A: Interview Protocol for more details. Each interview was about 45 minutes long and was conducted via Zoom. During the interview, students answered the questions and also shared their screens to show their coding process on their computers.
In part 1, the general introduction, I asked students for some personal information such as their age, gender, location and experience with Scratch. This information can help me identify how age, gender, the ability to access coding based on students’ location, and experience with Scratch affect the development of CT skills. Understanding interviewees’ backgrounds also allowed me to avoid “cherry-pick” bias (Miles et al., 2018. p.260) in making final claims about general K-9 students.
The second part of the interview simulates a debugging activity in a typical programming classroom. I created a scenario where the interviewee is asked to fix some bugs in an unfinished project. Students worked with the project on their computers and explained how they fixed the bugs. This part was designed to help students show their decomposition and iteration skills. Sometimes, students can also use the generalization skill to match the provided problem with what they did before. In addition, I intentionally designed one bug related to the data to also test students’ data skills.
In part three, I gave students a new function requirement and asked them to implement it. This task was designed based on regular activity in coding class. Teachers guide students to implement a new function, then ask students to implement similar functions to test their understanding and encourage creativity. This part was aimed at testing students’ generalization skills. If students figure out that the new requirement is similar to one function in the provided project, they could quickly finish this task.
Parts two and three are the two main parts of this interview to aim at answering the research question. These parts demonstrate the debugging and implementation of new functions in the classroom. Thus, the skills that students used to solve the problem in these parts will be the same skill set that they used and developed in normal classrooms.
In the final section of the interview, students were asked questions regarding how they use CT skills acquired in CS classes in their daily lives. These questions helped me figure out how far students had progressed in their CT skills. If students can apply these CT skills in their daily life, they achieve a high level of competency in these skills.
There are some limitations of this interview protocol. First, the interview scenarios did not create a chance to help students to show their abstraction skills. Thus, I did not find keywords or ideas related to the abstraction skill in the coding process. Second, since this scenario was carefully designed to include almost all CT skills, the conclusion from this interview result might not apply to all other debugging and implementing new functions activities. One debugging or implementing new functions activities in the regular class might help students develop only one to two specific skills. However, if teachers provide students with various projects and tasks, diverse projects can support each other and help students develop a complete CT skill set.
The observation was conducted after the interview finished. Besides answering the questions, part 2 and part 3 of the interview required students to do tasks on their computers. Some students were good at performing things on their computers, but they could not explain their thoughts clearly. Thus, I decided to do observations that focus on these parts to understand students’ thinking processes. I reviewed the recording video and noted all steps students did on their computers. The observation notes will be used to support the claims made throughout analyzing the interview transcripts.
Because my intended interviewee is under the age of 18, I developed two consent forms: one for the interviewee’s guardian, and another for the interviewee themselves. I used DocuSign, a platform that supports e-sign, to send the consent forms to the interviewee’s guardian email. This process went quite smoothly. Before the interview, I received all of the consent documents. However, before each interview, I also go over the consent form with my students to ensure that they have read and understood them.
Audio Recording Process
I interview via Zoom, a video conference platform, so it is simple to use the Zoom recording feature to capture the entire interview process. The recording videos allowed me to listen to students’ responses again as well as validate my observations’ notes.
I can’t utilize Zoom’s auto transcribe option to generate transcription for the interview because most of my interviews are in Vietnamese. To help with this, I used Group Transcribe, a Microsoft tool that supports Vietnamese transcribing. However, the outcome was not as expected. Each interview’s transcript took me about 2-3 hours to edit and polish up.
Number of Interviews
I had thirty students register for interviews. However, I only randomly picked ten first students to participate in my research progress. After sharing about the interview process and consent forms, there were only seven students who wanted to continue. I conducted seven interviews. However, some first interviews were not great because I couldn’t ask all the prepared questions. There are some reasons for this problem. First, some interviewees forgot the interview schedule or showed up late because they didn’t receive any reminders before the interview. I have learned from this by sending a reminder email to confirm the interview schedule one day in advance. Second, some questions were not easy enough for students to understand. It took time during the interview to explain the questions to the students. Thus, I needed to re-write some questions and separate them into several small questions. The updated questions worked better for the following interviewees. Finally, in some first interviews, I could not control the time efficiently, so the debugging part was too long. I paid more attention to the time in the subsequent interviews and allowed students to skip difficult technical questions.
Because some interviews were not complete, I could only choose five interviews to analyze. These five interviews used updated questions, and I also could ask those students all of the prepared questions.
All the participants were my former students. However, they took part in my online Livestream classes, so even though they knew me, that was the first time I talked with them directly. The age range for the Introduction to Computer Science course is from 8-12 years old. Thus, the participants for the interview are also in this age range. Among randomly selected participants, there is only one female student. Thus, there might be an unequal gender population in CS subjects. Most students are rated as having high accessibility to this subject because they live in big cities, have their computers and receive huge support from their parents. One student is rated as medium accessibility because he is living in a rural area. Still, his family has an excellent financial situation, and he also has a computer and internet at home.
Participants have various Scratch Fluency levels, from beginner to expert. This aspect is evaluated by the difficulty of Scratch projects that they have made. Participants also have various learning times, ranging from three months to three years. The learning time did not match their expertise level. The reason for this situation is because participants answer this question by the time they have known Scratch, not the time they spend practicing coding. Thus, some students only have learned Scratch for six months, but they reached the expert level. While there is a student who has known Scratch for three years but is still at the beginner level.
Overall, I think the participants for my interview are a good representation of a normal computer science class. Even though the gender population is not equal and most participants have high access to computer science, this is the actual situation in current CS classrooms.
The personal information of all interviewees was summarized in the following tables:
I applied both categorizing and connecting strategies for my analysis. For categorizing, I chose the provisional coding approach, which starts with a list of research-generated codes (Miles et al., 2018. p.86). There are six core components of CT skills, including decomposition, algorithm, abstraction, generalization, data, and interaction (Barr & Stephenson, 2011, ISTE & CTSA, 2011; Shute et al, 2017; Wing, 2017.) I used these elements as codes to find out which skills students used to answer questions related to programming. Please see Appendix B: Code Book for more details. However, after coding all the transcripts, I only found five out of six elements in all students’ transcripts. I did not find any students using abstraction in interview transcripts.
After using the categorizing strategy, I went further by connecting the development of these skills with debugging and implementing new function activities. For each activity, I counted the number of students who showed a specific CT skill in that activity. This method allowed me to connect a specific skill with a learning activity.
This approach helps answer my research question because the categorizing strategy helps me find the CT skills students had after they learned programming with Scratch. And then, the connecting strategy allows me to connect the CT skills with specific learning activities. Thus, categorizing the skills and then matching them with the learning activities helped me understand their relationship. This approach can also be expanded in the future to know how other learning activities in CS class help students develop CT skills.
My code book has six codes based on six main elements of CT skills: decomposition, abstraction, data, algorithm, iteration, and generalization. Decomposition code is used when students can analyze the big problem into smaller parts and then focus on solving each piece individually. Abstraction code is used when students can reduce the complications of the situation by only focusing on the main point. Unfortunately, I could not find any data related to this code in the interviews’ transcripts. Data code is applied when students explain things related to data. For example, in my interview, students will demonstrate the player’s score. That is the time most of the data code will be used. Algorithm code is used when students clearly explain a program or their thoughts. An algorithm is a list of instruction steps to do a task. Thus, if students show their thinking process step-by-step, it will be coded as the algorithm. Iteration will be coded when students repeat the try, test and update process. This code is mainly used to code the observation note because students did not explain much while trying, testing, and updating. Finally, generalization code is used when students find the similarity between things and reuse their code. In the interview, the requirement to implement new functions is asking students to code a similar program. Thus, the generalization skill mostly appears in this part of the interview.
Besides using all the deductive coding from a conceptual framework, I was also open to inductive coding, allowing other codes to emerge during data collection (Miles et al., 2018, p.86). Misunderstanding code is added during the data collection process. This code is used when students show confusion or have an incorrect explanation about a coding concept.
These codes help answer the research question because each code represents one specific CT skill. Coding students’ answers helped me understand which skills students develop through a specific activity. The misunderstanding code was not expected before data collection. While coding the transcripts, I found some misunderstandings in coding concepts, but it was not affecting how students showed their CT skills. Thus, this is a new important finding in the relationship between developing CT skills and understanding CS concepts.
There are three main findings of this research. First, debugging activities in CS classrooms are a good chance for students to develop iteration, decomposition and data skills. Second, the activity, which implements new and similar functions in CS classrooms, helps students develop generalization skills. And finally, the CT skills are developed independently with the development of CS knowledge.
CT Skills That Develop During Debugging Activities
In Scratch programming classes, debugging activities are a good chance for students to develop iteration skills. Iteration in computational thinking is the repetition of a process that includes trial, error, and improvements. Figure 1 shows that all five students have coded to indicate their iteration skills while debugging. Indeed, when giving students a bug program, they immediately try and test different solutions until the bugs are fixed. For example, when TN fixed the bug about increasing the player’s score, he said, “I tried to wait for 1 second first, then wait for 2 seconds, so I could compare to see if 1 second was long enough to avoid the player getting more than one point when touching the candy.” In addition, two students (KH & QK) can even generalize this skill as their method to solve the problem. QK said, “Once I finish programming, I’ll try to run it. If it still doesn’t work, I’ll fix it and try again.” Similarly, KH described her way of learning Scratch as “just try and check it.” The observation notes also support this claim. During part two of the interview, debugging, the observation notes described many situations when students used integration skills. For example, the observation note for KN has four times noted that “Student adds [something new], but it does not fix the problem, then he tries the other things.” A similar observation note for TN said, “Student tries and tests three different ideas.” As a result, debugging activities in Scratch programming classes help students develop the iteration skill, one of the computational thinking skills.
Another CT skill that developed in debugging activity is decomposition skill. When students were given a project with a lot of bugs, they needed to identify the problem then divide it into smaller pieces and connect each piece with one specific character in the given project. Decomposition skills also show when students can analyze the current program and figure out which line of code causes the bugs. All five participants showed this skill in the debug session. In detail, KN said that “There is a bug that the player didn’t earn points when they caught the candy. This bug can belong to the candy or the player. However, I see that the candy has not reached the bottom before it disappears. Thus I need to check the candy’s code.” Then he read through all the code of the candy and explained each line by line “This line changes the costume of the candy. This line helps the candy go to a random position at the top. Then it will continuously change y = -10 to make the candy fall. If it only repeats ten times, it only gets there. It’s wrong that it hasn’t hit the ground yet. I need to fix this repeat.” All other students have similar analyzes when connecting a bug with a specific character. Although other students did not explicitly explain the process of how they connect the bug with the character, their connection is always correct. Thus, I think they both had the decomposition skill and were familiar with it. In addition, similar to KN, other students can also show their skill in decomposing a long program into small chunks to understand it. For example, “When I play, I see it only stops at this point. I changed the number in the change y by … blocks. Then I notice that they only repeat 10 times, so it just came here. If you want to reach -180, you have to move a lot. So, I need to fix this!” The decomposition skills are consistently shown through the transcripts of all participants. Thus, the debugging activity helps students to learn and practice the decomposition skill.
Data skills also can be developed through some debugging activities. Indeed, data skill has been consistently shown in this research through all participants’ answers. KH said, “The code sets the score to one. It doesn’t change the score. I think that’s what’s causing the bug”. Likewise, QK explained, “The old code is set to score to 1, I changed it to change score by one because the old code when the basket touches the candy, the score set to 1, and when I change it, when the basket touches the candy, the score will become 2.” BN, TN and KN also had similar explanations with QK. However, this question intentionally adds the data aspect, and all students have a good understanding of variable concepts, so all students can show their data skills. Thus, different from iteration and decomposition skills that can be developed through any debugging activity, the data skill only can be developed through debugging activity only if the bug is related to data and students have a basic understanding of variables and data related concepts in CS.
CT Skills That Develop During Implementing a New Function Activity
Implementing a new similar function activity in coding class helps students to learn and develop generalization skills. In coding class, teachers usually guide students to code the first function and then ask students to implement a similar function to test their understanding as well as allow them to be creative. This kind of activity was reproduced during the interviews and all participants show their generalization skills when implementing a similar function. All students recognized the similarity between the new function and the old function already had in the given project. The observation note shows that all students reused the code and only changed the different parts. None of the students reproduced all the code from the beginning. The interview data also show the same result. When a student was asked about the process of implementing a new function, TN said “It takes time to implement all the code from the beginning. I see a similarity. They’re just different in their costumes.” Similarly, KH said “You can just duplicate the candy, change its costumes. They are similar and we can take advantage of it.” KN even has a broader generalization skill. He related the current project with one he did in part. During the interview, he opened his old project and compared them to help him implement a new function. As a result, implementing new functions gives students a great chance to learn and practice generalization skills.
Relationship Between Developing CT skills and Understanding CS Concept
The CT skills are developed independently with the development of CS knowledge. Some students have difficulties in understanding coding concepts, but they still show their development of CT skills. For example, BN is a student who is at intermediate Scratch Fluency level and has a lot of misunderstanding in coding concepts, but he has shown the development of all CT skills. In detail, when talking about the movement of the basket, he had an incorrect explanation about the movement direction. However, the iteration skill, which allows him to test and try, helps him solve the problem. Same as QK, he did not fully understand the wait block, but he still showed his decomposition and integration skills while fixing the bug about changing the player’s score. As a result, CT skills and CS concept knowledge develop independently. Students can develop CT skills even if they do not fully comprehend a CS concept.
There are three key conclusions for this study project based on interviews with five pupils and observations of those kids interacting with a Scratch project. Debugging tasks in CS classes provide students with opportunities to practice iteration and decomposition skills. With data-related bugs, students also can practice data skills through debugging tasks. Furthermore, students can learn and enhance generalization abilities when they have the opportunity to design and implement a similar function. Finally, while CS classes provide opportunities for students to learn CT skills, CT skills grow independently with CS knowledge.
There is some limitation in this research. First, there is a time limitation, so I only conduct five interviews with my students. This small number of participants is hard to generalize the entire students from different CS classrooms. Second, the interview protocol was not completed because it missed the abstraction aspect of the CT skills. However, abstraction is the most difficult skill CT skill set. It is also hard to demonstrate in Scratch programming language. Finally, with the time limitation, the analysis is also limited. I only can make claim about the most revealing skills in each activity. In the future, if I have a chance to continue with this project, I want to know more about the learning progression of each skill. It is not as simple as whether or not students have that skill. I want to know where students are on that progression and what is the direction for students to achieve a higher level in that skill.
Doing this research was an inspiring experience for me. For the first time, I analyzed my students’ answers and tried to make sense of what they meant in addition to demonstrating their coding skills. The results of this study give me confidence that my lectures are assisting students in learning and practicing CT skills. However, I also realized that some skills are still missing, and I need to improve my lesson to help them develop a complete set of CT skills. The last finding, that CT skills can grow independently with an awareness of CS ideas, was the most surprising to me. I did not expect to find this at the beginning. However, this also helps me to understand more about CT skills and inspires me to bring CT skills to younger students without worrying about CS understanding barriers.
This research, as well as the qualitative research course, has broadened my knowledge about qualitative research. I was a big fan of quantitative analysis because I think a large research population and numbers can show more accurate results. However, going through this project and qualitative research, I realized the power of qualitative research in understanding the why question. By interviewing and observing students, I can confidently claim what CT skills they have learned and how they learned that. It might be not easy to understand the reason behind quantitative research. Another exciting thing about analyzing qualitative data is I might find other findings that I didn’t expect. Different analysis methods can lead to different conclusions with the same data set. All the conclusions can be still very persuasive if I can use the right analysis strategy. Finally, through Miler’s book, I know a lot of different methods to validate and avoid bias when doing qualitative research. These methods are helpful for me to think through when analyzing interview transcripts and increase the confidence in making claims. I really enjoy doing qualitative research and I hope to have a chance to join a research project to apply what I have learned in this class to a real project.
Barr, V., & Stephenson, C. (2011). Bringing computational thinking to K-12: What is involved and what is the role of the computer science education community? ACM Inroads, 2(1), 48- 54.
Brennan, K., & Resnick, M. (2012). New frameworks for studying and assessing the development of computational thinking. In Proceedings of the 2012 annual meeting of the American educational research association, Vancouver, Canada (Vol. 1, p. 25).
Code.org. (2013). President Obama asks America to learn computer science. https://www.youtube.com/watch?v=6XvmhE1J9PY&t=72s
Code.org. (2022). Quotes on computer science – what leaders and trendsetters have to say. Code.org. (n.d.). Retrieved April 1, 2022, from https://code.org/quotes
ISTE (The International Society for Technology in Education) & CSTA (Computer Science Teachers Association). (2011). Operational Definition of Computational Thinking for K-12 Education. http://www.iste.org/docs/pdfs/Operational-Definition-of-Computational-Thinking.pdf
K-12 Computer Science Framework Steering Committee. K–12 Computer Science Framework. (2016). Retrieved from http://www.k12cs.org.
Miles, M. B., Huberman, A. M., & Saldaña, J. (2018). Qualitative data analysis: A methods sourcebook. Sage publications.
MIT Lab. (2022). Scratch Statistics. Scratch. Retrieved February 20, 2022, from https://scratch.mit.edu/statistics/
Shute, V. J., Sun, C., & Asbell-Clarke, J. (2017). Demystifying computational thinking. Educational Research Review, 22, 142-158.
Wing, J. M. (2006). Computational thinking. Communications of the ACM, 49(3), 33-35.
Wing, J.M. (2017). Computational thinking’s influence on research and education for all. Italian Journal of Educational Technology, 25(2), 7-14. DOI: 10.17471/2499-4324/922
Yadav, A., Hong, H. & Stephenson, C. (2016). Computational Thinking for All: Pedagogical Approaches to Embedding 21st Century Problem Solving in K-12 Classrooms. TechTrends 60, 565–568. https://doi.org/10.1007/s11528-016-0087-7
Appendix A: Interview Protocol
Part 1: General Introduction
- Can you introduce yourself a little bit? (Name, age, school & living areas)
- How long have you been programming with Scratch?
- What do you feel about programming with Scratch? Why?
- Can you tell me a little bit about what you can do with Scratch?
Part 2: Fixing Bugs
Scenario: One of my students created a project named “Candy Land,” and he has some trouble. First, he wants the basket to move to the left when the player presses the left arrow key and move to the right when the player presses the right arrow key. However, the basket does not move at all. Second, he wants to make the candy fall from the sky so the basket can catch it, but it seems like the basket never can catch the candy. Finally, he wants the players to get one point each time they catch the candy, but now, its score is always 0. Would you mind seeing his project and helping him fix these bugs? Here is the link to his project: https://scratch.mit.edu/projects/647712269/
- How did you figure out this bug?
- What did you change?
- How do you know if you fixed it or not?
Part 3: Implementing a New Function
- Besides candy, my students also want to add some obstacles such as socks, and plastic bags for this game. When players catch inedible stuff, they will lose one point. Can you help him to implement this?
- What is your strategy to implement this? How did you do that?
- (If students find the pattern and re-use code) How do you know that you can re-use these codes?
Part 4: Daily Live Connections
- What do you learn through creating different projects with Scratch?
- Think back to when you first started learning Scratch, what was it like in the beginning and what is it like now? Would you mind giving me an example of the changes?
- What do you learn from programming, and you can apply it to your daily life?
Appendix B: Code Book
When to use
When not to use
Decomposition is deconstructing a problem into small and manageable parts.
Students show their skill in decomposing or analyzing big questions/big tasks into small pieces to solve.
Students are stuck in understanding a long program. They can’t decompose the code into smaller pieces.
“First, you need to choose a character, then program for it later.”
An algorithm is a list of instruction steps to finish a task.
Students show their step by step in thinking procedure in doing things
Students mess up with the order of steps in programming. They don’t know the right order to do things.
Please put “stop all” in front of the “hide” block, but under the “repeat until” block.
Abstraction is removing unnecessary
details to only focus on the core characteristics of the objects.
Students simplify the situation by removing details to focus on the core component.
Students generalize similar things to reuse the code.
Can’t find any example in students’ transcripts.
Generalization reduces complexity by replacing various entities that perform similar functions with a single entity
Students can re-use the old code in different situations.
Students do not point out the similarity among the characters.
You can just duplicate the candy, change your costumes, and then change 1 point to -1 because they are similar.
The data is data collection, analysis, and representation.
Students can use variable in programming
Students do not use thing related to variable, operator and list
“Set scores to 1” when you touch your candy, will set the score to one. And then after you touch your candy again, it still sets to 1.”
Iteration in CT is the repetition of a process that includes trial, error, and improvements
Students show their process in programming is try and test then improve then repeat the whole process
Students do not use the try and test method while answering interview questions.
“Just like try and check it”
Students have misunderstanding about coding concepts
When students misunderstand the code or have an incorrect explanation about the code.
Students explain the code correctly.
I delete because when I hit the candy, these two blocks will work together, the score will be 2. I just need to use one of them: set or change commands, whichever is fine.