1990년대 후반부터 많은 대학들이 프로그래밍 입문에 코스에 자바를 채택하기 시작하였습니다. 2001년 텍사스 오스틴 대학도 프로그래밍 입문 코스에 기존에 사용하던 언어인 Haskell을 자바로 대체하는 방안을 검토 중이었습니다. 당시 이 대학에 재직 중이던 저명한 컴퓨터 과학자 다익스트라(Edsger W. Dijkstra)는 공개 서한을 통해 이런 움직임을 비판하며 Haskell의 장점을 강조하였습니다.
하지만 텍사스 오스틴 대학은 결국 상업적으로 성공한 자바를 채택하였고, 이후 MIT를 비록한 많은 대학들이 Scheme, ML, Haskell 같은 함수 언어 대신 Java나 Python을 가르치기 시작하여 그 추세는 지금까지도 이어지고 있습니다.
저도 대학에서 C, C++, Java를 배웠고 졸업 후에도 10년 이상을 C, C++, JavaScript를 사용해 코드를 작성하였습니다. 자바가상머신(JVM), 웹킷(WebKit) 등의 프로젝트에 참여하며 복잡한 소프트웨어를 작성하기 위한 객체지향프로그래밍 방법론, 디자인 패턴, 테스트 케이스 작성 방법 등도 배웠습니다.
하지만 동시에 한계도 느꼈습니다. 어제 작성한 코드가 오늘 작성한 코드와 크게 다르지 않고 오늘 발생한 버그가 지난 번에 해결한 버그와 크게 다르지 않았습니다. 프로그래밍은 점점 기계적인 활동이 되었고 흥미도 잃게 되었습니다. 코드 재활용이나 쉬운 유지보수는 영원히 달성할 수 없는 이상향으로만 느껴지기도 했습니다.
그러던 와중에 지푸라기라도 잡는 심정으로 학부 때 잠깐 공부했던 Haskell을 다시 꺼내서 공부하기 시작하였습니다. 그리고 프로그래밍에 대해 다시 생각하게 되었습니다. 함수 합성(function composition)을 통한 코드 재활용, 지연 연산(lazy evaluation)을 통한 모듈화, 펑터(functor)와 모나드(monad) 등 카테고리 이론을 이용한 추상화 등은 그간 프로그래밍에 대해 가졌던 여러 고정관념들을 허물고 익숙한 코드를 낯선 관점에서 새롭게 바라볼 수 있는 시각을 제공해 주었습니다.
흔히 Haskell은 배우기 어려운 언어라고 합니다. 저도 꽤 오랜 시간 많은 시행착오를 하며 람다 대수, 타입 이론, 카테고리 이론 등 Haskel 이해에 필요한 이론들을 공부하였습니다. 하지만 돌이켜 생각해보면 Haskell은 단순히 어려운 언어가 아니라 “다른” 언어였다는 생각이 듭니다. 특히, 이미 C++이나 Java 같은 언어로 오랜 시간 프로그래밍을 해왔다면 Haskell이 더욱 다르고 낯설게 느껴질 수 있습니다.
국내에는 Haskell 관련 자료가 별로 없습니다. Haskell을 주된 프로그래밍 언어로 사용하는 회사도 없습니다. 그래서 Haskell은 배우기 어려운 언어라는 악순환이 반복되고 있습니다. 하지만 많은 분들이 Haskell을 배우고 싶어합니다. 대체 무엇이 있는지 알 수 없지만, 뭔가 흥미로운 게 있을 것 같다는 기대 때문입니다. 이 사이트가 Haskell 세상으로 탐험을 나서는 분들에게 미약하나마 작은 도움이 되어드릴 수 있으면 좋겠습니다.
Pingback: 하스켈 학교 – 서광열의 하스켈 스쿨