1P by GN⁺ | ★ favorite | 댓글 1개
  • 중·고등학생을 위한 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을 이용하는 경우가 늘고 있음
  • 배경과 관계없이 누구나, 특히 아이들이 프로그래밍 같은 기술을 배울 수 있는 사람 중심 환경을 제공해야 함
  • 다양한 배경을 가진 사람들이 시간과 에너지를 들여 지식을 나누고, 추가 지식을 안전하게 얻는 방법도 가르칠 필요가 있음
  • 전문 교사가 아니더라도 가르치는 법을 배우고, 사람 사이에서 지식이 자유롭게 흐르는 공간을 만들어야 함

댓글과 토론

Lobste.rs 의견들
  • 아이와 청소년에게 비주류 컴퓨팅 도구와 언어를 접하게 하면, 컴퓨팅 분야의 폭과 문제 해결에 활용할 수 있는 다양한 접근법을 가르치는 데 효과적임
  • Forth를 무척 좋아하지만 교육용으로는 최선이 아닐 수 있음. 그래도 프로그래머라면 다양한 프로그래밍 패러다임을 접하는 것이 중요함
    Easy Forth는 좋은 자료로 보이며, 모든 프로그래머가 10분만 투자해 Forth를 체험해 보길 권함. 배우기는 매우 단순하면서도 익숙하고 사고방식을 뒤흔드는 언어이며, 고급 언어를 처음부터 급히 만들어야 할 때 구현하기도 쉬움
    • Forth의 대부분은 간단하지만 DOES> 같은 요소는 그렇지 않음
      Forth 구현은 재미있었지만 코드를 많이 작성할수록 덜 좋아하게 됐음. DUP, ROT, SWAP 같은 잡음 단어 때문에 흐름을 따라가기 어렵고, 선호하지 않는 전역 변수 사용도 장려하는 편임
  • 흥미로운 프로그래밍 언어를 배우기 좋아한다고 하자 친구가 Forth를 추천했으며, 실제로 배워볼 생각임
  • 현재 페이지에 접속할 수 없다면 다음 아카이브를 이용할 수 있음
    https://archive.ph/0ZOVa
    • 실제로는 페이지가 내려간 것이 아니라 ISP가 차단하고 있었음