6월 6일
안녕하세요.
저는 한국에 사는 취미 프로그래머이고, Haskell로 코딩하는 것을 즐깁니다.
우연히 Matrix Haskell에 올리신 글(https://storytotell.org/smalltalk-haskell-and-lisp)을 읽게 되었는데, NRAO라는 곳에서 일하고 계시다는 것을 알게 되었습니다.
이름만 들어도 NRAO는 정말 흥미로운 곳처럼 들립니다! 혹시 그곳에서 Haskell 기반 프로그램을 사용하고 계신가요?
감사합니다!
좋은 하루 되세요.
박준규 드림.
6월 7일
준규님께.
편지를 받게 되어 정말 기쁩니다! Haskell을 사용하는 취미 프로그래머라는 말씀을 듣고 무척 반가웠습니다. 혹시 현재 진행 중인 프로젝트나 공유해주실 수 있는 코드가 있으신가요? Haskell 공부는 어느 정도까지 하셨나요? H-99 문제는 풀어보셨는지요? 또는 Advent of Code, Project Euler 같은 문제 풀이도 해보셨나요? 공부하시는 데 필요한 자료나 지원은 충분하신지도 궁금합니다.
제 블로그를 읽어주셔서 진심으로 감사드립니다. 요즘은 Haskell을 많이 다루고 있진 않지만, Haskell은 제 프로그래밍 이해에 깊은 영향을 주었습니다. 저는 지금도 Haskell에서 얻은 아이디어를 자주 활용하고 있고, 업무에서 프로젝트 프로토타입을 만들 때 사용하기도 했습니다. 다만, 아쉽게도 현재 제가 맡은 업무 프로젝트 중에는 Haskell로 작성된 것은 없습니다.
하지만 NRAO에는 Haskell을 사용한 이력이 조금 있습니다. 지금도 Green Bank Observatory에서 사용되고 있는 프로젝트가 하나 있는데, 망원경 스케줄링 프로그램인 “antioch”입니다. 소스 코드는 다음에서 보실 수 있습니다.
https://github.com/nrao/antioch
보시다시피 한동안 유지 관리가 되지 않고 있습니다. 코드를 읽어보시면 두 가지를 금방 눈치채실 겁니다. 1) 전체가 “Bird 스타일”로 작성되어 있어서 코드가 설명 사이에 주석처럼 들어가 있다는 점, 2) 작성자들이 Haskell에 대해 그렇게 깊은 이해를 갖고 있진 않았다는 점입니다. :) 제가 이 프로그램을 좀 더 현대적으로 바꿔보려고 시도한 브랜치가 어딘가에 있긴 한데, 내부에만 있는 것인지 저도 잘 모르겠습니다.
물론, 우리가 Haskell 기반 프로그램을 사용하면서도 크게 의식하지 않는 경우도 있습니다. 예를 들어 Pandoc은 아마 이미 알고 계실 텐데, 그런 도구 중 하나입니다. 개인적으로는 “reldiagram”이라는 프로그램을 가끔 사용하는데요.
https://github.com/fusiongyro/reldiagram
이 프로그램은 PostgreSQL 데이터베이스를 읽어서 테이블 간의 관계를 도식화해줍니다. 제가 만든 Haskell 저장소는 이 외에도 몇 개 더 있지만, 가족과 함께하는 삶의 시기라 취미에 많은 시간을 쓰지 못해 대부분 좀 오래된 것들입니다. 언젠가는 여유가 생기면 더 많은 결과물을 만들 수 있으리라 생각합니다.
가끔은 Haskell이 아닌 다른 기이한(?) 것들도 시도하곤 했습니다. 예를 들어 Subversion에서 Git으로 대규모 마이그레이션을 할 때는 Prolog로 변환을 돕는 프로그램을 작성하기도 했습니다! 아마 지금 다 기억나지 않는 것도 있을 거예요.
NRAO는 정말 훌륭한 직장입니다. 제가 처음 입사했을 때는 모든 것이 C++와 Java로 되어 있었어요. 지금은 대부분 Python으로 작업하지만, Go도 있고 Julia나 Rust를 쓰기 시작한 동료들도 있습니다. 점점 더 새로운 기술을 시도하려는 분위기로 바뀌고 있지요.(아마 J 언어는 당분간 안 쓰겠지만요! 😊)
제 블로그를 보시면 아시겠지만 저는 그냥 프로그래머일 뿐입니다. 하지만 NRAO에는 과학자, 실제 천문학자들도 많이 있습니다. 그중 한 명인 Emmanuel Momjian 박사는 최근 한국에 다녀왔는데, 한국의 아름다움과 음식에 대해 끊임없이 이야기하더군요. 저도 언젠가는 꼭 한국을 방문하고 싶습니다! 혹시 미국 뉴멕시코에 오실 일이 있다면 꼭 연락 주세요. 만나서 VLA(초거대 전파 망원경) 현장 투어도 안내해드릴 수 있습니다!
늘 좋은 일 가득하시길 바랍니다.
진심을 담아.
6월 8일
다니엘 님께.
정성스럽고 친절한 답변 진심으로 감사드립니다.
제가 공유드릴 수 있는 프로젝트들을 몇 가지 소개해드리겠습니다.
먼저, 제가 유지 관리자로 등록된 Hackage 패키지입니다.
align-equal
은 Gabriela 님의 블로그 글에 소개된 프로그램을 바탕으로 연습 삼아 만든 프로젝트입니다. webfinger-client
는 원래 다른 분이 시작했다가 중단한 프로젝트를 최근에 제가 이어받은 것입니다. 두 프로젝트 모두 처음부터 제가 시작한 것은 아니라 조금 부끄럽기도 합니다.
저는 몇 년째 꾸준히 Haskell을 공부해왔지만, 아직 monad transformer를 능숙하게 다루지는 못합니다. H-99나 Project Euler 같은 문제들을 훑어보긴 했지만 실제로 풀지는 못했습니다. Advent of Code는 매년 1~2일 차 문제 정도는 시도해보지만 완주한 적은 없습니다.
또한 Exercism에 올라온 Haskell 문제도 몇 가지 풀어보았습니다.
https://exercism.org/profiles/nattybear
그리고 다음은 제가 Protohackers에서 푼 0~2번 문제입니다.
https://protohackers.com/
대체로 저는 Haskell로 출판된 책들을 읽는 것을 즐깁니다.
소개해주신 antioch 프로젝트도 흥미로웠습니다. 꽤 오래된 프로젝트이긴 하지만요. 저도 Pandoc을 자주 사용합니다. 별건 아니지만 Hakyll을 이용해 정적 블로그도 운영하고 있습니다.
https://nattybear.github.io/
reldiagram 프로젝트도 흥미롭네요. 저도 Graphviz를 좋아해서 반갑게 느껴집니다. 개인적인 프로젝트에 Prolog를 사용해본 적은 없지만, 《Logic Programming with Prolog》라는 책을 재미있게 읽고 예제도 따라 해 본 기억이 있습니다.
사실 저는 한 번도 미국 본토에 가본 적이 없습니다.(괌은 여행으로 간 적이 있습니다.) 앞으로 방문할 기회가 생길지는 모르겠지만, 언젠가 기회가 된다면 영화에서만 보던 그 거대한 전파망원경을 꼭 보고 싶습니다.
저도 요즘은 가족과 함께 보내는 시간이 많아 취미에 많은 시간을 쓰지는 못하고 있습니다. 언젠가 조금 더 여유로워지면, Haskell 생태계에 좀 더 활발히 기여할 수 있으면 좋겠습니다.
제 간단한 질문에 정성껏 길게 답변해주셔서 다시 한 번 감사드립니다.
혹시 이 대화를 트위터나 한국 디스코드 서버 ‘하스켈 학교’ 같은 소셜 미디어에 공유해도 괜찮을까요?
다시 한 번 감사드리며, 언제나 건강하시기를 바랍니다.
진심을 담아.
박준규 드림.
6월 10일
준규 님께.
유지 관리하고 계신 프로젝트들을 공유해주셔서 감사합니다. 저는 WebFinger라는 것을 이번에 처음 들었는데요, 아마도 Fediverse에 대해 잘 몰라서 그럴 것 같습니다. 반면에 준규 님께서는 이쪽에 대해 어느 정도 알고 계신 것 같네요.
절대 부끄러워하지 마시고, Haskell 세계에 무언가를 돌려주고 계시다는 점에 자부심을 느끼셔야 합니다! 제 아내가 자주 하는 말이 있는데요, “비교는 기쁨의 도둑”이라는 말이 있어요. :)
저도 Exercism을 한 번 확인해봐야겠네요. 아직 사용해본 적이 없고, Protohackers는 아예 처음 듣습니다. Advent of Code는 저도 보통 이틀쯤 하면 포기하게 됩니다. 문제 난이도가 금방 아주 높아지죠. 연말 휴일에 하루에 몇 시간씩 쓰고 싶진 않으니까요. 그래도 가끔은 연중에 돌아가서 한두 문제씩 풀어보곤 합니다. 어떤 분께서 언어를 배우기에 좋은 방법이라고 추천해주셔서, 저도 요즘 J를 공부하면서 따라 해보려고 하고 있습니다.
블로그도 공유해주셔서 감사합니다. Google Translate의 도움을 받아서 즐겁게 읽었습니다! 준규 님께서 스스로 시간을 내어 Haskell과 Lisp, 그리고 수학적 증명에 대해 공부해오신 점은 정말 자랑스러우신 일이라고 생각합니다. 저도 꾸준히 블로그를 구독할 수 있도록 좋은 RSS 리더를 찾아봐야겠네요. Lisp에 대해서도 흥미를 느끼고 계신 걸 보았는데, 저도 약간은 다뤄보았지만 Haskell만큼 깊이 있게 하지는 못했고, 공개 저장소에 올린 코드도 없는 것 같습니다. 개인적으로는 Lisp과 Haskell 사이에 깊고 아름다운 대칭성이 있다고 생각합니다. Haskell의 게으름(laziness)을 잘 활용하면, Lisp의 매크로와 비슷한 효과를 얻을 수 있다고도 생각하고요.
혹시 아직 안 읽어보셨다면, Typeclassopedia를 꼭 읽어보시길 추천드립니다.
https://wiki.haskell.org/Typeclassopedia
이 문서는 제가 Haskell을 이해하는 데 정말 많은 도움을 주었습니다. 물론 아직도 comonad는 잘 이해하지 못했지만요! 한국어 번역본이 있다면, Haskell을 공부하는 다른 친구분들께도 아주 유용할 것 같습니다.
또한 아직 접해보지 않으셨다면 “free monad”에 대해서도 알아보시는 걸 추천드립니다. 제가 이해한 바로는, free monad는 절차적인(action-based) 방식으로 작성된 동작들을 구조화된 데이터로 만들기 쉽게 해주고, 그 구조를 함수형으로 다룰 수 있게 해주는 개념입니다. 즉, 절차적으로 보이는 문제를 함수형으로 전환할 수 있는 다리 역할을 해준다고 할 수 있습니다. 저 자신이 직접 써본 적은 없지만, 매우 강력한 아이디어라고 생각합니다.
그리고, 제가 드린 편지는 어떤 방식으로든 자유롭게 공유하셔도 괜찮습니다! 혹시 Haskell 관련해서 흥미로운 문제를 만나게 된다면 언제든지 제게 질문해 주세요. 저도 그걸 핑계로 다시 Haskell을 손에 잡을 수 있을지도 모르니까요. :)
다시 한 번 감사드리며.