Cognita Sapiens [847641] · MS 2018 · 쪽지

2024-07-15 21:15:36
조회수 4,155

컴퓨팅 사고력(computational thinking)!

게시글 주소: https://o.orbi.kr/00068742477







 저는 최근에 신경과학 대학원 준비를 위해 '학생설계전공'이라는 제도를 사용하게 되었습니다. 아무래도 제가 다니는 에너지신소재공학과(재료공학)는 하드웨어에 초점이 맞춰져 있기에, 소프트웨어 능력이 중요한 신경과학을 준비하기에는 역부족이라고 생각하여, 스스로 주도적으로 커리큘럼을 짜는 학생설계전공 이라는 제도를 이용하게 되었습니다. 주로 통계학과 컴퓨터공학 관련 내용을 커리큘럼에 넣었습니다.




 제가 이번에 K-MOOC라는 좋은 사이트를 통해서 다양한 소프트웨어에 대한 공부를 굉장히 많이 하고 있습니다. 특히 이번에 '소프트웨어적 사유'라는 제목의 강의를 수강 중인데, 과거 삼반수를 하는 동안 딱 1학기 다닌 부산대에서 수강했던 '컴퓨팅 사고력' 수업과 매우 비슷해서 추억이 새록새록 나더라구요.




 저는 과거 각 학문을 일종의 언어로 보고, 각 학문들은 각자의 관점에서 세상을 서술한다는 내용으로 글을 쓴 바 있습니다. 해당 내용은 이미 제 친구들과 저를 아시는 교수님들에게 많은 공감을 받은 내용입니다.








https://orbi.kr/00068083401






 그런데 제가 이런 생각을 하게 된 계기가 바로 앞서 말씀드린 부산대 컴퓨팅 사고력 수업입니다. 전 이전까지 프로그래밍 '언어'라는 말에 대해서 심각한 의문을 가진 적이 있었습니다. 아니 국어나 영어가 언어지, 무슨 프로그래밍 언어가 언어지?? 그런데 언어는 우리가 평소 사용하는 의도대로, '소통'에 목적이 있습니다. 따라서 사람의 생각과 행동을 컴퓨터에게 전달하는 역할을 하기에 프로그래밍 언어는 언어가 맞다고 생각합니다.




 물론 이전에 국어 비문학 지문으로 비트겐슈타인도 나왔기에 언어철학의 영향을 받기도 했으나, 저를 임계점에서 폭발시킨 계기가 바로 컴퓨팅 사고력 수업이었습니다. 심지어 제가 쓴 전자책 <수국비>에서도 컴퓨터 이야기는 거의 나오지 않지만, 그 책을 쓰게 된 중요한 계기도 이 컴퓨팅 사고력 수업입니다.













 재수를 하다보니, 생각보다 성적이 오르지 않는다는 답답함에 갇힌 적이 있습니다. 간단히 지나가는 말로 이를 화학 선생님께 말씀드렸는데, '너가 유형별로 준비가 안되어있어서 그래요'라는 굉장히 중요한 한 마디를 건네주셨습니다. 이 한 마디로 그간 제가 하던 공부를 성찰하였고, 왜 성적이 오르지 않는지 스스로 그 이유를 찾을 수 있었습니다.




 잠깐 컴퓨터 이야기로 넘어가자면, 제가 최초로 컴퓨터 관련하여 칭찬을 받은 것은 고등학교 정보 시간이었습니다. 그때 처음으로 선생님께 'if'구문에 대해서 배웠는데, 전 자연스럽게 'if 안에 if 구문을 한번 더 넣으면, 정상작동하겠지'라고 생각하고, 선생님께 배우지 않았음에도 그 방법으로 문제를 푼 적이 있었습니다. 정보 선생님께서 제 모습에 굉장히 인상을 깊이 받으셨나봐요, 감사하게도 그걸 잊지 않고 나중에 세부능력특기사항에 기록해주신 것이 기억에 남습니다.




 비록 제가 프로그래밍이나 코딩 관련 수업을 많이 듣지 않았으나, <수국비>를 집필하고 인간이 가진 여러가지 편견이나 오해를 극복하기 위해서 컴퓨터처럼 생각하는 사고력을 자주 활용하였습니다.










 제가 처음으로 '유형별 학습'의 중요성에 대해서 깨달은 후에 다른 친구들과 만나서 이야기를 할때, 유독 제 이야기를 굉장히 빠르게 이해한 사람이 있습니다. 제 고등학교 1년 후배였는데, 문과임에도 불구하고 컴퓨터와 코딩에 내공이 깊은 학생이었습니다. 그 친구의 대답이 인상깊었습니다. '그러니까 공부를 잘 못하는 애들은 알고리즘이 제대로 안짜여있다는 소리죠?'




 컴퓨터에서 알고리즘이란 문제를 푸는 과정을 의미합니다. 그러니까 우리는 어떤 문제가 주어졌을 때, 해당 문제 유형에 맞는 알고리즘을 기억해내서 그대로 실행만 하면 됩니다. 시험 중에 어떤 문제에서 막힌다는 것은, 해당 문제를 푸는 과정을 미리 준비해두지 않았기에 알고리즘이 부실하거나 없다는 소리죠.




 특히 부산대에서 컴퓨팅 사고력을 가르치던 여성 교수님의 능력이 매우 뛰어났었습니다. 모든 강의 내용에 구체적인 근거가 있었으며 논리적으로 이해가 아주 잘 되었습니다. 모든 규칙이 대체 왜 어떤 이유에서 그렇게 되었는지가 명확하였으며 설득력 있었습니다.










 어렴풋이 기억나는 것이 바로 출발점과 도착점의 설정에 대한 문제였습니다. 예컨데 개발자A가 출발점을 a, 도착점을 b라고 설정했다고 가정해봅시다. 만약 컴퓨터 세계에서 출발점과 도착점에 대해서 '반드시 같은 문자로 통일하여야 한다' 라는 규칙이 있다고 생각해봅시다.




 이 규칙은 얼핏 보면 타당해 보이지만 바로 문제가 발생합니다. 매우 긴~ 알고리즘을 작성하는데, 개발자B와 C도 같이 개발한다고 생각해봅시다. 긴 알고리즘을 크게 3가지 부분으로 나누어서 개발자 A,B,C가 협업을 하는데, 출발점과 도착점이 반드시 각각 같은 문자로 통일되어야 하므로 개발자 B의 파트에서 출발점은 개발자 A가 임의로 설정한 b여야 합니다. 그리고 개발자 B는 마찬가지로 무언가 다른 문자로, 예컨데 도착점을 c로 설정했다고 생각해봅시다.




 그러면 그제서야 개발자 C는 자기 일을 시작할 수 있는 것입니다. 개발자 B가 자기 파트의 도착점을 c로 설정하였으므로, 개발자 C는 그제서야 다시 출발점을 c라는 문자로 설정하고 일을 시작합니다. 이렇게 가다보면 결국 개발자 A가 일을 끝내기 전까진 개발자 B는 아무것도 할 수가 없고, 개발자 C는 개발자 B가 일을 끝내기 전까지 강제로 쉬고 있어야 합니다. 얼마나 비효율적입니까!




 때문에 컴퓨터 세계에서는 (구체적으로 기억이 나질 않지만) 출발점과 도착점에 대해서 '순서가 중요하다'라는 규칙을 세웠다고 합니다. 즉, 개발자 A가 출발점을 a로 세우고 도착점을 b로 약속했음에도, 개발자 B는 개발자 A의 작업과 상관없이, 출발점과 도착점을 전혀 다른 1과 2로 세워도 됩니다. 결국 나중에 모든 작업물을 합쳤을 때, 출발점과 도착점에 대해서 단지 '순서'만이 중요하다고 하였기에, 개발자 A가 세운 알고리즘의 도착점 b는 곧장 개발자 B가 세운 출발점 1로 연결되는 것이죠.




 







 이 외에도 컴퓨팅 사고력 수업에서 배운 개념들은 무수히 많이 제 책에 사용되었습니다. 예컨데 '추상화'라는 작업이 있습니다. 이게 뭐냐면 쉽게 말해서, 어떤 사물들의 공통점만 모아서 그걸 단순한 기호나 그림으로 나타낸 것입니다. 우리가 '자동차'를 생각하면 무슨 생각이 듭니까? 백미러부터 시작해서 경고등, 바퀴, 창문, 범퍼 등 다양한 요소들이 생각날 것입니다.




 그런데 우리가 다른 사람에게 자동차를 묘사할 때 일일이 모든 부품들을 다 세세하게 적어야 한다면 굉장히 비효율적일 것입니다. 그래서 우리는 다음과 같이 여러 자동차들의 공통점을 한데 모아서, 비록 자동차끼리 디자인이나 설계, 엔진 방식 등이 다르겠지만 누구나 보아도 '자동차'를 연상할 수 있게끔 단순하게 표시하는 것입니다. 다음 그림처럼 말이죠.




설마 이 그림을 보고 마차나 오토바이를 생각하는 사람은 없을 것입니다

https://www.flaticon.com/kr/free-icon/car_5899542








 추상화는 특히 우리가 수능 수학을 다른 사람에게 설명할 때 자주 등장합니다. 우리는 종종 이렇게 설명합니다. '이 문제는 다항함수의 미분이 중요해서, 우선 다항함수를 정확히 구한 이후에 미분을 통해서 도함수를 통해서 형태를 유추하는 문제야' 라고 한다면, 이는 개념을 추상화한 것입니다. 여기서 구체적으로 실제 문제에 사용된 다항함수가 무엇인지, 도함수가 어떤 형태인지는 전혀 중요하지 않습니다. 일종의 일반화이지요.




 우리는 이렇게 일반화하고 추상화된 논리 형태로 머리에 지식을 저장합니다. 만약에 비슷한 문제가 출제가 되었다면, 동일하게 미분을 통해 도함수를 그리려고 할 것입니다. 이때 이전에 푼 문제의 다항함수가, 이번에 푸는 다항함수와 함수꼴이 크게 다르더라도 전혀 문제가 아닙니다. 단지 '다항함수'라는 큰 카테고리 속에 들어가기만 한다면 우리는 무리없이 동일한 논리와 문제 해결 방법을 동일하게 적용할 수 있을 것입니다.




 컴퓨팅 사고력에서 '분해' 또한 매우 중요한 요소입니다. 한마디로 잘게 쪼개서 문제를 바라본다는 것인데, <수국비>에서 저는 긴 글을 어떻게 잘게 쪼개고, 그 중에서 공통점과 핵심을 찾아야 하는지 혓바닥에 피가 나도록 반복해서 설명해왔습니다. 마찬가지로 수능 수학에서도 이 개념은 중요합니다. 3점이나 4점 문제의 경우, 다양한 방법을 동원해서 한 단계씩 풀어나가는 문제가 많습니다.




 간단한 문제는 그냥 단순한 자물쇠와도 같아서, 단지 그거에 맞는 열쇠 딱 하나만 찾아서 풀어버리면 그만이었습니다. 그런데 높은 난이도의 문제는 자물쇠가 복잡하게 얽혀있습니다. 그런 와중에 우리는 침착하게 과연 어떤 자물쇠를 먼저 풀어야 하는지, 그리고 각 자물쇠에 해당하는 열쇠가 무엇인지 잘 파악을 하기만 한다면 문제를 충분히 풀어낼 수 있습니다. 









 

기업이 채용을 하는 과정에 사용하는 흐름도

https://www.edrawsoft.com/kr/template/hiring-process-flowchart.html






 혹시 이 흐름도 그림을 보고 무슨 생각이 드시나요? 비록 저는 다른 방식으로 수능 국어 공부를 했지만, 열심히 비문학 지문을 읽고 핵심 문장을 중심으로 글의 전개 과정을 이런 도표로 정리하던 제 짝꿍이 생각납니다.




 컴퓨터에서 흐름도는 알고리즘, 문제 해결 과정을 쉽게 눈으로 그 과정을 보기에 좋은 형태로 만든 것입니다. 이 그림만 보면 복잡한 채용의 절차도, 단순하고 쉽게 단계별로 이해를 할 수 있습니다. 크게 고민할 필요도 없이 그냥 흐름도를 순서대로 따라가기만 하면 됩니다. 다만 흐름도를 제대로 작성할 때 사고력이 엄청나게 요구된다는 점이 중요하지만요.










 컴퓨팅 사고력을 배우면서 인간의 뇌와 가장 큰 차이점을 느낀 부분은 바로 '하드웨어의 변형'입니다. 컴퓨터에 어떤 소프트웨어를 설치했다고 해서 컴퓨터의 트랜지스터가 갑자기 하나님이 나타나서 쏙 빼서 다른 트랜지스터로 넣거나 하지 않습니다.




 즉, 컴퓨터는 하드웨어와 소프트웨어가 엄격히 분리되어 있으며, 따로 놉니다. 그런데 인간의 뇌는 다릅니다. 인간의 지식은 시냅스라는 형태로 저장되어 있으며, 이 시냅스의 조합과 구조에 따라서 우리의 생각과 사고 과정이 달라집니다. 극단적으로 사고를 겪는다면, 시냅스 구조가 헝클어져서 전혀 이상하고 엉뚱한 결론을 내리거나 아예 문제를 풀지 못할 수도 있습니다.




 때문에 우리는 공부를 '빡세게'해야 합니다. 언제까지? 시냅스 회로가 변화 할 때까지! 단순히 선생님이 앞에서 설명하는 내용을 당장 이해했고 고개를 끄덕였다고 해서 여러분의 지식이 되는 것이 아닙니다. 반드시 따라해보아야 합니다. 근데 웃긴게 막상 따라해보려고 하면 바로 막히는 경우가 많습니다. 우리가 컴퓨터였다면 선생님이 입력한 내용 그대로 똑같은 과정을 수행할 수 있었겠지만, 인간의 사고과정은 하드웨어 구조의 지배를 받기에 그 문자 그대로도 단단한 하드웨어를 변경시키기 위해 많은 노력과 시간을 쏟아부어야 합니다.




 '양적 축적이 질적 변화를 일으킨다'라는 말이 있습니다. 저는 이 말을 대단히 좋아합니다. 앞서 설명한 바와 같이 우리의 뇌를 바꾸는 데에는 한 세월의 노력과 공이 필요합니다. 즉, 마치 일차 함수처럼 우리가 정확히 공부한 양 만큼 성적으로 곧장 반영되지 않고, 계속 성적이 정체되다가 어느 순간 팍 올라가는 시점이 있습니다.




 저 또한 실제로 그 일을 겪어보았습니다. 그 덕분에 저는 평생동안 수학 2등급을 한 번도 맞아본 적이 없습니다. 항상 3~4등급을 왔다갔다 하다가 1등급을 찍기 시작했고, 그 이후에는 쭉 1등급을 유지했거든요.




 지금 당장 성적이 오르지 않는다고 결코 노력을 게을리하지 마시길 바랍니다. 어차피 노력을 안하면 성적이 오를 리가 없습니다. 우리가 보이지 않는 노력을 하는 동안 머리 속에서는 시냅스 회로들이 열심히 수정되고 있고, 결과적으로 다양한 시냅스 회로들이 잘 정립됨에 따라서 그 순간부터 성적이 오를 것입니다.










<수국비 상>

https://docs.orbi.kr/docs/7325/


 


 <수국비 하>

https://docs.orbi.kr/docs/7327/









알고리즘 학습법 


https://orbi.kr/00019632421 - 1편 점검하기

https://orbi.kr/00054952399 - 2편 유형별 학습

https://orbi.kr/00055044113 - 3편 시간차 훈련

https://orbi.kr/00055113906 - 4편 요약과 마무리






사고력이란 무엇인가



https://orbi.kr/00056551816 - 1편 바둑과 수싸움

https://orbi.kr/00056735841 - 2편 예절

https://orbi.kr/00056781109 - 3편 자유로운 직업세계

https://orbi.kr/00056882015 - 4편 따라하기

https://orbi.kr/00057164650 - 5편 어린 놈들이 약아서

https://orbi.kr/00057384472 - 6편 자기 스스로를 알아차리기

https://orbi.kr/00057614203 - 7편 체력분배

https://orbi.kr/00057650663 - 8편 수학적 상상력

https://orbi.kr/00057786940 - 9편 편견깨기

https://orbi.kr/00058147642 - 10편 시냅스, 알고리즘의 강화

https://orbi.kr/00060975821 - 11편 자문자답

https://orbi.kr/00061702648 - 12편 '박영진 이혼전문변호사'를 통해 재밌게 알아보는 법률 이야기

https://orbi.kr/00062050418 - 13편 수능 국어 공부

https://orbi.kr/00062206444 - 14편 현우진이 말하는 독해력과 사고력

https://orbi.kr/00062298282 - 15편 교수 면담

https://orbi.kr/00062328444 - 16편 관세법과 일관성

https://orbi.kr/00062406700 - 17편 말하기 공부법

https://orbi.kr/00062419084 - 18편 공부 못하면서 허세 좀 부리지 마십시오

https://orbi.kr/00062495541 - 19편 법조인에게도 필요한 수능 국어 비문학 독해력!

https://orbi.kr/00062583015 - 20편 - 전쟁에도 유형이 있다

https://orbi.kr/00062643940 - 21편 국어, 수학, 과탐 공부 이렇게 해보십시오

https://orbi.kr/00062818762 - 22편 똑똑하고 재능이 있다는 것은 노력할 수 있다는 것일까요?

https://orbi.kr/00063239512 - 23편 어려운 문제도 잘게 쪼개면 풀 수 있다!

https://orbi.kr/00064157242 - 24편 리터러시(문해력, 독해력)이란 무엇인가

https://orbi.kr/00064692514 - 25편 단순히 많은 학습 시간은 배신을 할 수 있다!

https://orbi.kr/00064934387 - 26편 대한민국은 강대국이 될 자격이 없다

https://orbi.kr/00065089413 - 27편 본질 feat. 반추 동물의 생존

https://orbi.kr/00067574982 - 28편 추론이란 무엇인가

https://orbi.kr/00067699093 - 29편 천재에게 과외 받지 마십시오

https://orbi.kr/00067722206 - 30편 중요한 것으로 마음을 가득 채우세요

https://orbi.kr/00067987848 - 31편 국어와 영어를 잘하는 법 - 중요한 것에 밑줄치고 집중하라!

https://orbi.kr/00068049459 - 32편 수동적으로 넣기만 하지 말고, 능동적으로 꺼내는 연습도 해야합니다

https://orbi.kr/00068083401 - 33편 이 세상은 '언어'로 이루어져 있지 않을까?

https://orbi.kr/00068269691 - 34편 최고를 경험하라!

- 35편 컴퓨팅 사고력(computational thinking)!






rare-세종대왕

0 XDK (+0)

  1. 유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.

  • ZmxhZw== · 1091217 · 07/18 11:19 · MS 2021

    개발자 A, B, C 협업 문제에서 말하는 “문자” 라는 단어가 state를 의미하는 것인가요, 혹은 언어 자체를 의미하나요

  • Cognita Sapiens · 847641 · 07/19 00:54 · MS 2018

    제가 몇 년 지난 이야기라서 정확히 기억이 안나네요. 또한 컴퓨터과학 또한 최근에 공부를 하고 있는 상태여서 제 지식이 얕아서 질문자가 더 잘 아실듯? 한데 혹시 아신다면 구체적인 설명 해주시면 감사하겠습니다. state와 언어 자체 라는 말의 의미가 이해가 안가네요;;; ㅎㅎ

    최대한 기억을 하자면, '같은 것'이라고 한 것으로 기억합니다. 당시 교수님이 굉장히 간단하게 설명을 해주셨는데, 작업자 A,B,C가 있는데 만약 '같은 것(당시에 예시로 같은 모양의 알파벳을 예시로 듦. 작업자 A가 설정한 끝점을 b라고 한다면, 작업자 B는 그에 따라 시작점을 b로 한다면~)' 으로 시작점과 끝점을 설정한다면, 앞선 작업자의 작업이 끝날 때까지 뒤에 있는 작업자들은 일하지 못한다

    일반적인 상식으로는 마치 레고를 끼워 맞추듯이, 우리가 생각하기에는 각 알고리즘 파트의 시작점과 끝점이 '동일한 것(혹은 동일한 모양의 문자)'로 해야지, 나중에 알고리즘 덩어리를 합칠 때 자기 짝을 잘 맞춰서 찾아가리라 생각하지만

    실제 컴퓨터 작업을 할 때는 굳이 다른 사람들이 시작점과 끝점을 어떤 것으로 설정한 것에 관계없이, 오로지 순서에만 영향을 받는다고 설명해주셨습니다. 본문에 든 예시는 알고리즘의 입력점과 출력점이 각각 1개씩이라서 다소 적절한 예시는 아닌데

    만약 개발자 A가 만든 알고리즘의 끝점이 a와 b로 두 개이고, 개발자 B가 만든 알고리즘의 시작점이 1과 2로 두 개라면, 비록 a와 1은 다른 모양의 문자이고 b와 2도 다른 모양의 문자이지만, 앞서 설명한 컴퓨터 세계의 질서에 따라 a는 1에 연결되고, b는 2에 연결된다고 설명해주셨습니다

    당시 들었던 컴퓨팅 사고력은 1학년 1학기 학부생을 위한 과목이었기 때문에 더 이상 깊이 들어가지는 않으셔서 질문에 대한 답을 적절히 달아드리기가 힘드네요 아직 지식이 짧아서