[개발자 아빠의 교육실험]⑥ 쉬운 것은 어렵고, 어려운 것은 쉽다

2019.03.19 12:00
”최고의 시절이자 최악의 시절, 지혜의 시대이자 어리석음의 시대     찰스 디킨슨의 소설  ≪두 도시 이야기≫ 는 시작한다. 인간과 기계의 역할 구분에 혼란이 생긴 현재에 대해서도 여전히 유효한 은유로 보인다.
”최고의 시절이자 최악의 시절, 지혜의 시대이자 어리석음의 시대"  찰스 디킨슨의 소설  ≪두 도시 이야기≫ 는 시작한다. 인간과 기계의 역할 구분에 혼란이 생긴 현재에 대해서도 여전히 유효한 은유로 보인다.

코딩 교육에 대한 아이의 반응이 궁금했다. 필자에게 교육 경험은 사실상 없는 것이나 다름없다. 대학 시절 과외 아르바이트와 사회 진출 후 비정기적인 사내 기술 교육 강의를 몇 시간 해본 것이 전부다. 가르친다는 것은 가보지 않은 길을 걷는 것과 다르지 않다. 방향을 놓치기 쉽다는 말이다. 아이의 반응 끊임없이 확인하고, 그것을 교안에 되먹임 해야 하는 이유다. 첫째 둘째 교육에서 언플러그드 교육 방식은 이미 삐걱거림이 드러났는데, 이 방식을 계속 활용할지도 빨리 판단해야만 했다.

 

"초코 잼 바르는 거, 그거는 별로야" 

 

 

두 번째 교육을 한 날 저녁을 먹으며 아이에게 물었다. 코딩 공부 재밌냐고. 아이는 답했다. “엔트리는 재밌는 것 같다”라고. 다만 “근데, 초코 잼 바르는 거, 그거 쓰는 거는 별로야”라는 말도 빠트리지 않았다. 대놓고 투덜대지 않지만 감정은 이미 어투에 충분히 묻어 나왔다. 재미는 없고 짜증만 난다는 말이다.

 

먼저 일부러 어수룩하게 초코 잼을 바르며 조롱하는 듯 행동했던 것을 반성했다. 작정하고 부족함을 지적하며 놀리는데 짜증이 나지 않는 것이 오히려 이상할 것이다. 그런데, 그게 문제의 핵심일까? 놀림을 당한다는 느낌을 주지 않았다면 아이가 언플러그드 코딩을 흥미롭게 느꼈을까? 문제의 원인은 재미 혹은 짜증, 즉 1차원적 감정의 영역에서만 머무르지 않을 것 같다. 혹시 언플러그드 코딩 방식에 방법론적 한계가 존재하는지 검토가 필요했다. 

 

비운의 천재 앨런 튜링이 제안한 튜링 기계. 현대 컴퓨터의 개념의 시초로 평가된다. 결정론적으로 동작하므로 동일한 동작 규칙을 실행시킨 결과는 항상 동일해야 한다. 마찬가지로 동일한 소프트웨어를 실행시킨 컴퓨터는 매번 같은 결과를 가져와야 한다.
비운의 천재 앨런 튜링이 제안한 튜링 기계. 현대 컴퓨터의 개념의 시초로 평가된다. 결정론적으로 동작하므로 동일한 동작 규칙을 실행시킨 결과는 항상 동일해야 한다. 마찬가지로 동일한 소프트웨어를 실행시킨 컴퓨터는 매번 같은 결과를 가져와야 한다.

코딩은 일종의 지침서다. 기계 혹은 컴퓨터가 해야 하는 일을 순서대로 기술하고 지시하는 것에 다름 아니다. 이때 컴퓨터와 소통은 미리 약속한 방식, 각종 프로그래밍 언어를 이용해 이뤄지는데, 이 언어들이 공통적으로 가지는 속성은 바로 명확성이다. 말하자면, 지침 각각은 지극히 단순하여 별다른 의미 해석이 일어나지 않아야 한다는 것이다. '1 + 1'이라는 수학적 지침의 의미가 2 이외의 결과로 이어지는 것을 생각하기 어렵다. 만약 그럴 수 있다면, 유사 이래 쌓아올린 인류의 과학적 성과를 모두 부정해야만 하는 상황이 펼쳐진다.

 

반면, 인간의 언어는 포괄적이고 함축적이다. 일종의 경제성의 원리가 적용되는 방향으로 언어 자체가 진화해왔기 때문이다. 길고 자세히 말하는 것보다는 짧게 말하는 게 아무래도 경제적이다. 맹수가 나타난 상황을 가정하면 더욱 그러하다. 도망쳐 한마디면 족하다. 호랑이가 나타났고, 12시 방향에서 왔으며, 우리가 가진 무기로 막대기와 돌이 있는데, 싸워서 이길 가능성이 없으니, 마지막으로 반대인 6시 방향으로 도망가자고 구구절절 말하기에 상황은 너무 급박하다. 인간의 언어가 그렇게 진화했다면, 인간이라는 종은 반대로 도태되어 화석으로나 남아 있을 것이다.

 

언플러그드 코딩을 활용한 코딩 교육의 방법론적 한계는 인간의 언어에 많건 적건 의존한다는 것에서부터 출발하는 것으로 보인다. 포괄적인 의미를 가진 지침을 펼쳐 해석해야 하는데, 여기에 문화적, 사회적 맥락을 이용해 의미를 확장해야 한다. 의미 확장 과정에 주관이 개입한다는 얘기다. 지침의 대상자 혹은 수행자에 따라 결과가 달라질 수밖에 없는 이유다. 알고리즘 조건 중 하나인 명확성을 정면으로 위반하는 것이다.

 

교육 방법도 문제다. 앞서 시도한 방식은 정확한 설명서 시험(Exact Instructions Challenge)을 차용한 것인데, 문제 해결 과정을 구성해 나가는 것이라기보다 해결 지침의 미완결성을 드러내는 방향으로 짜여 있다. 어떠한 지침을 만들어 오더라도 작정하고 빈틈을 지적하자면 끝이 없다. '답정너'와 다르지 않다. 이런 경우를 이미 많이 경험해 왔다. 회사에서 작성하는 발표 자료와 그 보고 과정을 떠올리면 이해가 쉬울 것이다. 상사의 심기가 불편한 날이라면 그 어떠한 보고서라도 난도질당하기 일쑤다. 하다 하다 못해 폰트 크기나 종류까지도 문제로 삼는 경우도 종종 경험한다.    

 

언플러그드 코딩 방식의 교육은 코딩을 전혀 경험해보지 않은 아이에게 문제 해결의 절차로서 코딩의 의미만 전달하면 그 효과는 충분하다고 본다. 인간과 기계가 사용하는 언어의 특성 차이를 뛰어넘는 방식을 찾기도 어려울 것으로 보이기 때문이다. 전제와 조건을 추가하여 인간 언어의 모호함을 보완할 수도 있다. 잼을 바른다는 명령에 이미 칼을 들고 크래커의 넓은 면에 균일하게 바른다는 의미를 포함시켜 버리는 식이다. 하지만, 이 경우도 어느 수준까지 전제와 조건을 추가할 것인가에 대한 문제는 여전히 남는다. 게다가 명령 자체도 복잡해진다. 이렇듯 인간에게 쉬운 것은 기계에게 어렵고, 기계에게 쉬운 것은 인간에게 어려운 법이다. 유명한 '모라벡의 역설'이다. 역설을 극복하는 것보다 어쩌면 변태스러울 정도로 폰트에만 집착하는 상사의 취향을 찾아 보고서에 적용하는 게 차라리 빠를 것이다. 그래서 언플러그드 코딩 방식의 교육은 더는 진행하지 않기로 했다.

 

 

첫 "Hello world!"를 경험하다

 

어떤 프로그래밍을 배우든 처음 예제는 ″Hello world″ 출력일 때가 많다. 이는 1978년 C와 UNIX를 개발한 데니스 리치와 브라이언 커니핸 두 사람이 쓴 교재에서 유래됐다. 사진은  당시의 필기 버전. ″Hello world!″를 출력하면 코딩의 작은 역사가 시작됐다고 말할 수 있다. 위키피디아 제공
어떤 프로그래밍을 배우든 처음 예제는 "Hello world" 출력일 때가 많다. 이는 1978년 C와 UNIX를 개발한 데니스 리치와 브라이언 커니핸 두 사람이 쓴 교재에서 유래됐다. 사진은 당시의 필기 버전. "Hello world!"를 출력하면 코딩의 작은 역사가 시작됐다고 말할 수 있다. 위키피디아 제공

대신 엔트리를 이용한 전통적인 방식의 코딩 교육에 더 많은 시간을 할애하기로 했다. 당장 세 번째 교육부터 그렇게 진행했는데, 예상한 바와 같이 아이의 몰입도는 훨씬 높아졌음을 느낄 수 있었다. 뭔가 만들고 결과를 눈으로 확인하는 게 보다 이끄는 힘이 있기 때문이다. 구체성의 힘이다. 아직은 추상적인 것보다 구체적인 것에 더 직접적으로 다가가는 나이인 것 같다. 

 

이번 시간의 코딩은 강아지와 엔트리봇이 서로 대화하는 상황으로 구성했다. 흐름 제어와 다중 스레드, 오브젝트의 속성에 대한 이해를 녹여내고자 했다.  모두 엔트리 코딩에서 기본을 이루고 있는 것들이다. 흐름 제어는 분기나 반복 등 명령의 순서를 조정하는 것이고, 다중 스레드는 두 가지 이상의 동작을 동시에 진행하는 것이다. 여기에 그림의 방향과 같이 속성을 부여해야 엔트리 오브젝트의 시각적 표현이 가능해진다. 흐름 제어 중 가장 직관적으로 이해하기 쉬운 무한 반복문을 이용하여 엔트리봇이 계속 달리는 모습을 구현했고, 이와는 다른 스레드를 생성해 강아지와 대화하는 과정을 만들었다. 다행히 아이는 큰 어려움 없이 코딩에 필요한 블록의 의미를 이해하는 것으로 보였다.

 

시계를 보니 10분가량 남았다. 다시 아이를 괴롭히고 싶은 마음이 생겼다. 어디까지 이했는지 확인해보고 싶었다. 코딩 전체를 지우고 아이 스스로 만들어보라고 했다. 한숨을 내쉴 것으로 생각했으나, 예상은 빗나갔다. 아이는 서툰 마우스 조작이지만 스스로 해내고 있었다. 이해하고 만드는 것인지 아닌지는 알 수 없다. 몇 줄 안되는 코드인 만큼 외워서 했을 가능성도 배제하지 못한다. 하지만 그건 중요한 문제가 아니다. 스스로 처음 코드를 만든 순간이다. 아이가 “헬로 월드(Hello, World)!”를 경험한 것이다.

 

아이가 최초로 작성한 코딩을 실행한 화면이다. 마우스 조작이 서툴러 강아지가 엔트리봇보다 크게 만들어졌다.
아이가 최초로 작성한 코딩을 실행한 화면이다. 마우스 조작이 서툴러 강아지가 엔트리봇보다 크게 만들어졌다.

아이가 코딩하는 모습을 바라보던 중 스치듯 한 생각이 지나갔다. 코딩 교육은 아내의 권유에서 시작됐다. 육아 휴직 동안 전공을 살려 아이와의 시간을 만들어 보라는 것이었다. 분명 함께 보내는 시간에 비례하여 아이와의 접점이 증가할 것이다. 좋은 목적과 과정이다. 그런데, 속은 느낌이다. 아내는 커피를 마시며 우아하게 웹서핑을 즐기고 계시다. 온전한 자신만의 시간을 만들어낸 것이다. 아내의 큰 그림이라는 의혹을 지울 수 없다. 포괄적이고 함축적인 인간의 언어를 말 그대로 받아들이면 이렇게 의도하지 않은 결과가 나오는 것이다.

 

오늘의 한 줄 요약.

말을 액면 그대로 믿는 게 무섭다. 

 

도움자료

3일 차 교안을 공유합니다. 

https://drive.google.com/drive/folders/1qSn9cx-7Py1z7ow_mmcpMa3NPORrsLIX

 

※필자소개

김기산(calculmount@gmail.com) 기업에서 IT 디바이스 소프트웨어 개발자로 일하고 있다. 대학에서 전자공학을 전공하고 20년 가까이 리눅스 개발자로 지내다가 뜻밖의 계기로 육아휴직을 냈다. 지난해 한층 강화된 '아빠의 달' 제도의 수혜자로, 9살 아이와 스킨십을 늘리며 복지 확대의 긍정적인 면을 몸소 깨닫고 있다.

 

메일로 더 많은 기사를 받아보세요!

댓글 0

작성하기

    의견쓰기 폼
    0/150