Computational thinking

All about IT·2024년 11월 4일

CS50

목록 보기
1/1
post-thumbnail

Computaional thinking에 대해 현대적의미로 재정의 해 준 Jeannette M. Wing의 "Computaional thinking"(https://www.cs.cmu.edu/~15110-s13/Wing06-ct.pdf)이라는 글의 번역이다. 목차는 내가 임의로 생성 하였다.

1. 서론

컴퓨터의 처리 과정이 가진 힘과 한계가 바로 컴퓨팅 사고의 토대다. 이는 사람이 처리하든 기계가 처리하든 마찬가지다. 컴퓨터적 방법과 모델은 우리에게 특별한 힘을 준다. 덕분에 우리는 혼자서는 도저히 해결할 수 없는 문제들을 풀고, 복잡한 시스템을 설계할 용기를 얻게 된다. 컴퓨팅 사고는 기계 지능이라는 수수께끼와 마주한다. "인간이 컴퓨터보다 더 잘하는 것은 무엇일까?", "컴퓨터가 인간보다 더 잘하는 것은 무엇일까?" 그리고 가장 근본적인 질문인 "무엇을 계산할 수 있을까?"와 씨름한다. 하지만 오늘날 우리는 이런 질문들의 답을 부분적으로만 알고 있을 뿐이다.

컴퓨팅 사고는 컴퓨터 전문가만을 위한 것이 아니다. 모든 사람에게 필요한 기본 능력이다. 읽고, 쓰고, 셈하는 기초 능력처럼 컴퓨팅 사고도 모든 아이들의 분석 능력에 포함되어야 한다. 인쇄술이 읽기, 쓰기, 셈하기의 보급을 도왔듯이, 컴퓨터와 컴퓨팅도 컴퓨팅 사고의 확산을 이끌고 있다. 이것이 바로 이 시대가 가진 특별한 점이다.

2. 컴퓨팅 사고의 정의와 특징

컴퓨팅 사고는 컴퓨터 과학의 기본 개념을 활용해 문제를 해결하고, 시스템을 설계하며, 인간의 행동을 이해하는 것이다. 이는 컴퓨터 과학 전반을 아우르는 다양한 사고 도구를 포함한다.
문제 해결에 직면했을 때, 우리는 이런 질문들을 던진다:
"이 문제는 얼마나 어려울까?",
"이 문제를 가장 잘 해결하는 방법은 무엇일까?"
컴퓨터 과학은 이러한 질문들에 정확한 답을 제시할 수 있는 탄탄한 이론적 기반을 갖고 있다. 문제의 난이도를 파악할 때는 해결책을 실행할 컴퓨터의 기본 성능도 고려해야 한다. 즉, 기계가 이해할 수 있는 명령어들, 사용 가능한 자원의 한계, 그리고 작동 환경을 모두 살펴봐야 한다.

문제를 효율적으로 해결하려면 다음과 같은 사항도 고민해야 한다:

  • 대충 풀어도 될까?
  • 무작위 방식이 도움이 될까?
  • 틀린 답이 나와도 괜찮을까?

컴퓨팅 사고는 얼핏 보면 어려워 보이는 문제를 우리가 해결할 수 있는 형태로 바꾸는 것이다. 문제를 단순화하거나, 다른 문제에 녹여 넣거나, 형태를 바꾸거나, 모의실험을 통해 이를 달성할 수 있다.

컴퓨팅 사고는 다음과 같은 특징을 지닌다:

  • 문제를 작은 조각으로 나눠 해결하는 재귀적 사고
  • 여러 일을 동시에 처리하는 병렬적 사고
  • 코드와 데이터를 서로 바꿔가며 생각하기
  • 하나의 대상에 여러 이름을 붙이는 것의 좋은 점과 위험성 인식하기
  • 간접적인 방식과 절차 호출이 가진 비용과 효과 판단하기
  • 프로그램의 정확성과 효율성뿐 아니라 아름다움도 고려하기
  • 시스템 설계의 단순함과 우아함을 추구하기

큰 규모의 복잡한 작업이나 시스템을 다룰 때, 컴퓨팅 사고는 추상화와 분해를 활용한다. 문제를 다루기 쉽게 만들기 위해 적절한 표현 방식을 선택하거나, 문제의 핵심 측면을 모형화하는 것이 여기에 포함된다. 또한 시스템의 움직임을 간단명료하게 설명하기 위해 변하지 않는 속성을 찾아내는 것도 포함된다.

3. 일상생활 예시들

우리 주변의 일상적인 사례들을 살펴보자:

  • 아이가 아침에 학교 갈 때 그날 필요한 물건들을 가방에 미리 챙기는 것: 이는 컴퓨터가 쓸 데이터를 미리 준비해두는 '미리 가져오기'와 '임시 저장'과 같은 원리다.
  • 아이가 장갑을 잃어버렸을 때 왔던 길을 되짚어 가보라고 조언하는 것: 이는 '되추적'이라는 방법이다. 마치 문제 해결이 막혔을 때 이전 단계로 돌아가 다시 시도하는 것과 같다.
  • 스키를 언제까지 빌리다가 언제 사야 할지 결정하는 것: 이는 '실시간 알고리즘'이다. 상황에 따라 최적의 판단을 내리는 방식이다.
  • 마트에서 계산대 줄을 고르는 것: 이는 '다중 처리 시스템의 성능 분석'이다. 여러 선택지 중 가장 효율적인 것을 고르는 방법이다.
  • 정전이 되어도 전화가 되는 이유: 이는 '실패의 독립성'과 '이중 설계'의 예다. 한 시스템이 망가져도 다른 시스템은 정상 작동하도록 설계한 것이다.
  • 캡차(CAPTCHA)가 사람과 컴퓨터를 구별하는 방식: 이는 컴퓨터가 풀기 어려운 AI 문제를 활용해 자동화 프로그램을 막는 방법이다.

컴퓨팅 사고는 '알고리즘'이나 '전제 조건' 같은 용어들이 모든 사람의 일상 언어가 되고, '비결정성'과 '쓰레기 수거'와 같은 개념이 컴퓨터 과학자들이 쓰는 의미로 이해되며, 계층 구조를 나타내는 나무가 거꾸로 그려질 때 우리 삶에 완전히 스며들게 될 것이다.

4. 다른 분야에 미치는 영향

우리는 이미 컴퓨팅 사고가 다른 학문 분야를 어떻게 바꾸고 있는지 목격하고 있다. 예를 들면:

  • 기계 학습은 통계학의 모습을 완전히 바꿔놓았다. 몇 년 전만 해도 상상도 못했던 규모의 데이터를 다룰 수 있게 됐다.
  • 여러 조직의 통계 부서에서 컴퓨터 과학자를 적극적으로 채용하고 있다.
  • 컴퓨터 과학 학교들은 기존 통계학과와 협력하거나 새로운 통계학과를 만들고 있다.

컴퓨터 과학자들이 최근 생물학에 관심을 보이는 이유는 생물학자들도 컴퓨팅 사고의 혜택을 누릴 수 있다고 믿기 때문이다. 컴퓨터 과학이 생물학에 기여하는 바는 단순히 방대한 유전자 서열 데이터에서 패턴을 찾는 것을 넘어선다. 데이터 구조와 알고리즘이라는 컴퓨터적 사고방식과 방법으로 단백질의 구조를 표현하여 그 기능을 밝혀낼 수 있을 것으로 기대한다.

5. What it is, and isn't

컴퓨터 과학은 계산에 대한 연구다. 무엇을 계산할 수 있고, 어떻게 계산할 수 있는지를 탐구하는 학문이다. 이런 관점에서 컴퓨팅 사고는 다음과 같은 특징을 지닌다:

  1. 개념화이지, 단순한 프로그래밍이 아니다
  • 컴퓨터 과학은 단순히 프로그램을 만드는 것 이상이다
  • 컴퓨터 과학자처럼 생각한다는 것은 프로그램을 만드는 것을 넘어선다
  • 여러 층위에서 추상적으로 사고하는 능력이 필요하다
  1. 기본 능력이지, 기계적인 기술이 아니다
  • 기본 능력이란 현대 사회에서 살아가는 데 꼭 필요한 것을 말한다
  • 기계적이란 말은 단순 반복적인 일을 뜻한다
  • 재미있는 점은, 컴퓨터가 인간처럼 생각하게 만드는 AI의 큰 과제가 해결되기 전까지는 생각하는 일이 기계적일 수 없다는 것이다
  1. 사람의 사고방식이지, 컴퓨터의 사고방식이 아니다
  • 컴퓨팅 사고는 사람이 문제를 해결하는 방식이다
  • 사람을 컴퓨터처럼 생각하게 만드는 게 아니다
  • 컴퓨터는 단조롭고 지루하지만, 사람은 영리하고 상상력이 풍부하다
  • 바로 우리가 컴퓨터를 흥미진진하게 만든다
  • 컴퓨터라는 도구를 가지고, 우리는 컴퓨터가 없던 시절에는 감히 생각도 못했던 문제들을 다룬다
  • 우리는 상상력만이 한계인 시스템을 만들어낸다
  1. 수학적 사고와 공학적 사고를 아우른다
  • 컴퓨터 과학은 본질적으로 수학적 사고를 필요로 한다
  • 다른 과학처럼, 그 토대가 수학에 있기 때문이다
  • 동시에 공학적 사고도 필요하다
  • 실제 세상과 맞닿은 시스템을 만들기 때문이다
  • 컴퓨터라는 기계의 한계 때문에 단순한 수학적 사고를 넘어 계산적 사고가 필요하다
  • 가상 세계를 자유롭게 만들 수 있다는 점은 물리적 한계를 뛰어넘는 시스템 설계를 가능하게 한다
  1. 생각이지, 물건이 아니다
  • 우리 삶에 늘 함께하고 영향을 미치는 것은 우리가 만드는 소프트웨어와 하드웨어만이 아니다
  • 문제에 접근하고 해결하며, 일상을 꾸려가고, 다른 사람들과 소통하는 데 쓰는 컴퓨팅 개념도 포함된다
  1. 모든 사람을 위한, 어디서나 쓸 수 있는 것이다
  • 컴퓨팅 사고는 인간의 활동에 너무나 자연스럽게 녹아들어, 더 이상 특별한 사고방식으로 여겨지지 않을 때 진정한 현실이 될 것이다

6. 맺음말

많은 사람들이 컴퓨터 과학을 단순히 프로그래밍이라고만 생각한다. 일부 학부모들은 자녀가 컴퓨터 과학을 전공하면 취업 기회가 매우 제한될 거라고 여긴다. 또 많은 이들이 컴퓨터 과학의 기초 연구는 이미 끝났고 응용 기술만 남았다고 생각한다. 컴퓨팅 사고는 이런 인식을 바꾸기 위한 큰 그림이다. 컴퓨터 과학 교육자, 연구자, 현장 전문가들이 이 분야에 대한 사회의 시선을 바꾸도록 이끄는 나침반이다. 특히 우리는 교사, 학부모, 학생들을 포함한 예비 대학생들에게 다가가 두 가지 핵심 메시지를 전달해야 한다:

  1. 지적 도전과 흥미진진한 과학적 문제들이 아직도 우리의 이해와 해결을 기다리고 있다
  • 문제와 해결책의 영역은 오직 우리의 호기심과 창의력에 의해서만 한계 지어진다
  1. 컴퓨터 과학을 전공하면 어떤 길도 열려있다
  • 영어나 수학을 전공하고 다양한 직업을 가질 수 있듯이, 컴퓨터 과학도 마찬가지다
  • 컴퓨터 과학을 전공하고 의사, 변호사, 사업가, 정치인이 될 수 있고, 모든 종류의 과학자나 공학자, 심지어 예술가의 길도 열려있다

대학의 컴퓨터 과학 교수들은 신입생을 위해 "컴퓨터 과학자처럼 생각하는 법"이란 강좌를 개설해야 한다. 이 강좌는 전공자뿐 아니라 비전공자도 들을 수 있어야 한다. 또한 대학 입학 전 학생들에게도 컴퓨팅의 방법과 모델을 접할 기회를 줘야 한다.
컴퓨터 과학에 대한 관심이 줄었다거나 연구 지원금이 감소했다고 한탄하기보다는, 이 분야의 지적 모험에 대한 대중의 관심을 불러일으키는 데 집중해야 한다. 이를 통해 컴퓨터 과학이 주는 즐거움과 경이로움, 그리고 힘을 널리 알리고, 컴퓨팅 사고가 우리 일상의 자연스러운 일부가 되게 만들어야 한다.


역자 주

추가로 다음과 같은 개념에 대한 설명이 필요 한 것으로 보여 부가 설명을 붙인다.

Computational Thinking이 필요한 경우와 그렇지 않은 경우

필요한 경우:

  • 추상화와 분해가 도움이 되는 복잡한 문제
  • 효율성과 최적화가 중요한 상황
  • 대규모 데이터 처리가 필요한 경우
  • 시스템 설계가 필요한 상황
  • 불확실성 하에서의 계획과 학습이 필요한 경우

한계점/덜 적합한 경우:

  • 순수한 가치 판단이 필요한 상황
  • 감정적/정서적 결정이 중요한 경우
  • 윤리적 판단이 주가 되는 상황
  • 예술적 창작과 같은 순수 창의적 활동
profile
기존 강의에 만족 못했던 사람들을 위한 블로그

0개의 댓글