프로 하스켈러 3일차 | Functor, and…
매일 아침, 업무를 시작하는 화상회의에서, 각자의 기분을 체크인하고 있습니다. 전 매일 높은 점수를 말하며, 기분 좋게 시작하고 있습니다. 새 업무 환경에 어지간히 신이 나나 봅니다.
오늘은, 오전 기획 회의가 연기되어, 온보딩 교육 전까지 여유시간이 생겼습니다. 무얼 할까 고민하다가, mongodb를 로컬에 설치하며 기웃거려보았습니다. 전 서비스용 메인 데이터베이스는 RDB만을 쓴 편이라, mongo를 써서 서비스를 오픈하는 것은 처음 경험이 될 것 같네요. 어차피 요즘 세상에는, RDB든 mongo든 또 다른 DB이든, 각자 완전히 관리되는 데이터베이스 서비스를 제공하기 때문에, 각자 애플리케이션에 맞는 선택을 하기에 부담이 크지 않은 것 같습니다.
회사에서 지급해 준 맥북프로가 너무도 고사양이기에, 여기에 부담 없이 로컬에 몽고DB를 설치했습니다. 평소 로컬에 덕지덕지 띄우는 것을 안 좋아합니다만, 새 고사양 장비 기준에서는 “덕지덕지”라는 기준치가 아주 높아진 것 같습니다. 몽고 용 GUI는 뭐가 있나 봤더니, 공식 프로젝트에서 제공하는 MongoDB Compass라는 걸 쓰는 것 같습니다. 마치 pgAdmin이나 MySQL Workbench 같은 역할을 하는 것인가 봅니다. MongoDB Compass가 아쉽게 M1프로세서용 프로세스는 따로 제공하지 않는 것 같아 살짝 아쉬웠습니다만, 크게 괘념치 말고 그냥 쓰기로 합니다. GUI로 처리할 일이 많지는 않을 거라 기대해 볼게요.
동적(dynamic) 타입 언어와 정적(static) 타입 언어의 갈림길에서, 저는 이제 정적 타입 언어를 선호하는 흐름을 탔기에, 스키마를 미리 지정하는 RDB와도 큰 거리감이 없습니다. 논란의 여지가 있겠지만, 아마도 동적 언어와 잘 어울릴 것 같은, 몽고와 하스켈이라는 강(strict) 정적 타입 언어와의 궁합이 어떨지 사뭇 궁금합니다.
그간 한결 성숙해진 몽고랑 오랜만에 반가운 인사를 나누고 나니 점심시간이 되었습니다.
맛점 후, 오후 시간에는 온보딩 교육을 또 받았습니다. 이걸 2주간이나 매일같이 교육을 해준다는 게, 대단한 정성입니다. 저라면 그렇게 못할 것 같습니다. 위키나 노션 페이지 하나 던져주고, “읽어보시고 궁금하신 거 물어보세요”하고 말 것 같은데 말이죠.
여담으로, 직전 회사 저희 팀에서, 저 혼자 1번 개발자로 일하고 있을 때, 2번 개발자로 입사하신 J님이 떠오르네요. 뭘 물어보고 싶은데, 프로젝트가 정신 없이 바쁠 때라서, 제가 하루 종일 제가 화장실도 못가고 연속 회의 불려다니고, 회의가 없는 밤 시간에 불꽃 코딩을 하고 있으니, 뭘 물어볼 짬이 없었다 합니다. 그 두어 달은, 시간 외 근무 수당까지 받아보니 평소 월급의 두 배 가까이 받았더라고요. 법정 근무 한계시간 다 채웠던 거 같습니다. 뭐 어쩌다 그러는 것은 견딜만 하지만, 그래도 저보고 선택하라면, 전 수당 일절 안 받고, 정시 출퇴근을 하겠습니다. 🙂 암튼, J님은 온보딩 교육은커녕, 아예 질문 할 기회조차 못 누리셨습니다. 혼자서 제가 휘갈겨 짜 놓은 코드를 보고, 모나드 트랜스포머의 활용법을 익히셨다는 놀라운 이야기.
암튼, 그런 죄(?)를 저지르고도, 전 친절한 온보딩 교육의 호사를 누리고 있습니다. 이곳에 입사하시면, 저도 친절한 온보딩 해드릴게요.
첫 주부터 Functor와 Monad라니…
다시 온보딩 교육 얘기로 돌아와서, 오늘은 펑터와 모나드에 대해 배웠습니다. 저는 아직 누군가에게 모나드를 설명할만한 용기가 없는 상태입니다. 뭐 어떻게 쓰라는 건지는 어렴풋이 알 것도 같은데, 아직 설명할 수 있을 만큼의 수준이 못 되는 거죠.
토드(닉네임)가 펑터와 모나드에 대해 친절한 설명해주는 걸 듣자 하니 이런 생각이 들었습니다. 모나드가 어려운 점은, 사람마다 이해하기 좋은 접근법이 다르기 때문일 수도 있겠다는 생각도 들었습니다. 꽤 이해하기 어려운 주제이다 보니, 이렇게 저렇게 공부해 보다가, 본인에게 유효했던 접근 법으로 다른 사람들에게 설명해주게 되는 것인데, 다른 사람은 또 그 방법이 그렇게 유효하지 않을 수도 있다는 겁니다. 산 정상에 오르는 길이, 잘 보이지 않고 가려져 있는데, 이 수풀을 헤쳐서 이렇게 저렇게 가다 보면, 정상에 오를 수 있는 거죠. 그런데, 어떤 사람은 가파른 오르막을 가더라도 빨리 올라가는 것을 선호하고, 어떤 사람은 돌고 돌더라도 원만한 길을 선호하고, 또 다른 사람은 막 냇가에서 쉬며 오르는 것을 좋아하는 게 아닐까 합니다.
그러면, 모나드를 배우는 입장에서는, 이런 접근법이 좋을 것 같습니다. 한두 가지 모나드 교육자료를 보고 잘 모르겠다고 쉽게 포기할 게 아니라, 어차피 배우기 어려운 주제임을 인정한 다음, 온라인에 널려 있는, 다양한 자료들을 다양하고 빠르게 마구 흡수해 보는 겁니다. 그중에 어떤 자료는 본인의 접근 성향에 잘 맞는 자료가 분명히 있을 겁니다. 암튼, 오늘 또 다른 접근 법의 교육을 잘 들었습니다. 과연 나라면 어떻게 설명할 수 있을까 고심하게 되는 오후였습니다.
알려주는 입장에서도, 다른 사람에게, 한 가지 설명을 하고 잘 전달이 안되었을 때 실망할 게 아니라, 제2 접근, 제3 접근법으로 설명해주는 시도가 유효할 것 같다는 생각이 듭니다.
아무튼, 첫 주부터 펑터와 모나드를 친절히 알려주더니, 다음 시간에는 모나드 트랜스포머를 알려준다 합니다. ㅋ. 온보딩 교육은 참 친절한데, 주제가 참 불친절하지 않습니까? ㅎㅎㅎ
하스켈 학습 자료
하스켈 종이책이 이미 집에 많이 있습니다만, 온라인에 공개된 자료는 어떤 게 있나 한 번 검색해봤습니다. 하스켈 공홈 (https://www.haskell.org/documentation/) Courses 섹션을 보니, 몇몇 대학에서 진행한 수업 자료가 공개돼 있는 것 같습니다. 첫 줄에 있는 U Penn 수업 자료를 스윽 살펴봤습니다. 학교 수업으로 하스켈을 공부할 수 있다니, 참 좋을 수도 있는 한편 괴로울 수도 있겠다 생각이 듭니다.
대학에서 하는 하스켈 수업 자료를 보고 있노라니, 저 대학 시절에 커먼 리스프 수업을 들었던 게 생각나네요. 듣는 당시에는 도무지 이해할 수도 없고, 괴로웠던 기억이 있습니다. 지난 지금에는 결과적으로 아주 감사하고 재밌는 수업이었지만, 당시에는 도무지 프로그램을 왜 이렇게 짜야하는 건지 이해할 수 없어 괴로웠죠. 아니 왜 코드에 반복문을 쓰지 말라는 건지, 반복문 없이 어떻게 유의미한 코딩이 가능한지 불평했던 기억이 납니다. 그때 과제 제출하기 위해 들이마신 카페인과 밤공기가 어마어마했을 겁니다.
오늘 적으려 했던 한가지 주제가 더 있었는데, 오늘 분량(?)은 잘 나왔으니, 다음 기회로 미루고 마무리해보겠습니다.
남의 일기, 시간들여 읽어주셔서 감사합니다. ;)