메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

독자리뷰

새로운 시각과 자극으로 프로그래밍을 더 잘할 수 있게/더 고민하게 해 줄 책

paranba***

|

2017-08-30

함수형 반응형 프로그래밍

함수형 반응형 프로그래밍에 관한 최초의 종합 안내서

  • 저자 : 스티븐 블랙히스 , 앤서니 존스
  • 번역 : 오현석
  • 출간 : 2017-08-01

## 추천

 

이 책은 자바를 사용하는 프로그래머에게 객체지향형/절차형 프로그래밍의 테두리를 벗어나 새로운 자극과 시각을 체험하게 해준다. 익숙한 테두리를 벗어났다가 다시 익숙한 곳으로 돌아가더라도 새로운 시각과 자극이 프로그래밍을 더 잘할 수 있게/더 고민하게 해 줄 것이라고 생각한다. 

 

## 책 읽기 전에 알아두면 편한 것

 

- git

- 메이븐

- java 8 : 책에서도 Java 8 in Action 을 추천하고 있다. 적어도 스트림과 람다 부분을 알고 있어야 한다.

- javascript : 읽을 수 있는 정도면 충분하다.

- c : c 문법에만 의지해서 읽을 수 있는 정도면 충분하다.

 

## 장점

 

### 번역이 정말 매끄럽다. 

 

문화권이 다른 점을 고려해서 레밍턴 케이크(잘 모르는 음식)를 떡으로 바꾸어 더 잘 이해할 수 있도록 하는 세심한 배려가 넘친다. **번역은 완벽**하다고 생각한다. 

 

### 구성이 보기 좋게 되어있다.

 

챕터를 시작할 때 주제를 보여주고, 새로운/정의가 필요한 용어가 등장했을 때 곧바로 `DEFINITION`이 나타난다. 도움말과 보충 지식이 '딱 궁금해질 시점'에 `NOTE`로 등장하여 읽는 데 속도를 낼 수 있게 해준다. 각 챕터가 끝날 때는 요약하는 장이 있어서 읽었던 것을 이해했는 지 테스트하는 용도로도 쓸 수 있다.

 

### 알맞은 수준의 예제

 

저자가 예제를 고르는 데에 심혈을 기울였다는 것이 느껴진다. 충분히 실전에 등장할 법하면서도, 설명하기 위한 정도에 걸맞는 적당한 난이도를 가진 예제들이다. 

그리고 이 예제를 발전시켜 나가면서 설명을 하기 때문에, 예제를 따라하면서 이해하도록 배려한 점이 돋보인다.

 

## 취향에 따라 다를 수 있는 부분

 

### '약' 농도가 높게 느껴질 수 있다.

 

책을 읽다 보면 '멀리 보고 프로그래밍 할 거면 FRP 하세요'라는 소리가 들리는 것 같기도 하고(...) 'FRP가 이렇게 좋습니다 여러분!'하는 말을 들은 것 같기도 하고(...)

암튼 저자가 발휘하는 Po설득wer 혹은 Po전도wer가 느껴진다. 물론 근거는 다 있어서 억지스러운 건 아닌데 취향을 탈 수도 있는 부분 같아서 언급해둔다.

 

## 한 번 읽었을 때 챕터별 간단 소감

 

한 번 읽어서 전부 이해하기는 힘들고(책이 술술 읽히는 것과 읽어서 이 내용을 소화했다는 것은 다름) 첫 번째 읽으면서도 이미 '두 번째는 이렇게 하면서 읽어야겠다'는 계획이 세워진다(...)

 

다음 번 읽었을 때 소감과 비교해보기 위해 챕터별 첫 인상을 남겨본다.

 

- 1장 : 복잡도를 다루어 내고 싶다고요? FRP가 여기 있습니다!

  -  1.15의 '선언적으로 생각하기'를 설명하는 비유가 아주 멋지다. 내가 먹는 걸 좋아해서 그렇게 느낀 것일 수도 있지만, 라자냐 레시피에 비유했음에도 설명에 어긋남이 조금도 없다.

- 2장 : 참조투명성, 참조투명성, 참조투명성 + Cell 타입은 두 번째 읽을 때 더 천천히 읽어 봐야겠다.

  - Unit 데이터 타입 설명이 몹시 꼼꼼하게 되어있다.

  - 2.4의 '참조 투명성'에 대한 `Note`도 꼼꼼함에 감탄하게 된다(...)

  - 2.6에서 "몇몇 유사 FRP 시스템에서는 동시 이벤트 개념이 없다"고 따끔하게 지적하고 있다.

- 3장 : 예제. 짧아요.

- 4장 : 예제. 적절한 예제. 두 번째 볼 때는 처음부터 끝까지 타이핑해봐야겠다.

- 5장 : 폰 노이만으로 시작해서 Po전도wer

  - 5.1 "기존의 소프트웨어를 빠르게 실행하기 위해서 현대의 기계들은 폰 노이만 기계인 척 하기 위해 최선을 다한다."

  - 5.2 합성성,합성성,합성성

  - 5.3 "객체지향 방식에서 합성성이 부족한 이유는?" <- 제목이 설명을 다 했네.

    - 여기에 초월 번역이 등장. 레밍턴 케이크를 떡으로 적절히 바꿔주신 역자님, 감사합니다!

- 6장 : "웹에서 FRP"

  - RxJS -> Kefir.js -> Falpjax 로 같은 예제를 구현해본다.

  - 소듐이 진정한 FRP다 _po전도wer_

- 7장 : 게임도 구현해봅니다. 게임은 FRP 써보기에 참 적당하죠. 두 번째 읽을 때는 역시나 타이핑 우선으로 읽어야겠다.

- 8장 : 익숙한 연산(=조작적인 부분) + 트랜잭션, 이렇게 쓸수 있습니다.

- 9장 : 애니메이션을 만들면서 FRP의 유용함을 느껴봅시다!

- 10장 : 패러다임 비교하기 - 액터 모델이 더 매끄럽게 쓰이는 경우도 있다.

- 11장 : 실전 프로그래밍이라고 쓰고 피할 수 없는 실제 문제들이라고 읽을 수 있는 부분-I/O, 병렬, 분산, 테스트 + 프라미스(라고 쓰고 퓨처도 포함시킨다)

- 12장 : FRP 써서 GUI 라이브러리도 구현할 수 있지요!

- 13장 : 리팩터링 -> po전도wer

- 14장 : 가장 매력적으로 보이는 "기존 프로젝트에 FRP 추가하기"

  - 14.4 "트랜잭션 안에서 프로그램 초기화 하기" : 소듐 사용한 예시를 보여줌

- 15장 : FRP로 하고 싶은 일은 여기 더 있습니다!

  - 15.2 사전 컴파일 사용하면 성능 개선과 임베디드 시스템에서도 쓸 수 있다는 장점이 있습니다.

  - 15.3 "FRP 코드를 GPU에서 실행하는 방식은 그리 타당하지 않을 것이다. GPU는 데이터 병렬성이라는 다른 종류의 병렬성에 더 적합한 기계이며, 한 번에 많은 데이터 집합에 같은 연산을 여러 번 적용할 때 더 좋다."

 

 

### 두 번째 읽기를 한다면

 

- 코드를 전부 타이핑해보는 게 좋겠다.

- 온라인이라도 좋으니 여럿이 같이 타이핑 해보고 이야기를 나눠봤으면 좋겠다.

 

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?