한빛 네크워크에서 개발자 블로그 콘텐츠 서비스를 시작합니다.

한빛 네트워크 페이지(http://network.hanbit.co.kr)에 접속하시면 아래와 같이 개발자 블로그DevBlog 카테고리가 추가되었습니다.

주요 개발자 블로그들의 업데이트된 콘텐츠를 바로 바로 확인할 수 있습니다.


개발자 블로그 페이지(http://devblog.hanbit.co.kr) 접속하시면 일상, 운영체제, 게임 등 다양한 카테고리의 다양한 콘텐츠를 확인할 수 있습니다.


본 서비스는 "개발자, 나를 말하다"의 저자이신 용영환님과의 제휴협력으로 개발, 서비스를 진행하고 있으며, 지속적으로 서비스를 개선하도록 하겠습니다.

제공하는 콘텐츠는 개발자들이 직접 작성한 블로그 글이므로 저작권 및 법적 책임은 자료제공사 또는 글쓴이에 있으며 한비미디어 입장과 다를 수 있습니다.



앞으로도 더 좋은 서비스를 제공하도록 노력하겠습니다.

한빛 독자 여러분들의 많은 관심 부탁드리며, 서비스에 대한 제안 사항이 있으시면 언제든지 환영합니다.


신고
블로그 이미지

HanbitMedia

더 나은 세상을 위한 한빛출판네트워크

한빛리더스 8기 1차 미션 우수 리뷰어 '정효연' 님의 

 『함수형 자바스크립트 : 새롭고 올바른 자바스크립트 프로그래밍 기법』도서 리뷰 입니다.

[원본http://takeiteazy.tistory.com/226]



함수형 자바스크립트 : 새롭고 올바른 자바스크립트 프로그래밍 기법

마이클 포거스 지음 | 우정은 역


개인적으로는 '아름다운 코드를 구현' 하는 것을 첫째 프로그래밍 규칙으로 삼는다. 필자의 다양한 업무에서 이를 달성했지만 여전히 뭔가가 부족하다고 느꼈다. 아름다운 코드를 구현한다면 책상에 앉아서 키보드를 치는 시간을 줄일 수 있는 또 다른 측면의 최적화를 달성할 수 있다. 

적절하게 사용한다면 함수형 스타일의 코드 구현이야말로 가장 아름답게 코드를 구현할 수 있는 방법이라고 생각한다. 

개인적으로 이 책을 끝까지 읽었을 때 독자들도 이에 동의할 수 있길 바란다. 


역시 필자의 의견에 동감하며, 아름다운 코드란 어떤 것이고 그에 따라 어떤 노력을 해야하는지 몇년째 고민한 결과 의외의 책에서 힌트를 얻은듯 싶다.


"실행할 수 있고, 올바로 동작하며, 빨리 실행되도록 만들어라."

- 버틀러 램슨(Butler Lampson)


"실행할 수 있게 한 다음, 올바로 동작하게 하고, 그 다음 빠르게 실행되도록 만들어라."

- 켄트 벡(Lent Beck) 


놀라운 통찰력이 책에 담겨져 있어, 분량이 짧음에도 불구하고 읽는 내내 고민했고 괴로워했고 느껴지는 것에 즐거웠던 책이었다.

OOP 관련 일만 해 보다가 이번에 자바 스크립트에 관련해서는 첫번째 책을 고른 것이었는데, 의외로 다른 언어에서 기존에 사용하던 언어의 고민을 더 깊게 만들거나 또는 의외의 힌트를 얻은 것들에 대해 놀라웠다.

예를 들면, 아래와 같은 것들은 평소 일을 하면서 괴로워했던(?) 것들에 대한 힌트를 얻을 수도 있었다.


객체 지향 스타일을 엄격하게 준수하는 시스템에서 객체 간의 상호 작용이 발생하면 각 객체의 내부 값이 바뀌면서 전체 시스템의 상태가 바뀌는데 이때 많은 작은 변화가 융합되고, 잠재적으로 미묘한 변화가 일어날 수 있다. 특히 작은 변경으로 큰 상태 변화가 발생할 수 있는 상황에서 새 객체를 추가하거나 새로운 시스템 기능을 추가해야 한다면 정말 난감하다.

이와는 달리 함수형 프로그래밍에서는 관찰할 수 있는 상태 변화를 최소화하려고 애쓴다. 따라서 함수형 원칙을 고수하는 시스템에 새로운 기능을 추가할 때는 새로운 함수가 지역화되고 비파괴적인 데이터 전이 과장(예를 들면 원래 데이터가 변하지 않음)에서 어떻게 동작할 것인지를 파악하는 것이 핵심이다. 

그렇다고 해서 함수형과 객체 지향 스타일이 서로 극과 극의 적대적인 관계라고 주장하는 것은 아니다. 자바 스크립트는 두 가지 스타일을 모두 지원한다. 즉, 자바 스크립트로 시스템을 제대로 구성하려면 두 가지 모델을 모두 사용해야 한다.   

실용적인 함수형 프로그래밍은 어떤 시스템에서 상태 변화를 완전히 제거하는 것이 아니라 변이가 발생하는 지역을 가능한 최소화하는 것을 목표로 한다. 


처음 접했던 언더스코어부터 시작하여 스코프, 클로저 등의 함수형 프로그래밍에 필요한 개념 뿐만 아니라 함수형 프로그래밍을 활용할 수 있는 다양한 정보를 제공하여 새로운 접근 방식으로 자바스크립트를 바라볼 수 있었고, 가장 좋았던 점은 책 뒤에 참고로 있었던 참고서적에 대한 소개였다.

함수형 자바스크립트의 장점 및 활용 사례, 그리고 자바스크립트를 이용하여 함수형 프로그램을 작성하는 방법에 대해서 각 Chapter별로 나누어 이해하기 쉽게 설명되어 있고,

불필요한 내용을 최대한 배제하고 간결한 설명과 예제 코드를 이용하여 각 개념에 대한 이해를 도와주며 페이지 하단의 주석에 링크를 참고하여 좀 더 자세한 내용을 확인할 수 있었고, 이론 뿐만 아니라 다양한 활용 사례를 통해 실용적으로 사용하는 데에도 도움을 주었다.

하지만 자바스크립트 활용이 익숙하지 않거나 초급 프로그래머 독자가 이 책을 접한다면 다시 생각해보고 접하라고 권하고 싶다. 각 Chapter에서 설명하는 개념에 대한 설명이 너무 간결하기 때문에 기초 서적부터 먼저 학습해야 하며, 참고 자료나 서적이 있어야 좀 더 저자가 원하는 바를 꽤뚫어볼 수 있을 것같다.

신고
블로그 이미지

한빛양

더 나은 세상을 위한 한빛출판네트워크

폴리글랏 시대, 개발자를 위한 통섭의 메시지 | 임백준 IT칼럼니스트


개발자 중에서 스택오버플로우를 모르는 사람은 없을 것이다. 코딩을 하다가 궁금한 내용이 있어서 검색을 하면 대부분의 경우에는 스택오버플로우에서 답변을 찾게 된다. 나 역시 매일 코딩을 하면서 많은 도움을 얻는 사이트다. 

지난 가을에 한국정보통신진흥원에서 뉴욕으로 연수를 보낸 젊은 개발자들을 상대로 강연을 할 때, 한국에도 스택오버플로우와 같은 사이트가 있는지 물어본 적이 있다. 

내가 들은 답변에 의하면 그런 사이트는 없는 것으로 드러났다. 연수원을 이끌던 교수님은 한국에는 ‘공유’의 문화가 결여되어 있기 때문이라고 설명해 주었다. 그렇다면 우리에게 공유의 문화가 왜 결여되어 있는가라는 질문이 떠오를 수밖에 없다. 많은 이야기가 있었지만 결론은 몇 가지로 압축된다. 

우선 자신감의 결여다. 내가 제공하는 답변이 맞는지에 대해서 확신하지 못하고, 내가 올리는 코드가 최선의 코드인지 확인할 수 없기 때문이다. 답변만이 아니다. 질문을 올릴 때 더 많은 갈등과 의혹에 휩싸이게 된다.

이런 질문을 올리면 내가 이런 것도 모르는 사람이라는 사실을 온 세상에 공표하는 것이 아닌가 하는 불안한 심정이 든다. 어릴 때부터 온전한 방식으로 질문하는 방법을 배우지 못하고, “닥치고 듣기만 하는” 교육방식에 길들여져 있는 영혼은 질문하는 것이 불안하고 불편하다. 

또 다른 이유는 먹고 살기 바쁘기 때문이란다. 날마다 야근을 해야 하고 마감일이 코앞인데 한가롭게 웹사이트를 돌아다니면서 남의 질문을 읽고 답하는데 사용할 시간이 없다. 궁금한 점이 있는 사람은 어차피 신속하게 답변이 올라올 것도 아닌데, 하는 생각이 들기 때문에 질문을 하지 않는다. 

질문에 대한 답을 알고 있는 사람 역시 자기 일이 바쁘기도 하고, 답변을 하는데 따르는 구체적인 ‘인센티브’가 없기 때문에 질문을 무시한다. 귀차니즘과 먹고살기즘 앞에서 장사가 없다. 

경쟁도 있다. 내가 터득한 비장의 ‘지식’을 나누어 줌으로써 잠재적 경쟁자들의 파워를 업그레이드 시키는 우를 범하지 않겠다는, 일종의 생존본능 같은 것이 키보드 위에 올라와 있는 손가락을 철수시킨다. 강신주 교수는 사람보다 돈을 더 중요하게 여기는 자본주의적 마인드가 우리의 영혼을 잠식했다고 지적하며, 인간중심의 철학을 회복할 것을 주장한다. 거시적으로 보면 그런 마인드가 공멸을 부를 수밖에 없기 때문이다. 

지식을 나누는 것조차 경쟁의 시각으로 바라보는 우리의 ‘본능’은 그런 의미에서 자기파멸적이다. 개인은 자신만의 작은 섬에 갇히고, 전체는 공멸의 늪에 빠진다. 

공유의 문화에 대해서 이야기를 꺼낸 이유는 통섭에 있다. 원래 뜻처럼 자연과학과 인문학의 결합에 대한 것이 아니라 프로그래밍 언어와 플랫폼의 통섭에 대해서 이야기해보고 싶었다. 요즘에는 단일한 언어와 플랫폼을 사용해서 하나의 시스템을 구축하는 것이 가능하지 않으며, 그렇게 하는 것이 바람직하지도 않다. 

내가 일하는 월가의 은행에서 자바와 C#이 하나의 시스템 안에서 뒤섞인 채 사용되기 시작한 것은 아주 오래 전의 일이다. 요즘에는 오캐멀, 파이썬, 스칼라, 클로저, F#과 같은 다채로운 언어를 혼용해서 사용하는 곳도 늘어나고 있는 추세다. 

데이터베이스 역시 관계형 데이터베이스의 독점적 지위가 허물어지고 캐시나 그리드를 활용한 인메모리 데이터베이스, 니오포제이(Neo4J)와 같은 그래프 데이터베이스, 몽고DB(MongoDB)와 같은 문서 데이터베이스 등이 프로젝트의 요구사항에 따라서 배치된다. 웹사이트를 개발할 때 사용할 수 있는 프레임워크 수도 일일이 셀 수 없을 정도다. 

각종 기술과 플랫폼이 비온 뒤 죽순이 자라나듯 엄청난 기세로 쏟아져 나온다. 그렇게 많은 것 중에서 어느 하나를 선택해서 평생을 먹고 살아야 한다고 생각하는 사람은 혼란을 겪을 수밖에 없는 시절이다. 선택을 내리는 것이 결코 쉬운 일이 아니기 때문이다. 

하지만 중요한 것은 그러한 선택 자체가 착각임을 깨닫는 것이다. 선택은 없다.

하나의 특정한 기술과 결혼을 해서 평생을 살려고 하는 사람은 시대착오적이다. 폴리글랏(여러 나라말을 구사하는 다국어 구사자를 일컫는다)의 시대에 결혼 따위는 존재하지 않는다. 2월 중에 한빛출판사에서 출간될 책의 내용 중에서 한 구절을 인용해본다. 

“앞으로 프로그래머는 어느 하나의 언어에 안주할 수 없다. 패러다임을 달리 하는 여러 개의 언어를 자유롭게 구사하지 않으면 살아남을 수 없는 폴리글랏 프로그래밍의 시대가 되었기 때문이다. 자신의 포트폴리오를 어떤 언어로 구성하는지는 각자의 몫이다. 하지만 앞으로는 프로그래머가 어떤 언어에 대해서 얼마나 많이 알고 있는가 하는 것이 아니라 어떤 언어를 얼마나 빠르게 학습할 수 있는가 하는 것이 더 중요하다는 점을 기억하기 바란다.” 

개발자에게 있어서 통섭의 다른 이름은 폴리글랏이다. 서로 다른 것들이 합쳐지면서 새로운 활로를 개척하는 것이 통섭이다. 그리고 공유와 통섭은 동전의 양면이다. 

한국에 스택오버플로우와 같은 웹사이트가 있는지 찾기 위해서 인터넷 검색을 하다가 우연히 만난 한국의 개발자 사이트를 둘러보면서 느낀 점은, 그들이 각각 자기만의 섬을 이루고 있다는 점이었다. 외롭고 배타적인 느낌이었다. 그들이 선택한 언어나 플랫폼 주변에서는 심지어 종교의 아우라가 뿜어져 나오기도 했다. X에 대해서 말하는 것은 곧 Y에 대한 배척이라고 간주하는 막장논리도 눈에 뜨였다. 

개발자들은 자기가 사용하고 있거나 새롭게 학습하고 있는 기술에 종교적인 의미(즉 배타성)를 부여하는 것을 경계해야 한다. 그것과 결혼하는 것을 두려워해야 한다. 공유를 통해서 섬을 탈피하고, 나눔을 통해서 통섭을 해야 한다. 끊임없이 바람을 피워야 한다. 지금은 폴리글랏의 시대이기 때문이다.

(출처: http://www.zdnet.co.kr/column/column_view.asp?artice_id=20140204123657)

신고
블로그 이미지

HanbitMedia

더 나은 세상을 위한 한빛출판네트워크