TECH 으로 돌아가기
TECH HACKER NEWS 오늘 7분 읽기 22 READS

교육을 위해 설계된 언어, Logo가 지금도 개발자에게 던지는 질문

Logo는 Lisp의 방언으로 출발했지만, 처음부터 계산 성능이나 산업용 개발이 아니라 '배움을 위한 도구'라는 분명한 목적을 가지고 설계된 언어다. 흔히 화면 위 거북이(turtle)를 움직여 도형을 그리는 교육용 그래픽으로 기억되지만, 그 이면에는 상호작용성, 모듈성, 확장성, 자료형의 유연성이라는 설계 원칙이 일관되게 깔려 있다. MIT 미디어랩과 연결된 Logo Foundation이 정리한 이 언어의 구조를 다시 살펴보면, 오늘날 우리가 당연하게 여기는 인터프리터 기반 개발 경험과 점진적 프로그래밍의 원형을 확인할 수 있다.

즉각적 피드백이라는 학습 설계

Logo는 컴파일 버전도 일부 존재하지만 일반적으로 인터프리터 언어로 구현된다. 이는 성능상의 타협이 아니라 학습을 돕기 위한 의도적 선택이다. 명령어 하나하나에 대해 즉각적인 반응을 돌려주기 때문에, 사용자는 무엇이 잘못됐는지 그 자리에서 확인하며 디버깅과 학습을 동시에 진행한다. 오류 메시지도 서술적이다. 예컨대 'fowad'처럼 철자를 틀리면 그 단어가 기본 내장어(primitive)도 아니고 사용자가 정의한 프로시저도 아니라고 알려주고, 'forward'라고 제대로 쓰되 필요한 값을 빠뜨리면 명령을 실행할 정보가 부족하다고 짚어준다. 올바르게 'forward 100'을 입력하면 오류 없이 거북이가 100걸음 나아간다. 실패의 원인을 사람이 이해할 수 있는 언어로 되돌려주는 방식은, 지금의 개발 도구들이 지향하는 친절한 에러 리포팅과 맞닿아 있다.

작은 단어를 쌓아 올리는 프로그래밍

Logo 프로그램은 대개 작은 프로시저들의 모음이다. 텍스트 편집기에서 'to'라는 특수어 뒤에 프로시저 이름을 적고, 이어지는 줄에 정의를 쓴 뒤 'end'로 마무리한다. 사각형을 그리는 'square'를 정의하고, 이를 부품처럼 써서 꽃 모양의 'flower'를 만들고, 다시 'flower'를 이용해 정원 'garden'을 구성하는 식이다. 흥미로운 점은 이렇게 정의한 프로시저가 내장어와 완전히 동일하게 동작한다는 것이다. 실제로 Logo 프로그램을 들여다봐도 어떤 단어가 기본 내장어이고 어떤 것이 사용자 정의인지, 해당 구현을 잘 알지 않는 한 구분할 수 없다. 예를 들어 리스트에서 무작위 항목을 고르는 'pick'은 어떤 버전에서는 내장어지만 다른 버전에서는 직접 작성해야 하는데, 이를 사용하는 'who' 프로시저는 어느 쪽이든 똑같이 보이고 똑같이 작동한다.

이 특성은 Logo의 핵심 철학을 압축한다. 프로그래밍이란 언어에 어휘를 더해가는 일이며, 이미 아는 단어를 이용해 새로운 단어를 가르치는 과정이라는 것이다. 사람이 모국어를 익히는 방식과 닮았다는 이 비유는, 오늘날 함수를 조합해 추상화 계층을 쌓는 방식과 본질적으로 같다. 언어의 내장 기능과 사용자 정의가 문법적으로 구분되지 않는다는 점은, 표현력 있는 확장성을 갖춘 언어들이 추구하는 이상이기도 하다.

자료형을 감추어 문턱을 낮추다

Logo는 단어(word)와 리스트(list)를 다룬다. 단어는 문자열이고, 리스트는 단어와 리스트로 이루어진 순서 있는 모음이다. 숫자도 단어이지만 산술 연산이 가능하다는 점에서 특별하다. 많은 언어가 데이터의 종류를 엄격히 요구해 정수인지 실수인지 미리 밝히게 하는데, 이는 컴퓨터에는 편하지만 프로그래머에게는 부담이다. 반면 Logo는 이런 구분을 대신 처리해 산술을 요청하면 그냥 계산한다. 다른 언어에 익숙한 사람이라면 재귀로 팩토리얼을 계산하는 'factorial'이나, 'first'와 'butfirst', 'sentence' 같은 연산으로 리스트를 뒤집는 'reverse' 프로시저의 간결함에 놀랄 수 있다. 자료형의 명시를 요구하지 않는 이 유연함은 학습자의 진입 장벽을 낮추는 동시에, 동적 타이핑 언어가 가진 표현의 자유와 그 대가라는 오래된 논점을 그대로 담고 있다.

확장된 구현과 병행성의 실험

지금까지의 특징은 모든 Logo 버전에 공통되지만, 일부 구현은 강화된 기능을 더했다. 매킨토시용으로는 객체지향 방식의 Object Logo가 있었고, MicroWorlds Logo와 LEGO Logo 계열의 Control Lab 소프트웨어는 여러 독립 프로세스를 동시에 돌리는 멀티태스킹을 지원했다. 더 대규모의 병렬성을 다루는 StarLogo도 등장했다. 전통적 Logo에서 'repeat 9999 [forward 1 right 1]' 뒤에 'print'를 두면 거북이가 다 움직인 뒤에야 'HELLO'가 출력되지만, 'launch'로 프로세스를 띄우거나 'forever'로 무한 반복을 시작하면 프로세스가 개시되자마자 'HELLO'가 나타난다. 순차 실행과 병행 실행의 차이를 이렇게 몇 줄로 체감시키는 방식은, 비동기와 동시성을 처음 접하는 이에게 강력한 직관을 제공한다.

결국 Logo가 남긴 것은 특정 문법이 아니라 설계 태도다. 도구가 사람의 학습 곡선에 맞춰야 한다는 전제, 즉각적 피드백과 서술적 오류, 작은 단위의 조합, 자료형의 은폐라는 선택은 모두 '누가 이 언어를 쓰는가'라는 질문에서 출발했다. 다만 그 목적성은 한계이기도 하다. 정적 타입이 주는 안전성이나 컴파일 최적화, 대규모 협업을 위한 구조 같은 실무의 요구는 이 설계의 관심 밖에 있었다. UCBLogo나 FMSLogo, StarLogo 계열이 여전히 내려받아 쓸 수 있는 형태로 남아 있는 만큼, 실무자라면 이를 현역 도구로 보기보다 언어 설계에서 사용자 경험을 어디까지 우선할 수 있는지 되짚어보는 참고점으로 삼는 편이 적절하다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://el.media.mit.edu/logo-foundation/what_is_logo/logo_p...
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기
처리 중...