본문으로 건너뛰기
피드

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

general 약 9분
vote
0
댓글
북마크

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

폐쇄된 클라이밋닷거브, 공공 데이터 덕분에 클라이밋닷어스로 되살아나다

미국 정부의 기후 정보 사이트 Climate.gov가 예산 삭감으로 내려간 뒤, 전직 NOAA 관련자들이 Climate.us로 핵심 자료를 복원했어. 15년 넘게 쌓인 기후 지도, 교육 자료, 기후 지표 보고서, 삭제된 제5차 국가기후평가까지 되살린 배경에는 미국 정부 데이터가 법적으로 퍼블릭 도메인이라는 점이 있었어. 다만 운영은 기부에 의존하고 있어, 공공 인프라를 민간이 임시로 떠받치는 불안정한 구조도 같이 드러나.

general

AI 시대에도 인간 관리자가 남는 이유는 결국 ‘책임’ 때문임

생성형 AI가 기업 경영의 많은 판단을 도와도, 인간 관리자의 역할이 사라지지는 않는다는 주장이다. 글은 공감, 검증, 실행, 책임이라는 네 가지 영역에서 AI가 아직 인간 관리자를 대체하기 어렵다고 설명한다.

general

서로 1만 달러 주고받으면 매출 1만 달러? 스타트업 매출 놀이를 비꼰 풍자 사이트

LARP는 창업자끼리 같은 금액을 서로 주고받은 것처럼 장부에 기록해 매출을 만든다는 설정의 풍자 사이트다. 실제 제품, 고객, 현금 이동 없이도 연간 반복 매출(ARR)을 부풀릴 수 있다는 식으로, 스타트업의 매출 인정과 상호 거래 관행을 날카롭게 비꼰다.

general

뱅크오브아메리카, 소버린 클라우드 수요 보고 아이오노스에 매수 의견

뱅크오브아메리카가 유럽 웹 호스팅·도메인 기업 아이오노스에 매수 의견과 목표주가 37유로를 제시했다. 핵심 논리는 중소기업 대상 웹 서비스, AI 업셀링, 소버린 클라우드 수요가 맞물리며 2025년부터 2028년까지 매출과 이익이 성장할 수 있다는 것이다.

general

SDT·KT·스패로우까지, 국내 보안·클라우드·양자 업계 단신 모음

SDT는 양자 클라우드 플랫폼 큐레카에 양자내성암호를 적용하고 CUDA-Q 교육 모듈을 3개 국어로 제공하기로 했다. KT, 스패로우, 매스웍스, 아이씨티케이, 오케스트로 클라우드도 각각 메일보안, 앱 보안, 디지털 트윈, 양자보안, 공공 클라우드 전환 관련 소식을 냈다.