[개발자 아빠의 교육실험]⑨계산하는 기계 배우기

김기산 2019. 4. 30. 12:00
음성재생 설정
번역beta Translated by kaka i
글자크기 설정 파란원을 좌우로 움직이시면 글자크기가 변경 됩니다.

이 글자크기로 변경됩니다.

(예시) 가장 빠른 뉴스가 있고 다양한 정보, 쌍방향 소통이 숨쉬는 다음뉴스를 만나보세요. 다음뉴스는 국내외 주요이슈와 실시간 속보, 문화생활 및 다양한 분야의 뉴스를 입체적으로 전달하고 있습니다.

미니멀리즘 프로그래밍 언어 BrainF*ck. 언뜻 보면 메소포타미아 문명의 쐐기 문자 점토판처럼 보이지만 엄연히 코드다. 단 8개의 문자(더하기+빼기-왼쪽화살표<오른쪽화살표>왼쪽대괄호[오른쪽대괄호 ]쉼표,마침표)로 구성되는데, 무려 컴퓨터가 할 수 있는 모든 계산을 작성할 수 있다. 계산하는 기계라는 컴퓨터의 본질에 가장 충실한 언어라 볼 수 있다. 하지만 앞으로 필자가 사용할 일은 결코 없을 듯하다.

요즘 동네 도서관이 많이 생겨나고 있다. 주로 기초자치단체에서 활발히 만들고 있는데, 걸어갈 수 있는 거리에 도서관이 들어온다는 것은 언제나 반가운 일이다. 특히 시간의 빈 구멍이 많은 휴직자 입장에서는 더욱 그러하다.

늘어나는 도서관의 수만큼이나 열람실의 풍경도 변하고 있다. 육중한 수험서는 날렵한 노트북 컴퓨터에 그 자리를 내어준지 오래다. 이삼십 대 열람실 이용자 대부분이 인강(인터넷 강의)을 시청하고 있기 때문이다. 심지어 전원 장치가 갖춰진 자리는 빈 곳을 쉽게 찾기 어려울 만큼 자리 경쟁도 치열하다.

문자는 컴퓨터가 발명되기 전까지 가장 디지털적인 도구였다. 문자는 많은 정보를 압축하여 저장할 수 있다. 중세 이전 대를 이어가던 구전이 책으로 대체된 이유다. 그런데, 이제는 오히려 책이 컴퓨터로 빠르게 대체되고 있다. 컴퓨터야말로 가장 디지털적인 도구이기 때문이다.

책만 그런 신세가 된 것은 아니다. 휴대용 카세트 플레이어는 MP3 플레이어로 교체됐다. 이마저도 스마트폰으로 통합됐다. 열쇠도 마찬가지다. IC 카드나 지문과 같은 생체 인식 방식을 사용하는 게 이제는 자연스럽다. 이 모두 일상이 디지털화되고 있는 현상이다. 외출할 때 스마트폰 등 디지털 장치 두세 개쯤 휴대하는 것이 전혀 이상하지 않은 것이 현대인의 모습이다.

이러한 디지털 장치의 핵심에는 컴퓨터가 있다. 스마트폰에도, 신용 카드 단말기에도, 심지어 엘리베이터에도 컴퓨터가 이용된다. 컴퓨터를 이용한 정보 처리가 효율적이고 정확하기 때문이다. 도어록의 경우도 마찬가지다. IC 카드의 암호를 정확하게 해독해 문을 열지 여부를 빠르게 판단해야 한다. 컴퓨터가 가진 빠르고 정확한 계산 능력을 이용하기에 가능한 것이다.

<캡션2> 컴퓨터가 사람이었던 시절. NASA의 우주 개발 과정 초기에는 로켓 발사 및 탄도, 연료 소비 등에 대한 계산이 사람의 노동으로 이루어졌다. 컴퓨터 발명 이전에는 계산수(計算手)라는 별도의 직업이 존재하기까지 했다. NASA

컴퓨터는 계산하는 기계를 뜻한다. 원래 계산하는(compute) 사람(er)을 부르던 말이었는데, 컴퓨터 발명 이후 그 사람들을 대체하면서 굳어진 말이다. 우리말로 바꾼다면 셈틀이다. 이것도 계산하는 기계라는 뜻이다. 이쯤 되면 컴퓨터와 계산은 떼려야 뗄 수 없는 관계일 수밖에 없다. 코딩을 배운다는 것은 컴퓨터를 이용한 계산 방법을 배우는 것과 다르지 않다는 말이다. 이제 아이에게 연산을 가르칠 차례다.

오브젝트 다루기 및 신호 주고받기 등 지금까지의 교육은 엔트리에 특화된 것들을 다뤘다. 엔트리 사용법을 배웠다고 해도 무리가 없다. 코딩의 기본인 연산을 배우기 위한 준비운동을 한 셈이다. 그런데, 막상 연산을 다루려 하니 우려스러운 것들이 한 둘이 아니다.

연산에는 변수가 항상 따라다닌다. 더하기 빼기에 피연산자가 필요한 것과 마찬가지다. 거기에 계산 결과 저장에도 변수는 이용된다. 우리가 흔히 아는 y=f(x) 형태의 함수에서 x와 y라는 변수가 필요한 것과 같다. 코딩은 이런 함수를 컴퓨터의 언어로 표현하는 것이다. 연산과 변수를 제대로 다루기 위해 함수의 개념도 먼저 이해하고 있어야 한다는 말이다. 9살 아이가 이해하기에는 아무래도 쉽지 않아 보인다. 그래도 일단 부딪쳐볼 문제다.

함수 개념을 설명하는 마법 숫자 상자. 어떤 숫자가 들어가면 나름의 연산이 자동으로 수행되어 결과를 내보낸다. 이 그림은 “y=x+4” 함수와 같은 의미를 가지는데, 국민학교 4학년 산수 시간에 배웠던 것으로 기억한다.

연산의 종류가 다양한 것도 우려스러운 점 중 하나다. 이제 막 구구단을 외우는 아이가 어디까지 이해할지 알 수 없다. 당장 나눗셈 혹은 분수부터 문제다. 거기에 단어를 나누거나 합치는 문자열 연산까지 다룬다고 치면 살얼음판이 따로 없다. 가능한 한 복잡하지 않은 계산으로 실습 예제를 구성할 필요가 있다.

교육은 3시간을 진행했다. 원래는 1시간으로 계획했으나, 아이가 변수 개념을 잘 잡지 못하는 듯해 늘릴 수밖에 없었다. 적어도 변수를 이용한 반복 횟수 제어는 기계적으로 외워서라도 작성할 수 있는 정도는 만들 필요가 있었다. 앞으로 질리도록 사용해야할 일종의 관용어구와 같은 것이기 때문이다. 외우고 반복하다보면 어느 순간 이치를 깨닫게 될 것이다. 보통 개념에 대한 학습은 불연속적인 과정의 연속이다. 배우고(學) 익히는(習) 것이다.

먼저, 숫자나 단어 등 정보를 저장하고 계산에 이용되는 변수의 의미를 전달하고자 했다. 사용자의 입력값은 변수에 저장되고, 그 변수를 이용하면 반복 횟수나 프로그램 종료 등을 판단할 수 있다는 것을 보여줬다(아래 그림 왼쪽 위). C 혹은 JAVA에서 “for()” 혹은 “while()” 반복문과 같은 것인데, 개발자라면 하루에 수십번씩 사용하게 되는 것이다.

다음으로 구구단 만들기를 진행했다(아래 그림 오른쪽 위). 수 계산뿐만 아니라 문자열 연산이 추가됐다. 수를 담은 변수들과 ‘x’와 ‘=’과 같은 문자를 합치는 과정이 필요하기 때문이다. 아이는 문자열끼리 합치는 것은 쉽게 이해했다. 공책에 단어 두개 붙여쓰는 것과 개념상 동일하기 때문인 듯했다. 그러나 숫자를 담은 변수와 문자열을 합치는 것은 혼란스러워 했다. 변수를 더하기 빼기 할 수 있는 숫자라고 하더니 왜 이번에는 단어와 같은 문자냐는 질문이다. 제법 날카로운 질문이다. 하지만 필자의 대답은 궁색할 수밖에 없었다. 글자와 변수를 합칠 때는 숫자를 담은 변수도 글자가 된다는 정도만 얘기했다. 아이에게 자료형이나 연산자 오버로딩(Overloading)과 같은 높은 수준의 개념까지 설명할 능력이 필자에겐 없다. 게다가 그럴 필요도 없다는 생각이다.

마지막으로 변수에 문자열이 들어갈 수 있음도 보여줬다(아래 그림 왼쪽 아래). 아이는 알 듯 모를 듯한 표정을 지었다. 모른척하고 넘어가는 게 최선이라 생각했다. 대신 아이는 나이만큼 ‘*’ 글자를 반복 출력하는 게 이상하다고 했다. 숫자를 적으면 되는 것을 굳이 ‘*’ 글자를 쓰는 이유를 모르겠다고 꼬집었다. 엉뚱한 질문에 “참 좋은 질문이네.”라고 시작하며 어려운 용어를 나열하며 얼버무리던 노교수님이 떠올랐다. 사실 특별한 이유가 있는 것은 아니다. 단지 아이에게 변수를 이용한 반복 횟수 제어를 훈련시키고 싶었을 뿐이다.

변수와 연산을 사용한 아이의 코딩 결과물. 마지막 그림은 숙제로 내준 code.org의 미션 해결 문제다.

지방에 며칠 다녀올 일이 있어 아이에게 숙제로 코드닷오아르지(code.org)의 미션 해결 문제를 내줬다. 이삼일 정도 빈 시간을 메꿔줄 것이라 예상했다. 단계 각각을 차례대로 해결해야 하는데, 중간에 아이에겐 쉽지 않은 단계도 하나 섞여 있다. 그런 아이는 그날 저녁을 대충 먹은 후 만지작거리더니 아빠 엄마의 식사가 끝나기도 전에 다했다고 우쭐거렸다. 술이 식기 전에 돌아온 관우도 아닌데 말이다. 방금 전까지 변수에 기죽었던 모습은 찾을 수 없다. 자기 자식 일은 참 알다가도 모를 일이다.

도움자료

1) 6~8일 차 교안을 공유합니다.

https://drive.google.com/drive/folders/1D01hw0-JftuvH6hofdWpHojR_Plyuxui

2) 아이와 만드는 코드도 공유합니다. 엔트리 메인화면의 공유하기에서 “chloe10”을 검색하세요.

※필자소개

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

[김기산 calculmount@gmail.com]

Copyright © 동아사이언스. 무단전재 및 재배포 금지.

이 기사에 대해 어떻게 생각하시나요?