문제 해결을 위한 과학적 사고
현실 세계의 문제를 분석하여 해결책을 찾는 과학적 사고법을 컴퓨테이셔널 씽킹 (computational thinking) 이라 하며 이렇게 설계한 해결책을 컴퓨터의 명령어로 작성하는 것을 컴퓨터 프로그래밍이라 합니다.
즉, 작은 문제로 분해하고, 문제의 패턴을 발견하고, 어떤 데이터를 이용할지 결정하고, 문제를 일반화하고 모델링할 수 있는지를 찾는 과정이죠.
컴퓨테이셔널 씽킹
분해 : 복잡한 문제를 작은 문제로 나눕니다.
패턴 인식 : 문제 안에서 유사성을 발견합니다.
추상화 : 문제의 핵심에만 집중하고, 부차적인 것은 제외합니다.
알고리즘 : 이렇게 정의한 문제를 해결하는 절차입니다. (일반화와 모델링은 여기에 포함됩니다.)
복잡한 문제를 해결하는 것은 어렵지만, 작은 문제를 해결하기는 비교적 쉽습니다. 작은 문제를 해결하다 보면 복잡한 문제를 해결하게 됩니다. 컴퓨터 공학에서 배우는 알고리즘은 대부분 정형화된 문제에 대해 검증된 해법을 제시하는 과목입니다.
현실에서 컴퓨터로 해결하려는 문제는 정형화된 문제가 아니라 비정형화된 문제가 더 많습니다. 그래서 비정형화된 문제를 컴퓨터로 해결하는 과정, 즉 문제를 이해하고 분해, 패턴 인식, 추상화, 알고리즘 작성까지를 컴퓨테이셔널 씽킹이라고 합니다.
컴퓨테이셔널 씽킹과 알고리즘(Algorithm)이란?
컴퓨터 시스템은 하드웨어와 소프트웨어로 이뤄져 있으며, 이러한 컴퓨터 시스템이 문제를 해결하는 단위가 됩니다. 때문에 본래의 추상적 문제를 컴퓨터 시스템 단위로 분해하고, 이들이 모여서 본래의 커다란 문제를 해결하도록 하는 전략도 문제를 분석하고 해결책을 찾는 과학적 사고법 즉 컴퓨테이셔널 씽킹이라 볼 수 있습니다. 알고리즘이라는 것도 컴퓨테이셔널 씽킹이라 볼 수 있습니다. 왜냐하면 추상적이지 않은 즉 구체적인 요구사항(문제)를 컴퓨터라는 자원을 사용(소모)하여 수행할 수 있는 일련의 과정을 구체화하는 것 역시 과학적 사고법이고 이를 가리켜 알고리즘이라 하기 때문입니다.
무인 자동차를 예를 들어보면 “사람의 눈과 귀 역할을 하는 카메라와 센서를 장착해서 주변 상황을 인식하게 하고”이것이 하나의 컴퓨터 시스템 단위이고, “팔과 다리 역할을 하는 각종 제어 장치를 만들어서 사람 없이 움직이게 합니다.”이 역시도 하나의 컴퓨터 시스템 단위입니다. 사람의 눈과 귀 역할을 하는 카메라와 센서가 컴퓨터 시스템의 하드웨어이며, 주변 상황을 인식하게 하는 문제(요구사항)을 소프트웨어라고 볼 수 있습니다. 그리고 주변 상황 인식이라는 구체화된 문제를 수행할 수 있는 과정을 구체화하는 단계를 알고리즘이라 합니다.
컴퓨터로 문제를 해결할 수 있지만, 그렇게 하려면
먼저 문제 자체를 이해해야 합니다. 문제를 이해해야
컴퓨터로 문제를 해결할 수 있겠죠. 이를 컴퓨테이셔널 씽킹이라고 합니다.
컴퓨테이셔널 씽킹은 4가지로 되어 있습니다.
-. 분해: 복잡한 문제를 작은 문제로 나눕니다.
-. 패턴 인식: 문제 안에서 유사성을 발견합니다.
-. 추상화: 문제의 핵심에만 집중하고, 부차적인 것은 제외합니다.
-. 알고리즘: 이렇게 정의한 문제를 해결하는 절차입니다.
복잡한 문제를 해결하는 것은 어렵지만, 작은 문제를 해결하는 것은 비교적 쉬습니다. 작은 문제를 하나씩 해결하다보면 복잡한 문제를 해결하게 됩니다.
컴퓨터 공학에서 배우는 알고리즘은 대부분 정형화된 문제에 대한 검증된 해법을 제시하는 과목입니다.
현실에서 컴퓨터로 해결하려는 문제는 정형화된 문제가 아니라 비정형화된 문제가 더 많습니다. 그래서 비정형화된 문제를 컴퓨터로 해결하는 과정, 즉, 문제를 이해하고, 분해, 패턴 인식, 추상화, 알고리즘 작성까지를 컴퓨터테이셔널 씽킹이라고 합니다.
컴퓨테이셔널 씽킹 = 알고리즘으로 이해하면 컴퓨테이셔널 씽킹을 너무 좁은 의미로 해석한 게 아닐까 싶습니다.
구글에서 만든 컴퓨테이셔널 씽킹 소개 영상이 있습니다.
https://youtu.be/SVVB5RQfYxk
알고리즘은 문제를 푸는 방법이고
computational thinking은
multiple abstraction 의 방법론으로 알고 있습니다
섣불리 일반화 해본다면;;ㅋㅋ
알고리즘의 주체는 컴퓨터이고
computational thinking의 주체는 사람입니다
그리고 알고리즘의 목적은 문제를 풀기 위한것이지만
computational thinking의 문제는 단순히 문제를 푸는것보다 더큰
그냥 사람간의 커뮤니케이션 등등 아무거나 주제가 문제가 아닐수도
있습니다
제가 주관적으로 생각해봤을 때
우리가 리얼월드를 봤을 때 느끼는 생각의 방식
만약 한국인의 예를 들면 그냥 아무 때나 출근할 때나 등등 생각 없이
나는 생각의 방법론을
computational thinking을 사용하여 이어나가는 것입니다.
이렇게 예기하면 욕 처먹을 게 분명하니까
객관적으로 욕 안처먹게 주관적으로 말한다면
알고리즘을 짤 때
왜 알고리즘을 짜는지
어떻게 알고리즘을 짜는지
이 알고리즘의 한계는 무엇인지
알고리즘이 필요한지
알고리즘을 짜야한다는 생각이 왜들었는지
컴퓨터가 이 알고리즘을 사용할 수 있는지
사용하게 하려면 어떻게 해야하는지
에 관한 것을 초딩들한테 교육하려고 만든 개념 같습니다. (저는초딩이아닙니다 오해하지마세요^^)
추가로 자넷윙이라는 마이크로소프트 어느부서 부사장이 주장한 개념
입니다.
'programming > Computer' 카테고리의 다른 글
HTTP (0) | 2020.08.19 |
---|---|
cmd 단축키 모음 (0) | 2020.06.12 |
Algorithm 이란? (0) | 2020.05.30 |
컴퓨터 메모리 단위 (0) | 2019.07.12 |
이진수, 십진수, 16진수 (0) | 2019.07.10 |