행복한 프로그래밍

이 책은 자신을 메타 프로그래머라고 표현하는 임백준 저자가 작성한 책으로 프로그래밍이 어째서 행복한가에 대해 풀어나간다. 개발자가 아닌 사람이 이 책을 접하고 프로그래밍의 행복을 느낄 수 있을까? 개발자는 또 어떠한가?

1. 프로그래밍의 세계

라이프니츠조지 불을 소개하면서 비트와 진수에 대한 내용을 설명한다. 이후에는 웹이 동작하는 방식과 용과 기사가 주고받는 간단한 알고리즘 문제들로 이루어져있다.

공주를 구하기 위해 기사가 용이 내는 문제를 푸는 과정이 인상적이었다.

기사는 공주를 구출해야 한다는 사명감을 잊어 버린 지 오래다.

위 문장을 읽고 흠칫했다. 프로그래머는 이처럼 승리감을 만끽하며, 때로는 승리감에 몰두한 나머지 원래의 목적을 잊기도 한다. 는 의미인것 같은데, 웃기기도 하고 나는 과연 저런 사람인가? 라는 생각이 들기도 했기 때문이다.

1장을 요약하면 "프로그래머는 주어진 문제에서 알고리즘을 발견하고 프로그래밍을 통해 결과를 만들면서 행복을 느낀다." 인데, 이 과정에서 느끼는 성취감은 마약과도 같은 중독성이 있다고 한다. 생각해보니 나는 문제를 푸는 과정 자체를 즐기지는 않지만 문제를 해결했을 때 오는 마약과도 같은 성취감을 좋아하는 것 같다. 학부 시절에도 그랬고, 잠깐 다녔던 알고리즘 학원에서도 그랬고, 시간이 남아 회사에서 몰래 카타를 풀던 때도 그랬다.

2. 행복한 프로그래밍

도널드 커누스, 브라이언 커니핸, 데니스 리치 를 소개하면서 다시 한번 비트에 대한 내용을 설명한다. 이후에는 생활 속에 숨어있는 알고리즘과 프로그래밍 언어, 컴파일러, 버그 그리고 재귀함수에 대한 내용을 설명한다.

이번 장에서는 버그에 관한 사건들이 인상적이었다. 두 사건이 등장하는데, 바로 Y2K 문제매리너 1호 에 대한 내용이다. 두 사건 모두 현대의 프로그래머라면 실력에 상관없이 비웃을 만한 사건이다. 혹은 굳이 프로그래머가 아니더라도, 매리너 1호의 참사가 매우 사소한 실수로 인해 벌어진 결과라는 것은 동의할 것이다.

2장은 여러 개념과 사건을 담고 있기 때문에 요약하기가 애매하다. 내가 느낀 점은 결국, 외공과 내공을 열심히 공부해야한다는 것뿐이다. 외공(언어, 패러다임, 철학, 패턴 등)의 중요성은 모든 개발자가 알고있다. 하지만 알고리즘과 같은 내공이 특정 분야가 아닌 모든 개발자들에게 중요할까? 이에 대한 의견들은 매우 다양하며 상당히 주관적이다. 나는 알고리즘과 같은 내공이 중요하다고 생각한다. 내공이 탄탄하면 새로운 외공을 접했을 때, 해당 외공을 더 빠르게 익히는데 도움을 준다고 생각하기 때문이다.

3. 알고리즘과 해킹의 세계

세일즈맨의 여행 문제로 시작해서 복잡성 이론을 설명하며 알고리즘 문제의 종류에 대해서 설명한다. NP 완전 문제에 속하는 비밀번호 해킹을 시작으로 해킹, 보안, 가상화폐, 블록체인 그리고 콘웨이의 인생게임에 대해 설명한다.

이번 장에서는 유전자 알고리즘과 관련된 부분에서 저자의 생각이 인상적이었다.

DNA란 어쩌면 생명과 우주를 창조한 신이 사용한 자료구조나 알고리즘이 아닌가 하는 생각이 드는 것이다.

위와 같은 저자의 생각은 다음과 같이 확대된다.

혹시 신은 수학자가 아니라 프로그래머가 아니었을까?

다음에서 연재 중인 웹툰인 블랙 베히모스에서는 2차원과 3차원 세상에 대한 내용이 등장한다. 3차원 세상의 존재의 사소한 행동이 2차원 세상에 주는 영향에 대한 내용이 등장한다. 2차원 세상의 존재의 입장에서 보면 3차원 세상의 존재는 신과 같을 것이다.

이를 응용해서 3차원 세상을 살아가는 주인공이 세상을 2차원으로 바라보게 하여 마치 한 차원 높은 세상의 존재인 것처럼 3차원 세상에서 신의 능력을 사용하는 장면이 인상 깊었다. 블랙 베히모스에서 2차원인 종이에 살아가는 생명체를 만든 3차원 존재는 전쟁을 위해 만들어진 일종의 컴퓨터였다. 비록 웹툰의 내용을 응용했지만, 3차원을 살아가는 생명체를 만든 존재는 4차원을 살아가는 수학자 혹은 프로그래머가 아니었을까?

저자도 나도, 진지하지 않다

4. 소프트웨어 바깥 이야기

프로그램의 '겉모습'이 적어도 '속도'보다 더 중요한 세상이 된 이유에 대한 설명으로 시작하여 그레고리 롤린스의 철학인 '소설처럼 읽히는 프로그램'을 이용해 가독성의 중요성에 대해 설명한다. 이후에는 패러다임의 전환, 브라우저의 변화와 자바의 성공담, 인터넷 대란과 전설의 해커 케빈 미트닉에 대해서 설명한다.

이번 장에서는 몰랐던 사실이라 나를 놀라게 한 내용이 있었다.

언어의 창시자인 제임스 고슬링을 무례한 방식으로 회사에서 몰아내고, 기술의 생명력보다 수익에 관심을 보이는 오라클의 모습은 오랫동안 프로그래머의 사랑을 받아온 자바의 유통기한을 앞당기는 것처럼 보인다.

자바 API와 관련된 구글과 오라클의 법적 분쟁과 오라클 자바의 유료화는 유명한 사건들이지만 제임스 고슬링을 무례한 방식으로 회사에서 몰아냈다는 내용은 몰랐던 사람이 많을 것 같다. 이 내용을 자세히 알아보고 싶어졌다.

Java의 아버지는 왜 오라클을 그만뒀나? 기사에 따르면 제임스 고슬링은 오라클을 떠날 당시 이유를 밝히기 어렵다고 했지만 그 후 5개월이 지나 그가 입을 열었다고 했다. 그는 오라클에 적절한 대우를 요구했지만, 오라클은 그의 모든 업적을 부정했다고 주장했다고 한다. 연봉 삭감, 낮은 자리, 권한, 지적재산권 등 여러 가지 이유가 있으며 오라클이 구글을 고소한 것은 이미 예상했던 결과라고 말했다고 한다.

오라클은 2015년에 에벤젤리스트를 일부 해고하기도 했다. OKKY에서 fender 님이 작성하신 자바가 아닌 다른 언어를 배워야 하는 이유의 내용이 이제 이해가 되기 시작했다. "아직은 대한민국에선 자바가 주류 언어다.", "OpenJDK가 있기 때문에 오라클의 영향력은 문제가 되지 않는다."라는 주장도 일리가 있지만, 다른 언어를 준비해야 한다는 주장이 더 와닿는다.

하지만 다른 언어를 준비하면서 함수형 패러다임을 접하고 공부하다 보면 하마 님이 작성한 왜 스칼라를 비롯한 잡종/함수형 언어가 메이저가 될 수 없는가..와 같은 글을 접하면서 깊은 생각을 하게 된다. 나는 함수형 패러다임을 차용한 언어는 스칼라만 접해봤고, 그마저도 패러다임과 철학을 느껴볼 만큼 공부하지 않아서 뚜렷한 의견을 주장하지는 못하겠다.

그래도 주장해보자면. 프로그램의 규모가 커지면서 확장성, 재사용성과 유지보수의 한계를 느껴 객체지향으로의 패러다임 전환이 필요했듯이, 멀티코어와 분산환경으로 인해 동시성 코드 작성의 한계와 더 간결한 코드를 위해 함수지향으로의 패러다임 전환이 필요할 것이다. 패러다임의 전환은 근본적인 가치의 전환이기 때문에 힘들지만, 시대가 요구하는 기술을 배우고 사용할 수 있는 프로그래머가 되기 위해서는 도전해볼 만하다. 반드시 주류 언어일 필요는 없지 않은가?

마치며

1장을 제외하고는 행복한 프로그래밍이라는 제목과 거리감을 느꼈다. 개발자가 아닌 사람은 1장을 제외하고는 읽기가 어려울 것 같다. 하지만, 개발자라면 충분히 행복한이라는 형용사를 느낄 수 있는 내용들로 이루어진 책이다. 전혀 모르던 수학자들과 유명한 개발자들에 대해 알아가는 과정도 즐거웠고, 수학과 프로그래밍이 왜 훌륭한가에 대해 알아가면서 자신감을 갖게 되었고, 자바라는 언어가 주류가 된 일화와 위기에 대한 내용은 깊은 이해와 공감을 자아냈다.

1장에서 "그래, 나는 이러한 과정을 즐기는 개발자가 되고 싶어"를 느꼈다. 책을 덮었을 때는 프로그래밍 역사 여행을 다녀온 기분을 느꼈다. 기술 위주의 책이 아니기 때문에 지식을 얻고자 하는 독자에게는 추천할 수 없지만 저자의 바람처럼 이 책이 열정을 잃은 대한민국 개발자들에게 열정을 되찾는 계기가 될 수 있기를 바란다.