아래 질문에 대한 심플하고도 유용한 답을 준다. (유일한 해답은 아니겠지만!)
*하스켈을 클로저나 엘릭서로 바꿔도 된다
**나는 리액트 공부할 때 처음 봤다
간단히 요약하면, 이 책은 진짜 한 줄 한 줄 코드를 쓰는 개발자가 필요로 하는 테크닉을 담고있다.
을 적당히 가공한 내용:
모든 것은 셋 중 하나다 : 데이터, 계산, 액션
액션은 호출 타이밍과 호출 횟수가 중요한 행위다.
계층형 설계 - 직접 구현 : 함수의 호출그래프를 한 판 그리고 나면, 화살표의 길이가 다양한 것을 보고 추상화 단계가 제멋대로임(= 직접 구현이 잘 안 되었음)을 알 수 있다.
계층형 설계 - 추상화 벽 : 추상화 벽 위에 있는 함수만을 사용해 안팎이 소통해야 한다.
리팩터링 1 - 함수 이름에 인자가 있다면 (코드 스멜) --> 명시적인 인자로 대체
리팩터링 2 - 함수에 동작을 전달해야 한다면 --> 함수를 콜백으로 전달
"(고차 함수를 만들면) 마치 복잡한 퍼즐을 풀고 똑똑해진 것 같은 느낌을 받는 것처럼 여러분의 뇌를 자극합니다. 좋은 엔지니어링은 퍼즐을 푸는 것이 아닙니다. 효과적으로 문제를 해결할 수 있어야 합니다."
reduce 로 map 이나 filter 를 만들 수 있다. 반대로는 안된다.
변이(변수의 변화) 지역적으로 일어나고 공유되지 않는다면 여전히 계산이다.
체이닝을 명확하게 만들기: 단계에 이름 붙이기 / 콜백에 이름 붙이기* (후자가 재사용에 유리함) *후자는 저수준 함수들을 그대로 드러내는 경향을 보이는 듯 (filter, map, etc)
타임라인 그리기 : 액션만 그린다. 순서대로 일어나면 동일한 타임라인에 넣는다. 동시에 두 액션 이상이 일어나면 타임라인을 분리한다.
좋은 타임라인의 원칙 : 타임라인은 적고 짧을수록 이해하기 쉽다. 공유자원이 적을수록 이해하기 쉽다. 공유자원은 조율해야 한다. 시간*을 일급으로 다룬다. *시간을 다룬다는 말은, 액션들의 불분명한 호출 순서를 완벽히 통제한다는 뜻이다.
반응형 아키텍처*를 사용해야 할 때 : 하나의 원인이 N 개의 결과를 만들 때. *이 파트가 내겐 DDD로 읽혔다
도메인 용어가 아닌 표현이 있다면 도메인 모델이 아니거나 부적절한 모델링의 증거다 : '데이터베이스', 'AJAX' 는 도메인 용어가 아니다.
An Intuition for Lisp Syntax (https://stopa.io/post/265) : LISP 문법의 장점을 얘기하는데, 전반적인 분위기나 난이도나 다루는 주제가 본 책과 일맥상통한다. 본 책보다 조금 어려우니 이해 못해도 실망하지 말길.
제목이 좀 유치찬란한 느낌이 있지만... 원제목은 좀 더 낫다.
저자인 에릭 노먼드가 직접 이 주제를 가지고 발표했다. 50분짜리 책 홍보 영상이지만 상당히 도움이 된다. 이 영상을 보고 오! 그렇구나! 하고나서 조금 더 체화하기 위해서 책을 사는 시나리오를 추천한다.