본문으로 건너뛰기

Racket 문법의 장점과 개선 방향: 인간 중심의 프로그래밍 언어 설계를 향하여

Allan Schougaard: 'Racket Syntax: The Great, the Good and the Back to the Drawing Board'

작성자
HackerNews
발행일
2024년 11월 02일

핵심 요약

  • 1 소프트웨어는 기계가 아닌 사람이 읽기 위해 작성되어야 하며, Racket의 문법 또한 인지 부하를 줄이고 가독성을 높이는 방향으로 진화해야 합니다.
  • 2 기존의 복잡한 매크로나 인라인 HTML 표현식 대신, 초보 개발자도 직관적으로 이해할 수 있는 명칭 사용과 구조화된 문법 도입이 필요합니다.
  • 3 괄호의 수직 정렬과 같은 새로운 들여쓰기 규칙을 통해 코드의 구조를 명확히 함으로써 개발자가 도구 없이도 로직을 즉시 파악할 수 있게 해야 합니다.

도입

본 강연에서 앨런 스쿠가드(Allan Schougaard) 교수는 Racket 프로그래밍 언어의 문법적 특성을 분석하고, 교육적 관점에서 입문자들이 겪는 어려움을 해결하기 위한 구체적인 제안을 내놓습니다. 그는 '프로그램은 사람이 읽기 위해 작성되어야 한다'는 원칙을 강조하며, Lisp 계열 언어가 가진 최소주의적 문법의 장점을 유지하면서도 현대적인 가독성 기준을 어떻게 충족할 수 있을지 논의합니다. 특히 타 언어와의 비교를 통해 Racket이 나아가야 할 사용자 친화적인 문법 개선 방향을 제시하며 커뮤니티의 변화를 촉구합니다.

1. 인간 중심의 소프트웨어 설계 원칙

소프트웨어 개발은 본질적으로 인간의 활동입니다. 아벨슨(Abelson)과 서스먼(Sussman)이 언급했듯이, 프로그램은 기계가 실행하는 것보다 사람이 읽는 것이 우선시되어야 합니다. Racket은 단일한 구분자인 괄호(parentheses)를 사용하여 모든 것을 표현하는 호모아이코닉(homoiconic)한 특성을 지니고 있습니다. 이는 배우기 쉽다는 장점이 있지만, 실제 교육 현장이나 복잡한 로직에서는 가독성을 해치는 요인이 되기도 합니다. 강연자는 ‘감성 지능형 컴퓨터 과학’을 제안하며, 기술적 완결성만큼이나 개발자의 심리적 편의성과 인지 부하를 고려한 설계가 중요함을 역설합니다.

2. 현대적 언어와의 비교 및 문법적 확장성

C++, Java, Python 등 현대 프로그래밍 언어들은 기능이 추가될 때마다 새로운 문법을 도입하여 언어의 크기가 비대해지는 경향이 있습니다. 반면 Racket은 문법 자체를 키우지 않고도 라이브러리와 매크로를 통해 기능을 확장할 수 있는 독보적인 플랫폼입니다. 강연자는 Geeks 패키지 매니저와 정규 표현식(Regex) 사례를 통해, Racket의 정규 언어적 특성이 복잡한 패턴 매칭을 얼마나 우아하게 처리할 수 있는지 설명합니다. 특히 scramble 라이브러리는 정규 표현식을 구성 가능한 코드로 변환하여 가독성을 극대화한 좋은 사례로 제시되지만, 여전히 구시대적인 기호 사용(+, * 등)이 남아있음을 지적합니다.

3. 초보자를 위한 구체적인 문법 개선 제안

강연자는 교육 현장에서 학생들이 겪는 혼란을 바탕으로 다음과 같은 구체적인 개선안을 제안합니다: - 명칭의 직관성: Lambda라는 학술적 용어 대신 function을 사용하여 입문자의 진입 장벽을 낮추어야 합니다. - 객체 지향 관습 도입: Java나 Ruby처럼 클래스 이름의 첫 글자를 대문자로 표기하는 관습을 도입하여 명사와 동사를 명확히 구분해야 합니다. 이는 독일어에서 명사를 대문자로 쓰는 것과 같은 언어적 직관을 제공합니다. - DSL의 발전: HTML을 작성할 때 복잡한 따옴표와 쉼표 조합(X-expression) 대신, #lang html과 같이 함수 형태로 컴파일되는 직관적인 도메인 특화 언어가 필요합니다.

4. Ruby와 Clojure에서 배우는 가독성

강연자는 Ruby를 ‘수용 가능한 Lisp’이라고 부르며, Ruby on Rails의 5.days.ago와 같은 직관적인 DSL 설계가 Racket에도 필요하다고 주장합니다. 또한 Clojure에서 쉼표(,)를 공백으로 처리하여 데이터 구조의 가독성을 높인 사례나, Objective-C의 자기 문서화(self-documenting) 키워드 인자 방식을 차용할 것을 제안합니다. 이러한 요소들은 개발자가 코드를 읽을 때 각 인자의 역할을 즉각적으로 이해하도록 돕습니다.

5. 혁신적인 들여쓰기 규칙: 괄호의 수직 정렬

가장 파격적인 제안은 괄호의 배치 방식입니다. 기존 Lisp 관습은 닫는 괄호를 마지막 줄에 모아서 작성하지만, 이는 코드의 시작과 끝을 파악하기 어렵게 만듭니다. 강연자는 C 계열 언어의 중괄호({}) 정렬 방식처럼, 닫는 괄호를 여는 괄호와 수직으로 일치시키는 새로운 들여쓰기 규칙을 제안합니다. 이는 편집기 도구의 도움 없이도 코드의 구조를 즉각적으로 파악하게 하여 개발자의 인지 부하를 획기적으로 줄여줍니다. 최종적으로 Matthew Flatt은 Racket이 ‘언어를 만들기 위한 언어’임을 상기시키며, 이러한 이상을 실현할 매크로를 직접 구현해 볼 것을 권장하며 논의를 확장합니다.

결론

결론적으로 스쿠가드 교수는 Racket이 단순한 언어 구현 도구를 넘어, 더 넓은 개발자 층을 포용하기 위해서는 문법적 관습의 과감한 변화가 필요하다고 주장합니다. 괄호 정렬 방식의 변경이나 직관적인 키워드 도입은 단순한 미학적 선택이 아니라 개발자의 인지 부하를 줄이는 실질적인 도구입니다. 그는 Racket의 강력한 매크로 시스템을 활용하여 누구나 자신만의 이상적인 문법을 구축할 수 있음을 상기시키며, 이러한 시도들이 모여 더 나은 프로그래밍 생태계를 만들 수 있다는 희망적인 메시지로 강연을 마무리합니다.

댓글 0

댓글 작성

댓글 삭제 시 비밀번호가 필요합니다.

이미 계정이 있으신가요? 로그인 후 댓글을 작성하세요.

0/1000
정중하고 건설적인 댓글을 작성해 주세요.