중등 (자유학년) 코딩수학

컴퓨팅 사고력을 위한 초중등  창의코딩과 자유학년제 코딩수학

코딩교육의 목표는 컴퓨팅 사고력 (computational thinking) 역량을 키우는 것입니다. 컴퓨팅 사고력은 한마디로 컴퓨터(기계)와 함께 문제를 해결하는 역량입니다. 컴퓨팅 사고력 용어는 MIT 인공지능 및 수학교수 연구자인 패펄트 (Papert) 교수가 제안하였고, 패펄트는 컴퓨팅 사고력 역량을 위해 거북명령 로고 LOGO 언어를 만들고, 또한 로고 거북명령에  기반한 거북수학을 만들었습니다 (거북명령 LOGO의 마우스 버젼이 스크래치). 컴퓨팅 사고력의 핵심적인 요소는 추상화와 자동화입니다. 자동화 관련 내용은 아래의 알고리즘과 순서도에 나오는 터틀크래프트 코딩에서 맛볼 수 있습니다. 추상화 내용은 맨 아래의 속이 비어있는 토러스에서 맛볼 수 있습니다. 중2의 피타고라스 정리를 활용한 간단한 수학식 (이것이 추상화의 핵심) 이 만들어내는 거대한 세계를 체험하세요.  

수학자였던 패펄트 교수는 수학과 코딩을 융합하한 컴퓨팅 사고력을 위해 MIT 거북수학을 만들었는데, 거북수학은 미국 초등생에게 가자-돌자 거북코딩으로 Learning by Design (Making) 하는 코딩수학입니다.  서울대 초등 창의코딩 교육은, 학생들이 경험한 스크래치 또는 엔트리 언어의 경험을 바탕으로, 거북명령과 집합 명령으로 거북성과 건축물을 디자인하여 만들고, 놀고, 그리고 나누는 교육방법으로 운영합니다.

그렇다면, 창의융합으로 미래를 준비시키는 중학교 이상의 (특히 자유학년제) 코딩수학의 특징은 무엇이 되어야할까요? 서울대 중등 자유학년제 창의코딩은, 먼저 컴퓨팅 사고력을 위한 거북수학을 익힌 후, 예전에 중학교 1학년 수학 내용이었던 집합과 논리 (지금은 고1, 조건제시법, 원소나열법) 그리고 예전에 고등학교 수학교과서 내용이었던 아래와 같은 알고리즘과 순서도 내용을 되살려 코딩과 융합된 내용으로 접근합니다.

특별히, 정직구원과 같은 LEGO 블럭에 해당하는 집합 명령과 고등학교 수학이었던 알고리즘과 순서도 그리고 스크래치 언어의 repeat 반복 명령을 터틀크래프트에서 알고리즘 관점에서 융합합니다. 알고리즘의 핵심적인 구조는 순차구조, 선택구조, 그리고 반복구조이며 알고리즘을 아래와 같은 순서도 모양으로 도입하면 좋습니다.

 

알고리즘과 순서도 (순차구조, 선택구조, 반복구조) 코딩수학 

알고리즘 3대 구조의 첫번째는 순차구조로, 코딩 명령어가 하나하나 순서대로 실행되는 구조입니다. 예를 들어, 터틀크래프트의 간단한 집합 명령들이 순차적으로 실행되어 로마 시대의 고대 건축물은 만드는 예를 보세요. 집합 명령의 순서가 바뀌면 결과도 바뀔 수 있습니다. 특히 빈 공간을 만드는 집합 명령은 바꾸기가 어렵습니다.

아래의 [beginxyz] 를 누르면, 로마에 있는 판테온 신전의 모습이 나타납니다. 판테온 신전은 안이 비어있는 구의 모양입니다. 특징으로는 연기가 빠져나가도록 천장에 구멍이 있다는 것입니다.

beginxyz ; 집합 { 원(0,0,11,3) ; 0 } // 판테온 천장의 구멍 만듦 집합 { 구(0,0,10,19) && z>0 ; 0 } // 끝의 0 은 빈 공간을 만들라는 것 집합 { 구(0,0,10,20) && z>0 ; 9 } // z>0 은 1층 이상에만 만들라는 것

이 때, 집합 명령문의 순서를 바꾸면 문제가 생깁니다. 순차구조에 의해 먼저 구의 중심을 0 블럭 (비워진 블럭) 으로 만들었기 때문입니다. 여기서 사용된 집합 명령어는 주어진 조건에 맞는 모든 좌표에 블럭을 만들게 하는 조건제시법 명령입니다 (원소나열법 명령으로는 주어진 좌표에 블럭을 하나 만드는 cube(a,b,c) 등이 있습니다). LEGO 장난감의 주어진 블럭을 결합시켜 멋진 것을 만든 경험이 있을 것입니다. MIT 거북명령 LOGO 언어는 실제로 LEGO 회사의 연구비 지원을 받았으며, 자와 컴퍼스로 도형을 작도하는 수학의 정신과 기본 블럭을 결합시켜 멋진 것을 만드는 레고 장난감의 정신을 합쳐서 구성주의 (constructionism) 기반 코딩수학을 만들었습니다. 터틀크래프트의 집합 명령은 LEGO 블럭에 해당하는 것으로, 집합 명령어를 결합시켜 멋진 것을 코딩하고, 3D VR로 체험하고,  3D 프린터로 뽑아냅니다 !!

순차구조에 이어, 이제 알고리즘의 선택구조를 다룹니다. 알고리즘의 선택구조에는 if 조건문 명령이 쓰입니다. if 조건문 명령은 주어진 조건이 성립하는 경우와 그렇지 않은 경우에 각각 선택적으로 실행을 다르게 합니다. 아래의 if 기반 코드는 위의 집합 명령의 코드를 선택구조에 맞게 고친 것입니다. 한마디로, 집합 명령어는 그 자체가 if 조건문으로 이루어진 선택구조 알고리즘이며, 주어진 조건을 만족하는 모든 좌표를 구하는 (해집합) 조건제시법 명령입니다 (조건이 맞지 않으면 실행없이 그냥 다음 명령으로 내려간다). 아래의 if 조건문 코드를 위의 집합 명령코드와 비교하며, 이제 [beginxyz] 단추를 눌러 판테온 신전 모양을 만드세요. 

beginxyz ; // beginxyz 다음에 ; 하면 좌표가 표시됨 if( x*x+y*y <= 13*13 && z >= 29 ) return 0 // 원의 방정식과 z층으로 천장 구멍을 만듦 if( x*x+y*y+(z-10)*(z-10) <= 19*19 && z > 0 ) return 0 // 논리 and 에 대응하는 기호가 && if( x*x+y*y+(z-10)*(z-10) <= 20*20 && z > 0 ) return 9 // 고등학교 수학인 구의 방정식을 사용함

위의 코드에는 중학교 수학의 피타고라스 정리가 사용되었습니다. 원이나 구는 중심의 좌표에서 주어진 반지름의 거리 안에 들어오는 블럭을 모아서 만들어집니다. z > 0 조건은 1층 이상이라는 뜻으로, 땅 아래의 지하세계에는 만들 필요가 없기에 쓴 것입니다. 판테온 천장의 구멍을 위해서는 z>=29 즉 29층 이상에만 구멍을 내라는 명령을 하였습니다. 고등학교 집합과 명제 단원의 and 와 or 논리는 중요합니다. 프로그래밍 언어에서는 and 는 && 기호로 그리고 or 는 || 기호로 나타냅니다. 바로 앞의 판테온 코드와 어떤 차이가 있습니까? 앞에서는 초등학생도 접근할 수 있도록 정직구원과 같은 LEGO 블럭과 같은 집합 명령을 사용하였고, 지금 코드는 고등학교 수학에 나오는 원과 구의 방정식을 사용하였습니다.

이제 마지막으로, 알고리즘의 반복구조를 알아봅니다. MIT 거북명령 LOGO 와 스크래치에는 repeat 반복명령이 있습니다. 다른 프로그래밍 언어에는 for 반복조건 명령이 많이 쓰입니다. 터틀크래프트는 두 종류의 반복명령을 모두 사용할 수 있습니다. 간단한 repeat 반복 명령은 이미 MIT 거북수학에서 설명하였으니, 좀더 복잡한 repeat 반복 명령을 for 반복조건 명령문과 같이 도입하여 설명을 합니다.

우선 [beginxyz] 단추를 눌러 3차원 마인크래프트와 같은 환경을 만들고, 이어서 [실행] 단추로 거북명령 doit 원소나열법 명령을 실행시킵니다.

A = ' s[u] s[uu] ' // 대문자 A는 치환문자 n = 1 // n은 숫자가 저장되는 변수문자 while( n < 20 ) { // n 값이 20 미만이면 반복 doit( (n)A ; n ) // A를 n번 반복한다, n번 블럭으로 doit( L ) // Left 90도 회전한다 n = n+1 // n 값을 1 만큼 증가시킴 }

위의 코드에는 beginxyz 라고 쓰여진 곳이 없습니다. beginxyz 아래에 쓰는 조건제시법 명령이 없기에 생략한 것입니다. 위의 코드에서 중요한 것은, 문자 A와 변수 n의 사용입니다. n 이 증가하면서 치환문자 A를 n번 부르는 (n)A 코드에 의해 성벽의 길이가 점점 늘어납니다. 또한 n번 타입의 블록으로 성벽의 색이 계속 바뀝니다. 문자와 변수 그리고 방정식과 부등식은 중학교 (자유학년제) 코딩수학의 핵심적 내용입니다. 참고로, 일반적인 프로그래밍 언어에서의 for 반복문은 초보자가 배우기에 어렵습니다. 그래서 거북(고양이) 명령에서도 반복 repeat 명령을 씁니다. 학생들은 앞으로 파이썬 언어와 같은 고급 언어를 사용하는 시대가 오기에, 어렵지만 for 반복문을 익히는 것이 좋습니다. 적어도 while 명령은 익혀야 합니다. 아래의 for 명령에서, cube(i,0,1) 명령은 좌표 (i,0,1) 위치에 정육면체 cube 블럭을 만들라는 명령입니다.

 

집합과 논리 (조건제시법) 및 원소나열법이 융합된 코딩수학

앞에서 다룬 알고리즘과 순서도의 내용이 중학교 (자유학년제) 코딩수학 내용으로 중요하지만, 더 중요한 것이 문자와 변수 그리고 방정식과 함수 등의 수학적 개념과 논리입니다. 특별히 코딩 경험이 없는 학생들에게 순차와 선택 그리고 반복구조의 알고리즘 기반의 프로그래밍 접근은 재미도 없고 또한 어렵게 느껴질 수도 있습니다. 이에 터틀크래프트 기반 코딩수학에서는 기존의 코딩교육에서 다루는 내용과 순서를 바꾸어, 우선 집합과 논리적 조작을 융합시킨 정직구원 (LEGO 블럭과 같은 명령 조각) 으로 시작합니다. 이런 접근은 초등 6학년 수학에서 다룬 기둥과 뿔을 중학교 1학년 입체도형과 함수와 부등식 등과 연결시키고, 중학교 2학년의 연립방정식과 피타고라스 정리 등을 조건제시법으로 자연스럽게 도입할 수 있기에 좋습니다. 다음의 코드는 콘진원 게임코딩 교재에도 나오는 피라미드와 나무를 초등 및 중학교 1학년 수학인 각뿔과 원뿔을 집합 명령으로 만드는 것입니다. 먼저 [begin] 단추를 누르면 피라미드와 나무가 나타납니다. 이어서 [실행] 단추를 누르면 앵그리버드 깃발이 만들어집니다. 앵그리버드 깃발은 조건제시법 대신에 beginxyz 위에 가자-돌자 거북명령으로 블럭을 하나씩 만드는 원소나열법으로 만든 것으로, 경우에 따라 거북명령이 더 창의적인 쉬운 방법입니다.

doit( LLsuuuu [ss]u[ss] ; 18 ) // 원소나열법 beginxyz ; // x-y 좌표축을 만듭니다 if(z<0 || z>10) return 0 // 속도 개선 집합 { 정( 5, 5, 1, 5-z ) ; 16 } // 1층 이상이며, 16번 고대 벽돌로 // 각 층에 중심(5,5), 반지름 5-z 집합 { 원( -5, 5, 1, 1 ) && z < 5 ; 12 } // 1층 이상이면서 && 5층 미만의 층에서 // 각 층에서 중심(-5,5) 이고 반지름 1 집합 { 원( -5, 5, 5, 10-z ) ; 13 } // 5층 이상, 13번 나뭇잎 블럭으로 // 각 층에 중심(-5,5), 반지름 10-z

집합 {  정( 5, 5, 1, 5-z ) ; 16 } 명령은 맨 아래의 중심점 좌표가 (5,5,1) 이며, 여기서 부터 시작해서 각각의 z 층에서 중심이 (5,5) 이고 반지름 (가로와 세로쪽 반지름)이 5-z 인 사각형을 만들라는 것입니다. 각각의 z 층에 반지름이 5-z 이기에, 중학교 수학의 일차함수 대응표를 생각하면 점점 올라가면서 반지름이 작아지고, 6층 이상에서는 반지름이 음수가 되기에 그 이상의 층에서는 만들지 않습니다 (음수인 반지름은 없기에). 마찬가지 이유로, 집합 {  원( -5, 5, 1, 1 ) && z < 5 ; 12 } 은 맨 아래의 (-5,5,1) 부터 올라가면서 5층 미만까지 자작나무 줄기로 나무의 기둥을 만듭니다. 그 다음의 집합 {  원( -5, 5, 5, 10-z ) ; 13 } 명령은 맨 아래의 (-5,5,5) 에서 시작해서 올라가며 중심은 (-5,5) 이며 반지름이 10-z 라는 것을 통해 원뿔 모양을 만듭니다 (11층 이상에서는 음수인 반지름이 나옴). 이러한 표현은 컴퓨팅 사고력의 추상화 (Abstraction) 에 부합하는 수학적 코딩입니다.

beginxyz 다음에 제일 먼저 나오는 if(z<0 || z>10) return 0 명령은 알고리즘 순차구조에 따라 제일 먼저 빈 공간의 좌표를 알려줍니다 (해집합에 속하지 않는 좌표).  지하층과 높은 곳에는 아무 것도 만들어지기 않기에, 이렇게 코딩 명령을 쓰는 것은 컴퓨팅 사고력의 자동화  (Automaiton) 요소인 효율성 있게 빨리 실행되는 알고리즘 표현입니다.  컴퓨팅 사고력 역량을 위해, 먼저 정직구원 LEGO 블럭 코딩으로 조건제시법에 쉽게 접근시키고, 그 후에 피타고라스 정리와 도형의 방정식 등의 심화과정에 들어갈 수 있습니다. 아래 코드는 피타고라스 정리와 원의 방정식으로 속이 빈 토러스 모양을 만듭니다. [beginxyz] 단추로 실행을 시키면 나타나는 왼쪽의 화면을 클릭하고 들어가서, s 키를 누르면 터북이가 뒤로 가면서 속이 비어있는 토러스 모양이 보입니다. z 와 c로 높이를 조절하고, 마인크래프트에서와 같이 w, a, d 키와 마우스로 이동을 하며, 토러스 내부의 빈 공간에 가서 Shift 키로 중력을 작동시켜 착륙한 후 놀아보세요.

beginxyz // 좌표식과 조건제시법 R=30 ; r=10 // 토러스의 반지름 들 D = sqrt ( x*x+y*y ) // 피타고라스 정리 // 원점에서 R 만큼 떨어진 위치에, 반지름 r인 // 원을 만들어 나가면서 토러스 모양을 만듦 집합 { abs( (D-R)*(D-R)+z*z - r*r ) < 20 && y>-22 } return 0

위의 코드에서 D = sqrt ( x*x+y*y ) 표현은 x의 제곱과 y 제곱의 합의 제곱근을 변수 D에 저장하라는 것입니다. 맨 마지막의 return 0 표현은 조건에 맞는 곳의 여집합은 모두 빈 공간으로 만들라는 것입니다. 그래서 땅바닥도 생기지 않습니다 (저 아래의 하얀 부분은 만듭니다. 이 것이 없으면 터북이가 그 아래의 지옥으로 빠짐). 아래 화면은 [beginxyz] 실행 후, 터북이를 z키로 위로 올리고, s키로 뒤로 이동시킨 후의 모습입니다 (마인크래프트의 스티브와 같이 터북이는 터틀크래프트의 주인공).

이 입체는 속인 빈 토러스를 y>-30 부분만 잘라서 그린 것으로, 위의 코드에서 D = sqrt ( x*x+y*y ) 는 중학교 2학년에 나오는 피타고라스 정리에 의한 거리이며, 그 아래의 고등학교 집합 명령은 주어진 조건에 맞는 해집합을 구하는 조건제시법의 예입니다 (2010년대 초반에도 집합 내용은 중학교 1학년에 소인수분해와 같이 도입되어 있습니다). 이러한 집합과 and or 논리 그리고 3차원 좌표 등으로 수학과 코딩을 융합시키고, 또한 컴퓨팅 사고력 역량을 위해 3차원 마이크래프트와 같은 게임 환경으로 도입하여 초등 및 중학교 자유학년제 코딩수학 등에도 도입할 수 있습니다. 이러한 코딩수학은 패펄트 교수의 컴퓨팅 사고력 역량과 구성주의 철학에 기반한 MIT 거북수학의 연장이며, 또한 고등수학에 나오는 집합과 논리,  3차원 도형의 방정식, 부등식의 영역 등과 연결되어 있습니다 !

 

 자세한 자유학년제 코딩수학은 SNU코딩수학 유튜브를 참고하세요 !!