dimohy
디모이 블로그

디모이 블로그

컴퓨팅 사고(Computational thinking, CT)란?

컴퓨팅 사고(Computational thinking, CT)란?

dimohy's photo
dimohy
·May 24, 2021·

4 min read

오늘은 컴퓨팅 사고에 대해 이야기 해보겠습니다.

컴퓨팅 사고, 한번쯤은 들어본 것 같기도 하고 되려 현업에서 열심히 활동하고 계신 분들은 낯선 무엇일 수 있겠습니다.

컴퓨팅 사고란 위키백과를 인용해보면,

컴퓨팅 사고 또는 전산적 사고(電算的 思考, 영어: computational thinking, CT)는 컴퓨터(사람이나 기계)가 효과적으로 수행할 수 있도록 문제를 정의하고 그에 대한 답을 기술하는 것이 포함된 사고 과정 일체를 일컫는다. 정답이 하나가 아니라 여러가지일 수 있는 문제(Open-ended Problem)는 다양한 변수에 기반한 포괄적이며 유의미한 해답도출이 필요한데, 컴퓨팅 사고를 통해서 발견한 문제분해(decomposition), 자료표현(data representation), 일반화(generalization), 모형(modeling), 알고리즘이 필요하다. 컴퓨팅 사고에는 전체 의사결정 과정을 분해하고, 연관된 변수와 모든 가능한 해법을 고려해서, 이를 상응하는 모수와 문제 한계를 고려하여 올바른 의사결정을 내린다. 컴퓨팅 사고라는 용어는 Seymour Papert 교수가 처음으로 1980년[1] 다시 1996년 [2] 각각 언급했다. 컴퓨팅 사고를 사용해서 복잡한 대규모 문제를 알고리즘으로 해결할 수 있고, 흔히 효율성에서 상당한 개선을 달성하는데 사용된다

라고 합니다. 2006년에 Wing에 의해서 처음 소개 된 걸로 알았는데 잘못 알고 있었군요. 생각보다 오래전인 1980년 Seymour Papert 교수님에 의해서 처음으로 언급되었습니다.

컴퓨팅 사고는 최근 빅데이터와 AI기술이 대두되면서 더욱 더 조명받기 시작했는데요, 컴퓨팅 사고에 대해서 본격적으로 알아봅시다.

컴퓨터 사고를 정의한다면?

컴퓨터 사고는, 위의 위키백과 처럼 다음과 같이 정의할 수 있습니다.

컴퓨터가 효과적으로 수행할 수 있도록 문제를 정의하고 그 답을 기술하는 것이 포함된 사고 과정 일체

라고 정의할 수 있겠네요.

컴퓨터 사고의 특성 파악

특성을 다양한 시각에 따라 9가지로 분류하기도 하고 위의 위키백과처럼 5가지 정도로 분류하기도 합니다.

문제분해

분석하기 전 문제는 여러 요소들이 결합된 복합 문제인 경우가 대다수입니다. 이런 문제는 어렵거나 난해하다고 느끼기 마련인데, 이 때 해야 하는게 분석할 수 있는 단위로 문제를 분해하는 것입니다. 분석하기 어려운 문제를 분석할 수 있는 복수의 문제로 분해하면 각개격파! 결국엔 본 문제를 분석할 수 있게 됩니다.

패턴인식

복잡한 문제의 요소들이 분석해나가면서 중복된 패턴을 지닌다는 것을 알게 됩니다. 패턴인식은 일반화/추상화를 하기 위한 사전단계로 동일 패턴으로 한번 인식이 되면 복잡하고 난해하다고 느겼던 문제가 갑자기 쉽게 됩니다. 가령, 500가지의 요소가 있다고 칩시다. 500가지나 되기 때문에 꽤 난감한 문제라고 인식이 되는데요, 분석하는 과정에 동일 패턴이 확인이 되고 정리를 했더니 총 12가지의 요소로 압축이 된다고 칩시다. 결과적으로 좀 더 쉽게 느껴지게 됩니다.

자료 표현

자료의 표현은 중요합니다. 특히 그림으로 도식하는 방식이 효과적인데요, 왜냐하면 우리는 말과 글 보다는 이미지를 기억하고 해석하는데 진화과정의 오랜 기간동안 발전한 뇌 기관으로 사고하기 때문입니다. 특히나 난해하고 어려운 문제에 직면했을 때 마인드맵 등을 통해 각 요소를 파악하고 분석해나가다 보면 핵심 요소에 접근할 수 있게 됩니다.

일반화/추상화

문제를 분해하고 패턴인식을 통해 요소를 축약하면서 도식으로 자료를 표현하게 되었다면, 문제를 일반화 하고 추상화 할 수 있습니다. 추상화란 복잡해 보이는 문제 대상에서 불필요한 요소를 제거하고 필요한 요소로만 문제를 바라볼 수 있게 합니다. 이를 통해 추상적 사고능력을 키울 수 있게 되는데요, 나무 자체를 보기 전에 숲 전체를 먼저 파악하는게 결국에는 전체를 이해하는 시작점이 될 수 있습니다. 일반화란 문제를 개념적으로 접근하는 방식입니다. 동일한 개념이라면 전혀 다른 문제라 하더라도 사전에 경험한 문제 해결 방식을 적용해 문제를 풀 수 있게 됩니다.

알고리즘

일반적으로 알고리즘이라고 하면 프로그래밍을 작성하기 위한 사전 로직 정도로 이해하기 일쑤입니다. 컴퓨팅 사고에서의 알고리즘은 좀 강하게 표현해서 프로그래밍과 전혀 상관이 없다고 할 수 있습니다. 문제를 해결하기 위해서 분해된 문제와 패턴인식을 통해 압축된 요소를 이용해 문제를 푸는 흐름을 전개합니다. 흐름도를 이용할 수 도 있고요, 사실 틀에 얽매일 필요가 없습니다. 단순한 화살표여도 괜찮습니다.

컴퓨팅 사고에 대해 대략 알겠습니다. 그런데 정말 컴퓨팅 사고를 하게되면 문제해결 능력이 향상되는 것일까요?

이론은 사실 그 자체로는 힘이 없습니다. 이론을 학습한 뒤 실습을 통해 능력으로 변환해야 하는데요, 컴퓨팅 사고만큼이나 지식을 쌓는 노력만큼 실력으로 전환되지 않는게 또 없을 겁니다. 컴퓨팅 사고라는 표현 처럼 사고력은 역시 사고훈련을 통해 성장하게 될 텐데요, 프로그래밍을 오래 한 저의 경험으로 봤을 때 이제 학문적으로 어느정도 체계화 된 그 틀을 잘 활용한다면, 불필요한 시행착오를 극적으로 줄일수 있다고 생각합니다. 저의 결론은 컴퓨팅 사고 훈련을 지속적으로 하면 문제 해결 능력은 일취월장 하리라 생각합니다!

마지막으로 중요한게 있습니다!

이 글을 읽고 컴퓨팅 사고를 해야 겠다고 마음먹는 분들께 한가지 첨언을 하고 싶습니다. 처음부터 너무 어려운 문제를 컴퓨팅 사고를 통해 풀려고 하지 않아야 합니다! 처음에는 컴퓨팅 사고를 굳이 사용하지 않더라도 풀 수 있는 문제를 컴퓨팅 사고를 통해 도식화를 해가면서 진행해봅시다. 그리고 조금씩 난위도를 올려보는 것을 추천합니다.

또한 컴퓨팅 사고력은 실제로 프로그래밍 로직을 만드는데 큰 도움이 됩니다. 단, 고품질의 코드를 작성하는 것과는 직접적인 관련은 없고, 목적에 맞는 문제 해결에 큰 도움이 됩니다.

마지막으로 컴퓨팅 사고를 습관화 하는게 중요합니다. 습관화는 대략 한달 보름이 걸린다고 하니 능력이 잘 늘지 않더라도 한달 보름동안 반복적으로 컴퓨팅 사고를 통해 문제 해결 능력을 키워봅시다!

관련 소개 영상