- 중·고등학생을 위한 12회 프로그래밍 수업에서 문법보다 기초 개념에 집중하고자, 1970년에 나온 스택 기반 연결형 언어 Forth를 선택함
- 종이 접시로 후입선출 구조와 연산을 직접 수행한 뒤 컴퓨터로 옮겨, 학생들이 Forth 인터프리터의 동작을 몸으로 이해하도록 구성함
- 설치가 필요 없는 Easy Forth에서 그림·애니메이션·게임을 최종 과제로 삼았으며, 학생들은 Snake의 규칙과 색상을 바꾸거나 픽셀 단위 작품을 완성함
- Forth는 문법 부담이 적지만 초보자가 스택 같은 저수준 구조를 일찍 다뤄야 했고, 입문 수업에는 즉각적인 시각 피드백을 주는 Scratch가 더 나았을 가능성도 있음
- 특정 언어보다 결과를 빠르게 확인하고 스스로 탐색할 수 있는 환경이 중요하며, LLM 의존으로 기술을 배우거나 유지하지 못할 위험이 커질수록 사람 중심 교육이 더 필요함
Forth를 선택한 이유
- Python이나 Scratch 대신 스택 기반 연결형 언어 Forth를 선택해 흔히 시도되지 않는 교육 경로를 탐색함
- 제한된 수업 시간에 기초 개념을 다루기 위해 문법 교육에 드는 부담을 피하고자 했음
- Python은 프로그래밍 경험자에게 의사 코드처럼 읽히지만, 처음 배우는 사람에게는 여전히 이해하기 어려웠음
- 후보 언어는 Forth와 Haskell이었음
- Forth는 명령을 작성된 순서대로 실행하므로, 스택을 이해하면 프로그램을 만들 수 있다는 점이 매력적이었음
- Haskell은 수학에서 배우는 변수와 함수 개념에 잘 맞아, 변수를 값을 담는 상자로 취급하는 일반적인 프로그래밍 방식의 혼란을 피할 수 있었음
- 최종적으로 Forth를 고른 데에는 두 가지 이유가 있었음
- 맞춤형 학습 환경에 통합하기 쉬웠음
- 교실의 최종 시연에서는 함수형 프로그래밍보다 절차적 프로그래밍이 이해하기 쉬울 것으로 판단함
- 잘 알려지지 않은 언어를 사용하면 프로그래밍 경험이 있는 학생도 새로운 것을 배우고, 초보자 역시 소외되지 않을 수 있었음
12시간 교육과정 설계
- 수업은 주 1회, 회당 1시간씩 총 12회 진행했으며 수업 외 과제를 많이 수행할 것으로 기대하지 않았음
- 최종 목표는 Forth 환경에서 그림, 애니메이션, 게임 중 하나를 직접 만드는 것이었음
- 과정이 끝난 뒤에도 눈으로 확인하고 보관할 결과물을 남기려 했음
- 기술적인 내용을 많이 배웠지만 손에 남는 것이 없다고 느끼는 상황을 피하고자 함
- 학생마다 운영체제가 다르고 일부 기기에는 외부 소프트웨어를 설치할 수 없어, 별도 다운로드나 설치 없이 각자의 컴퓨터에서 코드를 실행할 수 있어야 했음
- 처음에는 Rust로 Forth를 직접 구현해 WASM으로 수업 웹사이트에 내장하려 했지만, 버그 수정에 예상보다 오랜 시간이 걸려 계획을 바꿈
- Nick Morgan의 Easy Forth를 교육과정 겸 인터프리터로 채택하고, 수업별 슬라이드와 수업 계획, Easy Forth 사본을 온라인 포털에 올림
컴퓨터의 개념부터 시작한 수업
- 첫 수업에서는 컴퓨팅의 역사와 컴퓨터가 무엇인지부터 다룸
- 주판을 포함한 여러 장치를 보여주며 컴퓨터인지 질문한 뒤, 컴퓨터를 “숫자를 계산하는 모든 것”으로 정의함
- 이 정의에 따르면 거의 무엇이든 컴퓨터가 될 수 있으며, 학생 자신도 포함될 수 있음을 발견함
- 컴퓨터의 범위에 대한 기존 인식을 넓힌 다음 Forth와 실제 활용 분야, 임베디드 응용을 소개함
- Easy Forth는 독자가 프로그래밍 언어 하나 이상과 스택 자료구조를 이미 안다고 가정했지만, 학생들에게는 해당 지식이 없어 별도 설명이 필요했음
종이 접시로 이해한 데이터 스택
- 컴퓨터를 사용하기 전에 Forth의 기반인 데이터 스택을 종이 접시로 시각화함
- 공백으로 구분한 숫자는 입력 순서대로 스택에 들어감
1 2 3을 입력한 뒤. . .으로 출력하면 마지막에 들어간 항목부터 나와3 2 1이 됨- 스택은 후입선출(Last-In First-Out) 구조로, 항목을 위에 넣는 push와 위에서 꺼내는 pop을 중심으로 동작함
- 학생마다 종이 접시를 받아 Forth 연산을 직접 실행함
- 숫자를 push할 때는 접시에 숫자를 적어 맨 위에 놓음
- 덧셈할 때는 맨 위의 두 접시를 꺼내 더한 뒤, 결과를 적은 새 접시를 올림
8 6 +는 두 값을 넣고 더해14를 스택에 올리는 연산임2 3 *는 두 값을 곱한6을 스택에 올림
- 여러 연산을 반복하며 학생들이 직접 Forth 인터프리터 역할을 수행함
- 컴퓨터가 이 작업을 자동화한다는 점을 이해한 뒤 실제 기기로 전환함
Easy Forth 실습과 최종 작품
- 매주 Easy Forth 수업을 따라 개념 설명, 연습 문제, 질의응답을 진행했으며 전체 과정은 특별한 문제 없이 이어짐
- 총 12시간 안에 완성하면서 학습 내용을 보여줄 최종 프로젝트로 Easy Forth의 그래픽 프레임워크를 활용함
- 그림, 애니메이션 또는 게임을 만들 수 있게 함
- 새로운 게임을 완성하기에는 시간이 부족할 수 있어, 내장 Snake 게임을 수정해 독창적인 결과를 만들도록 권함
- Easy Forth 플레이그라운드 코드를 별도 페이지로 추출하고, 한쪽에는 코드가, 다른 쪽에는 큰 그래픽 영역이 표시되도록 확장함
- 마지막 수업에서 학생들은 Snake 코드를 조금만 바꿔도 규칙과 색상이 달라진다는 점을 빠르게 발견함
- 대규모 리팩터링을 할 수준은 아니었지만, Forth를 두려워하지 않고 탐색·수정할 만큼 익숙해짐
- 내장 그래픽으로 사물을 그리는 방법과 선 같은 도형을 쉽게 그리는 새 단어를 만드는 예를 보여줌
- 모든 학생이 자신만의 작품을 선택했으며, 대부분 픽셀 단위로 그림을 제작함
- 과정이 끝난 뒤에도 학생들이 원하면 계속 실험하고 학습할 수 있도록 환경을 일정 기간 온라인에 유지함
Forth 교육을 통해 얻은 판단
- Forth는 흥미로운 교육 언어였지만 최선의 선택이었는지는 확실하지 않았음
- 까다로운 문법은 없지만, 많은 프로그래머가 추상화 아래에 두는 시스템 요소를 초보자가 직접 생각해야 했음
- 스택은 컴퓨터 과학의 기본 자료구조지만 초기 교육의 맨 앞에 둘 필요는 없음
- 코드를 단어의 연속으로 작성할 수 있다는 점은 강력했으며, 더 고수준 구성요소를 갖춘 연결형 언어도 교육에 유용할 수 있음
- Factor 같은 언어나 완전히 다른 접근도 후보가 될 수 있음
- 다시 선택한다면 내부 구조보다 명확하고 즉각적인 시각 피드백에 집중하는 매체를 고려할 수 있음
- Scratch는 저수준 세부사항 없이 제어 흐름, 변수, 함수 등을 가르치고 스프라이트를 쉽게 움직일 수 있음
- 특정 프로그래밍 언어 자체는 크게 중요하지 않으며, 짧은 과정에서도 학생들은 Forth를 효과적으로 배울 수 있었음
- 학생마다 잘 맞는 패러다임이 다를 수 있어 학습 과정을 완벽하게 미세 조정하기는 어려움
- 결과를 빠르고 반복적으로 확인하며 자기 주도적으로 탐색할 수 있는 환경이 중요함
- 학생들은 컴퓨터 과학의 기본 자료구조를 깊이 이해하는 저수준 입문 경험을 얻음
- 수업 진행자에게도 학생들에게 요구한 반복 학습과 같은 방식으로 교수법을 개선할 기회가 됨
LLM 시대에 필요한 사람 중심 학습
- 프로그래밍이 확률적 자동화에 의해 주도될수록 사람이 직접 프로그래밍하는 법을 가르치는 일이 더 중요해짐
- 이미 프로그래밍을 아는 사람도 LLM에 의존하면 기술이 퇴화할 수 있으며, 처음부터 배우지 않은 사람은 해당 기술을 아예 형성하지 못할 수 있음
- 새로운 기술을 배우려는 사람들도 평판 있는 자료 대신 LLM을 이용하는 경우가 늘고 있음
- LLM은 부정확할 수 있고, 사용자에게 아첨하는 성향이 있으며, 일부 사례에서는 정신 질환을 심각하게 악화시킬 수 있음
- 세상과 상호작용하는 법을 배우는 단계의 아이들에게 이런 특성은 더욱 위험함
- 배경과 관계없이 누구나, 특히 아이들이 프로그래밍 같은 기술을 배울 수 있는 사람 중심 환경을 제공해야 함
- 다양한 배경을 가진 사람들이 시간과 에너지를 들여 지식을 나누고, 추가 지식을 안전하게 얻는 방법도 가르칠 필요가 있음
- 전문 교사가 아니더라도 가르치는 법을 배우고, 사람 사이에서 지식이 자유롭게 흐르는 공간을 만들어야 함