2020_9_17_functional_Clojure_thinking.고전.원류

Clojure는 함수형 언어 lisp의 현대판 구현체이다. Clojure는 전설의 언어인가? 꼭 배워야 하는가?

울티마4의 자유도와, 미덕 시스템, 젤다의 락 시스템, 하프라이프식 스토리텔링등 당대 최고의 게임들은 전부 하나의 패러다임을 바꾸는 답을 내놨다. 그리고 그 시대 이후 작품들은 다 그 영향들을 받았다. 당대 충격적인 시스템들은, 이후 게임들에는 자연스럽게 녹아든다.

언어도 똑같다. Lisp의 혁명적 개념들은, 이제 혁명적이지 않다. REPL의 혁신성등을 말하기에는, Python Jupiter 등으로 그래프를 그리며 코딩하는게, 당연한 세대에게는 그냥 그런 개념이다. 고차함수, 모나드, Functor, 다 JS에서 프로미스로 콜백을 다룰때 쓰던 개념들이다. 퓨어펑션, 불변성 redux를 배우고 쓰면서 쓰게된 개념들이다. 강연자가 아무리, 이런 혁신성을 말해도, 근대 Ruby, Python, ES6 같은 언어로 시작해서, 모든게 고차함수고 이미 lazy loading도 되고 이런걸 매일 쓰던 입장에서는, 사실 그리 크게 다가오지 않는다.

클로저가 이제 와서 의미가 있는가? 울티마4를 현대인들은 해봐야 하나? 죄와벌같은 고전을 읽어야하나?

고전을 하고, 읽으며 느껴지는게 있다. 여전하게 클로저도 직접 쓰면서 느끼는게 있다.

JS같은 언어는 멀티 패러다임이다. 언어 레벨에서 강제를 안해서 그렇지, 불변하고, 함수형으로 코드를 짤수있다. 결국 사람의 문제인가? 그래도 나는 강제하는게 좋다고 본다.

나는 컨벤션을 좋아한다, 규약이 좋다, 문화가 좋고, 아무 생각없이 따르면, 그 안에서 누리는 혜택이 좋다.

개인적으론 리눅스보다 맥을 좋아한다. 다 강제하고, 그 안에서는 고민 안하고 쓰고싶다. 고민은 애플의 UI, UX 디자이너와 개발자가 해준다. 대신 시간을 벌고, 다른 일을 한다.

그렇다고 자유는 독인가?

자유는 버겁다. Vim, Emacs 다 좋았다. 그러나 러닝커브가 너무 많다. 너무 많은 자유가 있다.

좋은 리더이며 철학자가 깊은 고민끝에 잘 정돈해둔 컨벤션 셋을 따라가는걸 좋아한다. 코딩도 그렇다. 성경도 그렇다. 문화도 그렇다. 그 컨벤션 위에서 내 색을 칠하는걸 좋아한다.

Vim key는 너무 마음에 들어서 맥에 글로벌로 바인딩해서 쓰고있다.

물론 이 문화, 생각, 컨벤션들에는 더 이상 작동하지 않는 부분도, 고장난 부분도 많다. 매우 많다. 그래도 시작점으로는 몹시 훌륭하다. 먹을 탄수화물을 고르기 위해서 빵과 쌀을 고를필요는 없다. 동양인이면 그냥 쌀, 백미를 먹으면서 시작하면 된다. 흡수률, 단백질양 이런거 생각하기에는 인생이 너무 짧다.

개발은 실용적이어야 한다. 개발은 현실세계의 문제를 풀기위한 도구이다.

문제를 해결하면 Cobol도 훌륭한 언어이다. 아직 수요가 많고, 고 임금을 받는다.

동시성, 병렬성, fault tolerance. 다 꽤 큰 시스템을 위한 문제들이다. 보기에 Clojure는 매우 좋은 해답중에 하나이다. 그런데 작은 회사에서 이런 문제들을 위하면 안되나?. 오버엔지니어링 인가.

개발자가 한번 코드를 짤때, 그 코드가 실행된 횟수에 따라서 가치가 변할것이다. 대량생산과 크고 많은 문제를 효율적으로 해결할때 필요한 부품을 만드는걸 지향해야 한다.

서비스의 변화에 따라서 유연하게 변하는 구조여야한다. 그래야 빠른 대응이 가능하다.

그런 개발자를 지향해야하고, 그런 시스템이 더 많은 가치를 세상에 가져온다.

라면을 하루에 몇십개 만드는 요리사가 되면 안되고 라면을 만드는 공장 설비를 만들어야 한다. 그래서 하루에 몇천개씩을 뽑아낼수 있어야 한다. 공장설비는 절대로 멈추면 안된다. 불량률도 적어야한다.

이런 특성상 미국, 중국등 인구가 많은곳을 대상으로, 꼭 필요한 서비스를, 견디는 시스템을 만드는 개발자가 고 부가가치를 만드는것 같이 보인다.

객체지향보다 함수형이 좋은가? 시간이 없을때, 다중 상속하면서, 놔두고 못 고쳐서 스파게티가 되는거보단 함수형이 관리에 편할지 모른다. 디자인패턴도 배울 러닝커브가 꽤 많다.

Clojure는 실용적인가? 맞는 필드와 상황이라면 좋은 선택으로 보인다. 그래도 더 멀리보면, 개발자 풀 양이라던가, 러닝커브등을 보면 허세이고 욕심일수 있다. 좋은 CTO가 멀티 패러다임 언어를 코드 리뷰하면서 팀 전체와 코드를 함수형으로 이끌어 가는게, 좀 더 현실적이지 않을까? 한국에서는 Scala 같은게 더 현실적인 대안이 아닐까.

꼭 배워봐야 하는 언어이긴 한거 같다. 고전을 읽으면 원류를 느낄수있다.

그 시대상에 문제와 고뇌와 작가의 답을 알수있다.