-
왼쪽에서 오른쪽으로 프로그래밍하는 방식은 코드를 입력하는 즉시 프로그램이 유효한 상태를 유지하며, 이로 인해 에디터의 자동완성 등 도구 지원이 극대화됨
- Python의 리스트 내포는 선언되지 않은 변수와 타입 추론의 부재로 자동완성 기능을 방해함
- Rust나 JavaScript는 프로그램을 왼쪽에서 오른쪽으로 자연스럽게 구성할 수 있어 변수 사용과 메서드 탐색이 더 직관적임
- C와 Python의 함수형 스타일은 함수명이나 구조의 비발견성으로 인해 효율적인 코딩 경험을 저해함
-
복잡도가 높은 로직에서는 왼쪽에서 오른쪽으로 전개되는 코드가 더 읽기 쉽고, 유지보수 및 확장성이 우수함
왼쪽에서 오른쪽으로 프로그래밍하기
코드는 입력하는 즉시 유효해야 함
Python 리스트 내포의 한계
- Python의 리스트 내포 구문 words_on_lines = [line.split() for line in text.splitlines()]은 선언되지 않은 변수(line)에 접근해야 하므로, 에디터가 자동완성이나 타입 추론을 제대로 제공하지 못하는 문제 발생
- 코드를 부분적으로 입력하는 과정에서
-
words_on_lines = [line.sp처럼 입력하면 에디터는 line의 타입을 알지 못해 메서드를 추천할 수 없음
- 변수명 오타(lime 등)와 같은 잠재적 오류 탐지도 어렵게 됨
- 올바른 추천을 받으려면 미완성 코드를 작성해야 하며, 그 과정이 비직관적이고 불편함을 초래함
Rust에서의 왼쪽에서 오른쪽 구성
- Rust 예제(let words_on_lines = text.lines().map(|line| line.split_whitespace());)는
- 익명 함수의 선언과 함께 변수(line)가 처음 등장하는 순간 선언으로 간주되어, 즉시 자동완성 및 메서드 추천이 가능해짐
- 실제로 split_whitespace라는 메서드도 자동추천된 덕분에 쉽게 찾을 수 있었음
- 이 방식은 프로그램이 항상 부분적으로라도 유효한 상태를 유지하므로, IDE나 에디터가 실시간으로 코딩을 지원할 수 있음
점진적 공개(Progressive Disclosure)와 API 사용성
-
점진적 공개(Progressive Disclosure) 는 사용자가 필요한 만큼만 복잡도를 경험하는 설계 원리로, 프로그래밍에도 적용 가능함
- 예: 이미지를 추가할 때만 관련 옵션이 나타나는 워드프로세서의 UX와 유사함
- C 언어는 이런 지원이 부족함
-
FILE *file에 관련된 모든 함수가 file.로 탐색되지 않으므로, 함수명의 패턴(fread, fclose 등)을 외워야 하고 기능을 발견하기 어려움
- 반면 이상적인 언어라면 file.을 통한 메서드 추천으로 관련 기능을 쉽게 점진적으로 발견할 수 있음
함수 및 메서드 발견성의 차이
- Python의 map(len, text.split())과 JavaScript의 text.split(" ").map(word => word.length) 예시 비교
- Python에서 len, length, size 등 함수명이 예상되지 않아 여러 시도를 해야 실제 동작을 알 수 있음
- JavaScript에서는 word. 뒤에 .l 만 입력해도 에디터가 length 등 메서드를 제시하여 발견성이 높음
-
map 같은 고차 함수도 실제 반환값과 데이터 타입이 즉각적으로 명확하게 드러남
복잡한 로직일수록 구조적 작성의 장점
- 복잡도가 높은 로직(filter, lambda가 중첩된 긴 Python 코드)의 경우
- 코드의 시작과 끝을 반복적으로 확인해야 하며, 조건식이나 괄호 매칭 등에서 가독성 저하와 이해의 어려움이 발생함
- 동일한 로직의 JavaScript 버전에서는 코드를 위에서 아래로, 왼쪽에서 오른쪽으로 순차적으로 읽고 이해할 수 있음
핵심 원칙
코드는 입력하는 순간마다 유효해야 함
-
text 단독 입력에도 프로그램이 유효한 상태 유지
-
text.split(" ")까지 작성해도, 이후 .map(word => word.length)까지 이어서 입력할 때도, 전체적으로 항상 중간 상태가 유효함
- 이러한 코딩 패턴은 에디터의 실시간 지원 가능성을 높이고, REPL 환경에서는 즉시 결과를 확인할 수도 있음
결론
- API와 언어 디자인은 코드를 왼쪽에서 오른쪽으로 자연스럽게 입력하며 중간 단계마다 유효한 프로그램을 만들 수 있도록 지원해야 함
- 좋은 API 설계가 이러한 코딩 경험 개선의 핵심임