지금2024.1 하스켈 시작하는 분들에게 자료를 추천한다면

Posted on January 27, 2024

어설프게 알고 있을 때 말이 많다고 합니다. 지금 제가 그런 때 같습니다. 요란한 빈수레일 확률이 높긴 하나, 지금 당장은 조금 부족하더라도 시작해 두면 조금씩 살이 붙지 않을까 해서 정리합니다. 그리고 탄탄한 한글 자료들이 조금씩 생기고 있어 소개하고 싶었습니다.

지금 하스켈을 시작하려는 누군가가 물어본다면, 뭐라 답할까 고민해 봤습니다. 다양한 지식을 가진 여러 사람들의 출발에, 다 들어맞는 말을 찾는 건 어렵습니다. 특히나 아카데미스런 접근과 업자의 접근은 다르게 가야 할 겁니다. 과거로 돌아가, 하스켈을 시작하는 대한민국의 업자, 나에게 어떤 길을, 지금의 어떤 자료를 추천해 줄 것인가로 좁혀 봤습니다.

절차형, 객체지향(C, C++, PHP, Javascript, …)을 실무로 다루었지만, 이론적인 지식을 체계적으로 따라간 정규 커리큘럼을 경험한 적은 없었습니다. 그나마 함수형 맛을 본 건 LISP 입문(교양)서 정도가 아닐까 합니다.
ML(Machine Learning 아니고 ML언어)도 모르는 상태에서 하스켈을 시작했습니다. 이 정도 기반 지식에서 하스켈 교재만 붙들고 가면 낯선 용어, 개념들이 한꺼번에 너무 많이 나옵니다. 저는 하스켈 교재만 붙들고, 그 때 그 때 주제별로 봤었는데, 먼저 알고 있으면 분명 도움이 되는 지식들이 많습니다. 아래는 시작할 때 같이 봤으면 어땠을까 하는 분야들입니다.

※ 제가 직접 봤던 자료거나 혹은 아직 못봤지만 기대되는 자료(다른 책으로 이미 공부한 것들은, 일부만 훑어보는 수준으로 봤지만, 괜찮아 보이는 건 그대로 추가했습니다.) 중 되도록 한글 자료로 정리했습니다. 시작하는 단계에서 모두 완독을 요구한다는 뜻이 아닙니다. 적당히 병행하며 기반 지식으로 알아 두면 좋을 것들입니다. 저도 부분 부분 읽은 자료들이 대부분입니다.

다 보자고 링크 넣은 게 아니라, 분야별로 하나 정도만 골라서 보자는 뜻입니다. 각 분야를 마스터한다기 보다, 어떤 주제들이 어디에 있는지 정도 알고 있다가, 나중에 해당 주제들을 만나면 다시 펼쳐 볼 정도만 돼도 도움이 됩니다.

(2024.1.28 기준)
링크가 많아 지치는 분들이 있어 결론을 먼저 보이게 바꿉니다.

결론

가지고 있으면 쓸모가 많을 걸 - 싫어, 달려야 하는데, 무거워 보여

하스켈을 공부하다 툭툭 튀어 나오는 낯선 지식들을 이리 저리 찾다 보면, 아래 4가지에서 뿌리를 찾게 되는 경우가 많습니다. 다 읽어 본 듯 정리하긴 했지만, 처음부터 끝까지 완독한 것들은 드뭅니다. “난 아카데미가 아니다, 얼른 프로덕트를 뽑아야 한다”는 급한 마음에 필요한 부분만 익히고 넘어가는 곳이 한 두군데가 아닙니다. 허술하게 지식이 쌓이고 있다는 불안이 없진 않지만, 당장 업자는 프로그래밍 결과를 잘, 그리고 빨리 뽑아내는 게 우선이다라는 생각으로 계속 가고 있습니다. 시간도 많고, 돈도 많고, 특히나 머리도 좋으면 좋겠지만, 원하는대로 되는 사람은 거의 없겠지요.

말이 길었습니다. 최종 정리하자면, 지금(2024.1) 아카데미쪽이 아닌 업자가 하스켈을 시작한다면,
Haskell Mooc - 최광훈 유튜브 강의 (한)
Learn You a Haskell for Great Good (En)
로 시작하며,
프로그래밍 언어의 원리 - 오학주 (한)
타입으로 견고하게 다형성으로 유연하게 - 홍재민 (한)
을 병행해서 보고, 이해 안가는 것들이 생기면
디스코드 하스켈 학교에 열심히 물어 보겠습니다. 정말 성의껏 대답해주시는 분들이 많은 곳입니다.

※ 몇 몇 자료들은, 전공자분들이 보기에 뻔한 교재들 소개라 생각할 수 있습니다. 여기 글은, 비전공자 업자분들을 대상으로 합니다.

프로그래밍 언어 이론PL

PL전공자처럼 깊게 파진 않더라도, 아래 책들 중 하나정도만 읽고 하스켈을 보더라도, 낯선 점이 많이 줄어 듭니다.

항상 베스트 셀러에 드는 SICP 책을 읽은 정도가, 저에겐 그나마 PL에 가장 가까운 지식 아니었을까 합니다.
컴퓨터 프로그램의 구조와 해석 (SICP) (한)
Javascript가 익숙한 분은 최근에 나온
자바스크립트로 배우는 SICP도 괜찮아 보입니다.

2023년에 하스켈로 설명하는 PL 저서가 출간되었습니다. (아직 읽어 보진 못했습니다만, 다른 언어론 책들이 대부분 예시 언어로 하스켈을 고르지 않아, 성급하지만 추가해 둡니다.)
프로그래밍 언어론 - 안기영, 손범준 (한)

저는 Concepts of Programming Languages - Rovert W.Sebesta (한/En)를 봤는데,
인터넷으로 공개되어 있는 좋은 대학 교재들을 나중에 발견 했습니다.
Programming Languages Lecture Notes - 이광근 (한)
프로그래밍 언어의 원리 - 오학주 (한)
Introduction to Programming Languages - 홍재민/류석영 (En)

타입 이론Type Theory

공부할수록 아주 빡빡하게 타입 체크를 하며, 타입을 기가 막히게 활용하는 것들이 자주 나오는데, 먼저 기반이 되는 이론을 알고 있으면, 낯선 개념 용어들이 확 줄어 듭니다. 시작부터 꼭 볼 내용은 아니지만, 입문을 벗어나는 시기가 올 때쯤, 슬슬 봐두면 분명 도움됩니다.

아래 두 책은 정식 교재로 많이 쓰이나 봅니다. 저는 일부 필요한 부분만 봤던 책들이라 링크를 넣지 말까 했는데, 열정이 있는 분들은 볼 수도 있겠다 싶어 일단 남겨 놓긴 합니다.
Types and Programming Languages - Benjamin C. Pierce(En)
Type Theory & Functional Programming - School of Computing (En)
다음은 업자들 사이에서 평이 좋은 최근(2023.10) 저서입니다.
타입으로 견고하게 다형성으로 유연하게 - 홍재민 (한)

타입은 컴파일러와 소통하기 위한 “언어”입니다. 익숙해지면 컴파일러와 페어 프로그래밍이 가능해집니다.

람다 산법Lambda Calculus

정식 수학과용 교재보다는 위 PL책들에서 소개하는 정도의 아주 아주 얕은 깊이만 알고 있어도 도움이 됩니다. 특별히 더 텍스트를 소개할 것도 아닌데, 꼭지를 만들어 둔 이유는, 하스켈은 정말 람다 산법과 많이 닮아 있어, 기본은 알고 가자는 걸 강조하기 위해서입니다.

카테고리 이론Category Theory

대부분의 하스켈 입문자에게 한 번씩은 좌절을 안기는 모나드가 온 곳이라, 깊게는 파지 않더라도 입문은 해 놓고 싶은 유혹이 자꾸 생기는 분야지만, 혼자 공부하기에는 매우 어렵습니다. 하스켈을 꽤나 자유롭게 쓰는 분들이 모두 입을 모읍니다. 굳이 공부할 필요 없다고. GHC 개발 집단에 들어가거나, 중요 라이브러리에 공헌할 정도로 하스켈 코어 생태계에 깊게 들어가지 않는다면 몰라도 됩니다. 저는 궁금한 것들이 발목을 잡아, 듬성 듬성 보며, 꾸역 꾸역 모나드 설명에 어찌 도달해보긴 했는데, 선행자들의 말을 들을 걸 하는 생각도 있고, 수학이 재밌는 사람은 취미(무려 취미)로 덤비는 정도 하는 건 괜찮지 않을까 하는 생각도 들고 그렇습니다.

위에 세 분야는 학교에서 과목을 병행해서 듣 듯, 같이 보면 좋지만, 시작할 때 카테고리 이론은 보지 않는 게 낫습니다. 이게 별다른 수학 지식 없이도 조금은 이해할 것만 같은 착각을 주기 때문에 끌려 들어가기 쉬운데, 시간을 많이 잡아 먹습니다. 여기서 넘어 온 개념, 용어들이 많이 있어, 공부하면서 검색하다 보면, 카테고리 이론들이 자주 같이 걸려들어 모른척 지나가기가 어렵게 하는데, 생태계 규모에 비해서 프로그래밍에 맞춰 설명한 자료들은 드뭅니다.

정식 교재는 너무 딱딱해서 한 챕터 넘어가기도 어렵습니다. 굳이 비전공자 프로그래머가 시작한다면, 2024 현재까지는 바르토즈 밀레프스키 박사의 책, 강의보다 더 좋은 출발지는 없어 보입니다.

Category Theory for Programmers - Bartosz Milewski (En)
Category Theory - Bartoz Milewski 유튜브 강의 (En)
Category Theory for the Sciences (En)

아래 사이트는 최대한 직관을 찾는다는 느낌을 주는 곳입니다.
math3ma - Tai-Danae Bradley (En)

혹, 대학 수학 지식이 없는 상태에서 카테고리 이론을 보려 한다면, 추상 대수학 정도 알고 봐야 용어들이 덜 낯섭니다. 비전공자가 보기엔 알기쉬운 추상대수학 - 찰스 핀터만한 게 없었습니다.

펑터, 모나드가 온 곳이긴 하나, 하스켈의 모나드를 이해하기 위해선 몰라도 전혀 상관 없습니다.

혹, 이 말을 모나드를 몰라도 된다로 오해하는 분이 계실까 해서 부연하자면, 전 개인적으로 공부 단계가 아닌, 스스로 하스켈로 작은 프로그래밍을 하기 시작할 즈음에도 모나드를 알 필요 없다는 의견에는 동의하지 않습니다. 수학적으로 정교하게(카테고리 이론의 모나드) 알 필요는 절대 없지만, 순수 함수의 제약을 넘어 실용 프로그램을 만드는데 왜 필요한가 정도는, 거의 시작 단계에서부터 알고 가야 한다 생각합니다. (주의 - 어설프게 알 때 제일 말이 많습니다.) 아는 사람이 옆에서 조금만 끌어 준다면, 못 넘을 벽은 아닙니다. 주변에 아는 사람이 없다면, 디스코드 하스켈 학교로! 무슨 광고 같지만, 실제 덕을 많이 본 곳입니다.

하스켈 입문

이제 주 교재를 보겠습니다.

최근에 최광훈 교수님이 하스켈 강의 영상을 공개하셨습니다.
Haskell Mooc - 최광훈 유튜브 강의 (한)

아래는 외국이든, 국내든 아직도 입문에 대해 물어보면 빠지지 않고 언급되는 하스켈 입문서의 양대 산맥입니다.
Learn You a Haskell for Great Good (En) 국내 번역책이 있으나, 절판(2024)되었습니다.
LYHGG로 줄여서 부르기도 합니다.

실용 문제들을 다루는 입문서로, 오래됐지만 여전히 손꼽는 자료입니다.
Realworld Haskell (En)
RWH로 줄여서 부르기도 합니다.

오래 전엔 LYHGG와 RWH로 하스켈을 시작한다가 당연하던 때가 있었는데, 둘 다 오래된 글이다 보니 현재 GHC 버전과 맞지 않는 소스들이 종종 있습니다. 지금은 입문용 책들이 꽤 생겼으니, 그 것들 중 하나를 주 교재로 삼아도 좋겠습니다.

프로젝트를 따라하며 언어를 배우는데 익숙한 분이 많을텐데요. 기본 문법들을 익혔다면,
Learn Haskell by building a blog generator (En)가 있습니다.

쏙쏙 들어오는 함수형 코딩 Grokking Simplicity (한)책을 번역하신 김은민님이 새로운 하스켈 책을 준비 중이라 합니다. 난이도가 어떻게 맞춰질지 모르지만, 이 번에는 역서가 아닌 저서라 합니다. 역서가 아닌 저서가 확실히 잘 읽히긴 하니, 기대가 됩니다. 출간 후 다시 소개하도록 하겠습니다.

Github 계정이 없는 분은 메일로 보내주세요. lionhairdino at gmail.com