프로그래밍을 어떻게 배울 것인가

전문가 칼럼입력 :2014/08/04 09:07    수정: 2014/08/04 09:07

임백준
임백준

인도의 유명한 컨설팅 회사인 TCS는 해마다 미국의 중, 고등학교 학생을 대상으로 로보틱스 여름캠프를 주최한다. 레고(Lego)에서 출시되는 마인드스톰(Mindstorms)을 이용하는 캠프의 목적은 입상자를 뽑는 것이 아니다. 학생들이 로봇을 조종하는 과정을 통해서 컴퓨터 프로그래밍에 흥미를 느끼게 하고, 프로그래밍이 직업인 어른들을 자원봉사자로 활용함으로써 프로그래밍이라는 직업에 대한 꿈을 가질 수 있도록 도움을 주는 것이 목적이다.

올해에는 맨해튼 남쪽에 있는 첼시직업고등학교(Chelsea Vocational High School)에서 여름캠프가 열렸는데, 회사가 지원하는 자원봉사 프로그램을 통해서 나도 하루 동안 아이들과 로봇을 조종하며 즐거운 시간을 보냈다. 내가 참여한 것은 이틀째였기 때문에 내가 맡은 다섯 명의 아이들은 하루 전에 레고 블록을 조립해서 바닥의 색상을 감지하는 센서, 앞의 장애물을 감지하는 센서, 좌우의 탱크 캐터필러 등을 장착한 멋진 로봇을 만들어 놓고 있었다. 아이들은 로봇에게 “파블로”라는 귀여운 이름을 붙였다.

프로그래밍은 로봇과 함께 패키지로 제공되는 비주얼 프로그래밍 도구를 이용해서 수행했다. 키보드를 두드려서 코드를 짜는 방식이 아니라 이미 존재하는 구성물들을 마우스로 선택해서 붙여 넣는 간단한 방식이었다. 프로그래밍에 대한 사전 지식이 없어도 원하는 동작에 대한 논리적인 이해만 있으면 프로그래밍을 할 수 있기 때문에 아이들이 편하게 접근할 수 방식이었다.

첫 번째 도전과제는 바닥에 놓인 로봇이 커다란 매트 위에 그려진 빨간색 선을 따라서 움직이도록 프로그래밍 하는 것이었다. 아이들이 로봇에게 내릴 수 있는 명령은 직진, 좌우회전, 후진처럼 기본적인 것들로 국한되어 있었다. 센서를 통해서 바닥의 색이 빨간색인지 흰색인지 구분할 수 있지만, 이렇게 간단한 명령어를 조합해서 로봇이 움직이게 만드는 알고리즘을 작성하는 것은 생각만큼 간단한 일이 아니었다.

아이들 사이에서 난상토론이 벌어지고, 자기가 생각하는 알고리즘을 뚝딱 프로그래밍하고, 로봇에게 명령을 내려서 책상 위에서 실행해보고, 엉터리로 동작하는 로봇을 보면서 배꼽을 잡고 웃고, 다시 토론하고, 디버깅을 하다 보니 시간이 빠르게 흘러갔다. 나는 그런 아이들 옆에서 ‘정답’을 제공해주지는 않으면서 알고리즘을 생각하는데 도움을 주는 도우미 역할을 수행했다. (어차피 나도 정답은 모르는 상태였다.) 프로그래밍을 어느 정도 끝낸 팀은 코드를 로봇에게 다운로드 하고 방 바깥에 놓여 있는 매트에 가서 테스트를 하기도 했다. 주어진 시간이 모두 종료되자 다섯 개 팀이 프로그램이 입력된 로봇을 들고 밖으로 나가서 경연을 벌이기 시작했다. 로봇이 빨간색 선을 따라서 최종지점까지 무사히 가는지, 얼마나 빨리 가는지 등이 점검사항이었다. 우리가 작성한 알고리즘은 센서가 빨간색을 감지하면 오른쪽으로 돌고, 흰색을 감지하면 왼쪽으로 돌게끔 만든 것이었다.

우리 차례가 되어 파블로가 움직이기 시작하자 좌우로 방정맞게 움직이며 굼벵이처럼 기어가는 모습을 보고 아이들이 폭소를 터뜨렸다. 그렇지만 파블로는 끝까지 빨간색 선을 따라서 최종지점까지 움직였다. 우리는 4등을 차지했다. 5등을 차지한 팀은 로봇이 제자리에서 빙글빙글 돌기만 하는 바람이 더 커다란 폭소를 자아내었다.

점심을 먹고 시작된 두 번째 도전은 더욱 어려웠다. 매트 위에 종이컵 4개를 아무데나 놓으면 로봇이 돌아다니면서 컵을 하나씩 쓰러뜨리는 과제였다. 로봇이 매트 바깥으로 나가면 커다란 감점이 있었고, 최종적으로는 누가 더 많은 컵을 얼마나 빨리 쓰러뜨리는가 하는 것이 관건이었다.

이번 매트 위에는 군데군데 검정색 원이 그려져 있었다. 매트의 테두리가 검정색 선으로 둘러싸여 있기 때문에 로봇이 검정색을 감지했을 때 후진을 하거나 좌우로 턴을 하도록 만들어야 한다는 점은 모든 팀이 거의 동시에 파악했다. 문제는 컵을 감지하는 센서와 컵을 넘어뜨릴 수 있는 ‘손’과 같은 장치가 서로 반대방향에 붙어있다는 점이었다. 로봇이 움직여 다니다가 아주 가까운 거리에 컵이 있음을 감지하면 180도로 회전을 한 다음, 손을 이용해서 컵을 쓰러뜨리는 동작을 정교하게 프로그래밍 해야 했다.

오후 일정이 거의 끝나갈 무렵이 되자 대부분의 팀이 어느 정도 원하는 동작을 수행하는 프로그램을 완성했다. 로봇이 매트 바깥으로 나가지 않도록 검정색을 감지했을 때 일정한 각도로 회전하고, 코앞에 컵이 있으면 180도로 돌아서 컵을 쓰러뜨리는 동작이 거의 비슷한 수준으로 실행되었다. 그런데 나는 파블로가 더 정교한 동작을 수행하기를 원했다.

검정색을 감지해서 일정한 각도로 회전을 할 때, 그냥 회전하지 말고 아주 조금만 회전하면서 앞에 어떤 물체가 있는지 확인하는 작업을 빠르게 루프 안에서 실행해보자. 아이들은 내 말의 의도는 이해했지만 그것을 어떻게 프로그램으로 작성할 수 있는지에 대해서 확신하지 못했다. 아이들은 다양한 방법을 동원해서 코드를 작성했지만, 파블로는 계속 엉뚱하게 동작했다. 실패가 반복되자 몇몇 아이들은 좌절감을 느끼고 그냥 다른 팀과 비슷하게 동작하는 코드로 만족하자고 말하기도 했다.

그 상태에서 오후 일정이 끝났고, 나의 봉사활동도 마감되었다. 아이들은 내일 코딩을 마무리해서 경연을 하고 3일간의 캠프활동을 마치게 될 것이었다. 하지만 내일이 되면 다른 사람이 와서 아이들을 도와줄 것이기 때문에 안타깝게도 나는 파블로의 마지막 경연을 볼 수 없었다.

다음 날 3일차 자원봉사를 마치고 회사로 복귀한 사람에게 마지막 날 경연에 대한 이야기를 들을 수 있었다. 그는 말했다.

“다들 비슷비슷했어. 검은색이 감지되면 회전하고, 앞으로 직진하다가 컵을 만나면 180도 회전해서 컵을 쓰러뜨리고, 계속 매트를 돌아다니고. 그런데 운 좋게 컵을 만나지 않으면 로봇이 계속 돌아다니기만 하니까 시간이 너무 오래 걸려서 지루했지. 제한시간이 4분이었는데, 다들 컵을 1~2밖에 쓰러뜨리지 못했어. 그런데 파블로라는 로봇이 있었어. 파블로는 검정색을 만나면 회전을 하는데, 그냥 회전을 하는 것이 아니라 멀리 있는 컵을 찾는 것 같았어. 마치 인공지능이라도 달린 것처럼 말이야. 그러다가 컵을 찾으면 컵을 향해서 직진을 하더라고. 그리고 쓰러뜨리고. 다시 컵을 찾고. 멋있었어. 물론 파블로가 1등을 했고 다들 큰소리로 박수를 쳐주었지.”

관련기사

이야기를 들으면서 내가 마음속으로 얼마나 기뻤는지는 설명할 필요가 없을 것이다. 프로그래밍이라는 것은 그러니까, 이렇게 배우는 것이다. 노는 거다. 공부가 아니다. 웃고 떠들고 부수고 조립하는 것이다. 세상을 창조하는 기쁨과 희열만으로 이루어진 행위다. 경쟁이나 성적이라는 굴레로 가둘 수 없다. 그렇게 하는 순간 그것은 고단한 점수 따기 콘테스트로 전락한다.

SW교육을 의무화한 한국의 정부 담당자들이 프로그래밍이라는 행위의 본질에 대해서 진지하게 고민해보기를 진심으로 바라는 이유다.

*본 칼럼 내용은 본지 편집방향과 다를 수 있습니다.

임백준 IT컬럼니스트

한빛미디어에서 『폴리글랏 프로그래밍』(2014),『누워서 읽는 퍼즐북』(2010), 『프로그래밍은 상상이다』(2008), 『뉴욕의 프로그래머』(2007), 『소프트웨어산책』(2005), 『나는 프로그래머다』(2004), 『누워서 읽는 알고리즘』(2003), 『행복한 프로그래밍』(2003)을 출간했고, 로드북에서 『프로그래머 그 다음 이야기』(2011)를 출간했다. 삼성SDS, 루슨트 테크놀로지스, 도이치은행, 바클리스, 모건스탠리 등에서 근무했고 현재는 맨해튼에 있는 스타트업 회사에서 분산처리, 빅데이터, 머신러닝과 관계된 업무를 수행하고 있다.