코딩교육 : MIT 거북수학

컴퓨팅 사고력 역량을 위한 MIT 거북수학 ( SNU 코딩수학 )

코딩교육의 목표는 컴퓨팅 사고력 (computational thinking) 역량을 키우는 것입니다. 컴퓨팅 사고력 용어는 MIT 인공지능 및 수학교수 연구자인 패펄트 (Papert) 교수가 제안하였고, 패펄트는 컴퓨팅 사고력 역량을 위해 거북명령 로고 LOGO 언어를 만들고, 또한 로고 거북명령에  기반한 거북수학을 만들었습니다 (거북명령 LOGO의 마우스 버젼이 스크래치).

컴퓨팅 사고력은 한마디로 컴퓨터(기계)와 함께 문제를 해결하는 역량입니다. 수학자였던 패펄트 교수는 수학과 코딩을 융합하여 컴퓨팅 사고력을 제안하였는데, 이제 중학교 1학년 수학에 나오는 소수와 소인수분해를 이용해서 아래 표에 나오는 컴퓨팅 사고력의 핵심사항을 설명하겠습니다. 물질의 분자를 이루는 기본이 원자인 것 처럼, 자연수들은 소수들의 곱으로 인수분해 (decomposition) 됩니다. 또한 자연수 들의 성질을 인수분해된 패턴 (pattern) 을 통해 알아낼 수 있습니다. 컴퓨터와 함께 문제를 해결하려면, 먼저 문제를 더 작은 부분들로 분해시키고, 그 작은 부분들의 패턴을 분석하여 전체를 파악하고, 알고리즘에 따라 algorithm 코딩을 하여 컴퓨터 기계에게 해결시킵니다. 

많은 나라의 초등수학 교과서에 소마큐브와 쌓기나무로 작품을 만들며 패턴을 학습하며, 또한 많은 학생들이 레고 LEGO 블럭으로 무언가를 만들며 놉니다. 터틀크래프트 기반 초등 창의코딩은 우리나라 초등수학의 소마큐브와 쌓기나무 내용을 코딩과 융합하여 다음과 같이 시작합니다.

여기에 나오는 map 은 초등수학책에도 나오는 쌓기나무 패턴을 수학적으로 나타내는 표현방법이며, 위에서는 스핑크스와 공룡의 모습을 터틀크래프트의 블럭으로 코딩명령을 통해 만드는 모습입니다. 이러한 예도 컴퓨팅 사고력의 예가 될 수 있지만, 도형을 변과 각의 핵심 요소로 분해하고 (decomposition), 도형의 패턴 (pattern) 을 기반으로 코딩표현으로 그려내는 거북명령 알고리즘을 소개합니다. 예를 들어, 운동장에 큰 4각형 모양을 그리려면, 막대기를 땅에 대고 100 발자국을 가고, 오른쪽으로 90도를 돌고, 다시 100 발자국을 가고, ... 한마디로 반복 4 { 100 발자국 가기 ; 오른쪽으로 90도 돌기 } 와 같이 알고리즘이 들어간 코딩 표현으로 해결할 수 있습니다. 다음은 초등 학생들이 많이 배우는 MIT 스크래치의 핵심인 반복 repeat 와 가자 (move) 와 돌자 (turn) 거북명령입니다.

위의 스크래치 명령에서, repeat (반복), move(가자), 돌자(turn) 에 주목하세요. 터틀크래프트에서는 이와 같은 MIT 거북명령을 바탕으로 여러 모양의 작품을 만들고, 마인크래프트와 같이 마우스와 키보드 명령으로 놀수 있습니다.  또한 자기가 만든 것으로 3차원 VR 놀이를 할 수 있고, 또한 3D 프린터로 뽑아서 스노우볼 (snow ball) 도 만들 수 있습니다.  아래의 명령 편집기 위에 있는 [beginxyz]  단추를 먼저 눌러서 3차원 크래프트 환경을 만들세요. 그리고 이어서 [실행]  단추를 눌러 보세요 !!

A = ' s[u] s[uu] ' // A 를 2층+3층 성벽이라고 약속 반복 4 { // repeat 4번 명령 doit( 5A ) // A 를 5개 만들고, doit( L ) // Left 90도 회전 }

이제 왼쪽 화면을 마우스로 클릭하여 3차원 세계에 들어가고, 마인크래프트에서와 같이 w키로 앞으로 가고, asd 와 zc 쉬프트키를 쓰세요. 여기서 대문자 A는 앞으로 가며 블럭을 만드는 s 와 그 위에 1개의 블럭 올리는 s[u] 와 앞으로 가고 위에 블럭을 2개 만드는 s[uu] 를 합친  치환문자입니다. 거북수학은 문자와 변수로 스토리코딩을 합니다 !! 아래는 doit 거북명령에서 사용하는 레고블럭과 같은 문자 명령입니다. 각각의 문자는 블럭을 만들고, 블럭을 연결하여 레고 놀이와 같은 코딩 놀이를 합니다.

 터북이 성을 만드는데 특화된 레고 블럭코딩 문자는 다음과 같습니다.

키보드 기반의 거북명령 LOGO 언어는 마우스 기반의 MIT 스크래치 (scratch) 와 버클리 대학의 SNAP 언어로 패펄트 교수의 제자와 연구자들에 의해 발전하였습니다. 한국에서는 본 연구자에 의해 터틀말과 3차원 터틀크래프트 등으로 발전하였습니다. 위의 성벽 모양은 너무 간단한데, 이제 미로게임도 만들 수 있는 성벽을 만드겠습니다. 이를 위해서 파이썬 (python) 등 많은 프로그래밍 언어에서 쓰는 for 명령을 쓸 수 있습니다. 그러나 초등학생에게 for 명령이 어렵기에 반복 명령에 변수를 쓰며 for 명령을 대신합니다. 거북에게 doitsxyz 명령은 약속된 SXYZ 문자를 쓰라는 것이고, 아래 코드를 [beginxyz] 하고 [실행] 시킨 후에 그 결과를 3차원 게임용 VR 화면으로 보는 모습이 아래 화면의 모습입니다.

doitsxyz // 거북에게 SXYZ 사용을 알림 n = 3 // 변수 n 의 값이 바닥의 모양 반복 4 { doit( 5SX 5SY 5S ; n ) // 성의 4분의 1 doit( X ) // 왼쪽으로 90도 회전 n = n+1 // n 값을 1 만큼 증가시킴 }

위의 코드에서, 변수 n을 사용하여 성벽 바닥의 블럭을 다르게 만든 것에 주목하세요. 중학교 수학의 변수와 n=n+1 과 같은 (변수를 증가시키는) 표현과 repeat 반복 알고리즘을 사용하여 수학적 코딩을 하였습니다. doit( s ; 9) 명령에서 ; 뒤에 쓰인 9는 만들어지는 블럭의 타입을 지정합니다. 바로 위의 코드를 실행시키면, 처음 성벽은 n=3 으로, 그 다음은 n=n+1 코드로 n의 값이 하나 증가한 4번으로 (빨간색), 그 다음은 5번 파란색으로, 마지막엔 6번 블럭으로 만들어집니다. 이러한 내용은 알고리즘과 관계되며, 알고리즘 설명을 그림으로 나타낸 것이 순서도입니다. 이제 초급을 넘어 중급 코딩수학을 소개합니다. 아래 내용을 보세요.

 

수학교과서 기반의 초중등 창의코딩 및 자유학년제 코딩수학

위에서 성을 만드는 알고리즘은 설명하였는데, 2015 이전의 고등학교 수학교과서에는 알고리즘과 순서도라는 단원도 있었습니다. 외국의 수학책에 나오기에 우리나라에서도 도입을 했는데, 문제는 컴퓨터 없이 종이 위에서 알고리즘을 다루다가 2015년 이후에는 빼버렸다는 것입니다. 또한 집합은 예전에 중1 수학의 내용입니다. 집합과 논리 그리고 알고리즘과 순서도 내용 등의 수학을 다시 코딩과 융합시켜 초등 및 중등에 새롭게 도입하는 것이 바람직한 코딩교육과 수학교육의 시작일 수 있습니다.  

알고리즘과 순서도 등을 수학에서 삭제한 후, 얼마 지나지 않아 코딩 의무교육을 한다며 법석이 벌어졌습니다. 이와 관계해서 예전 1989년의 신문기사를 소개합니다. 1989년에 "때늦은 감이 있다"는 표현을 쓰며 초등학교에도 GW 베이직 프로그래밍을 도입하였습니다. 그런데 이렇게 시작된 프로그래밍 교육은 얼마 후에 초등학교 영어 의무교육을 도입한다면서 빼버렸습니다. 그리고 IMF 외환 위기를 맞게 되었는데, 그당시 미국에서는 google 과 마이크로소프트 같은 IT 기업들이 번성하고 있었습니다.

위의 신문기사는 1989년 프로그래밍 의무교육에 대한 기사와 2018년 코딩교육 의무화 기사를 비교한 것입니다. 30년 만에 다시 찾아왔네요 ^_^지금 많은 사람들이 스크래치 등 프로그래밍 언어를 배우는 것이 코딩교육이라고 오해하고 있습니다. 인공지능을 전공하는 서울대 교수님들 중에는 프로그래밍은 대학교에 와서도 할 수 있으니, 그 전에 수학과 문제해결력을 확실히 익히라고 충고합니다. 즉 인공지능 시대의 바람직한 코딩교육은 수학+코딩으로 문제를 표현하고 기계와 함께 문제를 해결하는 컴퓨팅 사고력 역량을 익히고 향상시키는 것입니다 !! 이제 만들어진 성벽에 초등 6학년 수학인 기등과 각뿔 등으로 지붕이 있는 탑을 만드는 코드를 소개합니다.  여기에도 레고 블럭과 같은 아래의 정직구원 (고등학교 집합과 and (&&) or 논리 기반) 명령문이 있습니다.

아래의 [beginxyz] 단추를 누르세요. 이어서 [실행] 단추도 누르세요.

doitsxyz // 거북에게 SXYZ 사용을 알림 반복 4 { doit( 5S X ) } beginxyz ; 집합 { 정( 6, 1, 5, 2 ) && z<10 } // 맨 아래의 중심이 (6,1,5) 이고 // 10 층 아래로 반지름이 2인 탑 집합 { 정( 6, 1, 10, 13-z ) ; 18 } // 10층 부터 시작해서, 각각의 // z 층에 반지름 13-z 로 만듦

집합 {  정( 6, 1, 5, 2 ) && z < 10 } 명령은 맨 아래의 중심 좌표인 (6,1,5) 으로 부터, 한 층씩 올라가면서 10층 미만까지 가로 세로의 반지름이 2인 정사각형을 만들어 쌓으라는 것입니다 (정사각기둥이 됨). 집합 {  정( 6, 1, 10, 13-z ) ; 18 } 명령은 맨 아래의 중심점 좌표를 (6,1,10) 으로 잡고, 여기서 부터 시작해서 각각의 z 층에서 중심이 (6,1) 이고 반지름 (가로와 세로쪽 반지름)이 13-z 인 사각형을 18번 앵그리버드 블럭으로 만들며 쌓으라는 것입니다. 각각의 z 층에 반지름이 13-z 이기에, 중학교 수학의 일차함수 대응표로 설명하면 점점 올라가면서 반지름이 작아지고, 14층 이상에서는 반지름이 음수가 되기에 그 이상의 층에서는 만들지 않습니다 (음수인 반지름은 없기에). 이러한 코딩 명령은 컴퓨팅 사고력의 추상화 (Abstraction) 요소에 부합하는 수학적 표현입니다. 앞에서도 언급한 것 같이 컴퓨팅 사고력은 컴퓨터와 함께 문제를 해결하는 것입니다. 컴퓨팅 사고력 역량에는 문제를 컴퓨터가 처리할 수 있도록 압축하고 추상화된 표현을 만드는 역량 그리고 이를 컴퓨터에서 작동할 수 있도록 자동화하는 역량이 핵심적인 역량입니다 (창의융합적 역량).  

beginxyz 위에 나오는 반복 4 {  doit( 5S X )  }  명령은 반복 알고리즘으로 SSSSS 명령으로 성벽을 만들고 또한 왼쪽으로 도는 X 를 네번 반복하여 성벽을 만들라는 것입니다. 이렇게 성벽을 어떤 것을 4번 반복시켜서 만들 수 있도록 인수분해하는 것은 컴퓨팅 사고력의 추상화 및 자동화 (Automaiton) 요소인 패턴 인식과 알고리즘 실행입니다. 컴퓨팅 사고력 역량을 위한 초등 창의코당에서는, 먼저 기본과정에서 doit 거북명령으로 알고리즘을 익힌 후, 중급과정으로 기둥과 뿔과 원과 구 등을 LEGO 블럭으로 이용하는 정직구원 조건제시법으로 창의적인 작품을 만들 수 있습니다. 참고로, 초등 창의코딩은 자유학년제 코딩수학 및 중등수학 내용인 피타고라스 정리와 3차원 도형의 방정식으로 코딩수학의 심화과정으로 발전됩니다. 창의코딩은 아래와 같은 터북이성 및 고대 건축물 등을 디자인해서 만드는 코딩을 중심으로 구체적인 체험활동으로 진행됩니다.

MIT 패펄트의 거북수학 정신인 Learning by Design (Making) 을 따라, 위의 그림과 같이 디즈니랜드의 성과 탑을 만들고, 3차원 VR로 놀아보고, 또한 3D 프린터로 뽑아서 스노우볼도 만드는 창의코딩 교육과정은 코딩과 수학이 융합된 코딩수학을 지향합니다.

 

코딩교육 : MIT 거북수학의 내용은 SNU코딩수학 유튜브를 참고 !!