큐펭스토리
파이썬 강의, 프로그래밍 문제 풀이, 지식 공유 및 정리용
Computational Thinking

단어를 사용하는 사람마다 (심지어 교수님들까지도) Computational Thinking을 정의하는 방향이 다르긴 하지만 CS101에서 말하는 아래 4가지를 포함한 "무언가"를 설명하고 있다.


 - 컴퓨터를 이용한 문제 해결

4색 문제 ( wikipedia , namuwiki ) 와 같이 컴퓨터를 이용해서 실생활 문제를 해결할 수 있는 실마리를 찾을 수 있다.


4가지 색깔이면 충분히 세계 지도를 그릴 수 있다


- 문제의 추상화 ( Abstraction )

서로 다르다고 생각되는 문제들을 추상화시켜보면 사실상 같은 형식을 갖고 있어서 해법이 동일한 경우가 있다. 구체적인 구현은 관심이 없고 서식/형식/포맷 등만 가져와서 생각해보는 방식이다. 매우 복잡한 시스템 구현에 있어서 추상화 개념은 굉장히 소중한 존재로 다가온다. 문제의 핵심 흐름만을 가져와서 간단히 줄여보면 해법을 설계하기 쉬워진다. 나중에 하향식 설계 ( Top-down Design ) 을 설명하면서 추가하도록 하겠다.
Link: 추상 자료형( wikipedia ), 추상화( namuwiki )


프로그래밍을 통해 프랙탈을 만들 수 있지만, 추상화 그림을 설명하고자 했던 것은 아니다



- 사고의 체계화

단어를 직독직해하면서 [컴퓨터와 같이 생각하라!] 라고 해석하면 안된다. 컴퓨터의 자료 처리 방식처럼 01100011 과 같이 생각하는 것이 아니다. [논리적 사고], [계산적 사고], [체계적 사고], [소프트웨어적 사고] 등으로 번역하는 것이 옳은 방향이다. 사고의 흐름 자체를 잡아가는 과정을 이 단계에서 배운다.
요리 레시피를 만들어가는 과정이라고 생각하면 도움이 될지 모르겠다. 계란빵을 만들기 위해 필요한 재료와 과정을 설계하는 것과 프로그래밍을 통해 문제를 해결하는 과정이나 크게 다를 바가 없다. 요리의 과정을 따지듯, 컴퓨터의 사고 흐름 과정을 따지면서 체계화시킬 수 있다.


인간은 이처럼 생각하지 않는다



- 알고리즘 설계

컴퓨터 등장 이전의 과학은 수학적인 언어로 기술된 정리, 공식 등을 발견하고 증명하는 것을 주로 탐구하고 연구했다. (카더라) 컴퓨터에서 이러한 사고 흐름을 정리해둔 것을 알고리즘( wikipedia , namuwiki )이라고 부른다. 컴퓨터 과학에서는 알고리즘의 설계와 해석, 증명 등을 연구했었다. 우리 앞세대에선 이 부분 연구가 굉장히 활발히 이뤄졌던 것으로 알고 있다. 이산 세계에서의 수학적 센스를 요구하는 경우가 많기에 코딩 능력보다는 수학적인 능력이 더 중요시된다. 물론 수학적 능력까지 포함해서 프로그래밍 능력을 판별하는 것이 옳을 것이다. 프로그램의 설계 자체에 영향을 주기 때문이다. 단적인 예시를 들어 1부터 n까지 더하는 계산을 컴퓨터에게 시킬 때, 반복문을 사용해 0+1+2+3+4+5+...+n을 계산하는 경우가 있고, 알려진 유명한 공식을 통해 n*(n+1)/2 로 곧장 계산하는 경우가 있을 것이다. 계산 시간상으로 당연히 후자가 좋다. 이와 같이 효율적인 알고리즘을 생각해내는 과정을 배울 것이다.



순서도가 익숙해지면 이와 같은 유머도 이해할 수 있다



기본적으로 컴퓨터가 가지는 특성들을 이해하고 문제 해결에 이를 이용하게끔 배우는 과정이다. 이런 전반적인 사고 전개를 다루는 것이 Computational thinking의 핵심이다. 지도 교수님 말씀을 빌리자면, Computational thinking은 Loop를 찾는 과정이라고 한다. 컴퓨터가 사람보다 뛰어난 부분 중 하나는 단순 반복 계산을 굉장히 빠르게 수행하는 것이다. 어떤 문제를 해결하는 과정 중에 반복되는 패턴을 찾을 수 있다면 그 문제를 해결하는 데 있어 컴퓨터를 사용하면 편리할 것이다. 또한 그 반복 패턴이 아무리 많아져도 유한하다면 결국엔 컴퓨터가 해결하고야 말것이다. 즉 작업의 크기, 스케일의 문제로부터 자유로와진다. 예를 들어, 만화 캐릭터를 디자인해놓고 비슷한 패턴을 양산해내는 작업은 사람이 손으로 수행하는 것보다는 컴퓨터가 훨씬 빠르고 정확할 것이다. 활자 책을 찍어내는 일도 사람이 일일이 쓰는 것보다는 기계와 컴퓨터가 훨씬 빠르고 정확하게 해결할 수 있다. 이러한 Loop를 찾아내는 사고 과정을 Computational thinking 이라고 정의한다.

  Comment ,     Trackback