brunch

You can make anything
by writing

C.S.Lewis

by 판뚜 Jul 03. 2019

훌륭한 코딩 교육 도구 '슈퍼마리오 메이커'

개발자의 관점에서
'슈퍼마리오 메이커'를 바라보았습니다.


슈퍼마리오 메이커 2. (2019)


슈퍼마리오 이야기


슈퍼마리오 브라더스 1. (1985)

제 나이 또래라면 아마 이 게임에 대한 설명은 굳이 필요하지 않을 것입니다. 게임 방법은 간단합니다. 오른쪽으로 달리며 적을 물리치고, 장애물을 피해 골인 지점으로 가는 게임입니다. 이 작품을 통해 닌텐도는 세계 최고의 게임회사가 되었고, 슈퍼마리오는 전 세계 어느 누구도 모르는 사람이 없는 닌텐도의 대표 캐릭터가 되었습니다.


슈퍼마리오 오디세이. (2017)

가로 스크롤 형태의 게임으로 시작한 이 시리즈는 30년이 넘는 시간 동안 슈퍼마리오 오디세이처럼 3D 오픈월드 방식의 게임으로까지 진화하였습니다. 하지만 여전히 전통적인 방식을 찾는 유저들도 꽤 많기에 닌텐도는 꽤 최근까지도 '슈퍼마리오 브라더스 U'를 출시한 바 있습니다.


하지만 가로 스크롤 게임은 한계가 있습니다. 단순히 코스 패턴에 여러 변화를 주는 것 말고는 재미를 줄 만한 요소가 없기 때문에 쉽게 질립니다. 최근의 여느 다른 게임들처럼 화려한 그래픽이 녹아있지도 않고, 대결 상대를 이김으로써 얻는 쾌감도 없습니다. 그렇다고 이 안에 스토리를 녹여내기도 애매하고..


https://youtu.be/KJa03PbbNNI

슈퍼마리오 메이커 2 소개 영상. (2019)

닌텐도는 이 점을 그 누구보다도 잘 알고 있었습니다. 하지만 분명히 이런 방식을 원하는 (저와 같은) 수많은 팬들을 외면할 수도 없었을 겁니다.


그래서 나온 게 '슈퍼마리오 메이커'입니다. '메이커'라는 제목에서 알 수 있듯이 코스를 직접 만들 수 있습니다. 코스 구성에 대한 자유도를 전적으로 유저들에게 돌려 더 많은 다양성을 꾀한 것입니다. 만들어진 코스를 인터넷을 통해 서로 공유하고, 함께 즐깁니다. 참으로 간단하면서도 놀라운 발상입니다.


https://youtu.be/ipNkogjP5U4

가만히 있어도 재미를 느낄 수 있는 '오토 마리오 코스'.

유튜브 등에서 찾아보시면 알겠지만 센스가 돋보이는 코스도 많이 있고 변태같이 어려운 난이도의 코스도 상당히 많습니다. 또 위 영상처럼 가만히 있기만 해도 여러 아이템 및 적들을 재밌게 지나가서 골인시키는 '오토 마리오' 형식의 코스, 움직이기만 해도 노래가 나오는 작곡형의 코스도 있는 걸 보면 유저들의 창의력은 실로 끝이 없다는 생각이 듭니다.


그런데, 이게 어떻게 코딩 교육 도구가 될 수 있다는 걸까요?




대체 '코딩 교육'이 뭔가요?


사실 '프로그래밍 교육'이 더 정확한 표현입니다. 프로그램을 만드는 도구로서 컴퓨터와 대화하기 위해 사용하는 것이 바로 '코드(code)'인데요. 코드를 짜는 행위를 '코딩(coding)'이라고 합니다.


스마트폰의 대중화와 함께 앱 개발이 인기를 끌기 시작하면서 너도나도 코딩에 빠져들기 시작했습니다. 심지어 초등학생들도 코딩을 배운다고 하니 그 인기가 대단한 것 같습니다.


개인적으로 어린이 코딩 교육에 대해서는 부정적인 생각을 갖고 있었습니다. 절차적이고 논리적인 사고를 기르는 게 우선이지, 기계적으로 코드부터 입문하는 게 과연 이 산업에 도움이 될까 하는 우려 때문이었습니다.


코딩 교육에 사용되는 '스크래치'.

다행스럽게도 제 우려는 빗나갔습니다. '스크래치'라는 재밌는 툴을 이용하여 '코드'가 아닌 '생각하는 방법'에 초점을 두어 가르치고 있었기 때문입니다. 아래는 스크래치 프로그래밍의 예시입니다.


위 고양이를 움직이게 하는 프로그램을 만든다고 가정합시다.

어떤 이벤트에?
→ 고양이를 선택했을 때 수행합니다.

어떤 작업을?
→ 아래 작업을 5번 반복합니다.

어떤 작업을 반복?
→ (1) '캣캣캣'이라고 1초간 말합니다.
→ (2) 20만큼 오른쪽으로 이동합니다.
→ (3) 5만큼 왼쪽으로 이동합니다.
→ (4) 1초 뒤에 먹이를 먹습니다.         


이런 프로그램을 코드가 아닌 재밌는 도구를 통해 만들 수 있었습니다. 위 이미지 오른쪽처럼, 마치 장난감 같은 코드 블록을 배치하면서 말이죠.




프로그래밍 도구 '슈퍼마리오 메이커'


슈퍼마리오 메이커가 할 수 있는 일들도 비슷합니다. 위의 스크래치에서는 고양이를 움직이게 하는 것이 프로그램의 목표였는데요. 이 슈퍼마리오 메이커에서는 '마리오를 골인지점까지 재밌게, 스릴 있게 오게 하는 코스를 제작하는 것'이 프로그램의 목표라고 할 수 있겠습니다.


위 고양이 프로그램과 같이 이 또한 절차적인 사고가 필요합니다. 캐릭터를 어떻게 위험에 빠트릴 것인지, 어떻게 아이템을 획득하고 어떻게 그 아이템 및 적 캐릭터를 활용하게 할 것인지 등의 절차와 동선을 모두 고려해야 하기 때문입니다.


여러 파츠들.

각 파츠들은 자신만의 속성을 가집니다. 위에서 고양이에게 말을 시키고, 움직이게 했던 것처럼 이 파츠들의 배치를 통해 마리오를 크게 만들 수도 있고 (버섯), 움직이게 할 수도 있고 (스네이크 블록), 죽게 할 수도 있습니다. (굼바, 엉금엉금, 쿠파 등의 적들)


파츠 배치.

스크래치에서 코드 블록을 배치해 여러 작업들을 나열한 것처럼 슈퍼마리오 메이커에서는 여러 파츠들을 배치하게 됩니다.


진행하다 보면 어느새 어떤 조건에서 블록을 활성화/비활성화시키며 (조건 처리 문), 혹은 몇 개의 조건을 충족해야 다음 단계로 넘어가는 열쇠를 얻을 수 있는지 (조건 처리 문), 몇 번 수행해야 그 열쇠를 획득할 수 있는지 (반복문) 등의 설계를 통해 프로그래밍의 흐름 제어문 개념을 자연스럽게 익히게 됩니다.


https://youtu.be/H3Kr6Q6krCI

위는 on/off 스위치를 이용하여 코스를 만드는 여러 예시입니다. 동선에 따라 적절한 위치에 배치해야 하고, 적절한 타이밍에 그것을 잘 이용해야만 클리어할 수 있는 코스입니다. 개발자의 관점에서 위 영상은 '개발 패턴 예시'로 볼 수 있겠습니다.


바로 플레이도 가능.

코드 작성 후 그 프로그램이 틀린 게 없는지, 다른 버그가 없는지 확인해야 합니다. 실제 개발자들도 코딩한 내용을 확인하기 위해 실행(Run)을 하고, 잘못된 부분을 수정(Debugging)합니다. 디버깅이 완료되고 만족스러운 결과물을 얻었다면 배포(Deploy)를 합니다. 배포란 실서비스에 적용될 수 있도록 하는 행위를 말하는데요. 앱 개발자의 경우 앱스토어에 등록하는 것과 같습니다.


슈퍼마리오 메이커도 같습니다. 자신이 배치한 파츠들이 실제 내가 의도한 대로 작동하는지 확인하려면 즉각 테스트 플레이(Run)를 할 수 있습니다. 만약 잘못되었다면 파츠의 위치를 조정하거나 다른 파츠로 변경(Debugging)합니다. 만족스러운 결과물을 얻었다면 유저에게 코스를 공유(Deploy)합니다.


여러 IDE 선택지.

개발자들은 프로그래밍의 목표를 수행하기 위해 IDE(통합 개발 환경, Integrated Development Environment)를 이용합니다. IntelliJ, Eclipse, Xcode, Visual Studio 등을 한 번쯤 들어보셨을 텐데요. 코딩, 빌드, 실행, 디버깅, 배포 등의 작업등을 쉽게 할 수 있도록 해주는 도구라고 보시면 됩니다. 얼마나 더 많은 기능이 있는지, 얼마나 더 쉽게 되어있는지 등에 따라 개발자의 선호도가 달라집니다.


그런 의미에서 슈퍼마리오 메이커 2는 굉장히 훌륭한 IDE라고 볼 수 있습니다. 파츠 배치(코딩), 실행, 디버깅, 배포를 굉장히 매끄러운 UX를 통해 쉽게 수행할 수 있기 때문이죠.




그냥 게임일 뿐이잖아요?


맞습니다. 게임입니다. 다만 프로그래밍적 요소를 담고 있는 게임입니다. 다만 코드를 사용하는 대신 파츠를 배치하는 것뿐이죠. 물론 동의하지 않는 분들도 계실 거라 생각합니다.


그렇다면 다르게 질문을 해보고 싶습니다. 완벽하게 동일한 코스를 제작하는데 한쪽은 파츠 배치를 통해 만들고, 다른 한쪽은 파츠 배치가 아닌 Unity 코드로 작성했다면 이것은 서로 다른 걸까요? 전자와 후자는 각각 게임일까요? 코딩일까요?


파츠 배치가 너무 재밌던 나머지 식음을 전폐해버렸다면, 그것은 게임이 사회악이라는 증거가 될까요? 반면에 Unity를 통해 실제 코드로 코스를 만들면서 공부하느라 식음을 전폐했다면, 이것은 지극히 교육적인 관점에서 감수해야 할 부분일까요?




마치며


무엇이든지 적당히 하면 도움이 되고, 지나치면 해가 됩니다. 모든 것엔 배울 점이 있으니까요.




작가의 이전글 신입 개발자에게 하고픈 말 - 있는 걸 갖다 쓰자
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari