What Is Problem Solving? How Software Engineers Approach Complex Challenges

HackerRank AI Promotion

From debugging an existing system to designing an entirely new software application, a day in the life of a software engineer is filled with various challenges and complexities. The one skill that glues these disparate tasks together and makes them manageable? Problem solving . 

Throughout this blog post, we’ll explore why problem-solving skills are so critical for software engineers, delve into the techniques they use to address complex challenges, and discuss how hiring managers can identify these skills during the hiring process. 

What Is Problem Solving?

But what exactly is problem solving in the context of software engineering? How does it work, and why is it so important?

Problem solving, in the simplest terms, is the process of identifying a problem, analyzing it, and finding the most effective solution to overcome it. For software engineers, this process is deeply embedded in their daily workflow. It could be something as simple as figuring out why a piece of code isn’t working as expected, or something as complex as designing the architecture for a new software system. 

In a world where technology is evolving at a blistering pace, the complexity and volume of problems that software engineers face are also growing. As such, the ability to tackle these issues head-on and find innovative solutions is not only a handy skill — it’s a necessity. 

The Importance of Problem-Solving Skills for Software Engineers

Problem-solving isn’t just another ability that software engineers pull out of their toolkits when they encounter a bug or a system failure. It’s a constant, ongoing process that’s intrinsic to every aspect of their work. Let’s break down why this skill is so critical.

Driving Development Forward

Without problem solving, software development would hit a standstill. Every new feature, every optimization, and every bug fix is a problem that needs solving. Whether it’s a performance issue that needs diagnosing or a user interface that needs improving, the capacity to tackle and solve these problems is what keeps the wheels of development turning.

It’s estimated that 60% of software development lifecycle costs are related to maintenance tasks, including debugging and problem solving. This highlights how pivotal this skill is to the everyday functioning and advancement of software systems.

Innovation and Optimization

The importance of problem solving isn’t confined to reactive scenarios; it also plays a major role in proactive, innovative initiatives . Software engineers often need to think outside the box to come up with creative solutions, whether it’s optimizing an algorithm to run faster or designing a new feature to meet customer needs. These are all forms of problem solving.

Consider the development of the modern smartphone. It wasn’t born out of a pre-existing issue but was a solution to a problem people didn’t realize they had — a device that combined communication, entertainment, and productivity into one handheld tool.

Increasing Efficiency and Productivity

Good problem-solving skills can save a lot of time and resources. Effective problem-solvers are adept at dissecting an issue to understand its root cause, thus reducing the time spent on trial and error. This efficiency means projects move faster, releases happen sooner, and businesses stay ahead of their competition.

Improving Software Quality

Problem solving also plays a significant role in enhancing the quality of the end product. By tackling the root causes of bugs and system failures, software engineers can deliver reliable, high-performing software. This is critical because, according to the Consortium for Information and Software Quality, poor quality software in the U.S. in 2022 cost at least $2.41 trillion in operational issues, wasted developer time, and other related problems.

Problem-Solving Techniques in Software Engineering

So how do software engineers go about tackling these complex challenges? Let’s explore some of the key problem-solving techniques, theories, and processes they commonly use.

Decomposition

Breaking down a problem into smaller, manageable parts is one of the first steps in the problem-solving process. It’s like dealing with a complicated puzzle. You don’t try to solve it all at once. Instead, you separate the pieces, group them based on similarities, and then start working on the smaller sets. This method allows software engineers to handle complex issues without being overwhelmed and makes it easier to identify where things might be going wrong.

Abstraction

In the realm of software engineering, abstraction means focusing on the necessary information only and ignoring irrelevant details. It is a way of simplifying complex systems to make them easier to understand and manage. For instance, a software engineer might ignore the details of how a database works to focus on the information it holds and how to retrieve or modify that information.

Algorithmic Thinking

At its core, software engineering is about creating algorithms — step-by-step procedures to solve a problem or accomplish a goal. Algorithmic thinking involves conceiving and expressing these procedures clearly and accurately and viewing every problem through an algorithmic lens. A well-designed algorithm not only solves the problem at hand but also does so efficiently, saving computational resources.

Parallel Thinking

Parallel thinking is a structured process where team members think in the same direction at the same time, allowing for more organized discussion and collaboration. It’s an approach popularized by Edward de Bono with the “ Six Thinking Hats ” technique, where each “hat” represents a different style of thinking.

In the context of software engineering, parallel thinking can be highly effective for problem solving. For instance, when dealing with a complex issue, the team can use the “White Hat” to focus solely on the data and facts about the problem, then the “Black Hat” to consider potential problems with a proposed solution, and so on. This structured approach can lead to more comprehensive analysis and more effective solutions, and it ensures that everyone’s perspectives are considered.

This is the process of identifying and fixing errors in code . Debugging involves carefully reviewing the code, reproducing and analyzing the error, and then making necessary modifications to rectify the problem. It’s a key part of maintaining and improving software quality.

Testing and Validation

Testing is an essential part of problem solving in software engineering. Engineers use a variety of tests to verify that their code works as expected and to uncover any potential issues. These range from unit tests that check individual components of the code to integration tests that ensure the pieces work well together. Validation, on the other hand, ensures that the solution not only works but also fulfills the intended requirements and objectives.

Explore verified tech roles & skills.

The definitive directory of tech roles, backed by machine learning and skills intelligence.

Explore all roles

Evaluating Problem-Solving Skills

We’ve examined the importance of problem-solving in the work of a software engineer and explored various techniques software engineers employ to approach complex challenges. Now, let’s delve into how hiring teams can identify and evaluate problem-solving skills during the hiring process.

Recognizing Problem-Solving Skills in Candidates

How can you tell if a candidate is a good problem solver? Look for these indicators:

  • Previous Experience: A history of dealing with complex, challenging projects is often a good sign. Ask the candidate to discuss a difficult problem they faced in a previous role and how they solved it.
  • Problem-Solving Questions: During interviews, pose hypothetical scenarios or present real problems your company has faced. Ask candidates to explain how they would tackle these issues. You’re not just looking for a correct solution but the thought process that led them there.
  • Technical Tests: Coding challenges and other technical tests can provide insight into a candidate’s problem-solving abilities. Consider leveraging a platform for assessing these skills in a realistic, job-related context.

Assessing Problem-Solving Skills

Once you’ve identified potential problem solvers, here are a few ways you can assess their skills:

  • Solution Effectiveness: Did the candidate solve the problem? How efficient and effective is their solution?
  • Approach and Process: Go beyond whether or not they solved the problem and examine how they arrived at their solution. Did they break the problem down into manageable parts? Did they consider different perspectives and possibilities?
  • Communication: A good problem solver can explain their thought process clearly. Can the candidate effectively communicate how they arrived at their solution and why they chose it?
  • Adaptability: Problem-solving often involves a degree of trial and error. How does the candidate handle roadblocks? Do they adapt their approach based on new information or feedback?

Hiring managers play a crucial role in identifying and fostering problem-solving skills within their teams. By focusing on these abilities during the hiring process, companies can build teams that are more capable, innovative, and resilient.

Key Takeaways

As you can see, problem solving plays a pivotal role in software engineering. Far from being an occasional requirement, it is the lifeblood that drives development forward, catalyzes innovation, and delivers of quality software. 

By leveraging problem-solving techniques, software engineers employ a powerful suite of strategies to overcome complex challenges. But mastering these techniques isn’t simple feat. It requires a learning mindset, regular practice, collaboration, reflective thinking, resilience, and a commitment to staying updated with industry trends. 

For hiring managers and team leads, recognizing these skills and fostering a culture that values and nurtures problem solving is key. It’s this emphasis on problem solving that can differentiate an average team from a high-performing one and an ordinary product from an industry-leading one.

At the end of the day, software engineering is fundamentally about solving problems — problems that matter to businesses, to users, and to the wider society. And it’s the proficient problem solvers who stand at the forefront of this dynamic field, turning challenges into opportunities, and ideas into reality.

This article was written with the help of AI. Can you tell which parts?

Get started with HackerRank

Over 2,500 companies and 40% of developers worldwide use HackerRank to hire tech talent and sharpen their skills.

Problem Solving

Solving problems is the core of computer science. Programmers must first understand how a human solves a problem, then understand how to translate this "algorithm" into something a computer can do, and finally how to "write" the specific syntax (required by a computer) to get the job done. It is sometimes the case that a machine will solve a problem in a completely different way than a human.

Computer Programmers are problem solvers. In order to solve a problem on a computer you must:

Know how to represent the information (data) describing the problem.

Determine the steps to transform the information from one representation into another.

Information Representation

A computer, at heart, is really dumb. It can only really know about a few things... numbers, characters, booleans, and lists (called arrays) of these items. (See Data Types). Everything else must be "approximated" by combinations of these data types.

A good programmer will "encode" all the "facts" necessary to represent a problem in variables (See Variables). Further, there are "good ways" and "bad ways" to encode information. Good ways allow the computer to easily "compute" new information.

An algorithm (see Algorithm) is a set of specific steps to solve a problem. Think of it this way: if you were to tell your 3 year old neice to play your favorite song on the piano (assuming the neice has never played a piano), you would have to tell her where the piano was, and how to sit on the bench, and how to open the cover, and which keys to press, and which order to press them in, etc, etc, etc.

The core of what good programmers do is being able to define the steps necessary to accomplish a goal. Unfortunately, a computer, only knows a very restricted and limited set of possible steps. For example a computer can add two numbers. But if you want to find the average of two numbers, this is beyond the basic capabilities of a computer. To find the average, you must:

  • First: Add the two numbers and save this result in a variable
  • Then: Divide this new number the number two, and save this result in a variable.
  • Finally: provide this number to the rest of the program (or print it for the user).

We "compute" all the time. Computing is the act of solving problems (or coming up with a plan to solve problems) in an organized manner. We don't need computers to "compute". We can use our own brain.

Encapsulation and Abstraction and Complexity Hiding

Computer scientists like to use the fancy word "Encapsulation" to show how smart we are. This is just a term for things we do as humans every day. It is combined with another fancy term: "Abstraction".

Abstraction is the idea of "ignoring the details". For example, a forest is really a vastly complex ecosystem containing trees, animals, water paths, etc, etc, etc. But to a computer scientist (and to a normal person), its just "a forest".

For example, if your professor needs a cup of coffee, and asks you the single item: "Get me a cup of coffee", he has used both encapsulation and abstraction. The number of steps required to actually get the coffee are enumerable. Including, getting up, walking down the hall, getting in your car, driving to a coffee stand, paying for the coffee, etc, etc, etc. Further, the idea of what a cup of coffee is, is abstract. Do you bring a mug of coffee, or a Styrofoam cup? Is it caffeinated or not? Is it freshly brewed or from concentrate? Does it come from Africa or America?

All of this information is TOO MUCH and we would quickly be unable to funciton if we had to remember all of these details. Thus we "abstract away" the details and only remember the few important items.

This brings us to the idea of "Complexity Hiding". Complexity hiding is the idea that most of the times details don't matter. In a computer program, as simple an idea as drawing a square on the screen involves hundreds (if not thousands) of (low level) computer instructions. Again, a person couldn't possible create interesting programs if every time they wanted to do something, they had to re-write (correctly) every one of those instructions. By "ecapsulating" what is meant by "draw square" and "reusing" this operation over and over again, we make programming tractable.

Encapsulation

The idea behind encapsulation is to store the information necessary to a particular idea in a set of variables associated with a single "object". We then create functions to manipulate this object, regardless of what the actual data is. From that point on, we treat the idea from a "high level" rather than worry about all the parts (data) and actions (functions) necessary to represent the object in a computer.

Brute Force

Brute force is a technique for solving problems that relies on a computers speed (how fast it can repeat steps) to solve a problem. For example, if you wanted to know how many times the number 8 goes into the number 100, you could do the following:

Of course this is a silly way for a computer (or a human) to solve this problem. The real way we would do it is:

When in doubt, you can often use "brute force" to solve a problem, but it often saves time (at least computer time) to think about the problem and solve it in an elegant manner.

  • Admiral “Amazing Grace” Hopper

Exploring the Intricacies of NP-Completeness in Computer Science

Understanding p vs np problems in computer science: a primer for beginners, understanding key theoretical frameworks in computer science: a beginner’s guide.

Learn Computer Science with Python

Learn Computer Science with Python

CS is a journey, not a destination

  • Foundations

Understanding Algorithms: The Key to Problem-Solving Mastery

importance of problem solving in computer science

The world of computer science is a fascinating realm, where intricate concepts and technologies continuously shape the way we interact with machines. Among the vast array of ideas and principles, few are as fundamental and essential as algorithms. These powerful tools serve as the building blocks of computation, enabling computers to solve problems, make decisions, and process vast amounts of data efficiently.

An algorithm can be thought of as a step-by-step procedure or a set of instructions designed to solve a specific problem or accomplish a particular task. It represents a systematic approach to finding solutions and provides a structured way to tackle complex computational challenges. Algorithms are at the heart of various applications, from simple calculations to sophisticated machine learning models and complex data analysis.

Understanding algorithms and their inner workings is crucial for anyone interested in computer science. They serve as the backbone of software development, powering the creation of innovative applications across numerous domains. By comprehending the concept of algorithms, aspiring computer science enthusiasts gain a powerful toolset to approach problem-solving and gain insight into the efficiency and performance of different computational methods.

In this article, we aim to provide a clear and accessible introduction to algorithms, focusing on their importance in problem-solving and exploring common types such as searching, sorting, and recursion. By delving into these topics, readers will gain a solid foundation in algorithmic thinking and discover the underlying principles that drive the functioning of modern computing systems. Whether you’re a beginner in the world of computer science or seeking to deepen your understanding, this article will equip you with the knowledge to navigate the fascinating world of algorithms.

What are Algorithms?

At its core, an algorithm is a systematic, step-by-step procedure or set of rules designed to solve a problem or perform a specific task. It provides clear instructions that, when followed meticulously, lead to the desired outcome.

Consider an algorithm to be akin to a recipe for your favorite dish. When you decide to cook, the recipe is your go-to guide. It lists out the ingredients you need, their exact quantities, and a detailed, step-by-step explanation of the process, from how to prepare the ingredients to how to mix them, and finally, the cooking process. It even provides an order for adding the ingredients and specific times for cooking to ensure the dish turns out perfect.

In the same vein, an algorithm, within the realm of computer science, provides an explicit series of instructions to accomplish a goal. This could be a simple goal like sorting a list of numbers in ascending order, a more complex task such as searching for a specific data point in a massive dataset, or even a highly complicated task like determining the shortest path between two points on a map (think Google Maps). No matter the complexity of the problem at hand, there’s always an algorithm working tirelessly behind the scenes to solve it.

Furthermore, algorithms aren’t limited to specific programming languages. They are universal and can be implemented in any language. This is why understanding the fundamental concept of algorithms can empower you to solve problems across various programming languages.

The Importance of Algorithms

Algorithms are indisputably the backbone of all computational operations. They’re a fundamental part of the digital world that we interact with daily. When you search for something on the web, an algorithm is tirelessly working behind the scenes to sift through millions, possibly billions, of web pages to bring you the most relevant results. When you use a GPS to find the fastest route to a location, an algorithm is computing all possible paths, factoring in variables like traffic and road conditions, to provide you the optimal route.

Consider the world of social media, where algorithms curate personalized feeds based on our previous interactions, or in streaming platforms where they recommend shows and movies based on our viewing habits. Every click, every like, every search, and every interaction is processed by algorithms to serve you a seamless digital experience.

In the realm of computer science and beyond, everything revolves around problem-solving, and algorithms are our most reliable problem-solving tools. They provide a structured approach to problem-solving, breaking down complex problems into manageable steps and ensuring that every eventuality is accounted for.

Moreover, an algorithm’s efficiency is not just a matter of preference but a necessity. Given that computers have finite resources — time, memory, and computational power — the algorithms we use need to be optimized to make the best possible use of these resources. Efficient algorithms are the ones that can perform tasks more quickly, using less memory, and provide solutions to complex problems that might be infeasible with less efficient alternatives.

In the context of massive datasets (the likes of which are common in our data-driven world), the difference between a poorly designed algorithm and an efficient one could be the difference between a solution that takes years to compute and one that takes mere seconds. Therefore, understanding, designing, and implementing efficient algorithms is a critical skill for any computer scientist or software engineer.

Hence, as a computer science beginner, you are starting a journey where algorithms will be your best allies — universal keys capable of unlocking solutions to a myriad of problems, big or small.

Common Types of Algorithms: Searching and Sorting

Two of the most ubiquitous types of algorithms that beginners often encounter are searching and sorting algorithms.

Searching algorithms are designed to retrieve specific information from a data structure, like an array or a database. A simple example is the linear search, which works by checking each element in the array until it finds the one it’s looking for. Although easy to understand, this method isn’t efficient for large datasets, which is where more complex algorithms like binary search come in.

Binary search, on the other hand, is like looking up a word in the dictionary. Instead of checking each word from beginning to end, you open the dictionary in the middle and see if the word you’re looking for should be on the left or right side, thereby reducing the search space by half with each step.

Sorting algorithms, meanwhile, are designed to arrange elements in a particular order. A simple sorting algorithm is bubble sort, which works by repeatedly swapping adjacent elements if they’re in the wrong order. Again, while straightforward, it’s not efficient for larger datasets. More advanced sorting algorithms, such as quicksort or mergesort, have been designed to sort large data collections more efficiently.

Diving Deeper: Graph and Dynamic Programming Algorithms

Building upon our understanding of searching and sorting algorithms, let’s delve into two other families of algorithms often encountered in computer science: graph algorithms and dynamic programming algorithms.

A graph is a mathematical structure that models the relationship between pairs of objects. Graphs consist of vertices (or nodes) and edges (where each edge connects a pair of vertices). Graphs are commonly used to represent real-world systems such as social networks, web pages, biological networks, and more.

Graph algorithms are designed to solve problems centered around these structures. Some common graph algorithms include:

Dynamic programming is a powerful method used in optimization problems, where the main problem is broken down into simpler, overlapping subproblems. The solutions to these subproblems are stored and reused to build up the solution to the main problem, saving computational effort.

Here are two common dynamic programming problems:

Understanding these algorithm families — searching, sorting, graph, and dynamic programming algorithms — not only equips you with powerful tools to solve a variety of complex problems but also serves as a springboard to dive deeper into the rich ocean of algorithms and computer science.

Recursion: A Powerful Technique

While searching and sorting represent specific problem domains, recursion is a broad technique used in a wide range of algorithms. Recursion involves breaking down a problem into smaller, more manageable parts, and a function calling itself to solve these smaller parts.

To visualize recursion, consider the task of calculating factorial of a number. The factorial of a number n (denoted as n! ) is the product of all positive integers less than or equal to n . For instance, the factorial of 5 ( 5! ) is 5 x 4 x 3 x 2 x 1 = 120 . A recursive algorithm for finding factorial of n would involve multiplying n by the factorial of n-1 . The function keeps calling itself with a smaller value of n each time until it reaches a point where n is equal to 1, at which point it starts returning values back up the chain.

Algorithms are truly the heart of computer science, transforming raw data into valuable information and insight. Understanding their functionality and purpose is key to progressing in your computer science journey. As you continue your exploration, remember that each algorithm you encounter, no matter how complex it may seem, is simply a step-by-step procedure to solve a problem.

We’ve just scratched the surface of the fascinating world of algorithms. With time, patience, and practice, you will learn to create your own algorithms and start solving problems with confidence and efficiency.

Related Articles

importance of problem solving in computer science

Three Elegant Algorithms Every Computer Science Beginner Should Know

Browse Course Material

Course info.

  • Prof. John Guttag

Departments

  • Electrical Engineering and Computer Science

As Taught In

  • Computer Science

Introduction to Computer Science and Programming

Lecture 3: problem solving.

  • Download video
  • Download transcript

facebook

You are leaving MIT OpenCourseWare

Problem-Solving in Computer Science: Learning from a Gifted Peer

  • Living reference work entry
  • First Online: 22 August 2019
  • Cite this living reference work entry

importance of problem solving in computer science

  • Bertold Kujath 2 &
  • Andreas Schwill 2  

188 Accesses

A comparative study of individuals with high and low skills in computer science shows that efficient problem-solvers use a significantly different approach while dealing with typical problems of computer science compared to rather weak problem-solvers. It was noteworthy that despite knowing typical tools for informatic problem-solving, such as tree structures or recursion, low performers tended not to utilize them during the problem-solving process. Furthermore, the study revealed that in contrast to high performers, low performers did not heed to many common recommendations for problem-solving, such as splitting the problem into subproblems or performing a problem analysis prior to the actual work on the problem solution. These findings, as well as the efficient strategies used by the high-skilled students, laid the foundation of the concept for an educational video. Its purpose is to allow learners to observe high-skilled problem-solvers while approaching typical informatic problems. The following paper describes the entire development process of an instructional video about informatic problem-solving, from basic research, over the conceptual development to the evaluation of the final video.

This is a preview of subscription content, log in via an institution to check access.

Access this chapter

Institutional subscriptions

Similar content being viewed by others

importance of problem solving in computer science

Problem-Solving in Computer Science, Learning from a Gifted Peer

importance of problem solving in computer science

Problem-Based Learning in College Science

importance of problem solving in computer science

How do higher education students regulate their learning with video modeling examples, worked examples, and practice problems?

Berk RA (2009) Multimedia teaching with video clips: TV, movies, YouTube and mtvU in the college classroom. Int J Technol Teach Learn 5(1):1–21

Google Scholar  

Friege G (2001) Wissen und Problemlösen. Logos Verlag, Berlin

Fuchs M (2006) Vorgehensweisen mathematisch potentiell begabter Dritt- und Viertklässler beim Problemlösen. LIT Verlag, Berlin

Heller K, Mönks F, Passow A (1993) International handbook of research and development of giftedness and talent. Pergamon, Oxford

Kittelberger R, Freisleben I (1994) Lernen mit Video und Film. Beltz Verlag, Weinheim

Kujath B (2006) Ein Test- und Analyseverfahren zur Kontrastierung von Problemlöseprozessen informatischer Hoch- und Niedrigleister – erste Ergebnisse einer Pilotstudie. In: Schwill A, Schulte C, Thomas M (Hrsg) GI-edition-lecture notes in informatics Band 99, Gesellschaft für Informatik, Bonn, pp 49–69

Kujath B (2007) Vergleichende Analysen zweier Problemlöseprozesse unter dem Aspekt des Problemlöseerfolgs. In: Schubert S (Hrsg) GI-edition-lecture notes in informatics, vol 112. Gesellschaft für Informatik, Bonn, pp 295–306

Kujath B (2008) Anhang zum Workshopbeitrag: Wie können schwache Problemlöser von Hochleistern lernen – Konzeption eines Lehrvideos. http://ddi.cs.uni-potsdam.de/didaktik/kujath/Fachgruppe2008Anhang.pdf

Kujath B (2011a) Keine Angst vor Informatikproblemen. Hochleistern über die Schulter geschaut. Ein Lehrvideo zum informatischen Problemlösen. Universitätsverlag, Potsdam. ISBN 978-3-86956-150-9

Kujath B (2011b) Don’t be afraid of informatics problems – looking over a highflyer’s shoulder. Educational video, 33 minutes. http://mediaup.uni-potsdam.de/Browse/Tag/highflyer

Kujath B, Schütze C (2015) Evaluation der Lernwirksamkeit eines Lehrvideos zum informatischen Problemlösen. HDI 2014: Gestalten und Meistern von Übergängen. Universität, Potsdam. pp 97–104

Lippert H (1987) Rezipienten-orientierte Medienwirkungsforschung. Verlag Josef Lippert, Münster

Mair D (2005) E-Learning – das Drehbuch. Springer, Berlin

Märtin D (2005) Erfolgreich texten. Voltmedia, Paderborn

Mayring P (2014) Qualitative content analysis. Theoretical foundation, basic procedures and software solution. Weinheim, Beltz

Paivio A (1971) Imagery and verbal processes. Lawrence Erlbaum Associates, Inc., Hillsdale

Paivio A (1986) Mental representations: a dual coding approach. Oxford University Press, New York

Sailer M, Figas P (2015) Audiovisuelle Bildungsmedien in der Hochschullehre. Eine Experimentalstudie zu zwei Lernvideotypen in der Statistiklehre. http://bildungsforschung.org , 1 Ausgabe 2015

Schubert S, Schwill A (2004) Didaktik der Informatik. Spektrum Akademie Verlag, Heidelberg

MATH   Google Scholar  

Schütze C (2013) Analyse der Lernwirksamkeit eines Lehrfilms zum problemlösenden Denken im Informatikunterricht, Master Thesis Universität Potsdam. Institut für Informatik

Waldmann MR, Weinert FE (1990) Intelligenz und Denken. Hogrefe, Göttingen

Download references

Author information

Authors and affiliations.

Institute of Computer Science, University of Potsdam, Potsdam, Germany

Bertold Kujath & Andreas Schwill

You can also search for this author in PubMed   Google Scholar

Corresponding author

Correspondence to Andreas Schwill .

Editor information

Editors and affiliations.

Victoria University , Melbourne, VIC, Australia

Arthur Tatnall

Section Editor information

Faculty of Science and Technology, University of Siegen, Siegen, Germany

Sigrid Schubert

Rights and permissions

Reprints and permissions

Copyright information

© 2019 Springer Nature Switzerland AG

About this entry

Cite this entry.

Kujath, B., Schwill, A. (2019). Problem-Solving in Computer Science: Learning from a Gifted Peer. In: Tatnall, A. (eds) Encyclopedia of Education and Information Technologies. Springer, Cham. https://doi.org/10.1007/978-3-319-60013-0_29-1

Download citation

DOI : https://doi.org/10.1007/978-3-319-60013-0_29-1

Received : 20 November 2017

Accepted : 07 March 2018

Published : 22 August 2019

Publisher Name : Springer, Cham

Print ISBN : 978-3-319-60013-0

Online ISBN : 978-3-319-60013-0

eBook Packages : Springer Reference Computer Sciences Reference Module Computer Science and Engineering

  • Publish with us

Policies and ethics

  • Find a journal
  • Track your research

CS2104: Introduction to Problem Solving in Computer Science

This course introduces the student to a broad range of heuristics for solving problems in a range of settings. Emphasis on problem-solving techniques that aid programmers and computer scientists. Heuristics for solving problems ''in the small'' (classical math and word problems), generating potential solutions to ''real-life'' problems encountered in the profession, and problem solving in teams.

Having successfully completed this course, the student will be able to:

  • Identify skills and personality traits of successful problem solving.
  • Apply standard problem-solving heuristics to aid in problem solving.
  • Apply problem-solving techniques to programming activities.
  • Apply problem-solving techniques to school and personal interactions.
  • Apply pairs and team problem-solving techniques.
  • Generate potential solutions to problems with standard heuristics.
  • Formulate and successfully communicate the solutions to problems.

 Prerequisites:  MATH 1205 or MATH 1225 or MATH 1526.

Taught By:  Alexey Onufriev Dwight Barnette Layne Watson Margaret Ellis Cliff Shaffer William McQuain

Oberlin College Computer Science

  • Course Websites
  • CS Lab Helper Schedule

Problem Solving Tips

  • Course Catalog
  • Major/Minor in CS
  • Electives Schedule
  • Intro Course Placement
  • Academic Calendar
  • Department Honors
  • Bob Geitz (chair)
  • Stephen Checkoway
  • Roberto Hoyle
  • Dylan McKay
  • Sam Taggart
  • Cynthia Taylor
  • Blair Rossetti
  • Molly Feldman
  • 2013-Wearable-Electronics
  • 2011 ACM Programming Contest
  • 2013 Alexa's Tenure Celebration
  • 2013 Pledge Ceremony
  • 2012 Games Showcase
  • 2011 CSMC Unix Night
  • MCURCSM 2009
  • 2009 Games Showcase
  • OCCS 25th Anniversary
  • 2010 Spring Social
  • 2009 Spring Picnic
  • 2009 Math/CS Ice Cream Social
  • 2008 Spring Picnic
  • 2010 Denison Programming Contest
  • 2008 Math/CS Sundae Friday
  • 2009 ACM Programming Contest
  • 2009 Denison Programming Contest
  • 2008 ACM Programming Contest
  • 2008 Denison Programming Contest
  • 2007 ACM Programming Contest
  • 2006 ACM Programming Contest
  • Oberlin College

One of the most important skills you learn in your computer science courses is how to problem solve. Although we cover some general problem solving paradigms in class, the best way to improve these skills is to get practice, practice, and more practice. Different people have different techniques that work best for them; below are some general tips that work for most people.

Please read these suggestions carefully.

Questions the Helpers May Ask You

When you ask a lab helper for their assistance, they will assume you have tried to solve the problem yourself. They will (reasonably) expect that you have tried out the steps outlined in this document; you should therefore be prepared to answer the following questions:

  • Did you re-read the prelab and lab?
  • Do you understand the problem?
  • Have you tried solving some examples by hand?
  • (For problems designing a solution) What have you tried? What topic from class does this most ressemble?
  • If you can’t solve the problem whole-hog, what small case can you solve?
  • (For syntax errors) What line of your code is causing the error? What do you think the compile error means, and what usually causes this kind of problem?
  • (For logical errors) On what example does your program consistently break? Have you traced through the program? Which line of your program is not doing what it should?

Four Main Problem Solving Steps:

1. understand the problem..

Solving the right problem is the most important part of problem solving. Be sure, absolutely 100% positively sure, that you understand the problem before attempting a solution. This involves:

  • Reading the prelab and lab very carefully (including all bold text, italicized text, and everything else);
  • Reviewing class notes on related topics;
  • Trying some small examples to make sure you understand what is being asked; if examples are given to you, make sure you understand them before continuing, as they are usually there to help clarify some common misconceptions; and
  • Asking someone to help clarify anything that is still confusing.

2. Design a Solution.

Formulate an algorithm to solve your problem. This involves:

  • Understanding what is being asked of you. See step 1.
  • Draw out some examples. Use paper . How would you solve these small cases, by hand? Is there a method to what you are doing? Try to formalize the steps you are taking, and try to think about whether they would work more generally, in bigger cases. Then try some bigger cases and convince yourself.
  • Reread the prelab . Did you already run some examples by hand? Did you have trouble with it then?
  • Write down the stuff you know about the problem and the examples you’ve tried, so that you can more easily find patterns .
  • Might a recent topic from class help? Usually at least some, if not most, of the lab will make use of recently covered material . Go over that topic, make sure you understand it, then try to make connections to lab.
  • Split the problem into smaller (more manageable) chunks, and try to solve the simpler problems. Go as small as you need in order to find some solution. Once you have the smaller problem solved, worry about how to generalize it to a slightly larger problem.
  • Just try something , anything, even if it is completely random and obviously wrong. When/if your attempt doesn’t work, it may still give you insight into what may work. It is not as crazy as it initially sounds!
  • Use a friend, lab helper, puppet, etc. as a sounding board ; sometimes, just voicing your problem will lead you to the “aha!” moment you need.
  • If you are still stuck, step away from the keyboard . Take a walk, go eat dinner or have a coffee. Sleep on it. Not literally. Taking a break is sometimes the most productive thing you can do, trust me.
  • Finally, stay positive . Even when things don’t work, you can still gain a better understanding of the problem. Don’t give up, just go with the flow and see where it takes you. Struggling is part of the process!

3. Implement your Solution.

Write the code to solve your problem. This involves

  • Understanding the problem, and designing a solution on paper. See steps 1 and 2.
  • Translating your design into actual code. Rather than doing this linearly, implement small chunks at a time. Break your code into subroutines, and make sure that each subroutine works before proceeding to the next. Compile and save often .
  • If you run into syntax errors, determine which line of your code is causing the problem. You can do this by systematically commenting out blocks of code until you find the block that causes the problem.
  • If you run into logical errors (as in, the program compiles but does not do what it is supposed to), find some examples on which your problem consistently fails. Trace through the program line by line, with one of these examples, to figure out exactly which line is not doing what you intend it to.
  • If the output doesn’t match what you expect, use print statements to trace through what your program is doing, and compare that to what your program should be doing. Even better, if you know how to use a debugger (in eclipse, for example, use it!)

4. Check your Solution.

This step is often overlooked, but is absolutely crucial. Your program does not necessarily work because it works on the given test cases on the lab. You have to think critically about what you code. This involves

  • Certainly check your program on all test cases given to you on the lab and prelab. The prelab often specifically contains hand-solved test cases precisely for this purpose!
  • Thinking about the “ boundary cases ,” such as, when would this array go out of bounds? For what indices will this for loop start and end?
  • Think: how would this program break ? Then, that failing: how would I convince my skeptical friend it can’t be broken?

Remember: problem solving is a creative process, which cannot be forced. Don’t get angry if you don’t see the answer right away, or you don’t see it as fast as your friend. You will have different strengths, and you can always improve. You will learn from your mistakes, so that’s always a plus!

Last updated July 3rd, 2012 by asharp

Recent Posts

  • Congratulations Professor Stephen Checkoway; recipient of this prestigious award!
  • Class of 2021 Celebration
  • Undergraduate Research Symposium
  • Grad School Information meeting
  • Tech Resume Workshop Thursday April 1 4:45pm
  • Information
  • Jobs/Internships
  • Uncategorized
  • Association for Computing Machinery (ACM)
  • National Center for Women & Information Technology (NCWIT)
  • Computer Research Association (CRA)

OCCS Social Media

  • Entries feed
  • Comments feed
  • WordPress.org

Oberlin College Computer Science Department -- 10 N. Professor St., Oberlin, OH 44074 -- Phone: (440) 775-8043

Copyright © 1985-2024 Oberlin College Computer Science. Design by Benjamin A. Kuperman . Powered by WordPress .

!

CS for CA News & Updates

Computer science skills: computational thinking explained.

It’s a common misconception that computer science (CS) is only applicable to people working in a technology or STEM careers. However, skills learnt through CS are used in our everyday lives, and in a variety of subjects.

One of these skills is known as computational thinking (CT). 

What is computational thinking?

There are many problem-solving skills involved in computer science, including those needed to design, develop, and debug software. Computational thinking is a way of describing these skills.

Computational thinking refers to the thought processes involved in defining a problem and its solution so that the solution can be expertly carried out by a computer. We don't need computers to engage in computational thinking, but CT can leverage the power of computers to solve a problem.

Computational thinking helps build these skills:

  • Decomposition – the process of breaking down a complex problem into smaller parts that are more manageable, and helps us see problems as less overwhelming.
  • Abstraction – identifying common features, recognizing patterns, and filtering out what we don’t need. 
  • Algorithmic Thinking – designing a set of steps to accomplish a specific task. 
  • Debugging and Evaluation – testing and refining a potential solution, and ensuring it’s the best fit for the problem.

These skills relate to critical thinking and problem solving skills across different subject matter, highlighting how concepts of computing can be combined with other fields of study to assist in problem-solving.

Computational thinking is a way of describing the many problem solving skills involved in computer science, including those needed to design, develop, and debug software. However, computer science is more than just skills, it also includes concepts about the Internet, networking, data, cybersecurity, artificial intelligence, and interfaces. Computational thinking can be relevant beyond computer science, overlapping with skills also used in other STEM subjects, as well as the arts, social sciences, and humanities.

Why is computational thinking important? 

Computational thinking can apply these problem-solving techniques to a variety of subjects. For example, CT is established as one of the Science and Engineering Practices in the Next Generation Science Standards , and can also be found in several math state standards . Computational thinking also overlaps with skills used in other STEM subjects, as well as the arts, social sciences, and humanities. Computational thinking encourages us to use the power of computing beyond the screen and keyboard. 

It can also allow us to advance equity in computer science education...

By centering the problem-solving skills that are at the heart of computer science, we can promote its integration with other subject areas, and expose more students to the possibilities of computer science. 

Not only that, but computational thinking also opens the door for us to examine the limitations and opportunities of technology as it’s being developed. We’re able to analyze who is creating technology and why, as well as think critically about the ways in which it can impact society. 

Want to learn more about computational thinking?

To learn more about computational thinking, check out the resources:

  • This framework for CS for K-12 places CT at the core of its practices and is what the California standards are based on. 
  • Part of the British Computing Society, Computing at School put forth resources to assist teachers in the UK in embedding  CT in their classrooms. 
  • This is one of the earliest definitions of CT for educators, and noteworthy for its inclusion of certain dispositions as being essential for effective CT.  
  • The developers of Scratch divide CT into concepts, practices, and perspectives, and focus on the expressive and creative nature of computing. 
  • Instead of focusing solely on standards for students, ISTE  compiled a set of knowledge, skills, and mindsets needed for educators to be successful in integrating  CT across the K-12 content areas and grade bands.  
  • Bebras began as an international competition to promote CT for students, regardless of programming experience. It is now increasingly being used as a form of CT assessment. 

Explore Related Articles

importance of problem solving in computer science

New Report on Equity in Computer Science Education in California’s Schools

importance of problem solving in computer science

California Governor's Budget Supports Computer Science education

importance of problem solving in computer science

SBE Approves Computer Science Strategic Implementation Plan

importance of problem solving in computer science

Unable to load Tweets

  • Lead by Learning
  • Public Learning
  • Partner With Us
  • Advisory Board
  • Programs at a Glance
  • Our Approach
  • Our Playbook
  • Step into Practice: Lead by Learning Tools
  • Leadership Coaching
  • The Lead by Learning Certificate Program
  • Lead by Learning’s Anti-Racist Affinity Networks
  • The Lead by Learning Alumni Network
  • Upcoming Events & Workshops
  • On-Demand Learning

Problem Solving in Computer Science: What Does It Really Mean?

Teacher scholar voices.

importance of problem solving in computer science

A Daunting Challenge

Many of my students complain when asked to read technical literature, despite my efforts to make it fun and relevant. Especially in my most advanced computer science class, it becomes difficult to use material that is exciting and topical for my students because the choice of reading is ultimately out of my hands. By the end of the year, on the Advanced Placement Computer Science A exam, students must be able to read and respond to approximately 8 pages of obscure (and sometimes bizarre) scenarios related to programming in Java. The first time I asked my students to practice responding to one such Free Response Question (FRQ), one in five students simply left it blank and took a nap. 

Weeks of practicing FRQs went by but there were no changes in how my students responded to the task. I was confused by their lackluster efforts, and my students were frustrated that they were continually asked to engage in “boring” assignments. However, I knew that if my students were going to be successful on the exam, they would need to attempt to respond to these questions and respond to them correctly. More importantly, through the regular practice of responding to such questions, they would begin to develop critical abstract reasoning skills, whose importance extends well beyond the AP exam. Simple, right?

Reading Comprehension: the Root of the Problem

Honestly, I had no idea how to tackle this problem at first. However, with the support of my Mills Teacher Scholars inquiry colleagues, we began to notice that many of my students were not responding to the FRQ prompt in full, even though they appeared to be engaged in the task the entire time. I felt that the problem was rooted in reading comprehension. So, to support my students’ deeper comprehension of these technical texts, I decided to focus my inquiry on building classroom practices that develop annotation skills. I spent the next six months with my inquiry group refining a series of weekly activities that involved circling key vocabulary terms, underlining prompts, jotting down ideas in margins, and then attempting a response to the questions that fell out of each reading. After students individually practiced their annotation skills, they would act as public learners for each other, guiding the class through their thinking about the text. By the end of my inquiry, 86.5% of my students were naturally utilizing these annotation skills for the FRQs. I was delighted to see that they were developing their critical reading abilities. However, their actual scores never changed. 

Confidence Matters Too

I was so confused! How could my students complete our reading comprehension strategies and still exhibit the same response behaviors seen at the beginning of the year? Why was it so difficult to simply put pen to paper and attempt a response? What did they have to lose? I took these mixed feelings back to my inquiry colleagues, who suggested that it might be enlightening to interview three focal students. 

After compiling the interview transcripts, I went back to my inquiry group, hoping that my colleagues might help me fill in this blind spot. Their questions challenged my assumptions, ultimately allowing me to focus on a new culprit: my students did not feel confident enough to try. For example, one of my students said, “I know how to read. I just don’t know how to respond. So what is the point of trying if I know I’m going to get it wrong?”  This was really surprising to hear. I thought I knew how they felt; I thought they were confident in their abilities to solve problems through code. My focus on reading comprehension had not been enough. I needed to figure out how to develop their confidence as problem solvers, too.

A Question Leads to New Questions

The quest to understand students’ learning lasts much longer than one school year. This year’s struggle motivates me to seek out answers to related questions in the coming fall. For instance, what builds confidence over time in a computer science course, and what changes for students’ identities as learners over time? I have started mulling over instructional strategies that balance “engagement” with rigorous exposure to CS. Most of the time, it feels like engagement and rigor are at odds with each other, especially when you begin to integrate notions of an “appropriate” CS education from some of the field’s most prominent minds. In his essay “On the Cruelty of Really Teaching Computer Science,” E.W. Dijkstra wrote that students should spend their first CS class writing formal proofs about the correctness of their programs. While this approach may be academically rigorous, I am not sure it engages students who still need to be sold on the idea of computer science. My most recent inquiry has started me thinking that a student’s confidence is buried in the slim overlap between rigorous exposure to subject matter and engaging learning experiences. This multifaceted question can feel daunting to address as an individual educator. However, I am not alone. I know that I can continue to lean on future cycles of inquiry, as well as the wonderful community of instructors who, like me, are set on figuring it all out.

importance of problem solving in computer science

My colleagues' questions challenged my assumptions, ultimately allowing me to focus on a new culprit: my students did not feel confident enough to try.

Related Content

A center of mills college at northeastern university, choosing texts with student assets, not deficits, in mind, systems change requires courageous patience.

Smart. Open. Grounded. Inventive. Read our Ideas Made to Matter.

Which program is right for you?

MIT Sloan Campus life

Through intellectual rigor and experiential learning, this full-time, two-year MBA program develops leaders who make a difference in the world.

A rigorous, hands-on program that prepares adaptive problem solvers for premier finance careers.

A 12-month program focused on applying the tools of modern data science, optimization and machine learning to solve real-world business problems.

Earn your MBA and SM in engineering with this transformative two-year program.

Combine an international MBA with a deep dive into management science. A special opportunity for partner and affiliate schools only.

A doctoral program that produces outstanding scholars who are leading in their fields of research.

Bring a business perspective to your technical and quantitative expertise with a bachelor’s degree in management, business analytics, or finance.

A joint program for mid-career professionals that integrates engineering and systems thinking. Earn your master’s degree in engineering and management.

An interdisciplinary program that combines engineering, management, and design, leading to a master’s degree in engineering and management.

Executive Programs

A full-time MBA program for mid-career leaders eager to dedicate one year of discovery for a lifetime of impact.

This 20-month MBA program equips experienced executives to enhance their impact on their organizations and the world.

Non-degree programs for senior executives and high-potential managers.

A non-degree, customizable program for mid-career professionals.

6 ways to help employees embrace data-driven initiatives

Data literacy: The key to cracking the data culture code

How to build a successful multi-sided platform

Credit: Alejandro Giraldo

Ideas Made to Matter

How to use algorithms to solve everyday problems

Kara Baskin

May 8, 2017

How can I navigate the grocery store quickly? Why doesn’t anyone like my Facebook status? How can I alphabetize my bookshelves in a hurry? Apple data visualizer and MIT System Design and Management graduate Ali Almossawi solves these common dilemmas and more in his new book, “ Bad Choices: How Algorithms Can Help You Think Smarter and Live Happier ,” a quirky, illustrated guide to algorithmic thinking. 

For the uninitiated: What is an algorithm? And how can algorithms help us to think smarter?

An algorithm is a process with unambiguous steps that has a beginning and an end, and does something useful.

Algorithmic thinking is taking a step back and asking, “If it’s the case that algorithms are so useful in computing to achieve predictability, might they also be useful in everyday life, when it comes to, say, deciding between alternative ways of solving a problem or completing a task?” In all cases, we optimize for efficiency: We care about time or space.

Note the mention of “deciding between.” Computer scientists do that all the time, and I was convinced that the tools they use to evaluate competing algorithms would be of interest to a broad audience.

Why did you write this book, and who can benefit from it?

All the books I came across that tried to introduce computer science involved coding. My approach to making algorithms compelling was focusing on comparisons. I take algorithms and put them in a scene from everyday life, such as matching socks from a pile, putting books on a shelf, remembering things, driving from one point to another, or cutting an onion. These activities can be mapped to one or more fundamental algorithms, which form the basis for the field of computing and have far-reaching applications and uses.

I wrote the book with two audiences in mind. One, anyone, be it a learner or an educator, who is interested in computer science and wants an engaging and lighthearted, but not a dumbed-down, introduction to the field. Two, anyone who is already familiar with the field and wants to experience a way of explaining some of the fundamental concepts in computer science differently than how they’re taught.

I’m going to the grocery store and only have 15 minutes. What do I do?

Do you know what the grocery store looks like ahead of time? If you know what it looks like, it determines your list. How do you prioritize things on your list? Order the items in a way that allows you to avoid walking down the same aisles twice.

For me, the intriguing thing is that the grocery store is a scene from everyday life that I can use as a launch pad to talk about various related topics, like priority queues and graphs and hashing. For instance, what is the most efficient way for a machine to store a prioritized list, and what happens when the equivalent of you scratching an item from a list happens in the machine’s list? How is a store analogous to a graph (an abstraction in computer science and mathematics that defines how things are connected), and how is navigating the aisles in a store analogous to traversing a graph?

Nobody follows me on Instagram. How do I get more followers?

The concept of links and networks, which I cover in Chapter 6, is relevant here. It’s much easier to get to people whom you might be interested in and who might be interested in you if you can start within the ball of links that connects those people, rather than starting at a random spot.

You mention Instagram: There, the hashtag is one way to enter that ball of links. Tag your photos, engage with users who tag their photos with the same hashtags, and you should be on your way to stardom.

What are the secret ingredients of a successful Facebook post?

I’ve posted things on social media that have died a sad death and then posted the same thing at a later date that somehow did great. Again, if we think of it in terms that are relevant to algorithms, we’d say that the challenge with making something go viral is really getting that first spark. And to get that first spark, a person who is connected to the largest number of people who are likely to engage with that post, needs to share it.

With [my first book], “Bad Arguments,” I spent a month pouring close to $5,000 into advertising for that project with moderate results. And then one science journalist with a large audience wrote about it, and the project took off and hasn’t stopped since.

What problems do you wish you could solve via algorithm but can’t?

When we care about efficiency, thinking in terms of algorithms is useful. There are cases when that’s not the quality we want to optimize for — for instance, learning or love. I walk for several miles every day, all throughout the city, as I find it relaxing. I’ve never asked myself, “What’s the most efficient way I can traverse the streets of San Francisco?” It’s not relevant to my objective.

Algorithms are a great way of thinking about efficiency, but the question has to be, “What approach can you optimize for that objective?” That’s what worries me about self-help: Books give you a silver bullet for doing everything “right” but leave out all the nuances that make us different. What works for you might not work for me.

Which companies use algorithms well?

When you read that the overwhelming majority of the shows that users of, say, Netflix, watch are due to Netflix’s recommendation engine, you know they’re doing something right.

Related Articles

Hands reading a book filled with data imagery

Watch Reimagine Education and learn what's new with responsible AI in education >

  • Career readiness skills
  • Published Mar 1, 2023

Why students need Computer Science to succeed

importance of problem solving in computer science

  • Content type
  • Education decision makers

As technology continues to evolve at an accelerated pace, transforming the way we live and work in the process, we find ourselves navigating the challenges of an always-changing digital landscape. Understanding the principles of computing is quickly becoming an essential skill. It provides people with a keen understanding of how technology impacts their lives, empowers them to become full participants in society, and unlocks a wide range of career opportunities. This is especially true for today’s students, who will rely on computing skills throughout their lives, making it necessary for them to have opportunities to learn Computer Science (CS).

A report by LinkedIn and Microsoft revealed that 149 million new digital jobs will be created by 2025 in fields such as software development, data analysis, cybersecurity, and AI. However, education cannot currently meet the growing demand for people with CS skills. As of October 2022, only 33% of technology jobs worldwide were filled by the adequately skilled. And by 2030, the global shortage of tech workers will represent an $8.5 trillion loss in annual revenue, according to research cited by the International Monetary Fund i .

Around the world, technology is opening up opportunities for new ways to solve the challenges and needs of businesses and organizations, everything from technology-focused [industries] to agriculture, healthcare, financial services, transportation and so many more. They’re all struggling to find the talent they need to fill many of the jobs.” Christina Thoresen, Director of Worldwide Education Industry Sales Strategy at Microsoft

A growing interest in CS curricula

Learning coding and software development, two key parts of CS, has been shown to improve students’ creativity, critical thinking, math, and reasoning skills ii . CS skills like problem-solving iii and planning iv are transferable and can be applied across other subjects. A 2020 study examining the effects of CS courses on students’ academic careers in the United States showed that they have a significant impact on the likelihood of enrolling in college v . Moreover, CS can be useful for many courses and degrees including biology, chemistry, economics, engineering, geology, mathematics, materials science, medicine, physics, psychology, and sociology vi . 

CS curricula that are relevant and engaging provide an additional benefit in that they attract traditionally marginalized groups and girls and empower those with lower access to technological resources to develop high value skills, and unlock new and exciting career opportunities. It is also worth noting that due to enduring talent shortages, CS-related fields consistently offer above-average pay and have the fastest-growing wages vii .

How Microsoft supports CS implementation

 Microsoft has been helping educational institutions around the world develop rich CS curricula that empower all students with the skills they need to confidently transition from classroom to career. By creating content that is meaningful and engaging for all students, as well as helping promote equal access to CS in school, Microsoft is fulfilling its commitment to making learning more inclusive and equitable. One of the principal resources for this is Microsoft’s Computer Science Guide (MCSG) , a comprehensive CS framework that includes:

  • An implementation plan
  • Training for educators
  • Lesson and project suggestions
  • Practical guidance for coding activities
  • Certification

An important part of building up students’ CS capabilities is to engage learners as early as possible, which encourages and supports creative expression and the development of computational thinking skills. However, CS curriculums at the national level often focus on ICT or simple coding exercises and offer little in terms of immersive, hands-on experiences that feel relevant, authentic, and inclusive. The MCSG was made to engage students of all ages through a learner-centric curriculum using constructivism, hands-on activities, problem-solving, and inquiry-based approaches that are often linked to real-world challenges viii .

CS curriculum design can also help address a well-documented gender divide ix by engaging all students as early as primary school using relevant and meaningful content. It can ensure that all students have access to CS courses based on their needs and abilities, regardless of socio-economic status, race, ethnicity, or special learning needs. Additionally, as students are likely to encounter changes in technology that are difficult to imagine over the course of their education, another key goal of the MCSG is to be future-proof by incorporating subjects that are likely to be highly relevant well into the future.

Computer science skills are critical to succeed in today’s economy, but too many students – especially those from diverse backgrounds and experiences – are excluded from computer science. That’s why we’ve created a new resource guide which we hope will help teachers build inclusive computer science education programs.” Naria Santa Lucia, General Manager of Digital Inclusion and Community Engagement for Microsoft Philanthropies

Georgia Ministry of Education develops national CS program

In 2022, the Ministry of Education and Science of Georgia launched a pilot program to test how the Microsoft CS Curriculum could be integrated into primary classes as part of a national campaign to introduce broader CS concepts and computational thinking to K-12 learning. The pilot project focused on two ICT teachers and was reviewed by volunteer educators from other cities. An advisory board was formed consisting of experts from the National Curriculum Department.

The process involved translating the Foundation Phase of the Microsoft CS Curriculum Toolkit into Georgian, as well as weekly meetings to discuss progress. In the end, the teachers designed two curriculums for the 2nd and 3rd grades, and the project team made a recommendation for a completely new framework concept that considered the existing National Curriculum context, the integration of the Microsoft CS Curriculum Framework, as well as additional concepts from the Computer Science Teachers Association.

Learn more about computer science with Microsoft

It is no longer possible to ignore the critical importance of CS skills to students whose lives are going to revolve around their ability to understand and engage with technology, both at work and in their day-to-day. At Microsoft Education, our goal is to empower every learner on the planet to achieve more. That is why we are working together with governments and education leaders around the world to implement CS in schools and ensure that students feel included, supported, and empowered to confidently follow their passions and achieve great success both in their careers and in life.

  • Start building a CS curriculum using the Microsoft Computer Science Curriculum Toolkit .
  • To inspire a STEM passion in K-12 learners and teach them how to code with purpose, use Minecraft’s Computer Science Progression .
  • Find out how the Microsoft TEALS Program can help you create access to equitable, inclusive CS education and learn more about building inclusive economic growth .
  • Enlist one of Microsoft’s Global Training Partners to support your educators to incorporate CS into their curriculum and teaching practices.

i https://www.imf.org/en/Publications/fandd/issues/2019/03/global-competition-for-technology-workers-costa   

ii https://codeorg.medium.com/cs-helps-students-outperform-in-school-college-and-workplace-66dd64a69536   

iii Can Majoring in CS Improve General Problem-solving Skills?, ACM, Salehi et al., 2020   

iv The effects of coding on children’s planning and inhibition skills, Computers & Education, Arfé et al., 2020   

v http://www.westcoastanalytics.com/uploads/6/9/6/7/69675515/longitudinal_study_-_combined_report_final_3_10_20__jgq_.pdf   

vi https://www.hereford.ac.uk/explore-courses/courses/computer-science/   

vii https://www.thebalancemoney.com/average-salary-information-for-us-workers-2060808   

viii Kotsopoulos, D., Floyd, L., Khan, S., Namukasa, I.K., Somanath, S., Weber, J. & Yiu, C. (2017) A Pedagogical Framework for Computational Thinking. Digital Experiences in Mathematics Education vol. 3, pages 154–171(2017)     

ix https://www.theguardian.com/careers/2021/jun/28/why-arent-more-girls-in-the-uk-choosing-to-study-computing-and-technology  

Related Posts

importance of problem solving in computer science

Inspiring students during Women’s History Month 2024  

importance of problem solving in computer science

Stay ahead with 8 new updates from Microsoft Education  

importance of problem solving in computer science

  • Customer stories

Streamline messaging with Dynamics 365 Customer Insights  

Ai in education brings opportunity to life.

Watch Reimagine Education

Connect with us on social

importance of problem solving in computer science

Subscribe to our newsletter

Stay up to date with monthly newsletters from Microsoft Education.  

importance of problem solving in computer science

School stories

Get inspired by stories from Microsoft Education customers.

importance of problem solving in computer science

Microsoft Learn Educator Center

Expand possibilities with educator training and professional development resources.

importance of problem solving in computer science

Contact sales

Connect with a Microsoft Education sales specialist to explore solutions for your school.

importance of problem solving in computer science

Discover a collection of resources to support a variety of educational topics.

BUILDING SKILLS FOR LIFE

This report makes the case for expanding computer science education in primary and secondary schools around the world, and outlines the key challenges standing in the way. Through analysis of regional and national education systems at various stages of progress in implementing computer science education programs, the report offers transferable lessons learned across a wide range of settings with the aim that all students—regardless of income level, race, or sex—can one day build foundational skills necessary for thriving in the 21st century.

Download the full report

Introduction.

Access to education has expanded around the world since the late 1990s through the combined efforts of governments, bilateral and multilateral agencies, donors, civil society, and the private sector, yet education quality has not kept pace. Even before the COVID-19 pandemic led to school closures around the world, all young people were not developing the broad suite of skills they need to thrive in work, life, and citizenship (Filmer, Langthaler, Stehrer, & Vogel, 2018).

The impact of the pandemic on education investment, student learning, and longer-term economic outcomes threatens not only to dial back progress to date in addressing this learning crisis in skills development but also to further widen learning gaps within and between countries. Beyond the immediate and disparate impacts of COVID-19 on students’ access to quality learning, the global economic crisis it has precipitated will shrink government budgets, potentially resulting in lower education investment and impacting the ability to provide quality education (Vegas, 2020). There is also a concern that as governments struggle to reopen schools and/or provide sufficient distance-learning opportunities, many education systems will focus on foundational skills, such as literacy and numeracy, neglecting a broader set of skills needed to thrive in a rapidly changing, technologically-advanced world.

Among these broader skills, knowledge of computer science (CS) is increasingly relevant. CS is defined as “the study of computers and algorithmic processes, including their principles, their hardware and software designs, their [implementation], and their impact on society” (Tucker, 2003). 1 CS skills enable individuals to understand how technology works, and how best to harness its potential to improve lives. The goal of CS 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 Steering Committee, 2016). CS education is also distinct from computer or digital literacy, in that it is more concerned with computer design than with computer use. For example, coding is a skill one would learn in a CS course, while creating a document or slideshow presentation using an existing program is a skill one would learn in a computer or digital literacy course.

Research has shown that students benefit from CS education by increasing college enrollment rates and developing problem-solving abilities (Brown & Brown, 2020; Salehi et al., 2020). Research has also shown that lessons in computational thinking improve student response inhibition, planning, and coding skills (Arfé et al., 2020). Importantly, CS skills pay off in the labor market through higher likelihood of employment and better wages (Hanson & Slaughter, 2016; Nager & Atkinson, 2016). As these skills take preeminence in the rapidly changing 21st century, CS education promises to significantly enhance student preparedness for the future of work and active citizenship.

The benefits of CS education extend beyond economic motivations. Given the increasing integration of technology into many aspects of daily life in the 21st century, a functional knowledge of how computers work—beyond the simple use of applications—will help all students.

Why expand CS education?

By this point, many countries have begun making progress toward offering CS education more universally for their students. The specific reasons for offering it will be as varied as the countries themselves, though economic arguments often top the list of motivations. Other considerations beyond economics, however, are also relevant, and we account for the most common of these varied motives here.

The economic argument

At the macroeconomic level, previous research has suggested that countries with more workers with ICT (information, communications, and technology) skills will have higher economic growth through increases in productivity (Maryska, Doucek, & Kunstova, 2012; Jorgenson & Vu, 2016). Recent global data indicate that there is a positive relationship between the share of a country’s workforce with ICT skills and its economic growth. For example, using data from the Organisation for Economic Cooperation and Development (OECD), we find that countries with a higher share of graduates from an ICT field tend to have higher rates of per capita GDP (Figure 1). The strength of the estimated relationship here is noteworthy: A one percentage point increase in the share of ICT graduates correlates with nearly a quarter percentage point increase in recent economic growth, though we cannot determine the causal nature of this relationship (if any). Nonetheless, this figure supports the common view that economic growth follows from greater levels of investment in technological education.

At the microeconomic level, CS skills pay off for individuals—both for those who later choose to specialize in CS and those who do not. Focusing first on the majority of students who pursue careers outside of CS, foundational training in CS is still beneficial. Technology is becoming more heavily integrated across many industrial endeavors and academic disciplines—not just those typically included under the umbrella of science, technology, engineering, and mathematics (STEM) occupations. Careers from law to manufacturing to retail to health sciences all use computing and data more intensively now than in decades past (Lemieux, 2014). For example, using data from Germany, researchers showed that higher education programs in CS compared favorably against many other fields of study, producing a relatively high return on investment for lower risk (Glocker and Storck, 2014). Notably, completing advanced training in CS is not necessary to attain these benefits; rather, even short introductions to foundational skills in CS can increase young students’ executive functions (Arfe et al., 2020). Further, those with CS training develop better problem-solving abilities compared to those with more general training in math and sciences, suggesting that CS education offers unique skills not readily developed in other more common subjects (Salehi et al., 2020).

For those who choose to pursue advanced CS studies, specializing in CS pays off both in employment opportunities and earnings. For example, data from the U.S. show workers with CS skills are less likely to be unemployed than workers in other occupations (Figure 2). Moreover, the average earnings for workers with CS skills are higher than for workers in other occupations (Figure 3). These results are consistent across multiple studies using U.S. data (Carnevale et al., 2013; Altonji et al., 2012) and international data (Belfield et al., 2019; Hastings et al., 2013; Kirkeboen et al., 2016). Further, the U.S. Bureau of Labor Statistics has projected that the market for CS professionals will continue to grow at twice the speed of the rest of the labor market between 2014 and 2024 (National Academies of Sciences, 2018).

A common, though inaccurate, perception about the CS field is that anybody with a passion for technology can succeed without formal training. There is a nugget of truth in this view, as many leaders of major technology companies including Bill Gates, Elon Musk, Mark Zuckerberg, and many others have famously risen to the top of the field despite not having bachelor’s degrees in CS. Yet, it is a fallacy to assume that these outliers are representative of most who are successful in the field. This misconception could lead observers to conclude that investments in universal CS education are, at best, ineffective: providing skills to people who would learn them on their own regardless, and spending resources on developing skills in people who will not use them. However, such conclusions are not supported by empirical evidence. Rather, across STEM disciplines, including CS, higher levels of training and educational attainment lead to stronger employment outcomes, on average, than those with lesser levels of training in the same fields (Altonji et al., 2016; Altonji and Zhong, 2021).

The inequality argument

Technology—and particularly unequal access to its benefits—has been a key driver of social and economic inequality within countries. That is, those with elite social status or higher wealth have historically gotten access to technology first for their private advantages, which tends to reinforce preexisting social and economic inequalities. Conversely, providing universal access to CS education and computing technologies can enable those with lower access to technological resources the opportunity to catch up and, consequently, mitigate these inequalities. Empirical studies have shown how technological skills or occupations, in particular, have reduced inequalities between groups or accelerated the assimilation of immigrants (Hanson and Slaughter, 2017; DeVol, 2016).

Technology and CS education are likewise frequently considered critical in narrowing income gaps between developed and developing countries. This argument can be particularly compelling for low-income countries, as global development gaps will only be expected to widen if low-income countries’ investments in these domains falter while high-income countries continue to move ahead. Rather, strategic and intensive technological investment is frequently seen as a key strategy for less-developed countries to leapfrog stages of economic development to quickly catch up to more advanced countries (Fong, 2009; Lee, 2019).

CS skills enable adaptation in a quickly changing world, and adaptability is critical to progress in society and the economy. Perhaps there is no better illustration of the ability to thrive and adapt than from the COVID-19 pandemic. The pandemic has forced closures of many public spaces across the globe, though those closures’ impacts have been disproportionately felt across workers and sectors. Workers with the skills and abilities to move their job functions online have generally endured the pandemic more comfortably than those without those skills. And even more importantly, the organizations and private companies that had the human capacity to identify how technology could be utilized and applied to their operations could adapt in the face of the pandemic, while those without the resources to pivot their operations have frequently been forced to close in the wake of pandemic-induced restrictions. Thus, the pandemic bestowed comparative benefits on those with access to technology, the skills to use it, and the vision to recognize and implement novel applications quickly, while often punishing those with the least access and resources (OECD, 2021).

Failing to invest in technology and CS education may result in constrained global competitiveness, leaving governments less able to support its citizens. We recognize that efforts to expand CS education will demand time and money of public officials and school leaders, often in the face of other worthy competing demands. Though the contemporary costs may even seem prohibitive in some cases, the costs of inaction (while less immediately visible) are also real and meaningful in most contexts.

Beyond economics

We expect the benefits of CS education to extend beyond economic motivations, as well. Many household activities that were previously performed in real life are now often performed digitally, ranging from banking, shopping, travel planning, and socializing. A functional knowledge of how computers work—beyond the simple use of applications—should benefit all students as they mature into adults given the increasing integration of technology into many aspects of daily life in the 21st century. For example, whether a person wants to find a job or a romantic partner, these activities frequently occur through the use of technology, and understanding how matching algorithms work make for more sophisticated technology users in the future. Familiarity with CS basic principles can provide users more flexibility in the face of constant innovation and make them less vulnerable to digital security threats or predators (Livingstone et al., 2011). Many school systems now provide lessons in online safety for children, and those lessons will presumably be more effective if children have a foundational understanding of how the internet works.

Global advances in expanding CS education

To better understand what is needed to expand CS education, we first took stock of the extent to which countries around the world have integrated CS education into primary and secondary schools, and how this varied by region and income level. We also reviewed the existing literature on integrating CS into K-12 education to gain a deeper understanding of the key barriers and challenges to expanding CS education globally. Then, we selected jurisdictions at various stages of progress in implementing CS education programs in from multiple regions of the world and income levels, and drafted in-depth case studies on the origins, key milestones, barriers, and challenges of CS expansion.

Progress in expanding CS education across the globe

As shown in Figure 4, the extent to which CS education is offered in primary and secondary schools varies across the globe. Countries with mandatory CS education are geographically clustered in Eastern Europe and East Asia. Most states and provinces in the U.S. and Canada offer CS on a school-to-school basis or as an elective course. Multiple countries in Western Europe offer CS education as a cross-curricular topic integrated into other subjects. Latin America and Central and Southeast Asia have the most countries that have announced CS education programs or pilot projects. Countries in Africa and the Middle East have integrated the least amount of CS education into school curricula. Nevertheless, the number of countries piloting programs or adopting CS curricula indicate a global trend of more education systems integrating the subject into their curriculum.

As expected, students living in higher-income countries generally have better access to CS education. As Figure 5 shows, 43 percent of high-income countries require students to learn CS education in primary and/or secondary schools. Additionally, high-income countries also offer CS as an elective course to the largest share of the population. A further 35 percent of high-income countries offer CS on a school-to-school basis while not making it mandatory for all schools. Interestingly, upper-middle income countries host the largest share of students (62 percent) who are required to learn CS at any point in primary or secondary schools. Presumably, many upper-middle income countries likely have national economic development strategies focused on expanding tech-related jobs, and thus see the need to expand the labor force with CS skills. By contrast, only 5 percent of lower-middle income countries require CS during primary or secondary school, while 58 percent may offer CS education on a school-to-school basis.

Key barriers and challenges to expand CS education globally

To expand quality CS education, education systems must overcome enormous challenges. Many countries do not have enough teachers who are qualified to teach CS, and even though there is growing interest among students to pursue CS, relatively few students pursue more advanced training like CS testing certifications (Department for Education, 2019) or CS undergraduate majors compared to other STEM fields like engineering or biology (Hendrickson, 2019). This is especially true for girls and underrepresented minorities, who generally have fewer opportunities to develop an interest in CS and STEM more broadly (Code.org & CSTA, 2018). Our review of the literature identified four key challenges to expanding CS education.:

1. Providing access to ICT infrastructure to students and educators

Student access to ICT infrastructure, including both personal access to computing devices and an internet connection, is critical to a robust CS education. Without this infrastructure, students cannot easily integrate CS skills into their daily lives, and they will have few opportunities to experiment with new approaches on their own.

However, some initiatives have succeeded by introducing elements of CS education in settings without adequate ICT infrastructure. For example, many educators use alternative learning strategies like CS Unplugged to teach CS and computational thinking when computers are unavailable (Bell & Vahrenhold, 2018). One study shows that analog lessons can help primary school students develop computational thinking skills (Harris, 2018). Even without laptops or desktop computers, it is still possible for teachers to use digital tools for computational thinking. In South Africa, Professor Jean Greyling of Nelson Mandela University Computing Sciences co-created Tanks, a game that uses puzzle pieces and a mobile application to teach coding to children (Ellis, 2021). This is an especially useful concept, as many households and schools in South Africa and other developing countries have smartphones and access to analog materials but do not have access to personal computers or broadband connectivity (McCrocklin, 2021).

Taking a full CS curriculum to scale, however, requires investing in adequate access to ICT infrastructure for educators and students (Lockwood & Cornell, 2013). Indeed, as discussed in Section 3, our analysis of numerous case studies indicates that ICT infrastructure in schools provides a critical foundation to expand CS education.

2. Ensuring qualified teachers through teacher preparation and professional development

Many education systems encounter shortages of qualified CS teachers, contributing to a major bottleneck in CS expansion. A well-prepared and knowledgeable teacher is the most important component for instruction in commonly taught subjects (Chetty et al. 2014 a,b; Rivkin et al., 2005). We suspect this is no different for CS, though major deficiencies in the necessary CS skills among the teacher workforce are evident. For example, in a survey of preservice elementary school teachers in the United States, only 10 percent responded that they understood the concept of computational thinking (Campbell & Heller, 2019). Until six years ago, 75 percent of teachers in the U.S. incorrectly considered “creating documents or presentations on the computer” as a topic one would learn in a CS course (Google & Gallup, 2015), demonstrating a poor understanding of the distinction between CS and computer literacy. Other case studies, surveys, and interviews have found that teachers in India, Saudi Arabia, the U.K., and Turkey self-report low confidence in their understanding of CS (Ramen et al., 2015; Alfayez & Lambert, 2019; Royal Society, 2017; Gülbahar & Kalelioğlu, 2017). Indeed, developing the necessary skills and confidence levels for teachers to offer effective CS instruction remains challenging.

To address these challenges, school systems have introduced continuous professional development (PD), postgraduate certification programs, and CS credentials issued by teacher education degree programs. PD programs are common approaches, as they utilize the existing teacher workforce to fill the needs for special skills, rather than recruiting specialized teachers from outside the school system. For example, the British Computing Society created 10 regional university-based hubs to lead training activities, including lectures and meetings, to facilitate collaboration as part of the network of excellence (Dickens, 2016; Heintz et al., 2016; Royal Society, 2017). Most hubs involve multi-day seminars and workshops meant to familiarize teachers with CS concepts and provide ongoing support to help teachers as they encounter new challenges in the classroom. Cutts et al. (2017) further recommend teacher-led PD groups so that CS teachers can form collaborative professional networks. Various teacher surveys have found these PD programs in CS helpful (Alkaria & Alhassan, 2017; Goode et al., 2014). Still, more evidence is needed on the effectiveness of PD programs in CS education specifically (Hill, 2009).

Less commonly, some education systems have worked with teacher training institutions to introduce certification schemes so teachers can signal their unique qualifications in CS to employers. This signal can make teacher recruitment more transparent and incentivize more teachers to pursue training. This approach does require, though, an investment in developing CS education faculty at the teacher training institution, which may be a critical bottleneck in many places (Delyser et al., 2018). Advocates of the approach have recommended that school systems initiate certification schemes quickly and with a low bar at first, followed by improvement over time (Code.org, 2017; Lang et al., 2013; Sentance & Csizmadia, 2017). Short-term recommendations include giving temporary licenses to teachers who meet minimum content and knowledge requirements. Long-term recommendations, on the other hand, encourage preservice teachers to take CS courses as part of their teaching degree programs or in-service teachers to take CS courses as part of their graduate studies to augment their skillset.2 Upon completing these courses, teachers would earn a full CS endorsement or certificate.

3. Fostering student engagement and interest in CS education

Surveys from various countries suggest that despite a clear economic incentive, relatively few K-12 students express interest in pursuing advanced CS education. For example, 3 out of 4 U.S. students in a recent survey declared no interest in pursuing a career in computer science. And the differences by gender are notable: Nearly three times as many male students (33 percent) compared to female students (12 percent) expressed interest in pursuing a computer science career in the future (Google & Gallup, 2020).

Generally, parents view CS education favorably but also hold distinct misconceptions. For instance, more than 80 percent of U.S. parents surveyed in a Google and Gallup (2016) study reported that they think CS is as important as any other discipline. Nevertheless, the same parents indicated biases around who should take CS courses: 57 percent of parents think that one needs to be “very smart” to learn CS (Google & Gallup, 2015). Researchers have equated this kind of thinking to the idea that some people could be inherently gifted or inept at CS, a belief that could discourage some students from developing an interest or talent in CS (McCartney, 2017). Contrary to this belief, Patitsas et al. (2019) found that only 5.8 percent of university-level exam distributions were multimodal, indicating that most classes did not have a measurable divide between those who were inherently gifted and those who were not. This signals that CS is no more specialized to specific groups of students than any other subject.

Fostering student engagement, however, does not equate to developing a generation of programmers. Employment projections suggest the future demand for workers with CS skills will likely outpace supply in the absence of promoting students’ interest in the field. Yet, no countries expand access to CS education with the expectation of turning all students into computer programmers. Forcing students into career paths that are unnatural fits for their interests and skill levels result in worse outcomes for students at the decision margins (Kirkeboen et al., 2016). Rather, current engagement efforts both expose students to foundational skills that help navigate technology in 21st century life and provide opportunities for students to explore technical fields.

A lack of diversity in CS education not only excludes some people from accessing high-paying jobs, but it also reduces the number of students who would enter and succeed in the field (Du & Wimmer, 2019). Girls and racial minorities have been historically underrepresented in CS education (Sax et al., 2016). Research indicates that the diversity gap is not due to innate talent differences among demographic groups (Sullivan & Bers, 2012; Cussó-Calabuig et al., 2017), but rather a disparity of access to CS content (Google & Gallup 2016; Code.org & CSTA, 2018; Du & Wimmer, 2019), widely held cultural perceptions, and poor representation of women and underrepresented minorities (URMs) among industry leaders and in media depictions (Google & Gallup, 2015; Ayebi-Arthur, 2011; Downes & Looker, 2011).

To help meet the demand for CS professionals, government and philanthropic organizations have implemented programs that familiarize students with CS. By increasing student interest among K-12 students who may eventually pursue CS professions, these strategies have the potential to address the well documented lack of diversity in the tech industry (Harrison, 2019; Ioannou, 2018). For example, some have used short, one-time lessons in coding to reduce student anxiety around CS. Of these lessons, perhaps the best known is Hour of Code, designed by Code.org. In multiple surveys, students indicated more confidence after exposure to this program (Phillips & Brooks, 2017; Doukaki et al., 2013; Lang et al., 2016). It is not clear, however, whether these programs make students more likely to consider semester-long CS courses (Phillips & Brooks, 2017; Lang et al., 2016).

Other initiatives create more time-intensive programs for students. The U.S. state of Georgia, for example, implemented a program involving after-school, weekend, and summer workshops over a six-year period. Georgia saw an increase in participation in the Advanced Placement (AP) CS exam during the duration of the program, especially among girls and URMs (Guzdial et al., 2014). Other states have offered similar programs, setting up summer camps and weekend workshops in universities to help high school students become familiar with CS (Best College Reviews, 2021). These initiatives, whether one-off introductions to CS or time-intensive programs, typically share the explicit goal of encouraging participation in CS education among all students, and especially girls and URMs.

Yet, while studies indicate that Hour of Code and summer camps might improve student enthusiasm for CS, they do not provide the kind of rigorous impact assessment one would need to make a definitive conclusion of their effectiveness. They do not use a valid control group, meaning that there is no like-for-like comparison to students who are similar except for no exposure to the program. It is not clear that the increase in girls and URMs taking CS would not have happened if it were not for Georgia’s after-school clubs.

4. Generating and using evidence on curriculum and core competencies, instructional methods, and assessment

There is no one-size-fits-all CS curriculum for all education systems, schools, or classrooms. Regional contexts, school infrastructure, prior access, and exposure to CS need to be considered when developing CS curricula and competencies (Ackovska et al., 2015). Some CS skills, such as programming language, require access to computer infrastructure that may be absent in some contexts (Lockwood & Cornell, 2013). Rather than prescribing a curriculum, the U.S. K-12 Computer Science Framework Steering Committee (2016) recommends foundational CS concepts and competencies for education systems to consider. This framework encourages curriculum developers and educators to create learning experiences that extend beyond the framework to encompass student interests and abilities.

There is increasing consensus around what core CS competencies students should master when they complete primary and secondary education. Core competencies that students may learn by the end of primary school include:

  • abstraction—creating a model to solve a problem;
  • generalization—remixing and reusing resources that were previously created;
  • decomposition—breaking a complex task into simpler subtasks;
  • algorithmic thinking—defining a series of steps for a solution, putting instructions in the correct sequence, and formulating mathematical and logical expressions;
  • programming—understanding how to code a solution using the available features and syntax of a programming language or environment; and
  • debugging—recognizing when instructions do not correspond to actions and then removing or fixing errors (Angeli, 2016).

Competencies that secondary school students may learn in CS courses include:

  • logical and abstract thinking;
  • representations of data, including various kinds of data structures;
  • problem-solving by designing and programming algorithms using digital devices;
  • performing calculations and executing programs;
  • collaboration; and,
  • ethics such as privacy and data security (Syslo & Kwiatkowska, 2015).

Several studies have described various methods for teaching CS core competencies. Integrated development environments are recommended especially for teaching coding skills (Florez et al., 2017; Saez-Lopez et al., 2016). 2 These environments include block-based programming languages that encourage novice programmers to engage with programming, in part by alleviating the burden of syntax on learners (Weintrop & Wilensky, 2017; Repenning, 1993). Others recommended a variety of teaching methods that blend computerized lessons with offline activities (Taub et al. 2009; Curzon et al., 2009, Ackovska et al., 2015). This approach is meant to teach core concepts of computational thinking while keeping students engaged in physical, as well as digital, environments (Nishida et al., 2009). CS Unplugged, for example, provides kinesthetic lesson plans that include games and puzzles that teach core CS concepts like decomposition and algorithmic thinking.

Various studies have also attempted to measure traditional lecture-based instruction for CS (Alhassan 2017; Cicek & Taspinar, 2016). 3 These studies, however, rely on small sample sizes wherein the experiment and control group each comprised of individual classes. More rigorous research is required to understand the effectiveness of teaching strategies for CS.

No consensus has emerged on the best ways to assess student competency in core CS concepts (So et al., 2019; Djambong & Freiman, 2016). Though various approaches to assessment are widely available—including classical cognitive tests, standardized tests in digital environments, and CS Unplugged activity tests—too many countries have yet to introduce regular assessments that may evaluate various curricula or instructional methods in CS. While several assessments have been developed for CS and CT at various grade levels as part of various research studies, there have been challenges to broader use. This is due to either a lack of large-scale studies using these assessments or diversity in programming environments used to teach programming and CS or simply a lack of interest in using objective tests of learning (as opposed to student projects and portfolios).

Fortunately, a growing number of organizations are developing standardized tests in CS and computational thinking. For example, the International Computer and Information Literacy Study included examinations in computational thinking in 2018 that had two 25-minute modules, where students were asked to develop a sequence of tasks in a program that related to a unified theme (Fraillon et al., 2020). The OECD’s PISA will also include questions in 2021 to assess computational thinking across countries (Schleicher & Partovi, 2019). The AP CS exam has also yielded useful comparisons that have indirectly evaluated CS teacher PD programs (Brown & Brown, 2019).

In summary, the current evidence base provides little consensus on the specific means of scaling a high-quality CS education and leaves wide latitude for experimentation. Consequently, in this report we do not offer prescriptions on how to expand CS education, even while arguing that expanding access to it generally is beneficial for students and the societies that invest in it. Given the current (uneven) distribution of ICT infrastructure and CS education resources, high-quality CS education may be at odds with expanded access. While we focus on ensuring universal access first, it is important to recognize that as CS education scales both locally and globally, the issues of curricula, pedagogies, instructor quality, and evaluation naturally become more pressing.

Lessons from education systems that have introduced CS education

Based on the available literature discussed in the previous section, we selected education systems that have implemented CS education programs and reviewed their progress through in-depth case studies. Intentionally, we selected jurisdictions at various levels of economic development, at different levels of progress in expanding CS education, and from different regions of the world. They include Arkansas (U.S.), British Columbia (Canada), Chile, England, Italy, New Brunswick (Canada), Poland, South Africa, South Korea, Thailand, and Uruguay. For each case, we reviewed the historical origins for introducing CS education and the institutional arrangements involved in CS education’s expansion. We also analyzed how the jurisdictions addressed the common challenges of ensuring CS teacher preparation and qualification, fostering student demand for CS education (especially among girls and URMs), and how they developed curriculum, identified core competencies, promoted effective instruction, and assessed students’ CS skills. In this section, we draw lessons from these case studies, which can be downloaded and read in full at the bottom of this page .

Figure 6 presents a graphical representation summarizing the trajectories of the case study jurisdictions as they expanded CS education. Together, the elements in the figure provide a rough approximation of how CS education has expanded in recent years in each case. For example, when South Korea focused its efforts on universal CS education in 2015, basic ICT infrastructure and broadband connectivity were already available in all schools and two CS education expansion policies had been previously implemented. Its movement since 2015 is represented purely in the vertical policy action space, as it moved up four intervals on the index. Uruguay, conversely, started expanding its CS education program t a lower level both in terms of ICT infrastructure (x-axis) and existing CS policies (y-axis). Since starting CS expansion efforts in 2007, though, it has built a robust ICT infrastructure in its school systems and implemented 4 of 7 possible policy actions.

Figure 6 suggests that first securing access to ICT infrastructure and broadband connectivity allows systems to dramatically improve access to and the quality of CS education. Examples include England, British Columbia, South Korea, and Arkansas. At the same time, Figure 6 suggests that systems that face the dual challenge of expanding ICT infrastructure and broadband connectivity and scaling the delivery of quality CS education, such as Chile, South Africa, Thailand, and Uruguay, may require more time and/or substantial investment to expand quality CS education to match the former cases. Even though Chile, Thailand, and especially Uruguay have made impressive progress since their CS education expansion efforts began, they continue to lag a few steps behind those countries that started with established ICT infrastructure in place.

Our analysis of these case studies surfaced six key lessons (Figure 7) for governments wishing to take CS education to scale in primary and secondary schools, which we discuss in further detail below.

1. Expanding tech-based jobs is a powerful lever for expanding CS education

In several of the case studies, economic development strategies were the underlying motivation to introduce or expand CS education. For example, Thailand’s 2017 20-year Strategic Plan marked the beginning of CS education in that country. The 72-page document, approved by the Thai Cabinet and Parliament, explained how Thailand could become a more “stable, prosperous, and sustainable” country and proposed to reform the education curriculum to prepare students for future labor demands (20-year National Strategy comes into effect, 2018). Similarly, Arkansas’s Governor Hutchinson made CS education a key part of his first campaign in 2014 (CS for All, n.d.), stating that “Through encouraging computer science and technology as a meaningful career path, we will produce more graduates prepared for the information-based economy that represents a wide-open job market for our young people” (Arkansas Department of Education, 2019).

Uruguay’s Plan Ceibal, named after the country’s national flowering tree, was likewise introduced in 2007 as a presidential initiative to incorporate technology in education and help close a gaping digital divide in the country. The initiative’s main objectives were to promote digital inclusion, graduate employability, a national digital culture, higher-order thinking skills, gender equity, and student motivation (Jara, Hepp, & Rodriguez, 2018)

Last, in 2018, the European Commission issued the Digital Education Action Plan that enumerated key digital skills for European citizens and students, including CS and computational thinking (European Commission, 2018). The plan encouraged young Europeans to understand the algorithms that underpin the technologies they use on a regular basis. In response to the plan, Italy’s 2018 National Indications and New Scenarios report included a discussion on the importance of computational thinking and the potential role of educational gaming and robotics in enhancing learning outcomes (Giacalone, 2019). Then, in 2019, the Italian Ministry of Education and the Parliament approved a legislative motion to include CS and computational thinking in primary school curricula by 2022 (Orizzontescuola, 2019).

In some cases, the impetus to expand CS education came more directly from demands from key stakeholders, including industry and parents. For example, British Columbia’s CS education program traces back to calls from a growing technology industry (Doucette, 2016). In 2016, the province’s technology sector employed 86,000 people—more than the mining, forestry, and oil and gas sectors combined, with high growth projections (Silcoff, 2016). The same year, leaders of the province’s technology companies revealed in interviews that access to talent had become their biggest concern (KPMG, 2016). According to a 2016 B.C. Technology Association report, the province needed 12,500 more graduates in CS from tertiary institutions between 2015 and 2021 to fill unmet demand in the labor market (Orton, 2018). The economic justification for improving CS education in the province was clear.

Growing parental demand helped create the impetus for changes to the CS curriculum in Poland. According to Kozlowski (2016), Polish parents perceive CS professions as some of the most desirable options for their children. And given the lack of options for CS education in schools, parents often seek out extracurricular workshops for their children to encourage them to develop their CS skills (Panskyi, Rowinska, & Biedron, 2019). The lack of in-school CS options for students created the push for curricular reforms to expand CS in primary and secondary schools. As former Minister of Education Anna Zalewska declared, Polish students “cannot afford to waste time on [the] slow, arduous task of building digital skills outside school [ and] only school education can offer systematic teaching of digital skills” (Szymański, 2016).

2. ICT in schools provides the foundation to expand CS education

Previous efforts to expand access to devices, connectivity, or basic computer literacy in schools provided a starting point in several jurisdictions to expand CS education. For example, the Uruguayan government built its CS education program after implementing expansive one-to-one computing projects, which made CS education affordable and accessible. In England, an ICT course was implemented in schools in the mid-1990s. These dedicated hours during the school day for ICT facilitated the expansion of CS education in the country.

The Chilean Enlaces program, developed in 1992 as a network of 24 universities, technology companies, and other organizations (Jara, Hepp, & Rodriguez, 2018; Sánchez & Salinas, 2008) sought to equip schools with digital tools and train teachers in their use (Severin, 2016). It provided internet connectivity and digital devices that enabled ICT education to take place in virtually all of Chile’s 10,000 public and subsidized private schools by 2008 (Santiago, Fiszbein, Jaramillo, & Radinger, 2017; Severin et al., 2016). Though Enlaces yielded few observable effects on classroom learning or ICT competencies (Sánchez & Salinas, 2008), the program provided the infrastructure needed to begin CS education initiatives years later.

While a history of ICT expansion can serve as a base for CS education, institutional flexibility to transform traditional ICT projects into CS education is crucial. The Chilean Enlaces program’s broader institutional reach resulted in a larger bureaucracy, slower implementation of new programs, and greater dependence on high-level political agendas (Severin, 2016). As a result, the program’s inflexibility prevented it from taking on new projects, placing the onus on the Ministry of Education to take the lead in initiating CS education. In Uruguay, Plan Ceibal’s initial top-down organizational structure enabled relatively fast implementation of the One Laptop per Child program, but closer coordination with educators and education authorities may have helped to better integrate education technology into teaching and learning. More recently, Plan Ceibal has involved teachers and school leaders more closely when introducing CS activities. In England, the transition from ICT courses to a computing curriculum that prioritized CS concepts, instead of computer literacy topics that the ICT teachers typically emphasized before the change, encountered some resistance. Many former ICT teachers were not prepared to implement the new program of study as intended, which leads us to the next key lesson.

3. Developing qualified teachers for CS education should be a top priority

The case studies highlight the critical need to invest in training adequate numbers of teachers to bring CS education to scale. For example, England took a modest approach to teacher training during the first five years of expanding its CS education K-12 program and discovered that its strategy fell short of its original ambitions. In 2013, the English Department for Education (DfE) funded the BCS to establish and run the Network of Excellence to create learning hubs and train a pool of “master” CS teachers. While over 500 master teachers were trained, the numbers were insufficient to expand CS education at scale. Then, in 2018 the DfE substantially increased its funding to establish the National Center for Computing Education (NCCE) and added 23 new computing hubs throughout England. Hubs offer support to primary and secondary computing teachers in their designated areas, including teaching, resources, and PD (Snowdon, 2019). In just over two years, England has come a long way toward fulfilling its goals of training teachers at scale with over 29,500 teachers engaged in some type of training (Teach Computing, 2020).

Several education systems partnered with higher education institutions to integrate CS education in both preservice and in-service teacher education programs. For example, two main institutions in British Columbia, Canada—the University of British Columbia and the University of Northern British Columbia—now offer CS courses in their pre-service teacher education programs. Similarly, in Poland, the Ministry of National Education sponsored teacher training courses in university CS departments. In Arkansas, state universities offer CS certification as part of preservice teacher training while partnering with the Arkansas Department of Education to host in-service professional development.

Still other systems partnered with nonprofit organizations to deliver teacher education programs. For instance, New Brunswick, Canada, partnered with the nonprofit organization Brilliant Labs to implement teacher PD programs in CS (Brilliant Labs, n.d.). In Chile, the Ministry of Education partnered with several nongovernmental organizations, including Code.org and Fundación Telefónica, to expand teacher training in CS education. Microsoft Philanthropies launched the Technology Education and Literacy in Schools (TEALS) in the United States and Canada to connect high school teachers to technology industry volunteers. The volunteer experts support instructors to learn CS independently over time and develop sustainable high school CS programs (Microsoft, n.d.).

To encourage teachers to participate in these training programs, several systems introduced teacher certification pathways in CS education. For example, in British Columbia, teachers need at least 24 credits of postsecondary coursework in CS education to be qualified to work in public schools. The Arkansas Department of Education incentivizes in-service teachers to attain certification through teaching CS courses and participating in approved PD programs (Code.org, CSTA, ECEP, 2019). In South Korea, where the teaching profession is highly selective and enjoys high social status, teachers receive comprehensive training on high-skill computational thinking elements, such as computer architecture, operating systems, programming, algorithms, networking, and multimedia. Only after receiving the “informatics–computer” teacher’s license may a teacher apply for the informatics teacher recruitment exam (Choi et al., 2015).

When faced with shortages of qualified teachers, remote instruction can provide greater access to qualified teachers. For example, a dearth of qualified CS teachers has been and continues to be a challenge for Uruguay. To address this challenge, in 2017, Plan Ceibal began providing remote instruction in computational thinking lessons for public school fifth and sixth graders and integrated fourth-grade students a year later. Students work on thematic projects anchored in a curricular context where instructors integrate tools like Scratch. 4 During the school year, a group of students in a class can work on three to four projects during a weekly 45-minute videoconference with a remote instructor, while another group can work on projects for the same duration led by the classroom teacher. In a typical week, the remote instructor introduces an aspect of computational thinking. The in-class teacher then facilitates activities like block-based programming, circuit board examination, or other exercises prescribed by the remote teacher (Cobo & Montaldo, 2018). 5 Importantly, Plan Ceibal implements Pensamiento Computacional, providing a remote instructor and videoconferencing devices at the request of schools, rather than imposing the curriculum on all classrooms (García, 2020). With the ongoing COVID-19 pandemic forcing many school systems across the globe to adopt remote instruction, at least temporarily, we speculate that remote learning is now well poised to become more common in expanding CS education in places facing ongoing teacher shortages.

4. Exposing students to CS education early helps foster demand, especially among underserved populations

Most education systems have underserved populations who lack the opportunity to develop an interest in CS, limiting opportunities later in life. For example, low CS enrollment rates for women at Italian universities reflect the gender gap in CS education. As of 2017, 21.6 percent and 12.3 percent of students completing bachelor’s degrees in information engineering and CS, respectively, were women (Marzolla, 2019). Further, female professors and researchers in these two subjects are also underrepresented. In 2018, only 15 percent and 24 percent of professors and researchers in CS and computer engineering, respectively, were women (Marzolla, 2019). Similar representation gaps at the highest levels of CS training are common globally. Thus, continuing to offer exposure to CS only in post-secondary education will likely perpetuate similar representation gaps.

To address this challenge, several education systems have implemented programs to make CS education accessible to girls and other underserved populations in early grades, before secondary school. For instance, to make CS education more gender balanced, the Italian Ministry of Education partnered with civil society organizations to implement programs to spur girls’ interest in CS and encourage them to specialize in the subject later (European Commission, 2009). An Italian employment agency (ironically named Men at Work) launched a project called Girls Code It Better to extend CS learning opportunities to 1,413 middle school girls across 53 schools in 2019 (Girls Code It Better, n.d.). During the academic year, the girls attended extracurricular CS courses before developing their own technologically advanced products and showcasing their work at an event at Bocconi University in Milan (Brogi, 2019). In addition to introducing the participants to CS, the initiative provided the girls with role models and generated awareness on the gender gap in CS education in Italy.

In British Columbia, students are exposed to computational thinking concepts as early as primary school, where they learn how to prototype, share, and test ideas. In the early grades of primary education, the British Columbia curriculum emphasizes numeracy using technology and information technology. Students develop numeracy skills by using models and learn information technology skills to apply across subjects. In kindergarten and first grade, curricular objectives include preparing students for presenting ideas using electronic documents. In grades 2 to 3, the curricular goals specify that students should “demonstrate an awareness of ways in which people communicate, including the use of technology,” in English language arts classes, as well as find information using information technology tools. By the time students are in grades 4 and 5, the curriculum expects students to focus more on prototyping and testing new ideas to solve a problem (Gannon & Buteau, 2018).

Several systems have also increased participation in CS education by integrating it as a cross-curricular subject. This approach avoids the need to find time during an already-packed school day to teach CS as a standalone subject. For example, in 2015, the Arkansas legislature began requiring elementary and middle school teachers to embed computational thinking concepts in other academic courses. As a result, teachers in the state integrate five main concepts of computational thinking into their lesson plans, including (1) problem-solving, (2) data and information, (3) algorithms and programs, (4) computers and communications, and, importantly, (5) community, global, and ethical impacts (Watson-Fisher, 2019). In the years following this reform, the share of African American students taking CS in high school reached 19.6 percent, a figure that slightly exceeds the percentage of African Americans among all students—a resounding sign of progress in creating student demand for CS education (Computer science on the rise in Arkansas schools, Gov. drafts legislation to make it a requirement for graduation, 2020).

After-school programs and summer camps, jointly organized with external partners, have also helped promote demand for CS education through targeted outreach programs to commonly underserved populations. For example, Microsoft Thailand has been holding free coding classes, Hour of Code, in partnership with nonprofit organizations, to encourage children from underprivileged backgrounds to pursue STEM education (Microsoft celebrates Hour of Code to build future ready generations in Asia, 2017). In the past decade, Microsoft has extended opportunities for ICT and digital skills development to more than 800,000 youth from diverse backgrounds—including those with disabilities and residents of remote communities (Thongnab, 2019). Their annual #MakeWhatsNext event for young Thai women showcases STEM careers and the growing demand for those careers (Making coding fun for Thailand’s young, 2018). Also in Thailand, Redemptorist Foundation for People with Disabilities, with over 30 years of experience working with differently abled communities in that country, expanded their services to offer computer trainings and information technology vocational certificate programs for differently abled youth (Mahatai, n.d.).

In British Columbia, Canada, the Ministry of Education and other stakeholders have taken steps to give girls, women, and aboriginal students the opportunity to develop an interest in CS education. For example, after-school programs have taken specific steps to increase girls’ participation in CS education. The UBC Department of Computer Science runs GIRLsmarts4tech, a program that focuses on giving 7th- grade girls role models and mentors that encourage them to pursue technology-related interests (GIRLsmarts4tech, n.d.). According to the latest census, in 2016, British Columbia’s First Nations and Indigenous Peoples (FNIP) population—including First Nations, Metis, and Inuits—was 270,585, an increase of 38 percent from 2006. With 42.5 percent of the FNIP population under 25, it is critical for the province to deliver quality education to this young and growing group (Ministry of Advanced Education, Skills and Training, 2018). To this end, part of the British Columbia curriculum for CS education incorporates FNIP world views, perspectives, knowledge, and practices in CS concepts. In addition, the B.C. based ANCESTOR project (AborigiNal Computer Education through STORytelling) has organized courses and workshops to encourage FNIP students to develop computer games or animated stories related to their culture and land (Westor & Binn, 2015).

As these examples suggest, private sector and nongovernmental organizations can play an important role in the expansion of CS education, an issue we turn to now.

5. Engaging key stakeholders can help address bottlenecks

In most reviewed cases, the private sector and nongovernmental organizations played a role in promoting the expansion of CS education. Technology companies not only helped to lobby for expanding CS education, but often provided much-needed infrastructure and subject matter expertise in the design and rollout of CS education. For example, Microsoft Thailand has worked with the Thai government since 1998 in various capacities, including contributing to the development and implementation of coding projects, digital skills initiatives, teacher training programs, and online learning platforms (Thongnab, 2019; Coding Thailand, n.d.). Since 2002, Intel’s Teach Thailand program has trained more than 150,000 teachers. Additionally, Google Coding Teacher workshops train educators on teaching computational thinking through CS Unplugged coding activities (EduTech Thailand, 2019). The workshop is conducted by Edutech (Thailand) Co., Ltd., an educational partner of Google, which adapted the Google curriculum to the Thailand education context. Samsung has been engaged in a smart classroom project that has built futuristic classroom prototypes and provided training for 21st century competencies (OECD/UNESCO, 2016).

In England, nongovernmental organizations have played an important role in supporting the government’s expansion of CS education. The DfE has relied on outside organizations for help in executing its CS education responsibilities. The DfE’s NCEE, for instance, is delivered by a consortium including the British Computing Society, STEM Learning, and the Raspberry Pi Foundation—three nonprofit organizations dedicated to advancing the computing industry and CS education in the country (British Computing Society, n.d; STEM Learning, n.d.; Raspberry Pi Foundation, n.d.).

Chile’s Ministry of Education developed partnerships with individual NGOs and private companies to engage more students, especially girls. These initiatives offer the opportunity for hands-on learning projects and programming activities that students can perform from their home computers. Some of the same partners also provide online training platforms for teacher PD.

Industry advocacy organizations can also play an important role in the expansion of CS education. For example, in Arkansas, the state’s business community has long supported CS education (Nix, 2017). Accelerate Arkansas was established in 2005 as an organization of 70 private and public sector members dedicated to moving Arkansas into a more innovation- and knowledge-based economy (State of Arkansas, 2018). Similarly, in England, a network of organizations called Computing at School established a coalition of industry representatives and teachers. It played a pivotal role in rebranding the ICT education program in 2014 to the computing program that placed a greater emphasis on CS (Royal Society, 2017).

To ensure sustainability, one key lesson is that the government should coordinate across multiple stakeholders. The reliance on inputs from external organizations to drive CS education implies that the heavy reliance on NGO-provided training and resources in Chile have been insufficient to motivate more schools and teachers to include CS and computational thinking in classroom learning activities. By contrast, the DfE has effectively coordinated across various nongovernmental organizations to expand CS education. Similarly, Arkansas’s Department of Education is leading an effort to get half of all school districts to form partnerships with universities and business organizations to give students opportunities to participate internships and college-level CS courses while in high school (Talk Business & Politics, 2020). In sum, the experience of decades of educational policies across the education systems reviewed shows that schools require long lasting, coordinated, and multidimensional support to achieve successful implementation of CS in classrooms.

6. When taught in an interactive, hands-on way, CS education builds skills for life

Several of the cases studied introduced innovative pedagogies using makerspaces (learning spaces with customizable layouts and materials) and project-based learning to develop not only skills specific to CS but also skills that are relevant more broadly for life. For example, Uruguayan CS education features innovative concepts like robotics competitions and makerspaces that allow students to creatively apply their computational thinking lessons and that can spark interest and deepen understanding. In addition, computational thinking has been integrated across subject areas (e.g., in biology, math, and statistics) (Vázquez et al., 2019) and in interdisciplinary projects that immerse students in imaginative challenges that foster creative, challenging, and active learning (Cobo & Montaldo, 2018). For instance, students can use sensors and program circuit boards to measure their own progress in physical education (e.g., measuring how many laps they can run in a given period).

Similarly, in New Brunswick, Brilliant Labs provide learning materials to schools so they can offer students CS lessons using makerspaces that encourage students to develop projects, engage with technology, learn, and collaborate. These makerspaces enable students to creatively apply their CS and computational thinking lessons, sparking interest and deepening understanding of CS and computational thinking.

Thailand’s curricular reforms also integrated project-based learning into CS education. Thai students in grades 4-6 learn about daily life through computers, including skills such as using logic in problem-solving, searching data and assessing its correctness, and block coding (e.g., Scratch). Then, students in grades 7-9 focus on learning about primary data through objectives that include using programming to solve problems, collecting, analyzing, presenting, and assessing data and information, and textual programming such as Python. Finally, students in grades 10-12 focus on applying advanced computing technology and programming to solve real-world problems, using knowledge from other subjects and data from external sources (Piamsa-nga et al., 2020).

After two years of nationwide discussions from 2014 to 2016, the Polish Ministry of National Education announced the creation of a new core curriculum for CS in primary and secondary schools (Syslo, 2020). The new curriculum’s goals included students using technology to identify solutions for problems in every day and professional situations and supporting other disciplines—such as science, the arts, and the social sciences—in innovation (Panskyi, Rowinska, & Biedron, 2019).

CS skills are increasingly necessary to function in today’s technology-advanced world and for the future. They enable individuals to understand how technology works, and how best to harness its potential to improve lives. As these skills take preeminence in the rapidly changing 21st century, CS education promises to significantly enhance student preparedness for the future of work and active citizenship.

Our findings suggest six recommendations for governments interested in taking CS education to scale in primary and secondary schools. First, governments should use economic development strategies focused on expanding technology-based jobs to engage all stakeholders and expand CS education in primary and secondary schools. Indeed, such a strategy helps attract and retain investors and foster CS education demand among students. Second, provide access to ICT infrastructure in primary and secondary schools to facilitate the introduction and expansion of CS education. Third, developing qualified teachers for CS should be a top priority. The evidence is clear that a qualified teacher is the most important factor in student learning, and thus preparing the teacher force needed for CS at scale is crucial. Fourth, expose students early to CS education to increase their likelihood of pursuing it. This is especially important for girls and other URM groups historically underrepresented in STEM and CS fields. Fifth, engage key stakeholders (including educators, the private sector, and civil society) to help address bottlenecks in physical and technical capacity. Finally, teach CS in an interactive, hands-on way to build skills for life.

Through studying the cases of regional and national governments at various levels of economic development and progress in implementing CS education programs, governments from around the globe can learn how to expand and improve CS education and help students develop a new basic skill necessary for the future of work and active citizenship.

Case studies

For a detailed discussion of regional and national education systems from diverse regions and circumstances that have implemented computer science education programs, download the case studies.

file-pdf Arkansas file-pdf British Columbia file-pdf Chile file-pdf England file-pdf Italy file-pdf New Brunswick file-pdf South Korea file-pdf South Africa file-pdf Uruguay

About the Authors

Emiliana vegas, co-director – center for universal education, michael hansen, senior fellow – brown center on education policy, brian fowler, former research analyst – center for universal education.

  • 1. Denning et al. (1989) defined the discipline of computing as “the systematic study of algorithmic processes that describe and transform information: their theory, analysis, design, efficiency, implementation, and application.”
  • 2. Integrated development environments include programs like Scratch (Resnick et al., 2009), Code.org (Kelelioglu, 2015), and CHERP3 Creative Hybrid Environment for Robotics Programming (Bers et al., 2014).
  • 3. The authors of these studies conclude that self-teaching methods and laboratory control methods may be effective for teaching programming skills.
  • 4. In 2019, President Tabaré Vázquez stated that “All children in kindergartens and schools are programming in Scratch, or designing strategies based on problem-solving” (Uruguay Presidency, 2019).
  • 5. Remote instruction via videoconferencing technology improved learning in mathematics in an experiment in Ghana (Johnston & Ksoll, 2017). It is very plausible that Uruguay’s approach to giving computational thinking instruction via videoconference could also be effective.

Acknowledgments

The Brookings Institution is a nonprofit organization devoted to independent research and policy solutions. Its mission is to conduct high-quality, independent research and, based on that research, to provide innovative, practical recommendations for policymakers and the public. The conclusions and recommendations of any Brookings publication are solely those of its author(s), and do not reflect the views of the Institution, its management, or its other scholars.

Brookings gratefully acknowledges the support provided by Amazon, Atlassian Foundation International, Google, and Microsoft.

Brookings recognizes that the value it provides is in its commitment to quality, independence, and impact. Activities supported by its donors reflect this commitment.

Related content

importance of problem solving in computer science

Expanding computer science education for a technologically advancing world

On October 26, the Center for Universal Education (CUE) will host a virtual event to launch the report “Building skills for life: How to expand and improve computer science education around the world.”

importance of problem solving in computer science

What do we know about the expansion of K-12 computer science education?

This brief reviews various efforts around the world to improve and scale computer science education.

importance of problem solving in computer science

Realizing the promise: How can education technology improve learning for all?

This research is intended as an evidence-based tool for ministries of education to adopt and more successfully invest in education technology.

  • Media Relations
  • Terms and Conditions
  • Privacy Policy

December 22, 2023

The Most Important Unsolved Problem in Computer Science

Here’s a look at the $1-million math problem at the heart of computation

By Jack Murtagh

mathematic formulas on a computer display, blue text on black screen

alengo/Getty Images

When the Clay Mathematics Institute put individual $1-million prize bounties on seven unsolved mathematical problems , they may have undervalued one entry—by a lot. If mathematicians were to resolve, in the right way, computer science's “P versus NP” question, the result could be worth worlds more than $1 million. They'd be cracking most online-security systems, revolutionizing science and even, in effect, solving the other six of the so-called Millennium Problems, all of which were chosen in the year 2000. It's hard to overstate the stakes surrounding the most important unsolved problem in computer science .

P versus NP concerns the apparent asymmetry between finding solutions to problems and verifying solutions to problems. For example, imagine you're planning a world tour to promote your new book. You pull up Priceline and start testing routes, but each one you try blows your total trip budget. Unfortunately, as the number of cities grows on your worldwide tour, the number of possible routes to check skyrockets exponentially, making it infeasible even for computers to exhaustively search through every case. But when you complain, your book agent writes back with a solution sequence of flights. You can easily verify whether their route stays in budget by simply checking that it hits every city and summing the fares to compare against the budget limit. Notice the asymmetry here: finding a solution is hard, but verifying a solution is easy.

The P versus NP question asks whether this asymmetry is real or an illusion. If you can efficiently verify a solution to a problem, does that mean you can also efficiently find a solution? It might seem obvious that finding a solution should be harder than verifying one. But researchers have been surprised before. Problems can look similarly difficult—but when you dig deeper you find shortcuts to some and hit brick walls on others. Perhaps a clever shortcut can circumvent searching through zillions of potential routes in the book tour problem. For example, if you instead wanted to find a sequence of flights between two specific remote airports while abiding by the budget, you might also throw up your hands at the immense number of possible routes to check. In fact, this problem contains enough structure that computer scientists have developed a fast procedure (or algorithm) for it that bypasses the need for an exhaustive search.

On supporting science journalism

If you're enjoying this article, consider supporting our award-winning journalism by subscribing . By purchasing a subscription you are helping to ensure the future of impactful stories about the discoveries and ideas shaping our world today.

The P versus NP question rears its head everywhere we look in the computational world well beyond the specifics of our travel scenario—so much so that it has come to symbolize a holy grail in our understanding of computation. Yet every attempt to resolve it only further exposes how monumentally difficult it is to prove one way or another.

In the subfield of theoretical computer science called complexity theory, researchers try to pin down how easily computers can solve various types of problems. P represents the class of problems they can solve efficiently, such as sorting a column of numbers in a spreadsheet or finding the shortest path between two addresses on a map. In contrast, NP represents the class of problems for which computers can verify solutions efficiently. Our book tour problem, which academics call the Traveling Salesperson Problem , lives in NP because we have an efficient procedure for verifying that the agent's solution worked.

Notice that NP actually contains P as a subset because solving a problem outright is one way to verify a solution to it. For example, how would you verify that 27 × 89 = 2,403? You would solve the multiplication problem yourself and check that your answer matches the claimed one. We typically depict the relation between P and NP with a simple Venn diagram:

importance of problem solving in computer science

Credit: Amanda Montañez

The region inside of NP but not inside of P contains problems that can't be solved with any known efficient algorithm. (Theoretical computer scientists use a technical definition for “efficient” that can be debated, but it serves as a useful proxy for the colloquial concept.) But we don't know whether that's because such algorithms don't exist or we just haven't mustered the ingenuity to discover them. This representation provides another way to phrase the P versus NP question: Are these classes actually distinct? Or does the Venn diagram collapse into one circle? Can all NP problems be solved efficiently?

Here are some examples of problems in NP that are not currently known to be in P:

Given a social network, is there a group of a specified size in which all of the people in it are friends with one another?

Given a varied collection of boxes to be shipped, can all of them be fit into a specified number of trucks?

Given a sudoku (generalized to n × n puzzle grids), does it have a solution?

Given a map, can the countries be colored with only three colors such that no two neighboring countries are the same color?

Ask yourself how you would verify proposed solutions to some of the problems listed and then how you would find a solution. Note that approximating a solution or solving a small instance (most of us can solve a 9 × 9 sudoku ) doesn't suffice. To qualify as solving a problem, an algorithm needs to find an exact solution for all instances, including very large ones.

Each of the problems can be solved via brute-force search (for example, try every possible coloring of the map and see whether any of them work), but the number of cases to try grows exponentially with the size of the problem. This means that if we call the size of the problem n (for example, the number of countries on the map or the number of boxes to pack into trucks), then the number of cases to check looks something like 2 n . The world's fastest supercomputers have no hope against exponential growth. Even when n equals 300, a tiny input size by modern data standards, 2 300 exceeds the number of atoms in the observable universe. After hitting “go” on such an algorithm, your computer would display a spinning pinwheel that would outlive you and your descendants.

Thousands of other problems belong on our list. From cell biology to game theory, the P versus NP question reaches into far corners of science and industry. If P = NP (that is, our Venn diagram dissolves into a single circle, and we obtain fast algorithms for these seemingly hard problems), then the entire digital economy would become vulnerable to collapse. This is because much of the cryptography that secures such things as your credit card number and passwords works by shrouding private information behind computationally difficult problems that can become easy to solve only if you know the secret key. Online security as we know it rests on unproven mathematical assumptions that crumble if P = NP.

Amazingly, we can even cast mathematics itself as an NP problem because we can program computers to efficiently verify proofs. In fact, legendary mathematician Kurt Gödel first posed the P versus NP problem in a letter to his colleague John von Neumann in 1956. Gödel observed that P = NP “would have consequences of the greatest importance. Namely, it would obviously mean that ... the mental work of a mathematician concerning yes-or-no questions could be completely replaced by a machine.”

If you're a mathematician worried for your job, rest assured that most experts believe that P does not equal NP. Aside from the intuition that sometimes solutions should be harder to find than to verify, thousands of the hardest NP problems that are not known to be in P have sat unsolved across disparate fields, glowing with incentives of fame and fortune, and yet not one person has designed an efficient algorithm for a single one of them.

Of course, gut feeling and a lack of counterexamples don't constitute a proof. To prove that P is different from NP, you somehow have to rule out all potential algorithms for all of the hardest NP problems, a task that appears out of reach for current mathematical techniques. Indeed, the field has coped by proving so-called barrier theorems, which say that entire categories of tempting proof strategies to resolve P versus NP cannot succeed. Not only have we failed to find a proof, but we also have no clue what an eventual proof might look like.

Problem Solving Study Guide 2024

  • Computer Science

COMMENTS

  1. PDF An Introduction to Computer Science and Problem Solving

    So, computer science is all about taking in information and then performing some computations & analysis to solve a particular problem or produce a desired result, which depends on the application at hand. Computer science is similar to mathematics in that both are used as a means of defining and solving some problem. In fact, computer-based ...

  2. What is Problem Solving? An Introduction

    Problem solving, in the simplest terms, is the process of identifying a problem, analyzing it, and finding the most effective solution to overcome it. For software engineers, this process is deeply embedded in their daily workflow. It could be something as simple as figuring out why a piece of code isn't working as expected, or something as ...

  3. Computational Thinking for Problem Solving

    Computational thinking is a problem-solving process in which the last step is expressing the solution so that it can be executed on a computer. However, before we are able to write a program to implement an algorithm, we must understand what the computer is capable of doing -- in particular, how it executes instructions and how it uses data.

  4. PDF Unit 2: Problem Solving

    Introduction. In order for students to become "computational thinkers" they need experience solving a wide range of problems and the opportunity to experiment with a variety of solution strategies. This unit begins with an introduction to the problem solving process. Students are asked to solve new problems by planning a strategy, designing ...

  5. Problem Solving

    Solving problems is the core of computer science. Programmers must first understand how a human solves a problem, then understand how to translate this "algorithm" into something a computer can do, and finally how to "write" the specific syntax (required by a computer) to get the job done. It is sometimes the case that a machine will solve a ...

  6. Problem-Solving Strategies

    Computer science learners often face difficulties in performing two of the main stages of a problem-solving process: problem analysis and solution construction. Therefore, it is important that computer science educators be aware of these difficulties and acquire appropriate pedagogical tools to guide and scaffold learners in learning these skills.

  7. Understanding Algorithms: The Key to Problem-Solving Mastery

    The world of computer science is a fascinating realm, where intricate concepts and technologies continuously shape the way we interact with machines. ... In this article, we aim to provide a clear and accessible introduction to algorithms, focusing on their importance in problem-solving and exploring common types such as searching, sorting, and ...

  8. Identification of Problem-Solving Techniques in Computational Thinking

    Being creative is an important factor in the development of someone's thinking accompanied by PS abilities against the development of complexities. The advance of PS has evolved in response to the increasing complexity of real-world circumstances. ... Learn problem-solving ideas from computer science included core concepts of computational ...

  9. 21 principles for systematically solving problems in computer science

    Redefine the problem. 4. Relax one assumption at a time from the problem statement (to make the problem easier) Many problems are too hard to solve on their own. However, by solving a easier ...

  10. Lecture 3: Problem Solving

    MIT OpenCourseWare is a web based publication of virtually all MIT course content. OCW is open and available to the world and is a permanent MIT activity

  11. Problem-Solving in Computer Science: Learning from a Gifted Peer

    In the high performers' problem-solving processes, in contrast, distinct fundamental ideas of computer science as described, for example, in Schubert and Schwill ( 2004) were visible. In the specific context, these were tree structures and recursion, which in combination with the key findings of the analysis phase were purposefully applied.

  12. CS2104: Introduction to Problem Solving in Computer Science

    Emphasis on problem-solving techniques that aid programmers and computer scientists. Heuristics for solving problems ''in the small'' (classical math and word problems), generating potential solutions to ''real-life'' problems encountered in the profession, and problem solving in teams. Having successfully completed this course, the student ...

  13. Oberlin College Computer Science » Problem Solving Tips

    Four Main Problem Solving Steps: 1. Understand the Problem. Solving the right problem is the most important part of problem solving. Be sure, absolutely 100% positively sure, that you understand the problem before attempting a solution. This involves: Reading the prelab and lab very carefully (including all bold text, italicized text, and ...

  14. Computer Science Skills: Computational Thinking Explained

    There are many problem-solving skills involved in computer science, including those needed to design, develop, and debug software. Computational thinking is a way of describing these skills. Computational thinking refers to the thought processes involved in defining a problem and its solution so that the solution can be expertly carried out by ...

  15. Problem Solving in Computer Science: What Does It Really Mean?

    Problem Solving in Computer Science: What Does It Really Mean? A Daunting Challenge. Many of my students complain when asked to read technical literature, despite my efforts to make it fun and relevant. Especially in my most advanced computer science class, it becomes difficult to use material that is exciting and topical for my students ...

  16. How to use algorithms to solve everyday problems

    My approach to making algorithms compelling was focusing on comparisons. I take algorithms and put them in a scene from everyday life, such as matching socks from a pile, putting books on a shelf, remembering things, driving from one point to another, or cutting an onion. These activities can be mapped to one or more fundamental algorithms ...

  17. Why students need Computer Science to succeed

    A growing interest in CS curricula. Learning coding and software development, two key parts of CS, has been shown to improve students' creativity, critical thinking, math, and reasoning skills ii.CS skills like problem-solving iii and planning iv are transferable and can be applied across other subjects. A 2020 study examining the effects of CS courses on students' academic careers in the ...

  18. Can Majoring in Computer Science Improve General Problem-solving Skills

    The analysis suggests that the educational experiences of Computer Science (CS) students may better train them in problem-solving than the experiences of other majors. In this study, students from a variety of undergraduate majors and grade levels were given a 15-minute problem-solving task embedded in an interactive science simulation.

  19. Can Majoring in Computer Science Improve General Problem-solving Skills?

    ing is transferable to problem-solving tasks across domains and discuss how the unique features of CS programming assignments could be generalized to other science and engineering courses to foster students' general problem-solving skills. KEYWORDS computational thinking, problem solving, simulations, computer science education, student ...

  20. Building skills for life: How to expand and improve computer science

    Research has shown that students benefit from CS education by increasing college enrollment rates and developing problem-solving abilities (Brown & Brown, 2020; Salehi et al., 2020).

  21. Full article: A framework to foster problem-solving in STEM and

    ABSTRACT. Background: Recent developments in STEM and computer science education put a strong emphasis on twenty-first-century skills, such as solving authentic problems. These skills typically transcend single disciplines. Thus, problem-solving must be seen as a multidisciplinary challenge, and the corresponding practices and processes need to be described using an integrated framework.

  22. Computer science and the art of problem-solving

    100. Computer science is the study of problems, problem-solving, and the solutions that come out of the problem-solving process. Given a problem, a computer scientist's goal is to develop an algorithm, a step-by-step list of instructions for solving any instance of the problem that might arise. Algorithms are finite processes that if followed ...

  23. The Most Important Unsolved Problem in Computer Science

    They'd be cracking most online-security systems, revolutionizing science and even, in effect, solving the other six of the so-called Millennium Problems, all of which were chosen in the year 2000 ...

  24. Problem Solving Study Guide 2024 (pdf)

    Computer-science document from McGill University, 2 pages, Problem Solving Study Guide 2024 Key Concepts and Questions Three aspects to problem solving. These are representing a problem with relevant information (know what the problem is); analyzing it and then effectively storing a solution (note the importance