Lisp은 왜 읽기 어려운가? 괄호 위치가 만드는 인지 부담

What makes Lisp difficult to read?

Lisp의 괄호 과다 문법이 읽기 어려운 이유를 인지과학으로 풀어낸다. 저자는 친숙함만의 문제가 아니라 괄호 배치가 시각적 그룹화를 방해하고 작업기억(정신적 스택)에 부담을 주기 때문이라고 주장한다. C 스타일의 `f(a)`는 여는 괄호와 닫는 괄호가 가까워 한눈에 짝을 찾을 수 있지만, Lisp의 `(f a)`는 함수명이 괄호 사이를 벌려 놓아 주변시야에서도 그룹을 인지하기 어렵다. 근접성, 폐쇄성, 대칭성 같은 게슈탈트 법칙과 스트룹 효과, 팝아웃 효과를 근거로 삼아 읽기 좋은 문법 설계 원칙을 모색한다.

Lisp은 함수 이름을 여는 괄호 뒤에 두기 때문에 괄호 사이의 거리가 더 멀다. 이로 인해 괄호가 하나의 도형으로 스캔될 만큼 가까울 가능성이 낮아진다.
  1. pfdietz

    Lisp은 읽기 어렵지 않아요. 그래서 질문 자체를 이해할 수가 없네요.

    이건 마치 프랑스어를 모르는 사람이 "프랑스어는 왜 읽기 어려운가?"라고 묻는 것과 같아요.

  2. tombert

    여기 다른 분들이 하신 말씀을 다시 하겠습니다: 저는 Lisp이 객관적으로 읽기 "어렵다"고 생각하지 않아요.

    다른 언어들과 달라서 "어렵게" 느껴지는 것뿐인데, 언어를 이해하고 나면 그 차이점 중 일부는 오히려 가독성을 높여준다고 생각해요. 예를 들어 모든 곳에 괄호를 강제로 사용하는 덕분에 연산자 우선순위가 절대 모호해지지 않잖아요.

  3. lukaszkorecki

    Swift 코드를 한 번도 다뤄본 적 없는 사람이 느끼는 어려움과 똑같은 겁니다: 익숙하지 않아서예요.

  4. groundzeros2015

    익숙하지 않아서죠.

  5. whartung

    괄호는 시선을 분산시키는 큰 글리프인데다, (훈련되지 않은 눈에는) 구분자로 잘 드러나지도 않아요.

    다음을 보세요:

    (defun split-line (line)

    (remove-if #'(lambda (word) (string= word ""))

    (split-sequence:split-sequence #\Space line)))

    이제 괄호 대신 좀 더 "무게가 가벼운" 글리프가 있다고 상상해보세요.

    .defun split-line .line,

    .remove-if #'.lambda .word, .string= word "",,

    .split-sequence:split-sequence #\Space line,,,

    물론 ()를 .로 바꾼 억지스러운 예시지만, 괄호가 얼마나 "무겁고" 눈에 보이는 것을 얼마나 지배할 수 있는지 아실 수 있을 거예요.

    경험이 쌓이면 괄호는 사라져 보이죠. 괄호가 크고 흔하다 보니 필요 이상으로 시선을 잡아끄는 겁니다.

이 날의 다른 글

2026-09-28