[576] 22. Unplugged SW 활동
현재 실과 SW 교육과정은 천편일률적으로 블록 기반 프로그래밍 도구 - 거의, 엔트리 - 를 활용하고 있습니다. 엔트리를 활용하기 전, 간단하게 소프트웨어가 뭐냐, 소프트웨어가 하는 일이 뭐냐, 절차적 사고가 뭐냐, 이야기 한 후 바로 프로그래밍. 그나마도 절차적 사고나 알고리즘을 위한 사고를 목적하기 보다는 그저 방법적으로 안내하는 정도. 이걸 하기 위해서는 이렇게 저렇게 해라 정도 수준에서 그치고 있습니다.
초등학교 교실에서는 방법의 안내보다, 과정에서의 다양한 시도, 사고하는 경험을 안내하는 것이 훨씬 중요하다고 생각하고 있습니다. 시도하고 경험하면서 자연스럽게 동기가 생기면, 그 다음에 스스로 방법에 대해 도전하도록 하는 것이 더 효과적인 접근이라 생각하고 있습니다.
마침 SW 단원을 마친 후 시간이 조금 남아서, 이런저런 언플러그드 활동을 하면서, 다양한 시도와 사고하는 경험을 해 볼 수 있도록 운영해 보았습니다.
1. 하노이의 탑으로 알아보는 순차, 반복
1차시, 절차적 사고로 정리하는 하노이탑 이동의 원리 - 원격 등교
알고리즘은 절차적 사고를 통하여 구축됩니다. 절차적 사고란, 마치 물 흐르듯이 이루어지는 전체 작업을 살펴보며 그 속에 일의 순서와 위계가 있음을 알아차릴 수 있는 역량을 말합니다. 이것이 중요해지는 이유는, 우리가 일을 시켜야 하기 때문입니다. 그래도 사람에게는 경험을 토대로 적당히 묶어 지시해도 괜찮지만, 하양 백지 상태인 컴퓨터에게는 그렇게 지시할 수 없기 때문에 절차적 사고가 중요하게 여겨지고 있습니다.
이번 시간에는 이를 토대로 알고리즘적 사고가 무엇인지 배워보고자 하였습니다. 준비한 것은 '하노이탑 문제'입니다.
하노이탑(사진 출처: 위키백과)
하노이탑이 왜 하노이탑인지는 모르겠지만 - 참고로, 하노이는 베트남의 수도입니다 - 보통 주어지는 '하노이탑 문제'는 한 쪽 기둥에 크기 순으로 쌓여 있는 원판을 다른 쪽 기둥으로 옮길 때의 횟수를 구하는 것을 말합니다. 이 때, 옮길 때의 조건이 있습니다.
- 원판 하나를 옮기는 것이 한 번이다.
- 작은 원판 위에 큰 원판이 올 수 없다.
위 상황은 여덟 개의 원판이지만, 저는 일곱 개의 원판으로 이루어진 하노이탑을 보여주고는, 원래의 하노이탑을 다른 기둥으로 완전히 옮기기 위해서 원판을 몇 번 옮겨야 할까라는 문제 상황을 제시하였습니다.
단박에, 열 네 번이요, 라는 대답이 나왔습니다. 이유를 듣지도 않고 '1번 기둥에서 차례대로 2번 기둥으로 다 옮기고, 그런 다음 3번 기둥으로 다 옮기면 열 네 번에 옮겨지겠지. 그런데, 그러면 두 번째 조건에 위배되잖아?'라고 사자후를 내뱉었습니다. 뭐, 횟수만 들어도 왜 그렇게 생각했는지 알 수 있겠더군요.
그런데, '선생님, 저도 열 네 번인데, 저는 이유가 달라요'라는 말이 나왔습니다. 응? 아이의 설명: 원판 하나를 뽑아서 바닥에 내려놓고, 또 하나를 뽑아서 바닥에 내려놓고... 흐음... 흐으으으음...
결국 조건을 더 명확하게 수정하였습니다.
- 원판 하나를 기둥에서 뽑아내어 다른 기둥에 끼우는 것이 한 번이다.
위 작은 에피소드를 통해, 닫힌 계를 주고 문제 상황을 풀어보라는 문제 상황이 어린이들에게는 그리 어울리지 않는다는 것을 느낄 수 있습니다. 우리는 항상 '창의적 사고', '열린 사고'를 하는 것이 중요하다고 말하지만, 교육과정 자체는 어린이들을 작은 세계에 가두어두고 그 세계 안에서만 사고하도록 안내하고 유도하고 있는 듯 합니다. 그러면서 그것을 빠르게, 능숙하게 해 내는 학생들에게 '영재'라는 칭호를 붙여 우대하고 있습니다.
물론, 말도 안되는 생각까지 '창의적'이라고 추켜 세울 필요는 없겠지만, 적어도 교육과정이 열린 상황 속에서 어린이들로 하여금 조금 더 다채롭게, 독창적으로, 유연하게 생각해 볼 수 있도록 해 주어야 합니다. 이 정도면 교육과정이 충분히 대강화되었다, 고 생각해 왔는데, 이번 시간의 경험은, 교육과정이 조금 더 대강화되어야겠다, 라는 생각을 해 보는 시간을 만들어 주었습니다. 어쨌든.
이런 상황에서 문제 상황을 다이렉트로 해결하는 것은 요원합니다. 게다가, 이번 시간에는 Zoom이 계속 버벅거렸습니다. 실시간으로 원판을 옮기는 과정을 보여주며 이해를 도우려고 하였지만, 실제 원판을 옮긴 후 5~10초는 되어야 화면의 원판이 옮겨졌습니다. 물론, 일단 행동한 후, 전송되는 상황을 보면서 설명을 이어가도 되지만, 어린이들에게 전송되는 데이터량이 각 가정의 온라인 연결 상황과 또 다 다른지라... 그래서 문제 상황에서의 원판을 네 개로 줄였습니다. 그래도 다들 어렵... 아마도 원격 등교 상황이었기 때문에 더하지 않았을까 싶기도 합니다.
원판을 네 개로 줄인 후, 문제 상황을 알아보기 위해 기호화 해 봅니다:
- 기둥은 1번 기둥(현재 원판이 있는 기둥), 2번 기둥, 3번 기둥
- 원판은 가장 작은 것이 1번, 차례대로 2, 3, 4번
이제 일의 단계를 나누어 봅니다:
- 1단계: 1번 기둥의 1번 원판을 2번 기둥으로 옮김
- 2단계: 1번 기둥의 2번 원판을 3번 기둥으로 옮김
- 3단계: 2번 기둥의 1번 원판을 3번 기둥으로 옮김
이렇게 해서 가장 위의 두 원판을 다른 기둥으로 옮겼습니다. (물론, 가장 위의 한 원판을 다른 기둥으로 옮기는 것부터 해야 정확하겠지만, 어린이들이 명확하게 이를 이해하지 못할 것이라고 생각하여 두 원판부터 시작합니다) 이제, 가장 위에 있던 세 개의 원판을 하나의 기둥으로 옮겨봅니다:
- 4단계: 1번 기둥의 3번 원판을 2번 기둥으로 옮김
- 5단계: 3번 기둥의 1번 원판을 1번 기둥으로 옮김(오오!)
- 6단계: 3번 기둥의 2번 원판을 2번 기둥으로 옮김
- 7단계: 1번 기둥의 1번 원판을 2번 기둥으로 옮김
이렇게 해서 가장 위의 세 원판을 다른 기둥으로 옮겼습니다. 이제 네 번째 원판까지 옮겨서 모든 원판을 다른 기둥으로 옮겨 봅니다:
- 8단계: 1번 기둥의 4번 원판을 3번 기둥으로 옮김
- 9단계: 2번 기둥의 1번 원판을 3번 기둥으로 옮김(오오!)
- 10단계: 2번 기둥의 2번 원판을 1번 기둥으로 옮김
- 11단계: 3번 기둥의 1번 원판을 1번 기둥으로 옮김
- 12단계: 2번 기둥의 3번 원판을 3번 기둥으로 옮김
- 13단계: 1번 기둥의 1번 원판을 2번 기둥으로 옮김
- 14단계: 1번 기둥의 2번 원판을 3번 기둥으로 옮김
- 15단계: 2번 기둥의 1번 원판을 3번 기둥으로 옮김
드디어 1번 기둥의 원판 네 개를 조건을 만족하면서 3번 기둥으로 옮겼습니다. 이와 같이 일이 이루어지는 과정을 절차적으로 분석한 것이 바로 절차적 사고입니다. 이것을 알고리즘 구축을 위해 어떻게 형식화할 수 있는지 다루었어야 하는데... 여기까지 하고 나니 시간이 다 지나가 버렸습니다. 다음 시간을 기약합니다.
2차시, 알고리즘으로 구현하는 하노이탑 이동의 원리 - 교실 등교
지난 시간 하노이탑을 이동시키기 위해 절차적 사고 단계로 정리한 것을 알고리즘 구현을 위해 압축하여 안내하였습니다.
원판 두 개를 다른 기둥으로 옮기는 절차,
- 1단계: 1번 기둥의 1번 원판을 2번 기둥으로 옮김
- 2단계: 1번 기둥의 2번 원판을 3번 기둥으로 옮김
- 3단계: 2번 기둥의 1번 원판을 3번 기둥으로 옮김
을 간단하게 나타내면 아래와 같이 나타낼 수 있습니다.
원판 1 - 다른 기둥
원판 2 - 또 다른 기둥
원판 1 - 또 다른 기둥
이렇게 간략하게 표현한 후, 원판 세 개를 다른 기둥으로 옮기는 절차,
- 1단계: 1번 기둥의 1번 원판을 2번 기둥으로 옮김
- 2단계: 1번 기둥의 2번 원판을 3번 기둥으로 옮김
- 3단계: 2번 기둥의 1번 원판을 3번 기둥으로 옮김
- 4단계: 1번 기둥의 3번 원판을 2번 기둥으로 옮김
- 5단계: 3번 기둥의 1번 원판을 1번 기둥으로 옮김
- 6단계: 3번 기둥의 2번 원판을 2번 기둥으로 옮김
- 7단계: 1번 기둥의 1번 원판을 2번 기둥으로 옮김
은, 아래와 같이 간략하게 나타낼 수 있습니다.
원판 1 - 다른 기둥
원판 2 - 또 다른 기둥
원판 1 - 또 다른 기둥
3번 원판 이동
원판 1 - 다른 기둥
원판 2 - 또 다른 기둥
원판 1 - 또 다른 기둥
즉, 원판 세 개를 다른 기둥으로 옮기는 절차는,
(원판 두 개를 다른 기둥으로 옮기는 절차) + (원판 3을 옮기는 횟수) + (원판 두 개를 다른 기둥으로 옮기는 절차)
로 압축할 수 있습니다.
이를 고등학교 수학에서는
로 표현합니다. 수학적 귀납법입니다. 우리가 이렇게 나타내는 것을 바로 '알고리즘적 사고'라고 말합니다.
알고리즘은 절차적 사고의 결과를 하나의 패턴으로 만들어낸 것을 말합니다. 우리가 초등학교에서 배우는 가장 유명한 알고리즘은 바로 '나눗셈의 세로셈 알고리즘'입니다.
따라서, 우리는 이와 같은 알고리즘적 사고를 바탕으로,
(원판 네 개를 옮기는 횟수)=7+1+7=15
(원판 다섯 개를 옮기는 횟수)=15+1+15=31
(원판 여섯 개를 옮기는 횟수)=31+1+31=63
(원판 일곱 개를 옮기는 횟수)=63+1+63=127
(등등등)
과 같이 나타낼 수 있게 됩니다.
그러나 이렇게 나타내는 것도 결국, 앞 단계의 값을 알아내야 하는 번거로움이 있으므로 더 간단하게 알아낼 수 있습니다. 이걸 하는 과정이 여러 가지 수열에서 일반항을 구하는 과정입니다. 위의 식을 일반식으로 나타내면,
과 같이 정리할 수 있게 됩니다. 물론, 초등학생들에게 수열 풀이를 보여줄 수는 없으니 직관적으로 안내하였습니다. 이렇게 정리할 때, 어린이들은 '원판 스무 개를 옮기는 횟수'를 구하기 위해서 원판 열 아홉 개를 옮기는 횟수를 구하지 않아도 된다는 것을 실감할 수 있게 됩니다.
두 시간에 걸쳐, 어린이들은 어디에선가 보았던 하노이탑이라는 교구 속에 담긴 문제 상황에서 절차적 사고와 알고리즘이 활용됨을 경험할 수 있습니다. 이것만이라도 안다면, 어린이들은 성취기준의 기본 성취수준에는 도달했다고 볼 수 있겠지요.
2. 픽셀아트로 알아보는 컴퓨팅 커뮤니케이션
1차시, 나의 캐릭터 또는 아이콘 만들고 이를 설명하기 - 교실 등교
픽셀아트라는 키워드로 검색하면, 다양한 표현 활동 결과물을 볼 수 있습니다. 어떤 경우에는 언플러그드 코딩 수업, 이라는 이름을 달고 활동하기도 합니다. 그러나 많은 사례들을 보았을 때 그저 색칠공부에 불과하거나, 혹은 이의 원리를 이진수의 원리로 이해시키는 정도에서 끝나는 경우가 대부분인 듯 합니다.
생각해보면 교사 연수에서도 비슷한 수준이었던 듯 싶습니다. 0과 1로 표시한 수열을 보여주고, 이를 어떻게 픽셀아트로 표현할 수 있는지 알려준 후, 거기에서도 색칠공부를 했었습니다. 스스로 코딩할 기회는 없었던 셈이죠.
이를 의아하게 여기던 차, 저는 조금 다른 방식으로 배워보고자 하였습니다.
어린이들에게 우선 15*15 의 격자 무늬를 주었습니다. 이 안에 자신이 꾸미고 싶은 아이콘 혹은 캐릭터를 검정과 하양을 써서 자유롭게 꾸며보도록 하였습니다. 그러나 여기에서 끝내지 않고, 자신이 만든 아이콘 혹은 캐릭터를 다른 어린이에게 전달하기 위해 이를 말로 설명해 보도록 하였습니다. 이 설명만 듣고 캐릭터 혹은 아이콘을 똑같이 따라 그리는 활동을 이어서 하겠다는 안내를 더하였습니다. 어린이들은 임의의 친구에게 자신의 아이콘 혹은 무늬를 어떻게 말로 설명할지 써 보았습니다.
어떤 어린이들은 캐릭터 또는 아이콘의 모습을 이미지를 떠올리며 설명하였습니다. 내 아이콘은 이런저런 모양을 가지고 있는데, 위는 이런 모양, 왼쪽은 저런 모양... 그러나 어떤 어린이들의 설명은 딱 보아서는 이미지를 떠 올릴 수 없는, 기호의 형태였습니다. 대체로 둘 중 하나. 그래서 기호의 형태로 설명한 어린이들에게 물었습니다. 혹시 이런 활동에 대해 배운 적 있니? 배운 적 있는 친구들도 있고, 없는 친구들도 있었습니다.
사람에게도, 컴퓨터에게도, 정확한 방식의 커뮤니케이션은 디지털 부호화되어야 합니다. 우리가 말로 보내는 메시지도, 사실 모두 다 디지털화되고 이를 번역, 또 번역하여 옮겨지는 것입니다. 인간의 '정확한 메시지 전달'과 디지털에서의 '정확한 메시지 전달'은 그래서 차이가 있습니다.
2차시, 나의 캐릭터 또는 아이콘에 대해 설명하여 그리게 하기 - 원격 등교
지난 시간 표현한 것을 바탕으로 소그룹방에 둘씩 짝지어 넣은 후, 서로 상대방의 설명을 들은 후 상대방이 그린 캐릭터나 아이콘에 대해 그려보도록 하였습니다.
그런 다음, 자신의 방법과 친구의 방법 중 어떤 것이 더 효과적인지 그 이유와 함께 남겨보도록 하였습니다.
온라인 클래스에 제출한 후, 온라인 월드 카페를 진행하였습니다. 다른 친구의 게시글에 들어가 읽어본 후, 다른 친구의 방법을 평가하는 것. 이와 같이 수행한 후, 전반적으로 활동에 대한 안내를 수행하였습니다.
아마도, 디지털에서의 정확한 메시지 전달을 의도한다면 어린이들은 아마 이미지를 데이터화하게 될 것입니다.
가장 기초적인 단계로는, 왼쪽 제일 위칸은 하양, 옆으로 가면서 하양, 검정, 검정, 하양... 이런 식으로 말입니다.
그러다가 이게 너무 길기도 하거니와 쓰기도 번거롭다는 것을 알게 되면서 기호화 할 것입니다. 제일 윗칸이 열 다섯 칸이니까, 하양을 0으로 검정을 1로 표시하여 수를 만들겠지요. 0110111··· 같이.
그러다가, 많은 언플러그드 코딩 수업에서 선제적으로 제시하는 것처럼 이를 간추리겠지요. 첫 수는 연속하는 하양색의 개수이고, 다음 수는 연속하는 검정색의 개수··· 위의 0과 1을 이와 같이 나타내면 1, 2, 1, 3, ··· 이 되겠지요?
이와 같이 메시지를 데이터화 한 후, 어린이들은 이제 이를 어떻게하면 오류없이 전달할 수 있는지도 고민해야 합니다. 이는 다음 년도의 과제로 넘기고...
이후 어린이들에게, 검정과 하양을 포함해서 여섯 가지 색을 사용하여 캐릭터 혹은 아이콘을 만든다면 어떻게 메시지를 전달할 수 있겠는가 물은 후, 이후 두 시간을 똑같이, 대신 다양한 색을 활용하여 활동하여 보았습니다.
아쉬운 것은 교실에서 함께 이야기 나누었어야 하는데, 이후 활동을 전부 원격으로 수행한 부분입니다. 밀도가 조금 떨어진 아쉬움...
몇 명의 어린이들 과제만 받아서 보니, 색에 넘버링 하고 이를 순서쌍으로 표시한 어린이도 있고, 넘버링한 것으로만 표현한 어린이도 있고, 넘버링과 언어 기호를 함께 사용한 어린이도 있습니다.
- 어떤 것이 더 간결한가
- 어떤 것이 더 효율적인가
- 어떤 것이 오류 가능성이 낮은가
에 대한 이야기를 할 때, 코딩에 대한 기본적인 의문을 되새길 수 있는데... 갑작스런 원격 등교 상황이 이후 활동의 밀도를 떨어뜨린 것은 아쉬움이 있습니다.
학원 같은 곳에서는 이렇게 배우기 어렵습니다. 문제 상황을 주고 답을 알려줘야 한다고 생각하니까요. 이는, 학교에서나 가능한 방식의 배움입니다. 학교에서라도, 실제로 어린이들이 언플러그드로 코딩해 볼 수 있도록 더 많이 고민하고 시도해야 합니다.
3. 다른 언플러그드 SW 활동
야구게임도 같이 해 보았습니다.
야구 게임은 상대편이 마음 속으로 생각한 세 자리(혹은 네 자리) 수를 알아맞추는 활동입니다. 한 편이 세 자리 수를 물으면, 상대편은 이에 대해
- 자리와 수가 일치하는 경우, 스트라이크
- 수만 일치하는 경우, 볼
로 알려줍니다.
예컨대, 마음 속으로 497을 생각하고 있었는데, 한 편이 917을 물은 경우,
- 자리와 수가 일치하는 7은 스트라이크
- 수만 일치하는 9는 볼
이므로, '원 스트라이크 원 볼'로 알려줍니다.
데이터를 정렬하여 판단하는데 도움을 받을 수 있는, 절차적 사고를 위한 언플러그도 활동이 될 수 있습니다.
보드게임도 활용하곤 합니다.
절차적 사고를 경험할 수 있는 보드게임으로는 달무티, 리코체 로봇 정도를 추천하곤 합니다. 두 보드게임은 보드게임으로써의 재미도 있을 뿐만 아니라, 절차적 사고를 기초적으로 체험할 수 있다는데 그 의미가 있다고 할 수 있습니다.
보드게임 중에서는 프로그래밍 보드게임도 있습니다. 히말라야, 로보랠리가 가장 재미있게 경험할 수 있는 프로그래밍 보드게임이지만, 초등 교실에서는 조금 난이도가 있기도 하거니와 요즘은 구하기 어려운 측면도 있습니다. 피라니아와 콜트 익스프레스 보드게임도 프로그래밍 요소가 있는 보드게임으로, 개인적으로 두 보드게임 다 재미가 없어서 안 쓰는데, 연수 가서 소개해 드렸을 때, 선생님들 반응이 너무 좋았던 기억도 있습니다.
단조롭게 컴퓨터 혹은 태블릿으로 블록 기반 프로그래밍 도구를 활용한 단순 작업에 머무르는 것이 아닌, 조금 더 어린이들의 다양한 어울림이 이루어 질 수 있도록, 효과적인 언플러그드 활동을 고민하고 시도할 필요가 있습니다.
아에드 인 마이오렘 델 글로인