Metaprogramming and static analysis
Lisp으로 대표되는 동적 언어들의 강력함에는 프로그래머가 코딩을 매우 잘하며, 실수를 잘 하지 않는다는 낙관적인 가정이 필요하다. 반면 ML로 대표되는 정적 강타입 언어들의 엄밀함은, 분명 인간은 언제나 실수한다는 비관적인 가정이 깔려 있다.
이른바 해커 스타일의 프로그래머들은 정적 분석을 좋아하지 않는다. 이들에게는 정적 분석은 맞는 코드를 자꾸 틀리다고(incomplete) 시끄럽게 구는 도구일 뿐이다. 해커들은 혼자 알아서 잘 하기 때문에, 정적 분석과 같이 실수를 줄여주는 기술보다는 메타프로그래밍 같이 반복 작업을 줄이고 생산성을 높여주는 기술을 선호한다.
그러고 보면 정적 분석과 메타프로그래밍은 실세계 프로그래밍에서 두 방향의 욕구를 각각 대표한다.
- 정적 분석은 프로그래머를 늘릴 수 있게 해준다.
- 메타프로그래밍은 프로그래머를 줄일 수 있게 해준다.
가장 이상적인 것은 양쪽 모두를 충분히 취하는 것일 것이다.
예전에 썼던, 관련 있는 내용: 노동 집약적 소프트웨어 개발과 기술 집약적 소프트웨어 개발.