silicon.moe is one of the many independent Mastodon servers you can use to participate in the fediverse.
SiliconForest 커뮤니티 마스토돈 - 전자쟁이와 CS쟁이들 환영 An IT and electronics centric Fediverse instance for & by the SiliconForest community

Server stats:

92
active users

책읽는 코지마

만들면서 배우는 리스프 프로그래밍(Land or Lisp, 절판됨), 독서 시작합니다.

```
다른 프로그래밍 언어는 리스프의 기능을 빌려쓰고 그것을 새롭고 혁신적인 특징으로 소개한다
```

어.. 이건.. 함수형 언어가 다 그러한건데..

```
강력한 언어를 만들려면 표현력이 풍부해야 한다. 표현력이 있는 언어란 아주 약간의코드만으로 많은 작업을 할 수 있음을 뜻한다.

(중략)

언어에 힘을 싣는 두 번째 특징은 당신이 하고자 하는 바를 위해 가능한 한 깊숙이 언어의 내부를 파헤칠 수 있게 하는 것이다. 이 경우에는 언어를 설계한 사람이 당신이무엇을 하려는지 미처 생각하지 못했더라도 주어진 문제를 정확하고 우아하게 수행할때까지 언어를 뜯어 고칠 수 있다.
```

요즘 Ruby를 건드리게 될 일이 많으면서 공감하는 부분이 많은 포인트. 표현력이 풍부한것 만으로 인지부하가 확 줄어들기도 하고, 프로그래밍 언어의 차원에서 내 입맛대로 기능 확장하는게 가능하면 그것만큼 즐거운게 없음..

함수형 프로그래밍의 핵심적인 철학

```
• 가장 중요한 첫 번째 부분은 모든 것이 함수형으로 작성되어야 하고 부작용이 없어야 한다. 이 부분은 프로그램 내에서 깨끗한 구역이다.

• 상대적으로 작은 두 번째 부분에서는 모든 부작용을 포함하고 사용자나 외부 자원과 상호 작용한다. 지저분한 이 코드 부분은 가능한 한 작은 크기로 유지해야 한다.
```

```
프로그램을 디버깅할 때에는 호출 스택을 전부 보는 것이 좋지만 꼬리 호출 최적화가 스택에서 얻을 수 있는 정보를 최소화하여 디버깅을 방해한다.
```

Tail Call Optimization이 호불호가 있는 이유

```
● 매크로는 코드를 작성하면서 겪을 수밖에 없던 데자뷰의 느낌을 지운다.

● 매크로를 작성할 때에는 세심한 주의를 기울여서 의도하지 않은 코드의 실행 반복을 막는다.
```

매크로 프로그래밍의 장점

DSL의 중요성

```
사람의 모든 의문점과 모든 영역(도메인)은 각각 고유한 요구사항이 있어 해당 영역의 문제를 해결하기 위한 프로그램이 만들어지는 데 영향을 끼친다. DSL을 통해 특정 도메인의 요구사항을 고려하여 프로그래밍 언어의 핵심을 강화할 수 있으며 덕분에 코드를 작성하고 이해하기 쉬워진다.
```

개인적으로 DSL이 얼마나 생산성에 영향을 주는지 체감을 잘하고 있음. 책에서는 간단하게 graphviz/xml/svg 등의 예시를 들었지만.. 통상적인 문법대로 짜면 엄청 번잡하고 인지부하를 유발하는 코드를 짜게 되는 반면, DSL은 정말 필요한 요소에만 집중하게 해줌

리스프의 경우엔 단순히 ast를 언어로 표현하는것과 같다고도 볼 수 있는데..
예시로 들고 있는 graphviz/xml과 같은 경우 graphviz는 노드의 유형과 간선의 유형을 선언하고, xml은 트리의 구조를 선언하는 것 만으로도 문법을 의식해서 번잡하게 코드 짜지 않고도 알아서 코드가 생성이 되는 것

총평 (1/3)

대학교 2학년 쯤, 고학년 선배들이 리스프 실습으로 고통받는걸 구경하면서 "에이 나 정도면 할 수 있을 것 같은데?" 하고 시도하다가 모르는 내용이 많아서 놓았던 책이다.

지금 생각하면, 모를 수 밖에 없는 책이었다. 리스프는 근본적으로 S-표현식을 문법으로서 사용하는 언어이고, 사실상 AST와 일대일 매칭된다는 맥락에서 이해해야 하기 때문. (이 비유는 JohnGrib님이 해주셨는데 정말 정확한 비유라고 생각한다.)

### 책 자체의 느낌

번역이 원서의 느낌을 잘 살리고 있어서인지 모르겠지만, 글쓰기에 관심을 가지기 시작한 시점에서 다시 보니 '개발 도서도 이렇게 유쾌하게 쓸 수도 있는구나'라는 생각도 든다. 저자가 취미로 만화를 그려서인지, 직접 수제로 그려넣은 재치있는 삽화들도 보인다.

총평 (2/3)

책 자체는 분명히 가볍게 설명하는 것 같고 나름대로 재치를 살려서 스토리텔링도 잘 하고 있지만, 예시로 들고 있는 코드들은 초보자의 입장에서 따라한다고 해도 난해하게 받아들여질 수 있어서 결코 쉽다고 하기도 어렵다.

어느 순간, 갑자기 "lazy evaluation을 배웠으 니 이젠 인공지능을 만들어볼거에요!" "인공지능이 게임에서 이기기 위해 어떻게 상태공간을 확장할 지 알고리즘을 짜볼거에요!" "이번엔 알파, 베타를 적용해볼까요!?" 로 점점 고도화가 되어 간다. 분명 유익한 접근과 내용임은 분명하다.

그러다가도, 깨알같이 graphviz/xml/svg 의 예시를 들며 DSL의 유용성을 강조하기도 한다.

한가지 확실한건, 초보자를 위한 책은 아니다. 그나마 초보자를 위한 책이라면 Brave Clojure(braveclojure.com/) 나은 선택일지도 모르겠다.

www.braveclojure.comLearn to Program the World's Most Bodacious Language with Clojure for the Brave and True

총평 (3/3)

### 결론

2017년쯤에 여러가지 계기가 있었어서 Clojure 책을 몇권 사놓긴 했었는데, 지금 책장에 쌓여있는 lisp 관련 책만 5개 이상 되는 것 같다. 그 중에서도 Land Of Lisp는 Lisp라는 언어가 가진 핵심요소를 설명하는 것 만큼은 필요한만큼 잘 설명한 책이라고 생각한다.

특히, 표현력이 있는 언어의 중요성, 함수형 프로그래밍 언어의 핵심 철학, 확장이 가능한 언어가 가지는 여러가지 가능성, DSL의 이점을 짧으면서 간단하게 설명하고 있다.

500페이지 되는 것 같은데, 코드가 좀 많을 뿐이지 코드를 직접 타이핑하지 않고(읽는게 어려울 순 있다.), 대충 이런 흐름이구나 하고 슥슥 넘기면 한 4-5시간 안에 읽을 순 있을 것 같다.

물론, 이것도 저 책에서 설명하는 개념들을 직접 겪어보고 어느 정도 깨달음을 얻고 나서 다시 보게된 후기이기 때문에, 체감이 다를 순 있다.

다만, 이러한 수사법이 내가 어렴풋이 가졌던 생각을 강화시켜줬다