프로그래머를 위한 책이지만 프로그래밍 기술에 대한 이야기는 없으며, 오직 어떻게 해야 작업능률을 올릴 수 있을지에 대해 초점이 맞추어져 있다.
능률적인 프로그래머란,
같은 작업에 대해서 다른 사람보다 더 쉽고 빠르게 할 수 있는 능력을 가진 프로그래머라고 할 수 있겠다.
똑같은 프로그램을 남보다 더 빨리 짤 수 있는 프로그래머 역시 능률적인 프로그래머라고 할 수 있지만, 이 책에서는 그런 프로그래머가 되는 방법을 다루지는 않는다.
그것보다는 '똑같은 코드를 어떻게 더 빨리 입력 할 수 있는가'와 같은 주제가 이 책에서 말하고자 하는 내용이다.
예를 들어, 마이크로소프트 워드 프로그램을 띄우는데 어떤 사람은 시작 프로그램에서 찾아서 실행시키고, 어떤 사람은 바탕화면에서 더블클릭해서 실행하고, 또 어떤 사람은 단축키로 등록해놓고 실행시킬수도 있을 것이다.
이 책에서는 마지막 사람을 능률적인 프로그래머라고 부르며, 능률적인 프로그래머가 되기 위한 여러 방법들, 그리고 그것을 도와주는 많은 애플리케이션들을 덤으로 배울 수 있다.
나는 이 책에서 가르쳐주는 많은 유용한 애플리케이션들의 웹사이트를 다 찾아가봤는데, 조금 불만이었던 것은 책에서 설명한 것만큼의 기대에 못미치는 조잡한 프로젝트들이 많았다는 것이다. 물론 Subversion이나 Vim같이 이미 널리 쓰이는 메이저 프로덕트들은 제외하고 말이다.
이 책은 원서가 2008년에 발행되었는데, 그 훨씬 이전부터 개발이 중단된 오픈소스들이 많이 소개되고 있고, 실제로 써먹을만한 애플리케이션은 거의 없었다.
애플리케이션은 하나도 못 건졌지만, 그래도 이 책에서 아주 중요한 것 하나를 건졌는데 그것은 능률적인(DRY한) 프로그래머가 되어야겠다는 마음가짐이다.
나는 지금까지 2년여 정도 vim 에디터를 써오고 있었는데, 가만 돌아보니 그동안 꽤 오랫동안 vim만 써왔음에도 불구하고, 제대로 쓸줄 아는 기술이 거의 없음을 깨닫고는 부끄러움을 느꼈다.
에디팅을 하다가 불편한 점이 생기더라도
'어딘가 쉬운 방법이 있긴 할텐데 나중에 찾아보지 뭐'
이런 썩은 마음가짐으로 여태까지 시간을 흘러보냈던 탓이다.
작년 12월 말에 이 책을 보면서, 2010년에는 vim의 달인이 되자는 생각을 가졌는데, 1월 한달 동안 조금씩 노력한 결과 2년 동안 할 수 있던 것 보다 더 많은 것을 할 수 있게 되었다.
책 내용 중에 이런 내용이 있었던 것 같다.
편집을 하다가 마우스에 손이 간다면, 그 작업을 취소하게 하고 단축키를 이용해서 똑같은 작업을 2회 반복해서 다시 하도록 한다.
이런 식으로 가르친다면 배우는 사람의 실력이 부쩍부쩍 좋아진다는 것이다.
하지만 우리는 지금 군대에서 고참에게 아래 한글을 배우는 중이 아니다. 회사에서 저런 방식으로 가르쳐주는 사람은 많지 않다. 오직 혼자서 머리속에 각인 시킨채 노력해야만 하는데, 이것이 참 어렵다.
하지만 아마도 이 책을 읽고 나면 다들 능률적인 프로그래머가 되기 위해 노력하고 싶어질 것이라 생각한다.
비록 이 사이트는 한달에 한번씩 업데이트가 되긴 하지만 매년 새해에는 올해의 언어를 선정하기도 한다. 나는 2009년에는 당연히 C#이 Winner가 되리라 예상했었는데, 바로 지난달인 작년 12월까지 순위에도 없던 Go가 2009년의 언어로 선정된 것은 정말 의외였다.
Tiobe에서는 이에 대해 나름대로 변명을 하고 있기는 하다.
Is Go a hype? May be. But even if it appears to be just another language, the fact that it is a language designed by Google is sufficient to make it really popular. Nobody will be blamed to use a language that is associated with the Google brand name. Apart from that, there is also something technically promising about Go. It has native support for concurrent programming, thus fulfilling the existing need of a language that allows efficient use of multicore processors.
It is astonishing to see that a programming language can rise so fast. Go was not listed yet last month and now it is already #13. This sudden change might be considered an inevitable consequence of our current culture, in which new information is spread and used around the globe at the speed of light.
어쨌거나 나는 아직 Go를 공부해보지는 않았지만 훌륭한 사람들이 설계한 언어이고, 또 믿을만한 회사에서 지원하는 오픈소스인만큼 곧 우리들 곁에도 가까이 다가오게 될 것이라는 생각을 한다.
이 책은 우리나라의 지난 IT역사의 큼직큼직한 많은 이슈들을 정리해놓은 책이다. 저자가 이 모든 것들을 기억하고 있다는 것이 놀라웠을 따름이다. 아마도 정확한 자료를 구하느라 꽤나 힘들었을 것이다.
어쨌든 그 노력 덕분에 나는 편하게 책을 읽으면서 오래전 기억들을 되살려 볼 수 있어서 아주 좋았다.
내가 처음 컴퓨터를 만난 해는 1989년인가 90년이었다.
그 컴퓨터는 삼보 트라이젬 XT 8088 어쩌구 하는 모델이었는데, 하드디스크도 20MB나 달려있고 키보드도 88키가 아닌 101키 키보드였다.
20MB 하드 디스크는 정말 얼마나 크고 빨랐는지, 당시에는 정말 채워도 채워도 차지않는 넓은 사막처럼 느껴졌었다.
두번째 컴퓨터는 94년도에 용산에서 샀던 486이었는데 4MB 램을 달고 세상의 모든 DOS용 게임들을 했었다.
그리고 99년도에 펜티엄2 350Mhz를 샀었고 이것은 거의 스타크래프트 용도로만 쓰였다.
3개의 컴퓨터를 사용하는 동안 10년이 넘게 흘렀는데, 그 용도가 게임과 PC 통신밖에는 없었다. 돌아보니 참 안타까운 일이다. 이 책에서는 8비트 키드 어쩌구 하면서 10대들이 멋진 해커로 자라고 있는데 나는 방구석에서 대항해시대나 삼국지만 죽어라 했으니 말이다. 뭐 그 덕분에 지중해에 어떤 도시들이 있는지는 아직도 잘 기억하고 있긴 하지만. 다시 돌아갈 수는 없고, 이미 지난 일이니 어쩔 수 없다.
제대하고 나서 2004년도에 펜티엄4 2.4C 셀러론을 샀는데, 이 컴퓨터로 처음으로 프로그래밍이란 것을 시작했고 나는 컴퓨터를 좀 더 잘 이해할 수 있게 되었다. 그래서인지 이 컴퓨터는 새 것으로 교체할 때 마음이 참 아팠다.
그리고 지금쓰고 있는 것은 2007년도에 샀던 코어2듀오 2.33 6550인데 램을 5G를 달아놓고 리눅스와 윈도우즈를 동시에 돌리면서 아주 잘쓰고 있다.
컴퓨터를 4-5년 주기로 한번씩 바꾼 셈인데, 전자제품에 대해 엄청난 지각수용자인 나에게는 아주 적당한 기간이었던 것 같다.
이 책은 국내 역사만을 다루고 있다. 쭉 읽어보니 자긍심이 느껴지는 부분도 있었고, 속상한 부분들도 있었다. 이 책에 나오는 훌륭한 해커들처럼 나도 어떤식으로든 나라에 보탬이 되고 싶은 마음이 있다.
앞으로 국내에 혁신적인 기업들과 제품들, 그리고 해커들이 많이 탄생해서 이 책이 계속 개정될 수 있었으면 좋겠다.
대부분의 경우에 집에 있는 컴퓨터에서 Low ID를 받게 되는 경우는 공유기를 사용하는 경우 일 것이다. Low ID로 연결되면 검색되는 데이터가 적어질 수도 있고, 검색은 되지만 실제로 연결이 안되서 다운로드는 안되는 경우가 생길 수 있다.
하지만 공유기를 사용하면서도 HighID를 받을 수 있는 방법도 물론 있다.
공유기 설정으로 들어가서 당나귀 클라이언트에서 사용하는 포트를 자신의 컴퓨터에게로만 보내도록 포워딩 설정을 해주면 되는데, 각 설정 방법은 공유기 마다 다르지만 요즘 나오는 공유기들은 대부분 웹 인터페이스를 제공하므로 쉽게 설정할 수 있을 것이다.(브라우저에서 http://192.168.0.1 같은 공유기의 주소를 입력한 후 웹페이지를 통해 설정한다는 뜻이다.)
당시에 회사에서 그가 쓴 퍼플카우라는 원서로 영어스터디를 했었는데, 온라인에서는 어디서도 팔지 않던 그 빌어먹을 책을 구하기 위해 서점들에 전화해보다가 잠실에 있는 교보문고에 딱 한권 있다고 해서 바로 달려 가서 사왔던 기억이 난다. 비록 그 책은 내 부족한 영어실력 탓에 몇일 지나지않아 책장에 쳐박혀 버렸지만.
그로부터 얼마 지나지 않아서 그 책의 번역서인 '보랏빛 소가 온다'를 구해서 읽어본 이후에 나는 그의 리마커블한 생각들과 통찰력, 그리고 유머 감각에 완전히 반해버렸다.
그 후로 한동안 이 빡빡이를 잊고 살다가 도서관 신간 목록에서 반가운 이름을 보고는 이 책을 집어들어 보게 되었다.
이 책은 그가 들려주는 짧은 토막 이야기들의 묶음으로 이루어져 있는데, 아마도 블로그에서 써온 글들을 추려서 낸 것으로 생각된다.
이 책에서도 역시 리마커블한 아이디어와, 가장 위험한 길이 안전한 길이라는 그의 주장은 계속된다. 그는 특히 변화에 대해 강조하는데, 우리가 리마커블해지기 위해서는 변화 하는 것을 두려워 하지 않아야 한다고 말한다.
수 많은 예 중 하나로, 그는 필기체가 21세기에는 근본적으로 쓸모없는 기술이라고 말한다.
학교 교과과정에서 타이핑을 가르치는 것이 아니라 아직도 필기체를 가르치고 있는 것을 예로 들며 느리게 변화하는 조직에 대해 꼬집는다.
이 부분을 읽으며 내가 학교 선생님이라면 어떻게 했을까 하고 생각했다.
나는 문득 국민학교 4학년 때 따뜻한 방바닥에 누워 네모난 바둑판 공책에 글씨 숙제를 열심히 했던 것이 떠올랐다. 그 숙제는 모든 초등학생들의 전통이었고, 또한 나는 여전히 예쁜 글씨를 쓰는 것은 중요하다고 생각하기 때문에 계속 그 숙제를 내줬을 것 같다라고 생각하며 계속 책을 읽었다.
책 뒷쪽에 가서 이 빡빡이는 그런 내 생각이 왜 틀렸는지, 문제가 무엇인지 가르쳐주었다.
우리는 전통에 의지하면서 언제나 해왔던 대로 행동한다. 그것이 쉽고 안전하기 때문이다.
-그 놈의 전통! 중에서
나는 전통이나 잡스런 추억에 빠져 현실을 올바른 시야로 바라보지 못한채 잘못 판단했던 것이다.
돌아보니 회사에서 하루에 볼펜을 드는 일이 거의 없었다. 보고서, 메일들이 모두 키보드를 통해서 입력된다. 내가 볼펜을 드는 일은 프로그램을 설계를 하면서 끄적이는 메모나, 전화 통화를 하면서 낙서를 하는 것 정도? 아, 영어 공부를 할 때도 쓰긴 한다.
조금 더 지나면 초중고생들이 넷북을 들고 다니며 필기하는 세상이 올텐데도, 우리가 변화하지 않고 있는 것은 모두 이 전통 탓이다.
변화를 두려워하지 않기 위해 세스 고딘이 제안하는 훈련 방식이 있다. 늘 하던 일을 조금 다르게 함으로써 고정관념에 빠지지 않고 넓은 시야를 가질 수 있게 되는데 이 책에서 그는 이것을 '줌'이라고 부른다.
1. 오늘 저녁 식사로 이제껏 한 번도 먹어 본 적 없는 음식을 먹는다. 그리고 내일 저녁에는 또 다른 음식을 먹어본다.
2. 내일 출근길에는 평소에 싫어했거나 생소한 장르의 CD를 듣는다.
3. 매주 새로운 잡지를 한 권씩 읽는다.
4. 일주일에 한 번, 당신의 전문 분야와 무관한 사람들을 만난다. 그리고 여태껏 관심을 가져 본 적이 없는 주제의 박람회에 간다.
이 책이 구글이라는 회사를 주제로한 몇 번째 책인지 모르겠다. 구글은 언제나 이야기를 몰고 다니며, 그 이야기들은 언제 들어도 재미있다.
나는 가볍게 읽어볼 마음으로 이 책을 선택했고, 읽는 동안 뇌가 충분히 즐거워서 아주 만족스러웠다.
이 책은 구글을 쫓아 다니며 열심히 연구한 저자의 경험과 느낌들이 실려 있는데 우리가 잘 알고 있는 내용들 말고도, 구글의 도서 스캔 프로젝트와 구글 어스, 그리고 유부트 인수 과정에 대한 뒷 이야기들을 자세히 살펴볼 수 있다.
나는 Gmail의 문맥광고가 탄생했던 이야기가 특히 기억에 남았는데 그 내용은 이렇다.
Marissa Mayer
당시 구글은 Gmail이 어느 정도 개발되고 메일 서비스를 어떻게 수익원으로 전환시킬 수 있을지 고심하고 있었는데, 마리사 메이어 부사장은 다른 메일들처럼 무료로 적당한 용량을 주고, 돈을 내는 사용자에게는 더 큰 용량을 주어서 수익을 얻는 단순한 구조를 생각하고 있었다.
Paul Buchheit
Gmail팀을 이끌고 있던 폴은 메일 내에 광고를 넣는 것을 고려하고 있었는데, 이런 그의 의견은 메이어 부사장에 의해 번번히 제지당하고 있었다.
메일을 런칭하기 직전 어느날 새벽 3시에 사무실에 남아있던 메이어는 폴에게 "이제 광고 생각은 완전히 접은거지?" 라고 물었고 폴은 "예." 라고 대답했다.
메이어가 퇴근하고 나서 폴은 홀로 남아서 인터넷에서 어휘 분석 코드를 구해 Gmail 시스템에 문맥 광고를 붙여놓은 뒤에 아침에 퇴근을 했다.
다음 날 출근한 메이어는 메일에 광고가 들어가있는 것을 보고 깜짝 놀라서 자고 있던 폴에게 전화해 빨리 돌려 놓으라고 야단법썩을 떨었지만, 곧 이런 광고가 상당히 의미가 있는 것을 깨닫고는 금새 마음을 고쳐먹게 되었다.
물론 이것은 크게 히트를 쳤고 나중에 애드센스로 발전하게 되었다.
자신과 생각이 다른 부분에 대해 자존심따위는 버리고 인정해버리는 마리사 메이어의 태도는 본 받을만한 점이다. 하지만 내게 그것보다 더 놀라웠던 점은 즉흥적으로 떠오른 아이디어를 단 몇 시간만에 구현해버리는 위대한 해커의 능력이었다.
물론 그는 오픈소스를 이용했겠지만, 오픈소스라고 해서 국민학교 때 가지고 놀던 장난감들처럼 손쉽게 가져다 붙일 수 있는 것은 절대 아니다. 만일 그게 뭐가 어렵냐고 떵떵거리고 다니는 사람이 있다면 그는 정말 엄청난 해커이거나 아니면 흔히 볼 수 있는 허풍쟁이일 것이다.
이런 종류의 이야기들은 재미를 위해 보통은 조금 더 과장되는 법이지만, 그래도 골치아픈 생각하지 않고 머리 식힐 겸 읽어보기에는 적당한 주제이기도 하다.
최근에 발매된 김진명씨의 새 책이다. 나는 컴퓨터 책이나 자기계발 종류가 아닌 책은 거의 읽지 않지만, 어렸을 적 내가 좋아했던 몇몇 작가들의 신작만큼은 즐거운 마음으로 꼬박꼬박 읽어본다.
김진명도 그런 작가 중 한명인데, 그의 책을 읽다보면 특유의 박진감과 통쾌함, 그리고 애국심이 고취되는 감정을 갖게 되고는 하는데 나는 그런 느낌들이 너무 좋다.
이 책은 이정서와 한은원이라는 두 주인공이 우리 대한민국의 한(韓)이라는 이름의 유래에 관해 밝혀가는 내용으로 이루어져있다.
작가의 말에서도 알 수 있듯이 이정서와 한은원은 바로 김진명 자신이다. 그는 요즈음 소설을 쓰는 것 뿐만이 아니라, 우리들의 잃어버린 역사를 되찾기 위해서 아주 열심히 일하고 있는 것으로 보여지는데, 부디 그의 노력이 좋은 결실을 맺을 수 있기를 진심으로 바란다.
그의 다른 책들과 달리 이 책은 1권으로 끝나는데, 덕분에 부담없이 읽을 수는 있다만 전체적인 스토리나 박진감에 있어서는 예전의 책들만 못하다고 느꼈다.
살인 사건과 같은 어떤 의혹의 이벤트 발생, 그리고 주인공이 실마리를 풀어내는 과정. 그의 거의 모든 책은 위와 같이 구성되어져 있는데, 이번 천년의 금서에서는 그 실마리를 풀어내는 과정이 너무 순탄했고(수퍼스마트인 주인공들 덕분에), 또 조금 비현실적이기도 해서 그렇게 느껴진 것 같다.
그럼에도 불구하고, 그가 했던 노력들과 우리들에게 던져주는 메세지는 충분히 읽어볼만한 가치가 있다.
나도 여느 사람들과 마찬가지로 무궁화 꽃이 피었습니다라는 명작을 통해 그를 처음 알게되었었는데, 그 때 느꼈던 떨릴정도의 벅찬 감동을 아직도 잊지 못한다.
회사에 과학을 아주 좋아하는 사람에게서 이 책의 이야기를 처음 들었다.
앞으로 변할 미래 세계의 모습을 담은 책인데, 그리 멀지 않은 미래임에도 불구하고 엄청난 변화를 예언하고 있어서 나는 사이비같은 이야기라 생각하고 한귀로 흘려들었다.
그러던 어느날 진대제의 열정을 경영하라라는 책을 아주 재미있게 읽고는, 그가 쓴 다른 책이 없을까 하고 찾아봤는데 이 책이 떡하니 나오는 것이 아니겠는가.(진대제는 감수만했다.)
책의 부제처럼 특이점이란 기술이 인간을 초월하는 순간이다.
특이점이 오게되면 기술 발전의 속도가 기하급수적으로(우리가 감히 상상도 할 수 없을 만큼) 빨라지게 되고 지금과는 전혀 다른 세상으로 변하게 되는데, 이 책에서 저자는 그 시기를(컴퓨터가 튜링테스트를 통과하게되는) 2020년대 중반 내지 후반일 것이라고 예측하고 있다.
특이점이 오게되면, 컴퓨터가 인간보다 똑똑해지고 그 컴퓨터들이 기술을 기하급수적인 속도로 발전시켜서 우리가 상상하던 모든 것들과 상상하지 못했던 일들 조차 이루어 질 것이다.
물론 당연히 여기에는 많은 의심이 있을 수밖에 없다. 기술 발전 속도가 현재도 빠르다고는 하지만, 90년대 초반 우리들이 어렸을 적에 머리속에 그려왔던 2010년의 모습은 자동차가 스스로 운전하고 심지어는 하늘을 날라 다니는 수준이었다. 하지만 지금 2010년의 도로를 살펴보면 조금 더 고급 자동차들이 달리는 것 말고 큰 변화는 없다.
전철역에서 노란 종이표를 집어 넣고 다시 빼가는 90년대 사람들의 행동은 지금까지도 이어져 오고 있다.
그런데도 불구하고 앞으로 20년이 지나면, 컴퓨터가 튜링테스트를 통과하게 된다니(너무 똑똑해서 사람인지 컴퓨터인지 구별조차 할 수 없게되는) 많은 사람들이 -전문가들 조차도 의심하고 돌을 던질만 하다.
하지만 지은이는 선형적으로 계산하면 안되고, 지수적으로 계산해야 한다고 입이 닳도록 설명하는데(아래 그림 참조) 이 책에서 보여주는 지은이의 엄청난 지식이 뒷받침된 견해들과 함께 읽어나가다보면, 엇 정말 그렇게 되는것 아냐? 하는 생각이 드는 것도 사실이다.
수확 가속의 법칙
빌게이츠같은 최고 수준의 미래 예언가들조차 지은이를 찾아가서 의견을 구하는 모습들을 보면 우리는 이 사람의 말들을 그냥 한귀로 흘려버리는 것이 너무 어리석은 행동은 아닐까 라는 생각도 한 번쯤 해볼만하다.
이런 특이점이 오기 위해서는 컴퓨터 하드웨어와 인공지능 분야뿐만이 아니라, 나노공학이나 유전공학 등 많은 과학 분야의 기술이 함께 발전해야 하는데, 그 중에서 컴퓨터과학 분야가 중요한 위치를 차지하고 있다는 것은 우리들에게 있어 굉장히 고무적인 일이다.
나는 특히 사람의 뇌를 역공학하는 부분이 아주 재밌었는데 지구상에서 가장 훌륭한 발명품이라고 여겨지던 뇌가, 병렬처리 능력을 빼고는 컴퓨터보다 나은 것이 별로 없다는 사실은 충격적이었다.
뇌에 대한 분석이 완료되면 컴퓨터가 서로간에 데이터를 복사하듯이 우리 뇌에 들어있는 지식들도 다른 사람에게 복사될 수 있을 것이다.
지은이는 이런 특이점이 오기를 갈망하며, 하루에 영양제 200알씩을 먹어가면서 담당의사까지 두고 건강을 관리하고 있는데, 나는 그런 현실이 별로 기대되지 않아서 그렇게까지 할 필요가 있을까 하는 생각이 든다.
어렸을 적 놀이터의 흙냄새와 잔디밭의 풀냄새는 나에게 아주 좋은 추억으로 남아있다.
나는 30살이 가까워진 지금도 종종 집근처에 있는 놀이터와 공원에 가서 옛날처럼 캐치볼을 하며 놀고는 하는데, 앞으로 우리의 자식들이 컴퓨터의 가상현실 속에서 스포츠나 연애같은 모든 놀이들을 해결할 것을 상상하면 끔찍하다.
SwingX 라는 오픈소스 프로젝트가 있는데, 꽤 오랫동안 0.9대 버전으로 개발되어 오다가 이번에 1.0 버전이 릴리즈되었다.
SwingX는 java의 기본 swing을 랩해서 조금 더 기능이 풍부한 UI 구현들을 제공하는 프로젝트이다. java로 데스크탑 애플리케이션을 만드는 경우는 그렇게 많지 않지만, 만약 그런 일을 접하게 되면 기본 swing으로 뭔가 부족하다 싶을 때 swingx에 혹시 원하는 기능이 있는지 찾아보고 그런 기능이 있다면 직접 구현하는 수고를 덜 수 있다.
JRE 1.6.10부터 제공되는 Nimbus 룩앤필(개인적으로는 스윙에서 처음으로 그나마 봐줄만한) 역시 이 swingx 프로젝트에서 시작해서 JRE에 통합되었다.
이미 기존에 만들어둔 GUI애플리케이션이 있다면 룩앤필을 설정하는 코드 몇 줄만 추가함으로써 별 다른 수고 없이 더 보기좋은 UI로 탈바꿈 시킬 수 있다.
MFC로 GUI 프로그래밍을 하게되면 객체에 변경을 가하기 위해 주로 상속을 하거나 서브클래싱을 하게되는데 swing에서는 인터페이스를 구현하는 방법이 많이 사용된다.
C++ 프로그래밍을 하게 되면 COM같은 특수한 분야를 다루지 않는 이상 인터페이스를 구현하는 일이 그다지 많지 않지만, 자바에서는 곳곳에서 쉽게 찾아볼 수 있다.
인터페이스를 설계 및 구현하고 또 변경하고 싶은 기능들만 오버라이딩하여 잘 동작하게 될 때의 기쁨은 어쩌면 객체 지향 프로그래밍의 가장 큰 즐거움 중에 하나일 것이다. 나는 C++을 하는 동안 그런 느낌을 한 번도 느껴보지 못했는데, 자바로 프로그래밍을 하면서 많은 것을 배우고 재미를 느끼는 중이다.
인터페이스가 뭔지 혹은 가상함수가 뭔지에 대한 내용은 어려운 내용이 아니라서 쉽게 배울 수 있지만 인터페이스를 언제 사용해야 할지, 왜 사용해야 하는지에 대한 깨달음은 실제로 많이 사용해봐야만 얻을 수 있는 것 같다.
나는 언젠가는 꼭 함수형 언어를 한 번 공부해보고 싶었는데, 그 시간이 생각보다 일찍 찾아왔다.
처음 얼마간 이 책을 공부하면서는 정말 미칠 것만 같았다. 배열도 없고 자료구조에 랜덤액세스로 접근할 수도 없으며 변수에 값을 재할당 할수조차 없으니 불편함이 이만저만이 아니다. 이 모든 것을 재귀적으로 생각하고 표현해야 하는데(간단한 루프조차도), 그것은 고1때 점화식을 공부하면서 수학을 포기해버린 나에게는 참 고통스러운 일이었다.
우리들은 ACM 문제들을 주 마다 하나씩 풀어보고 있는데, 모임이 있는 목요일까지는 아주 고통스러운 나날들이다. 나는 마치 예전 처음 C언어를 공부할 때 Linked List를 작성하면서 코드를 썼다 지웠다 쩔쩔매던 그 시절로 돌아간 것만 같다. 구조체 안에 자신을 가르키는 포인터가 있다는 것은 나를 아주 미치게 만들었었다. 정말 그 당시와 비슷한 기분이다.
다음번 과제는 'The Cat in the Hat' 이라는 문제인데, C로 작성된 코드가 인터넷에 있어서 얼랭으로 다시 작성해봤다. 보고 그대로 옮기는 것 조차 쉽지 않다. 아직 함수형 프로그래밍에 익숙하지 않아 몇몇 부분은 마치 C로 작성한 것 같은 느낌을 준다.
%highest common factor
hcf( N ) -> hcf( N, 2, 0, [], [] ).
hcf( 1, I, P, FL, CL ) -> [ FL ++ [I], CL ++ [P] ];
hcf( N, I, P, FL, CL ) when ( N rem I ) =:= 0 -> hcf( N div I, I, P + 1, FL,
CL );
hcf( N, I, 0, FL, CL ) -> hcf( N, I + 1, 0, FL, CL );
hcf( N, I, P, FL, CL ) -> hcf( N, I + 1, 0, FL ++ [I], CL ++ [P] ).
result(N, K) -> result(N, 0, K, 0, 0).
result(N, I, K, SUM_LAZYCAT, SUM_HEIGHT) when I < K ->
result(N, I + 1, K, SUM_LAZYCAT + pow(N, I), SUM_HEIGHT + (
pow(N, I) * pow(N+1,K-I) ) );
result(N, _I, K, SUM_LAZYCAT, SUM_HEIGHT) -> [SUM_LAZYCAT, SUM_HEIGHT +
pow(N,K)].
f(K, I, COUNTLIST) when I < length(COUNTLIST) ->
A = gcd( K, lists:nth(I+1, COUNTLIST) ),
f( A, I+1, COUNTLIST );
f(K, _I, _COUNTLIST) -> K.
g(FN, CN, I, K, N) when I < length(CN) ->
g( FN, CN, I+1, K, N * ( pow(lists:nth(I+1, FN),
lists:nth(I+1,CN) div K) ) );
g(_FN, _CN, _I, _K, N) ->
N.
one(L) -> one(L, 0, 0).
one(L, CNT, SUM) when (L rem 2) =:= 0 -> one( L div 2, CNT + 1, SUM + L );
one(L, CNT, SUM) -> [CNT, SUM + L].
Visual Studio를 설치 할 때 항상 Visual Basic Cristal Reports 라는 프로그램이 눈에 띄었었는데, 뭐하는 프로그램인지를 몰라서 나는 매번 설치에서 제외하곤 했었다.
얼마전에 새 책 목록을 받아 보다가 낯익은 이름이 있길래 드디어 이것이 뭐하는 프로그램인지 알아볼 기회다하고는 책을 구해보게 되었다.
나는 크리스탈 레포트가 MS에서 만든 프로그램인 줄로만 생각했었는데, 그냥 번들로 함께 딸려오는 제품이었다. 비주얼 스튜디오 뿐만 아니라 이클립스나 볼랜드의 제품에서도 역시 사용 할 수 있다.
크리스탈 레포트가 뭐하는 프로그램인지 간단히 설명하면, 임의의 데이터 베이스에 접속해서 데이터를 가져와서 가공하고 보기 좋게 보고서를 만들어 주는 프로그램이다. C#이나 VB.NET 그리고 Visual Basic으로 애플리케이션의 이벤트 처리를 할 수 있는 프로그래밍 인터페이스를 제공해서 조금 더 다이나믹하고 유연한 보고서를 만들 수 있다.
회사에서 서비스를 개발하다 보면 기획자들에게 통계 데이터를 보내줘야 할 일이 종종 있는데, 나는 데이터베이스에 대충 쿼리에서 결과를 엑셀 프로그램에 툭 붙여넣어 보내주고는 한다. 나는 국민학교 때부터 그림에는 영 소질이 없었는데, 지금도 프리젠테이션에 관련된 애플리케이션은 다 싫다.(Visio나 파워포인트, 엑셀, 워드 등) 이런 프로그램을 사용할 때 나는 아주 저질적인 결과물을 내놓곤 하는데, 다행히 날 컴맹으로 당연시 하는 우리 여기획자들 덕분에 맘 편하게 보고서를 작성할 수 있다. 하지만 입장을 바꿔서, 내가 상사라면 나처럼 보고서를 작성하는 녀석에게는 '저 새끼가 분명 일할 마음이 없는거야...' 라고 생각이 들지도 모르겠다.
어쨌거나 요즈음에는 그런 면에서도 조금 노력이 필요하다는 생각이 들어서 나는 이 책이 너무 반가웠다. 나도 멋진 보고서를 만들 수 있을테니깐.
몇 일전에 컴퓨터를 포맷할 일이 있어서 VS2008를 새로 설치하면서는 이 크리스탈 레포트를 포함시켜서 설치를 했다.
그리고 이 책과 함께 몇 가지 실습을 따라해보았는데, 프로젝트를 만들자마자 프로그램이 뻗고, 수도 없이 나오는 위자드에서 finish 버튼만 누르면 비주얼 스튜디오가 뻗어버려서 아주 짜증이 났다. 최신 버전인데도 이런데 VS2005 였을 때나 다른 제품은 아마도 더했을 것이다.
어쨌거나 내가 서비스하고 있는 데이터베이스에 연결해서 간단히만 이것 저것 만져보았다. 애플리케이션을 EXE 형태로 만들 수도 있고, 웹 애플리케이션으로 만드는 것도 가능하다. 우리는 지금 하고 있는 서비스를 관리하기 위한 애플리케이션을 ASP.NET으로 만들어서 사용하고 있는데, 크리스탈 레포트를 사용해서 만들 수도 있겠구나 생각이 들었다. 하지만 코드양은 조금 줄일 수 있을지 몰라도, ASP.NET으로 모든 것을 제어하는 것 보다는 훨씬 할 수 있는 것이 적을 것이다. 데이터를 갱신하거나 삭제하는 작업보다는 SELECT 위주의 통계 애플리케이션이 이 프로그램에 더 적절하다.
나는 크리스탈 레포트가 무엇인지 알아보기 위한 용도로 이 책을 읽어서 대충대충만 살펴봤는데, 중간에 Visual Basic은 없는게 낫지 않나 하는 생각도 들었다. 이 책은 Windows via C++과 같은 많은 고급 기술을 담고 있는 책보다 훨씬 낮은 레벨의 지식을 담고 있는 반면에 두께는 더 두껍다. 시대에 맞게 정말 필요한 내용만을 담아 거품을 좀 뺐으면 사용자가 좀 더 부담을 덜 갖고 편하게 이 책을 봤을텐데 말이다.
어쨌거나 이 책은 수요가 그렇게 많지 않은 분야에 대해 저자가 열심히(자료도 별로 없는 가운데) 연구해서 쓴 책일 것이므로 고맙게 생각해야한다. 좋은 애플리케이션에 대해 가르쳐준 저자에게 감사를 표한다.
Step 1. 네이트온 메뉴에서 설정 -> 환경설정 -> 프라이버시 탭에서 대화가 허용된 목록을 본다.
Step 2. 이름에 대고 마우스 오른쪽 버튼을 클릭한다.
Step 3. 나타난 팝업창에 삭제 버튼이 활성화되어 있는지 살핀다.
Step 4.
If 삭제 버튼 = Enabled Then
난 상대방으로부터 삭제 또는 차단되었다.
Else
난 상대방으로부터 최소 삭제는 당하지 않았다. (차단은 되었을 수도 있다.)
Step 1과 Step 4 부분이 틀렸는데,
Step 1. 네이트온 메뉴에서 설정 -> 환경설정 -> 프라이버시 탭에서 대화가 허용된 목록과 차단된 목록을 본다.
Step 2. 이름에 대고 마우스 오른쪽 버튼을 클릭한다.
Step 3. 나타난 팝업창에 삭제 버튼이 활성화되어 있는지 살핀다.
Step 4. If 삭제 버튼 = Enabled Then
난 상대방으로부터 삭제 되었다. (차단 여부는 알수없다.)
Else
난 상대방으로부터 삭제는 되지 않았다. (역시 차단 여부는 알 수 없다.)
End If
이렇게 쓰여져야 맞다.
해석하면, 삭제 버튼이 회색으로 비활성화 되어있으면 아직까지 나를 친구로 등록하고 있는 것이고(차단한 채로 두고 있는 것일지도 모르지만) 삭제 버튼이 클릭할 수 있도록 활성화 되어있다면 날 친구에서 삭제한 것이다.(차단은 했을 수도 있지만)
그럼 상대방이 나를 차단했는지 알아보는 방법은?
아쉽게도 이것은 알 수 없다. 상대방이 원래는 생년월일이나 전화번호를 공개로 해두었었는데, 갑자기 로그인도 한동안 안하고 프로필을 봤더니 생일과 전화번호가 비공개로 되어있으면 의심해볼만 하다.(물론 추측만 해볼 수 있을 뿐이다.) 혹시 정확히 알 수 있는 방법이 있다면 제게도 가르쳐주시라.
그래서?
오늘은 네이트온을 사용하면서 처음으로 친구 정리라는 것을 해봤다. 아 이 친구가 이제 나를 지워버렸구나 하는 배신감 비슷한 울컥한 감정, 아 이 친구는 몇 년동안이나 대화를 안했는데도 아직까지도 나를 삭제하지 않았구나 하는 고마움과 미안함.
어쨌거나 재미있는 일이다. 아직 이 방법을 모르고 있었다면 지금 한번 실험해보고 그게 어떤 느낌인지 직접 느껴보시라.
인터뷰를 진행하는 사람은 제시카 리빙스턴인데, 어디서 많이 본 이름이다 싶었더니 폴 그레이엄의 에세이 하단에 항상 등장하는 이름이었다.
폴 그레이엄의 글 아래에는 항상 감사 글이 달려있는데(아마도 글을 발행하기 전에 감수해준) 이 여자의 이름은 모든 글에 빠지지 않고 등장에서 기억에 남아있다.
이 책에 나오는 32명의 해커에 역시 폴 그레이엄도 나오는데, 현재는 Y 어쩌구 하는 스타트업 투자 회사에서 이 여자와 함께 일하고 있는 것 같다.
번역자는 GE나 Sun과 같은 화려한 회사에서의 경력을 자랑하는 김익환 선생님이다.
얼마전에는 우리회사에 오셔서 소프트웨어 공학에 대한 강의를 해주셨는데, 아주 좋은 시간이었다.
이 책은 소설이 아니라 그냥 인터뷰만을 담고 있을 뿐인데도 책이 상당히 두껍다.
나는 500페이지가 넘어가는 책을 별로 안 좋아하는데, 모양새도 잘 안나고 가방에 넣고 다닐 때 무겁기 때문이다.
이런 해커들의 이야기들 담은(흥미진진한) 책은 이동하면서 마음 편히 보기에 아주 좋은데, 책이 두꺼워서 집에서만 봤다.
하필이면 32명인가, 32비트 시대라서 그런가. 16명 정도만 골랐으면 더 좋았을텐데 말이다.
어쨌거나,
애플의 스티브 워즈니악
루비 온 레일스의 데이비드 하이네마이어 핸슨
지금은 마이크로소프트의 에이스로 군림하고 있는 레이오지 등.
최고의 제품들과 최고의 해커들에 대한 생각을 엿보는 것은 정말 즐거운 일이 아닐 수 없다.
강컴에서 호평들이 많아 이 책을 선택해서 봤는데, 책 이름과 같이 정말 스피드하게 배워나갈 수 있었다. 필요한 부분만 깔끔하게 설명하고 빨리 진행되는 방식이 아주 마음에 든다.
나는 대학시절에 Java 1.4 책을 한 번 본 것이 전부여서 @ 어노테이션이나 for 문 안에서 : 으로 이터레이팅 하는 문법들이
아주 해괴망칙하게 보이곤 했었는데, 이 책에서는 간략하게지만 내가 궁금해 했던 그런 새롭게 추가된 기능들에 대해서 설명되어 있어
좋았다.
하지만, 스피드하게 배우는 것은 한계가 있는 법. 조금 더 진지하게 Java의 깊숙한 부분을 배워 보려는 사람들은 Thinking in Java와 같은 다른 책을 찾아보는 것이 더 좋을 것이다.
작년 가을 즈음 회사에서, 갑자기 자바로 프로그램을 만들어야 할 상황이 내게 닥쳤다. 이 때 나는 대학 때 만들어본 고작 2000 ~ 3000 줄 정도의 비행기 게임이 자바 경험의 전부였었는데, 아무 것도 모른채로 무작정 프로젝트를 시작했고 그것은 하루 하루 부담스럽고 고통스러운 시간들로서 내게 다가왔다.
우리 회사에는 자바 프로그래머가 전혀 없어서 나는 아주 기본적인 것들까지도 인터넷을 통해 정보를 얻었어야 했는데(애플릿은 뭐고 서블릿은 뭔지, 1.5를 써야하는지 6을 써야하는지, 심지어는 SE를 다운 받아야하는지 EE를 받아야 하는지까지도), Sun의 문서들과 포럼, 그리고 유즈넷을 들락거리면서, 인터넷을 통해 공부하는 것이 책으로 공부하는 것보다 얼마나 어려운 것인지 절실히 깨닫게 되었다. 물어볼 사람이 옆에 있다는 것이 얼마나 행복한 것인지도 말이다.
어쨌거나 급하고 초조한 마음과 함께 나혼자 진행한 프로젝트는 책으로 지식을 쌓지 못한채 인터넷을 통해서 얻은 제대로 익히지도 못한 지식들로, 검색과 질문과 코딩의 반복, 또 삽질과 문제 해결 그리고 새로운 고비의 반복들을 거쳐 힘들게 완성시켰다.
강컴의 피드 페이지를 둘러본 결과 알라딘의 그것보다 좀 더 나은 점이 있다면, 서평을 받아볼 수 있다는 점이다.
서평을 피드에 포함 시킨 것은 아주 좋은 아이디어였다고 생각한다. 책을 다른데서 살지라도 나는 꼭 웹서핑은 강컴에 가서 하곤 했는데, 그 이유 중 하나는 잘 쓰여진 서평들이 많기 때문이었다. 그리고 그런 서평들은 새로운 좋은 책을 알게 되는데 종종 도움을 주곤 했는데, 이제 그 서평들을 앉은 자리에서 받아 볼 수 있다니 너무 기쁘다. 대신 본문 전체를 공개하지는 않는데, 이 부분이 조금 불편하다. 강컴에서 잘 판단해서 좀 더 편하게 서평들을 읽을 수 있도록 해주었으면 좋겠다.
강컴 피드의 또 하나의 좋은 점은 카테고리 구분이 잘 되어있어서 원하는 책들 목록을 좀 더 정확하게 받아 볼 수 있다는 것이다.
알라딘이나 YES24는 컴퓨터 전문 서점이 아니라서, IT 서적 카테고리가 강컴보다는 두리뭉실하다. 아마도 대부분의 프로그래머들은 '따라하세요 한글 2007', '시나공 정보처리기사 어쩌구' 와 같은 책들까지 리더기에 껴들어오는 것을 원하지는 않을 것이다.
그동안 알라딘의 피드를 구독해왔는데, 이제는 강컴으로 바꾸어야겠다.
좋은 기능이 추가되어져 기쁜 반면에 아쉬운 부분들도 있는데, 가장 실망스러운 부분은 페이지 레이아웃이 망가져서 보여진다는 것이다. 나는 파이어폭스 브라우저를 사용하는데, 메인 페이지부터 레이아웃이 완전히 깨져서 보여진다.
아마 강컴에서도 이를 알고 있을꺼라고 생각하지만, 많은 파이어폭스 사용자를 보유하고 있는 사이트인 만큼 좀 더 배려해서 오픈해줬으면 어땠나 하는 아쉬운 마음은 어쩔 수 없다. 하지만 곧 수정될 것으로 기대한다.
어떤 새로운 모습들이 추가되었는지를 사용자들에게 가르쳐줬다면 더 좋았을텐데 어찌된 일인지 공지사항이나 안내페이지를 볼 수 없는 것은 또 다른 아쉬운 점 중 하나이다. 이런 이야기들을 강컴에 해주고 싶지만, 그나마 예전에 피드백의 유일한 장소였던 자유게시판 마저도 어디갔는지 찾을 수가 없다.
아름다운 명서에 넣기는 뭐해서 가볍게 읽기 좋은책으로 카테고리를 정하긴 했지만 실제로 이 책이 그렇게 가볍게 읽을만한 책은 아니다.
맨 마지막 장인 6장에 가서야 구글의 시스템, 개발 언어 등 많은 사람들이 원하는 이야기들이 소개되며, 그 전까지는 맘 편히 볼만한 내용들은 별로 없다.
나는 회사에서 가상 파일 시스템을 구현하는 일을 맡고 있는데,
그래서 역시 이 책의 3장에 나오는 GFS(구글 파일 시스템)부분이 가장 인상깊었다.
거기에는 지금까지 우리가 생각은 해왔지만, 구현하기 힘들다는 이유로
그리고 개발 시간이 오래걸린다는 이유로 도망쳐왔던 많은 아이디어들과
심지어는 생각해보지도 못했던 여러 기술들이 구현되어 있었다.
이 책을 읽으면서 줄곧 들었던 생각이 있다.
나는 무엇을 그렇게 무서워 하고 있는가?
이 프로젝트를 과연 내가 해낼 수 있을까?
이 복잡한 알고리즘을 과연 버그 없이 구현할 수 있을까?
다른 방식으로 구현하면 몇몇 단점들이 있긴 하지만,
훨씬 쉽고 빨리 만들수 있으니 그 방법으로 사람들을 설득하자. 하는 썩어빠진 마음가짐.
실제로 이런 어려운 문제들을 멋지게 구현해낸 이들을 보면서, 나는 많은 반성을 했다.
주위에 도움을 받을 수있는 훌륭한 해커들이 있다는 것은 이런 두려움을 없애주는 가장 큰 힘이다.
내가 어려운 문제에 봉착해서 머리를 싸매고 있을 때, 해결책을 제시해주는 그들에게 진심으로 감사한다.