TESTING AREA for teachers - real service at plus.tuni.fi

Computational thinking (CT)

CT strategies

The following section is inspired by the principles of computational thinking, an approach to problem-solving that includes decomposing complex problems, recognizing patterns, and designing algorithms to solve them. These strategies are fundamental in both mathematics and computer science.

This perspective builds on Jeannette Wing’s seminal definition of computational thinking, which she describes in terms of three core pillars: abstraction, automation, and analysis. In this context, we place special emphasis on functional thinking as part of abstraction and automation, along with the importance of testing and proving correctness as part of analysis.

For more details, see:

Wing, Jeannette M. “Computational thinking.” Communications of the ACM 49.3 (2006): 33-35

Which of the following best shows what abstraction means when solving a problem?

What does decomposition mean to you? Can you give an example of how you would break down a complex problem?

How often do you engage in decomposition (breaking down problems)?

Why is abstraction useful when writing a math solution or a piece of code?

What is the main idea of automation in computational thinking?

When should you consider automating a task in math or programming?

In computational thinking, what does analysis mean?

You wrote two different programs to solve the same problem. What’s the best way to figure out which one is better?

Functional thinking

This section explores functional thinking, a key component of the abstraction pillar in computational thinking. Functional thinking involves understanding and solving problems by modeling them as functions—clear, rule-based relationships between inputs and outputs.

In mathematics, functional thinking builds on algebraic thinking but places greater emphasis on how values are transformed. While algebraic thinking focuses on symbolic representations and structures, functional thinking highlights how inputs are systematically mapped to outputs through well-defined operations.

In programming, functional thinking promotes writing code that is modular, predictable, and reusable. It typically involves the use of functions, variables, higher-order functions, and recursion to express solutions in a clear and structured manner.

The following section will assess students’ prior knowledge and intuitive understanding of these concepts.

What topics or concepts do you currently struggle with in mathematics, if any?

What topics or concepts do you currently struggle with in computer science, if any?

In your own words, describe what a variable is.

In your own words, describe what a function is.

In your own words, describe what a higher-order function is.

What does recursion mean to you? Can you give an example or describe how it works?

Do you see any similarities between mathematics and computer science? If so, what are they?

Has learning programming helped you understand mathematics better? Why or why not?

Think about your best experiences learning programming. What made them helpful or enjoyable for you? How do you learn programming most effectively?

If there is a concept in math or computer science that still feels difficult, what strategies do you use to try to understand it better?

Multiple-Choice Questions

What is a function?

What is a higher-order function?

What does it mean for a function to be recursive?

Which of the following is likely to be a higher-order function?

Posting submission...