c- Algorithm design :
This is the process of building a diagram of steps in order that can solve all problems. Thereby, helping to solve the problem in clear, unambiguous steps and must have an end. Visualize where you are in the problem-solving process, whether it is time to have enough data to decide on a solution or not, avoiding hasty decisions.
d- Abstraction and generalization
Abstracting a problem into a concept or principle. That is, the process of removing the physical, spatial, temporal details or individual properties of an object or system, retaining the common characteristics to aim at a general description.
Maybe you are interested!
-
Theoretical and Practical Basis for Developing Computational Thinking in Teaching -
Current Perception of Teachers and Students About Teaching in the Direction of Developing Technical Skills -
Advantages and Disadvantages in Organizing Professional Group Activities in the Direction of Developing Teaching Capacity -
Managing math teaching activities towards developing capacity for first graders in primary schools in District 10, Ho Chi Minh City - 1 -
Innovation in English Teaching Assessment in the Direction of Developing Students' Capacity
Generalization (is the process of adapting constructed solutions or algorithms to different problem states, even if the variables are different. Generalizing some parameters to expand the scope of application (hiding complex details).

Figure 1.2. Elements that make up computational thinking
This will help you understand the general meaning of a solution, which can then be applied in many specific cases. Bringing the problem or solution to a general level, which can be communicated to many audiences, conveying many meanings.

Figure 1.3. Computational thinking process
The elements that make up computational thinking are interrelated processes that are combined to solve problems effectively, and are applied in a similar way to how a computer works. Specifically, the process of solving a problem as a computer does can go through activities such as (Figure 1.3) :
- Problem decomposition: divide the problem into smaller parts.
- Pattern recognition: analyze and classify problems into groups, applying appropriate methods to each group.
- Algorithm design: building solutions using computers.
- Abstraction and generalization: creating common solutions to many similar problems.
With this general process, when implementing, depending on each problem and content that needs to be solved, some of the above activities can be skipped if not really necessary.
The process of computational thinking will make learners flexibly apply skills and strongly develop the ability to perceive situations to solve problems in an optimal way. And above all, computational thinking is the pinnacle of problem solving.
1.3.3 The nature of teaching and developing computational thinking in teaching programming to students
It can be seen that teaching to develop thinking in general and teaching to develop computational thinking for students in particular is to help students develop thinking through practicing thinking operations. The basis of teaching to develop thinking is based on Vygotsky's theory of the zone of proximal development, in which the zone of proximal development has a higher development than the current development zone. Learners can perform new skills or develop thinking to a higher level with the help of the teacher. Within the framework of this thesis, teaching to develop thinking through thinking operations based on Platonov's diagram (Figure 1.1) as well as organizing teaching and designing specific teaching content will aim to develop the stages of the thinking process.
For example, students need to perform analysis and synthesis operations in the thinking process. Lecturers need to design teaching content and organize teaching of Programming Techniques by letting students decompose objects into parts, attributes, connections, and relationships between components to perceive objects more deeply.
In parallel, since the beginning of this century, the “4Cs of the 21st Century” include the skills: Critical Thinking, Creativity
Creativity, Collaboration, and Communication – have been increasingly recognized as essential components of many schools’ curricula. This shift has driven the uptake of pedagogies and frameworks such as project-based learning, inquiry, and deeper learning across all levels of K-12 that emphasize higher-order thinking over rote memorization. As a result, another C associated with Computational Thinking is another core skill – or “5th C” of 21st century skills – that needs to be taught to all students.
Computers and smart devices have become essential products in human life. Computers and computer-controlled devices are used in all industries from medicine to engineering and textile manufacturing. One area where computers have certainly spread is education, and a prerequisite for controlling computers, or increasing the level and effectiveness of our control over them, is to make human-computer interaction as effective as possible. This process of using computers effectively, called “Computer-like Thinking” or “Computational Thinking”, is considered an area with the potential to support individual and societal development in our rapidly evolving world and to bring significant economic benefits.
Jeannette Wing’s view of teaching computational thinking as a formative skill on par with reading, writing, and arithmetic places computer science in the category of basic knowledge. Just as mastery of basic language arts helps people speak effectively and basic mathematics helps people quantify successfully, mastery of computational thinking helps people process information and tasks systematically and effectively. But while teaching people to think computationally is a noble goal, there are
pedagogical challenges. Perhaps the most puzzling issue is the role of programming, and whether we can separate it from the teaching of basic computer science. If so, how much programming is required to become proficient in computational thinking?
The key points of computational thinking are that 1) it is a way of solving problems and designing systems based on the fundamental concepts of computer science; 2) it means creating and using different levels of abstraction, to understand and solve problems more effectively; 3) it means thinking algorithmically and being able to apply mathematical concepts to develop more efficient, equitable, and secure solutions; and 4) it means understanding the consequences of scale, not just for efficiency reasons but also for economic and social reasons. Computational thinking is not about making humans think like computers, but about developing the full range of thinking tools needed to effectively use computers to solve complex human problems.
The study of Computer Science sooner or later requires knowledge of programming, and it is through Computer Science that the core concepts of computational thinking were developed. Computational thinking is a way of looking at problems, problems, so that computers can help humans solve them. When programming, computational thinking includes the problem-solving we have to do before we start writing code (Figure 1.4) . Building steps and rules to follow, understanding the states and actions represented, and thinking about how the program will interact with users or other systems. These are all parts of computational thinking.
Problem
/Problem
Thinking
computing
Technique
maths
Write
programme
Chapter
program
Figure 1.4. Simulation of the stage of forming a program (on a computer) from a problem
The study of Computer Science sooner or later requires some knowledge of programming, and it is through Computer Science that the core concepts of computational thinking were developed. Computational thinking is a way of looking at problems so that computers can help us solve them. When programming, computational thinking includes the problem-solving we have to do before we start writing code. Establishing steps and rules to follow, understanding the states and actions represented, and thinking about how the program will interact with users or other systems. These are all parts of computational thinking.
In programming classes, it’s helpful to pay attention to elements of computational thinking. For example, logical reasoning encourages students to make predictions and come up with explanations whether they’re working with a computer or not. Decomposition helps students break large problems into smaller pieces whether they’re working alone or as part of a team. Generalization helps students look for patterns or think about similar problems. Algorithms, the key to computational thinking, are working systematically, what steps or rules to follow. And abstraction, what level of detail is appropriate for the problem, what information is important and what is irrelevant, at least for the time being.
Students need to focus on understanding (and being able to manually execute) computing processes, not on their representations in
specific programming languages. Familiarity with algorithmic concepts such as basic control flow is important. In addition, there is a focus on developing skills in abstracting and representing information, and evaluating the properties of processes.
One problem facing the computer science profession is how such a useful discipline can struggle to attract students, despite the continued growth of the field of ICT. Over the years, despite the best efforts of those in the computer science profession to assert that computer science is more than “programming,” the misconception that the two are equivalent persists. Programming should not be essential to teaching computational thinking, nor should knowledge of programming be essential to demonstrating literacy in basic computer science. Programming should be introduced to all students only after they have had significant practice in computational thinking. This pedagogical approach is similar to the teaching of elementary arithmetic and elementary reading and writing with linguistics and argumentation. Significant preparation in computational thinking is required before students take up programming.
Institutions across the United States, the United Kingdom, and several other countries are reviewing their undergraduate computer science curricula. Many are changing their first-year computer science courses to include fundamental principles and concepts, not just programming. For example, Carnegie Mellon [86] has revised its first-year curricula to promote computational thinking as an informal discipline.
The College Board, with support from the NSF, has designed an Advanced Placement (AP) course that covers fundamental concepts in computing and computational thinking (http://csprinciples.org). Five universities piloted versions of this course in 2010: University of North Carolina-
Charlotte, UC Berkeley, Metropolitan State University of Denver, UC San Diego, and University of Washington [86].
The Department of Computer Science at Virginia Tech has revamped its undergraduate entry-level curriculum, with a particular focus on computer science. They created the first “Computational Thinking” course, CT4CS (A Computational Thinking course for Computer Science students) [61]. They envisioned this course as being grounded in computational thinking to encourage deeper critical thinking about computation. The desired outcomes included restructuring the programming course sequence, introducing the first optional means-first calculus, and adding a prerequisite non-programming course in problem solving.
For students taking more advanced computer science courses, starting with programming, the challenge will no longer be to learn how to think computationally, but to learn the nuances of new languages, how to formally describe computations in these languages, and in subsequent courses how such descriptions are implemented on Von Neumann machines. For students who do not pursue further computer science, their foundation in computational thinking will pay significant dividends in their professional work and in their own daily lives. Indeed, in this information age, it is important to have a solid understanding of the uses and limitations of computational thinking.
In the training program of KTĐT, VT, the subject of Programming Techniques is one of the basic subjects for students (Figure 1.5) . Data Structures and Algorithms are considered as the two most important factors in programming, as the famous saying of Mr. Niklaus Wirth: “Programs = Data Structures + Algorithms” (Programs = Data Structures + Algorithms)
+ Algorithms). Mastering data structures and algorithms is the basis for students to approach software design and construction as well as use modern programming tools [14].





