본문으로 건너뛰기
피드

프로그래밍 언어는 사실 7개 가족이 전부다 — ur-language로 본 언어 계보

general 약 9분

madhadron은 세상의 모든 프로그래밍 언어가 ALGOL, Lisp, ML, Self, Forth, APL, Prolog 이렇게 7개 ur-language로 환원된다고 주장한다. 같은 가족 내 이동은 쉽지만 다른 가족으로 넘어가는 건 뇌의 신경회로를 새로 만드는 일이라 비싸다. 저자는 ALGOL 가족을 마스터한 다음 Prolog 가족(SQL)을 익히고, 그 후 매년 새 가족을 배우라고 권한다.

  • 1

    Java, C#, Python 중 뭘 배울지 고민하는 건 의미가 없다 — 전부 ALGOL 가족이라 실제 사고방식은 똑같다

  • 2

    JavaScript는 Smalltalk가 아닌 Self 계열이다. JS의 prototype chain이 거기서 나왔다

  • 3

    ALGOL 가족은 순수하지 않다. 클래스는 Self에서, 패턴 매칭은 ML에서, 람다는 Lisp에서 훔쳐왔다

  • 4

    SQL은 사실 Prolog 가족이다. 저자는 ALGOL 다음으로 SQL을 배우라고 강력 추천한다

  • 5

    Smalltalk를 빠르게 돌리려던 Strongtalk 프로젝트 성과가 Java의 HotSpot JIT 컴파일러 토대가 됐다

  • "자바 배울까 파이썬 배울까 C# 배울까?" — 이런 질문을 받을 때마다 madhadron은 "뭘 해도 상관없다"고 답해왔다고 함
    • 왜냐하면 저것들은 전부 같은 "ur-language(원형 언어)" 가족이기 때문
    • 정작 중요한 건 내가 익숙한 ur-language와 다른 가족의 언어를 배우는 것. 거기서 뇌의 신경회로 자체가 달라진다는 게 저자의 주장
  • 저자는 현재 소프트웨어에 7개의 ur-language가 존재한다고 봄
    • ALGOL / Lisp / ML / Self / Forth / APL / Prolog
    • 각 가족 내부의 언어를 익히는 건 쉽지만, 가족을 건너뛰는 건 시간과 노력이 상당히 든다고

ALGOL 계열 — 대부분이 여기 속한다

  • 특징은 단순함. 할당, 조건문, 반복문을 함수로 묶는 그 구조
    • C, C++, Java, C#, Python, Ruby, JavaScript, Pascal, Ada... 실무에서 쓰는 언어 대부분이 여기
    • 가장 오래된 가족이기도 함. Ada Lovelace가 Babbage 해석기관용 프로그램을 쓸 때부터 시작
  • 흥미로운 건 ALGOL 가족이 다른 ur-language에서 기능을 꾸준히 훔쳐왔다는 점
    • 1980년대엔 Self에서 "클래스"를 가져왔고 (그게 우리가 아는 OOP)
    • 2010년대부턴 ML에서 타입 시스템/패턴 매칭 같은 걸 가져오는 중

Lisp — 문법 자체를 재정의하는 언어

  • 괄호 속 prefix 표현식이 전부. (+ 2 3) 이런 식
    • 코드 자체가 리스트 자료구조라서 매크로로 언어 문법을 직접 수정 가능
    • Common Lisp의 loop 문법도 사실은 내장 문법이 아니라 매크로로 정의된 것
  • Fortran보다 1년 늦게 태어나서 지금까지 살아있는 두 번째로 오래된 언어
    • 1970년대 말~1980년대 초엔 Lisp 전용 머신까지 제작됨. 오늘날 IDE의 뿌리가 거기서 나옴
    • AI 연구의 주력 언어였지만 AI Winter와 함께 추락. 그래도 Clojure 같은 신흥 가지로 이어지는 중

ML — 타입 시스템과 재귀의 가족

  • 함수가 일급 값이고 Hindley-Milner 타입 시스템을 쓰는 게 핵심
    • 반복은 전부 재귀로. 아니면 반복 패턴을 캡슐화한 고차 함수로
    • Miranda와 Haskell은 "지연 평가(lazy)" 기본. 필요할 때까지 계산 안 함
  • Cambridge에서 정리 증명기의 메타언어(meta-language)로 시작해서 ML이란 이름이 붙음
    • Standard ML, OCaml, Haskell, 그리고 의존 타입 언어인 Agda, Idris까지

Self — 객체지향의 순수 형태

  • 프로그램은 메시지를 주고받는 객체들의 집합. 그게 전부
    • 조건문조차 true 객체와 false 객체가 각자 다른 함수를 실행하는 방식
    • 적절한 객체를 끼워넣으면 언어 의미 자체를 재정의할 수 있음
  • JavaScript가 Smalltalk가 아닌 Self 계열인 거 알고 있었음?
    • Smalltalk는 클래스 기반, Self는 클래스 없는 순수 프로토타입 객체 시스템
    • JS의 prototype chain이 여기서 나옴
  • Strongtalk 프로젝트가 역사적으로 중요한 이유
    • Smalltalk를 빠르게 돌리려는 연구의 결과물이 Java의 HotSpot JIT 컴파일러 토대가 됨
    • Erlang도 Self 계열에서 갈라졌는데, "객체 간 메시지"를 "병렬 스레드 간 메시지"로 바꾼 버전

Forth — Lisp의 거울상

  • 스택 기반. 2 3 + 5 * 처럼 거꾸로 쓰는 HP 계산기 문법
    • 함수는 명시적 파라미터 없음. 스택에서 꺼내쓰고 결과를 스택에 다시 푸시
    • 파서 자체를 프로그래머가 가로채서 교체 가능. 문법을 통째로 갈아엎을 수 있음
  • 1970년 전파망원경 제어용으로 만들어진 뒤 임베디드에서 퍼짐
    • PostScript가 Forth의 사촌. 프린터에 문서를 기술하는 용도로 1980년대 등장
    • Factor, Joy도 같은 계열

APL — 모든 게 배열

  • n차원 배열이 기본 단위. 연산자는 심볼 1-2개
    • 너무 간결해서 심볼 시퀀스 자체가 연산의 이름이 됨 (변수명이 없음)
    • Kenneth Iverson이 1960년대 수학 표기법으로 시작해 컴퓨터에 이식
  • APL의 후예 K는 금융권에서 엄청 인기가 있었음
    • MATLAB, NumPy, R도 APL의 고차 배열 연산을 부분적으로 수입한 결과

Prolog — 사실과 추론의 언어

  • 프로그램은 사실(fact)과 규칙의 집합. 질의를 던지면 런타임이 검색해서 답을 찾음
    • "Bob은 Ed와 Jane의 아버지다" 같은 ground fact와, 변수를 포함한 non-ground fact로 구성
    • 옳은 구조만 잡으면 튜링 완전함
  • 1980년대 일본의 5세대 컴퓨터 프로젝트가 Prolog에 올인했다가 실패하면서 같이 추락
    • 그래도 지금도 틈새에서 생존. Java의 타입 체커가 오랫동안 Prolog로 구현됐고, Facebook 초창기 소스 검색 도구도 Prolog였음

저자의 학습 추천 순서

  • 1순위: ALGOL 계열 하나를 확실히 익혀라 (어차피 다들 이미 하고 있음)
  • 2순위: SQL을 배워라. SQL이 Prolog 계열이란 사실
    • "ALGOL 다음으로 경력에서 가장 많이 우려먹게 될 언어"가 SQL이라고 단언
  • 3순위부터는 매년 한 가족씩 새로 배우기. 추천 언어
    • Lisp → PLT Racket / ML → Haskell / Self → Self 자체 / Prolog → Prolog 자체 / Forth → gForth / APL → K(via ok)
    • 수치 계산 많이 하면 K를 먼저, 임베디드 하면 gForth를 먼저

💡

> SQL을 "DB 질의어"로만 보지 말 것. Prolog 계열 논리 언어의 사고방식을 익히는 통로로 접근하면 SQL이 완전히 다르게 보인다는 게 저자의 포인트.


기술 맥락

"ur-language"라는 표현이 낯설 수 있는데, 고생물학에서 "모식표본(type specimen)"이라고 부르는 개념에서 따왔어요. 어떤 종을 정의하는 대표 화석을 기준 삼아서 다른 화석들을 분류하는 방식이죠. 저자는 같은 논리를 프로그래밍 언어에 적용해서, "이 언어는 어떤 화석 가족에 속하는가"를 묻는 거예요.

왜 이 분류가 의미 있냐면, 언어를 배울 때 드는 진짜 비용이 "문법 외우기"가 아니라 "사고 패턴 바꾸기"라는 관찰 때문이에요. Java에서 C#으로 넘어가는 건 쉬워요. 둘 다 ALGOL 가족이거든요. 근데 Java 쓰던 사람이 Haskell이나 Prolog로 가면 뇌를 새로 만들어야 해요. 재귀 기반 사고나 통일(unification) 기반 사고는 반복문과 할당 패러다임과 완전히 다른 신경회로를 요구하니까요.

흥미로운 대목은 ALGOL 가족이 "순수한" 가족이 아니라는 점이에요. 클래스 개념은 Self에서, 패턴 매칭과 대수적 타입은 ML에서, 람다는 Lisp에서 훔쳐온 거거든요. 그러니까 우리가 쓰는 최신 Kotlin이나 Rust는 사실 여러 ur-language의 하이브리드라는 거죠.

저자의 SQL 추천이 특히 재밌는데, SQL을 Prolog 가족으로 분류한 건 많은 개발자가 놓치는 관점이에요. SQL을 "테이블에서 데이터 긁어오는 명령어"로 익히면 안 되고, "사실들로부터 규칙에 따라 도출(derivation)하는 논리 시스템"으로 접근해야 SQL의 진짜 표현력이 열린다는 거예요. 복잡한 JOIN과 CTE가 갑자기 다르게 보이기 시작하는 지점이죠.

언어 선택 논쟁의 대부분이 같은 ur-language 안에서의 셔플에 불과하다는 통찰이 신선하다. 진짜 생산성 상승은 가족을 건너뛸 때 온다.

댓글

댓글

댓글을 불러오는 중...

general

NIST, 실리콘 칩에 '원하는 모든 색 레이저' 박아 넣기 성공 — 양자컴·AI 가속의 새 인프라

NIST 연구팀이 실리콘 웨이퍼 위에 lithium niobate와 tantala를 3D로 쌓아 수천 가지 파장의 레이저를 한 칩에서 뽑아내는 포토닉스 기술을 Nature에 공개했다. 양자 컴퓨터·광 원자시계·AI 칩 간 고속 통신 등이 직접적 수혜 분야다.

general

디지털 컴퓨터 이전의 항법 — B-52 폭격기 안에 실린 기계식 '천구 시뮬레이터' 해부

1963년 B-52 폭격기는 별을 추적해서 자동으로 항로를 계산하는 Astro Compass 시스템을 탑재했다. 핵심 부품인 Angle Computer는 디지털 컴퓨터 대신 실제 반구 위에 별 포인터를 움직이는 전자기계 아날로그 컴퓨터로, 구면삼각법을 물리적으로 풀어냈다.

general

AI가 쓴 과제 막으려고 타자기 꺼낸 코넬대 강사

코넬대 독일어 강사 Grit Matthias Phelps가 학생들의 생성형 AI 사용을 막기 위해 수동 타자기로 과제를 치게 하는 '아날로그' 수업을 2023년부터 운영 중이다. 미국 전역에서 오프라인 시험과 종이 평가로 회귀하는 트렌드와 맞물려 있고, 한 CS 전공 학생은 'AI에 위임하지 않고 스스로 생각하게 됐다'고 평가했다.

general

글로벌 스타트업 자금 동향 — 플루이드스택 180억 달러, 사이파이브 36억 달러, 오픈AI 히로 인수

이번 주 글로벌 스타트업 투자 현황 요약. AI 데이터센터 플루이드스택이 180억 달러 기업가치에 10억 달러 조달 협상, 오픈소스 칩 사이파이브가 엔비디아 등에서 4억 달러 유치 등 AI 인프라와 반도체로 자금이 쏠리는 흐름이 선명하다.

general

AI가 코딩을 해결했다고? 전직 AI 엔지니어가 일부러 손코딩하는 브루클린 6주

Aily Labs에서 AI 에이전트를 프로덕션에 올리던 Miguel Conner가 Recurse Center에서 AI 없이 코딩하는 리트릿을 진행 중이다. LLM을 밑바닥부터 학습시키는 Stanford CS336 과제, Python 맨손 연습, Vim·BASIC·Clojure 탐험 등을 통해 기본기 다지기를 목표로 한다.