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이 ‘언어를 만들기 위한 언어’임을 상기시키며, 이러한 이상을 실현할 매크로를 직접 구현해 볼 것을 권장하며 논의를 확장합니다.