Media Log

[분류 전체보기]에 해당되는 글 275

  1. h GetLastError 함수 사용의 흔한 실수 2012.01.13
  2. h NTFS에서 Sparse 파일을 만들기 3 2012.01.03
  3. h 제로 데이, 마크 러시노비치의 신간 2012.01.01
  4. h 16TB 크기의 파일을 만들어내려면 얼마나 오래 걸릴까? 2012.01.01
  5. h 위대한 해커들의 말말말 - 에릭 레이먼드 2011.12.28
  6. h 위대한 해커들의 말말말 - 앤드류 타넨바움 2011.12.20
  7. h 구조체의 패킹에 대한 이야기 4 2011.12.19
  8. h 프로그래머에게 가장 굴욕적인 순간은? 2011.12.19
  9. h 위대한 해커들의 말말말 - 폴 그레이엄 2 2011.12.14
  10. h 위대한 해커들의 말말말 - 스캇 마이어스 2 2011.12.09
  11. h 위대한 해커들의 말말말 - 켄 톰슨 4 2011.12.06
  12. h 위대한 해커들의 말말말 - 도널드 크누스 2 2011.12.05
  13. h 위대한 해커들의 말말말 - 비야네 스트롭스트룹 2 2011.12.03
  14. h 위대한 해커들의 말말말 - 리누스 토발즈 2 2011.12.02
  15. h Devon 2011, 왜 김택진이 욕을 먹어야 하는가 2 2011.11.28
  16. h Overview of The New C++ 11 - 스캇 마이어스 6 2011.11.21
  17. h 만들면서 배우는 리스프 프로그래밍 6 2011.11.21
  18. h 거꾸로 배우는 소프트웨어 개발 -이호종 2011.11.08
  19. h 마지막 강의 - 랜디 포시 2011.11.08
  20. h C/C++ 코딩 스타일 이야기 8 2011.10.24
  21. h Writing Solid Code(버그 안녕) - Steve Maguire 2011.10.23
  22. h 안철수연구소 오픈 하우스 이벤트 2011.10.22
  23. h 우분투를 버리고 쿠분투로 2011.10.17
  24. h 아이디어 맨 -폴 앨런 지음 2011.10.05
  25. h 클린 코드 2011.09.27
  26. h 웹 개발자를 위한 웹을 지탱하는 기술 2011.09.27
  27. h 레지스트리의 volatile 옵션 2011.09.27
  28. h 탭기능을 지원하는 무료 윈도탐색기 프로그램, Explorer++ 1 2011.09.22
  29. h 웹으로 배운다 -우메다 모치오 2011.09.18
  30. h 프로그래머 그 다음 이야기 2011.09.12
위대한 해커이자 이제는 소설가(?)이기도한 윈도의 대가 마크 러시노비치의 처녀작이다.
책이 처음 나왔을 때부터 재미는 있으려나, 기술적으로 배울만한 것도 있을까 관심을 가지고 있었는데, 영어로 읽기는 싫으니 번역되는 날만을 기다렸다. 그런데 오늘 드디어 떴구나! 새해 선물인가.
NTFS에서 만들 수 있는 단일 파일의 가장 큰 크기는? 16테라. 빙고.
그럼 NTFS 상에서 16 테라 바이트의 파일을 만들기 위해서는 얼마나 시간이 걸릴까?

답은 여기에 있다.

16TB 라는 숫자의 이미지가 머리 속에 잘 안그려져서 내 추정보다 훨씬 큰 기간이 나와버렸는데, 가만히 계산해보니 그렇게 놀라운 숫자도 아니다. 16TB라는 숫자를 너무 얕봤나보다.

그가 쓴 해커가 되는 방법이라는 글에서, 훌륭한 프로그래머가 되려면 얼마나 걸리냐는 질문에
얼마나 재능이 있고 열심히 공부하는지에 따라서 다르다. 만약 충분히 노력한다면 1년 반에서 2년 정도 사이에는 꽤 훌륭한 수준의 기술을 갖게 될 수 있다. 하지만 그게 끝이라고 생각해선 안된다. 훌륭한 프로그래머가 되기 위해서는 10년 정도가 걸린다.
만약 진정한 해커가 되고 싶다면 끊임없이 학습하고 기술을 다듬는데에 남은 인생 모두를 투자해야 한다.

프로 당구 선수에게 가장 굴욕적이고 부끄러운 순간이 있다면 바로 키스를 내는 일일 것이다. -아마추어 세계에서는 삑사리를 내는 것일지도 모르지만. 축구 선수에게는 알까기를 당하는 것, 농구에서는 블록킹을 당하는 순간일지도 모르겠다.

만일 프로그래머에도 이런 순간을 하나 꼽으라면 나는 버그 관리 시스템에서 이슈를 해결 처리 했는데 재등록이 되거나 그로인해 다른 버그를 유발하는 것이라 생각한다. 버그가 재등록된다는 것은 제대로 테스트 해보지 않았다는 것이고 다른 버그를 유발 시켰다면, 앞뒤 로직을 충분히 검토하지 않고 버그가 발생한 바로 그 곳만 바라보고 버그를 수정했다는 뜻이다. 부끄러워하고 반성해야 한다.
뒤돌려치기(우라마시)를 치는데 그냥 운에 맡기고 친 후 쫑이 날 수도 있는게 당연하다고 생각한다면 절대 당구 실력이 늘지 않는다. 프로그래머에게도 마찬가지라고 생각한다.

갑자기 이런 이야기가 생각이 난 것은 레이몬드 첸의 한 포스트를 읽고 나서였는데, 옛날 처음에 회사에 들어갔을 때의 내 모습이 떠올랐기 때문이다. (그냥 글을 읽는 중에 그런 일들이 떠올랐던 것 뿐, 지금 말하는 이야기가 레이몬드 첸이 말한 요지과 관련이 있는 것은 아니다.)

나는 프로그램을 디버그 하다가 널 포인터 접근 등의 예외로 프로그램이 크래시 된 것을 확인하였으면 해당 부분을

if (ptr)
{
 // *ptr을 사용
}

등으로 널 포인터 체크를 추가하여 수정하고는 이슈를 완료시키곤 했다. 하루에 버그를 10개 넘게 고친 날도 많았다.

꼭 널 포인터만의 이야기를 하는 것은 아니다. 버그가 발생한 앞뒤 로직을 충분히 점검하지 않고, 그 곳만 쳐다본채 코드를 수정하는 것에 대한 문제점을 이야기 하고 있는 것이다. 그 때 그 버그들이 정말 고쳐진 건지 아직도 모르겠다.
부작용도 많았지만, 또 어떻게 어떻게 메꾸어 내었고, 이슈 해결량이 많았기 때문에 나는 생산성이 좋다는 평가를 받았다. 지금 생각하면 부끄러운 일이다. 나는 그냥 버그를 숨겼을 뿐이다. 

언제부턴가 그런 것이 잘못된 것이라는 것을 깨닫게 되었다. 아마도 나의 스승(?)이 일을 처리하던 모습을 유심히 관찰하면서였던 것 같다.
그 이후로는 버그가 발생했을 때 항상 전후 함수들을 모두 따라가보면서 로직들을 점검하고 어디가 문제인지, 널 포인터 체크를 추가해서 버그를 해결해도 되는건지, 또는 널 포인터가 들어오게 하는 것이 잘못인지 등을 꼼꼼히 따져보고 코드를 작성하는 습관을 들이게 되었다.

이런 습관을 들인 후에는 버그가 재등록이 되거나 다른 버그를 유발하는 일이 점점 줄어갔다. 예전처럼 하루에 버그를 10개 넘게 고치지는 못하지만 지금도 여전히 생산성이 좋다는 평가를 받는다. 다시 재등록 되는 버그에 대한 작업을 할 필요가 없기 때문이다. 코드를 추가할 때마다 다른 버그가 발생해서 고치고 또 고치고 하면서 시간을 보내는 경우를 본 적이 있는가? 주위를 유심히 잘 살펴본다면, 얼마나 그런 경우가 많은지에 대해서 놀라게 될 것이다. 어쩌면 여러분 자신일지도 모른다.
하루에 버그를 1개를 고치더라도, 코드를 10줄을 작성하고 퇴근하더라도 제대로 하는 것이 더 프로젝트를 빠르게 진행하는 길이라는 것을 이제는 확실히 알고 있다.

만일 여러분이 팀장이나 프로젝트 관리자라면, 10분만에 버그를 고치는 사람에게는 칭찬을 해줄 것이 아니라, 혹시 저런 문제가 있는 것은 아닌지 잘 관찰해봐야한다. 그리고 만일 어떤식으로든 가르침을 주어 변화시킬 수 있다면 여러분 또한 멋진 스승이고 멘토이다.

파이썬 프로그래머가 자바 프로그래머보다 똑똑하다. - 위대한 해커에서
이 말을 하고 그는 전 세계의 수 많은 자바 프로그래머들에게 엄청난 욕을 먹었다.
이후에 이에 대해 약간의 변명을 하기도 했다. 변명도 재미있다. 일리있다.


개발자들은 스타일에 관한 이야기를 하는 것을 좋아합니다. 이 문제는 마치 "무엇이 진정한 하나의 에디터일까"에 대한 이야기처럼 자주 입에 오르내립니다. 마치 이견이 있는 것처럼 말이죠. 답은 이맥스입니다. - Effective STL에서 컨테이너들의 범위 멤버 함수를 사용하는 것은 단일 요소 멤버 함수를 사용하는 것보다 모든 면에서 좋기 때문에 이견이 있을 수가 없다는 것을 설명하면서.
나는 비록 Vim을 더 좋아하지만 스캇 마이어스의 이 말을 듣고 이맥스를 배우고 싶다는 욕구가 미친듯이 몰려왔었던 때가 있었다. 비록 실패로 끝나고 말았지만.
몇 일전에 다음에서 주최하는 devon 행사가 신도림에서 있었다.
김택진과 이재웅과 허진호 세 사람이 나온다길래 재밌겠다 하고 얼마전부터 기대를 하고 있었다. 평일이라서 가지는 못했지만 오늘 동영상으로 볼 수 있었다.

나는 김택진이라는 사람이 개발자인지 지금까지 모르고 있었는데 오늘 이 사람 때문에 너무 많이 놀랐다. 아래아 한글하고 한메타자를 개발했었다면 분명히 한 번 들어봤을 것 같은데 왜 이제까지 그걸 몰랐는지 모르겠다.
어쨌거나 그 사람의 입에서 GitHub이나 stackoverflow.com 같은 단어가 나왔다는 것이 믿어지지 않을 정도로 충격적이었다. 그렇게 바쁜 사람이 아직도 혼자 아이폰에 코딩을 하고 stackoverflow.com에서 질문 답변을 읽어보고 GitHub에서 코드를 받아서 돌려본다고 한다. 지금 현역에 있는 개발자들에게 GitHub이나 stackoverflow.com이 뭔지 아냐고 물어봐도 모른다고 대답할 사람들이 태반은 될텐데 말이다. 진행을 하던 김국현씨가 말했던 것 처럼 나 또한 참 많은 자극이 되었고 신선한 충격을 받았다.

이번 devon 행사가 끝나고 중박 대박 이야기로 김택진씨가 사람들에게 나쁜 소리를 많이 들었는데 나는 잘 이해할 수 없었다. 꼭 돈을 벌어야 행복한건가, 어떤 아이디어를 구현하면서 자신의 코드가 잘 돌아가는 것을 보고 즐거움을 느끼면 그 또한 행복한 삶이고 성공한 것이다라는 류의 이야기를 했는데, 그가 말하는 동안 진정성이 느껴져서 내게는 너무 좋은 느낌으로 다가왔다. 만약 개발자들이 그 말을 듣고 정말로 배신감에 몸서리쳤다면 그 또한 개발자 정신을 잃은 사람은 아닐까 나는 생각한다.

다른 두 분의 이야기는 김택진씨보다는 그다지 인상깊지 못했지만 허진호씨가 말한 페이스북 CTO의 이야기는 정말 좋았다. 완전히 동감한다.
무슨 이야기인지 궁금하신 분들은 동영상을 직접 한번 보길 바란다.

 

'에세이' 카테고리의 다른 글

카카오톡 음모론  (0) 2012.04.26
Write in C  (0) 2012.04.23
안철수연구소 오픈 하우스 이벤트  (0) 2011.10.22
플라워 바이 겐조  (0) 2011.07.12
조그만 술집, 여행  (4) 2011.04.24


나는 이 책의 0x 버전을 읽었는데, 얼마전에 정식판이라고 할 수 있는 C++11 버전이 발표되었다.
거의 모든 장이 아래 그림 처럼 코드 조각들로 이루어져 있고 스캇마이어스의 짧은 설명들로 보충된다.
예제 코드들이 궁금했던 점들을 너무도 잘 긁어주기 때문에 C++11의 새로운 기능들을 빠르게 익히는데 도움이 많이 되며 영어 때문에 부담스러워하지 않아도 된다.


만들면서 배우는 리스프 프로그래밍
콘래드 바스키 지음, 조태훈 옮김/한빛미디어
오래전에 폴 그레이엄의 해커와 화가와 에릭 레이먼드의 해커가 되는 방법을 읽으면서, 언젠가는 나도 꼭 LISP를 공부해서 궁극의 위대한 해커가 되어야지 하고 불타올랐었을 때가 있었는데, 한해 한해를 흘려 보내다가 오늘까지 왔다. 그러고 보니 중간에 마법사 책으로 리스프를 공부한다고 까불다가 크게 좌절한 적이 한번있긴 했다.(책을 펼칠 때마다 마법처럼 떡실신해서 잠이 들었는데, 어느 날은 그렇게 잠이 들고 아침에 눈을 뜨자마자 누운채로 그 자리에서 다시 읽었는데 또 잠이 들고 말았다. 맙소사)

이번 11월달에 나오는 책 중 기다리고 기다리던 책이 하나 있었는데 바로 이 리스프! 마법사 책처럼 압박감이 들지도 않고 겉표지만 본다면 왠지 좀 만만해 보이기까지 한다.

이번에는 부디 LISP의 재미에 빠져들 수 있기를.

거꾸로 배우는 소프트웨어 개발 - 8점
이호종 지음/로드북
소프트웨어 개발의 모든 것과 비슷한 종류의 책이며 아래 내용들을 다룬다.
재미있는 편이며, 대체로 그 내용에 동의한다. 책의 완성도는 소프트웨어 개발의 모든 것이 좀 더 낫다고 생각한다.

  • 개발 표준
    • 코딩 스타일
    • 공통 라이브러리/프레임워크
    • 문서화 표준
  • 개발 기반
    • 소스 코드 관리 시스템
    • 이슈 트래커
    • 개발/테스트/운영서버 분리
    • 지속적 통합
  • 개발 기법
    • 단위 테스트
    • TDD
    • 리팩터링
  • 개발 방법
    • 폭포수 vs. 애자일
    • 조직론.
    • 스크럼.
    • 협업.
    • 개발 관리.

위의 내용들은 소프트웨어 개발에 있어서 아주 중요한 내용들이지만 학생 때는 쉽게 접하지 못하는 내용들이다. 보통은 처음 회사에 들어가고 나서 저런 것들을 배우게 되는데, 아주 잘하는 회사도 있고 그저 그런 회사도 있기 때문에 회사를 잘 골라 들어가는 것이 중요하다.

취업이 안된다고 초조한 마음에 우선 1, 2년만 배우고 좋은 회사로 옮겨야지 하고는 저기 구로공단에 이름 없는 아무 회사나 들어가서는 안된다는 뜻이다. - 구로공단은 그냥 예로만 들었을 뿐 나쁜 의도는 없다.

그런 작은 회사들 중에는 소스코드 관리 툴도 사용하지 않는 곳이 잔뜩 하기 때문에 그런 곳에 들어가면 고생은 고생대로 하고 시간만 낭비하는 셈이다.

이 책에서 나오는 내용들을 가장 쉽고 빠르게 터득하고 싶은 방법은 이런 시스템이 잘 구축되어 있는 회사에 들아가는 것이다. 어떤 회사가 잘하는 회사인지 잘 모르겠다면 어느 정도 이름을 많이 들어봤고 개발자 수가 많은 회사를 찍는 것이 맞을 확률이 높다.
만일 그런 회사에 다니고 있지 않다면 회사를 옮기는 것도 좋다고 생각한다. 스스로 공부하면서 배울 수도 있겠지만 쉽지는 않을 것이다. 서버를 구성하는 것도 몹시 귀찮은 일인데다가, 혼자서 이슈 트래커에 이슈를 기록하고 완료하면 (왕따놀이를 하는 것도 아니고) 도대체 무슨 재미로 하나.

아래 위키 페이지에 있는 회사들은 적어도 소스코드 형상 관리툴 정도는 모두 사용할 것이라 생각한다.
대한민국의 IT기업

반면에 CI 서버를 구성해놓고, 코드 커버리지 측정이나 정적 분석 등을 자동으로 수행 하고 있는 회사는 여전히 별로 없는 것 같다. NHN에서는 위 목차의 내용을 모두 하고 있고 심지어는 코드의 라인 수 까지도 체크해서 라인이 얼마가 늘었고 라인당 버그수가 얼마인지 까지 보고 되는데 이건 얼핏 보면 한심하고 쓸데 없어 보이지만, 내 생각은 안하는 것보다는 훨씬 낫다이다.

잘 구축된 CI 서버는 마치 똑똑한 군사와도 같다. 전쟁의 상황에 대해서 지속적으로 보고 해주고 위험한 일이 발생하면 적절한 조언도 해주는 것이다.

어떤 사람들은 위에서 나오는 내용들을 꼭 대학교 커리큘럼에 넣어야 한다고 주장하는데, 거기에는 별로 동의하지 않는다. 이 많은 과정을 쑤셔넣으려면 그만큼을 빼내야 하는데 무슨 과목을 빼낼 셈인가.

마지막 강의 - 10점
랜디 포시.제프리 재슬로 지음, 심은우 옮김/살림
컴퓨터 과학분야의 교수이며 카네기 멜론 대학에서 가상현실을 연구하던 랜디 포시 교수가 암에 걸려 시한부 인생을 살면서 쓴 책이다.
시한부 인생을 선고 받은 후 '마지막 강의'를 준비해서 카네기 멜론에서 발표를 했고 이는 유투브에도 올라가서 많은 조회수를 기록했다. 이 강의는 훗날 자신의 아이들에게 보여주기 위해서 만들었다고 한다.

마지막 강의: 당신의 어릴적 꿈을 진짜로 이루기
http://www.youtube.com/watch?v=ji5_MqicxSo
동영상 강의의 내용은 책에서 모두 다루는 내용이다.

책을 읽으면서 그가 아내와 아이들을 대하는 자세와 삶을 슬기롭게 살아가는 지혜들에 많은 감명을 받았다.
반성도 참 많이 했다. 누구는 내일 죽을 것 처럼 처절하게 살아가는데, 내가 너무 시간을 낭비하면서 사는 것은 아닌가. 늙어서 암에 걸리면 얼마나 후회를 하려나, 건강을 최우선으로 신경써야지.

많이 느끼고 배운 좋은 책이다.
프로그램을 처음 배울 때는 거의 정신병자 수준으로 코딩 스타일에 집착했었는데 나이가 들어가면서 코딩 스타일에 조금씩 둔감해져가고 있다.
대학 때는 들여쓰기를 tab으로 했었는데 첫번째 회사에서 space가 규칙이라고 꼭 그렇게 쓰라고 강제했다. 나는 tab을 버리기 싫었지만 규칙을 어기지 않기위해 그렇게 쓰다보니 space가 너무 좋아져버렸다. 2번째 회사에서는 다시 tab을 사용하라고 한다. 좀 촌스럽네? 아직도 tab을 쓰는데가 있었나 정도의 생각은 들지만 거부감 없이 받아들일 수 있었다. 그 외의 다른 스타일들도 비슷하다.

그래도 여전히 눈에 거슬리고 바꿔버리고 싶은 욕구가 드는 C/C++ 코딩 스타일이 2가지가 있는데 그 중 하나는
if (0 == str.Length())
{
}
위처럼 상수를 좌측에 쓰는 코드이다.
프로그램을 읽기에도 불편하고 쓸 때 또한 불편한데 도대체 왜 상수를 왼쪽에 쓰는가.

아마 어떤 사람들은 그렇게 써야 == 연산자 대신 = 를 사용해버리는 실수를 방지할 수 있어요, 라고 대답할지도 모른다. 하지만 요즘 컴파일러는 이런 실수를 경고로 가르쳐주는 기능을 다 가지고 있는데 굳이 저렇게 쓸 필요가 있는가? 컴파일러나 정적분석툴의 도움를 받을 수 없는 상황에서나 어쩔수 없이 사용하던 구식 방법인데 이를 무작정 따라하는 사람들이 많다. 다음 코드는 조금 더 보기에 안좋다.
if (MAX_PATH <= str.Length())
{
}
'상수를 왼쪽에 써야 실수를 줄일수 있다고 했지'. 라고 생각없이 이 말을 받아들인 사람들은 == 이 아니라 비교연산자를 사용할 때에도 모든 상수는 죄다 왼쪽에 써버린다. 위 코드를 읽을 때 머리가 2번씩 돌아가는 것 같지 않은가?

또 한가지 싫어하는 C/C++ 스타일은
bool xxx = fOk;
if (xxx == true)
{
}
이렇게 불린 테스트를 true나 false와 명시적으로 비교하는 것이다.

아래 strcmp 함수의 경우 처럼 표현식의 결과가 불린 값이 아닌 경우에는(strcmp의 리턴값은 정수이다) 같은 타입으로 명시적으로 비교를 해서 표현식을 참 혹은 거짓으로 맞추어 주는 것이 의미가 있다.
if (!strcmp(xxx, yyy)) // 이보다는
if (strcmp(xxx, yyy) == 0) // 이게 더 낫다고 생각한다.
하지만 이미 어떤 변수나 식이 이미 참과 거짓을 나타내고 있다면 또 다시 그것을 true나 false와 비교하는 것은 명백한 중복이다. 나는 그런 경우는 그냥
if (xxx)
{
}

또는
if (!xxx)
{
}
이렇게 쓰는 것을 선호한다.

위에서 처럼 true와 비교하는 것보다 1로 정의된 대문자 TRUE를 비교하는 것은 훨씬 나쁘다.
if (xxx == TRUE)
{
}
xxx 값이 0도 아니고 1도 아닌 값(하지만 참인)을 가진 경우에는 골탕을 먹게 되기 때문이다.

오늘 stackoverflow를 구경하다가 재밌는 사실 하나를 알게되었다.
많은 사람들이 나만큼이나 위 두가지 스타일을 싫어한다는 것이다.
어떤 코딩 스타일이 가장 거지같다고 생각하나요?

내가 위에서 말한 2가지 스타일이 1등과 3등을 차지 했다니 아마 저런 스타일을 사용하는 사람들은 잘 믿기지 않을 것이다.
재밌는 답변과 댓글들이 많으니 관심있는 사람들은 위 포스트를 한번 읽어보기 바란다.
나는 아래 댓글이 가장 재밌고 인상적이었다.
Damn. We say "if it's raining, open your umbrella" and NEVER "if it's true that it's raining, take your umbrella"... Testing explicitely against boolean is as verbose and as un-natural as the second example
Writing Solid Code - 10점
Steve Maguire 지음, 나윤석 외 옮김/높이깊이

몇 일전 deview 2011 행사 중 한 세션에서 재미있는 이야기를 들었다.
 NHN 김정민 이사의 세션이었는데, 이런 말을 했다.
애플, 마이크로소프트, HP 같은 회사에서 15년 동안 일했던 (지금은 NHN에서 일하고 있는) 송창현 이사가 예전에 우리회사에 면접을 보러 왔을 때 잘하는 게 뭐냐고 물어봤더니,
"저는 meticulous code reader입니다. 남의 코드를 아주 꼼꼼하게 읽어줄 수 있습니다."
대부분의 경력을 많이 가진 사람들은, 저는 유닉스를 10년을 넘게 다뤄서 커널 구석 구석까지 깊게 알고 있습니다. 오라클 전문가입니다 라고 말하지 저런 식으로 말하지는 않는데, 김정민 이사는 그게 상당히 인상적이고 멋있어 보였다고 한다.

나 또한 그 말이 멋있어 보인다는데에 완전히 동의한다.
저는 자바스크립트만큼은 누구보다 잘할 자신이 있습니다, 라는 말(또는 뻥)보다 훨씬 멋지지 않은가?

직장 생활을 하다보면 Meticulous code reader가 거의 없다는 것을 쉽게 알게 된다. - 나는 이전에 다니던 직장에서 여태껏 그런 사람을 딱 1명 만나봤다.
여러분이 후임이 있다고 치자. 어떤 기능을 구현해달라고 일을 주고 후임이 나중에 다 만들었습니다 했을 때, 또는 만들고 있는 도중에, 코드를 한줄 한줄 다 꼼꼼하게 읽어주고 피드백 해준 적이 있다면, 당신은 좋은 Meticulous code reader가 될 수 있는 가능성이 있다. 거의 대부분의 사람들은 그렇게 하지 않는다.

갑자기 이런 이야기를 하는 이유는, 최근에 Writing Solid Code라는 책을 읽으면서 이 책의 저자인 Steve Maguire가 그런 Meticulous code reader 라는 생각이 들었기 때문이다.
이런 사람들은 회사에 꼭 필요하다. 마이크로소프트가 10년 넘게 황제의 자리를 차지할 수 있었던 이유는 이런 사람들이 많이 있었기 때문일 것이다.

이 책에서는 정교하고 튼튼한 프로그램을 짜기 위한 많은 기술들을 배울 수 있으며, 또한 프로그래머가 프로그램을 만든다는 것 대해서 가져야할 바람직한 자세를 배울 수 있다.
매 챕터가 끝날 때에는 '생각할 점'이 나오는데, 여기에도 좋은 내용들이 참 많다. 부록에 답까지 있으니 모두 꼼꼼하게 읽어보도록 하자.
인터넷 어딘가에서 번역이 최악이라는 평가를 본 것 같은데, 이 책의 번역은 정말 잘 되었다고 생각한다. 부분 부분 약간 어색한 단어 선정이 보였던 것 같긴 하지만, 나는 왜 최악의 번역이라고 하는건지 이해할 수가 없다.
얼마전에 안랩이 판교에 사옥을 짓고 입주를 했는데, 이번 11월 9일 18시 30분에 오픈하우스 행사를 한다고 한다. 외부인들을 초청해서 사옥을 소개시켜주는 자리인데, 초대권을 받으려면 블로그나 트위터에 소개를 해야한다고 해서 나도 한번 이렇게 신청을 해본다.

내가 생각하는 안철수연구소의 이미지는 커널 레벨 드라이버를 만드는 아저씨들이 가득하고, 사무실에서 홀애비 냄새도 날 것 같은 여의도의 조그만 회사였는데, 이번에 새로 지은 사옥을 보고서 돈을 많이 썼구나하고 깜짝 놀랐다.
IT 회사들도 이렇게 신경써가며 예쁘게 건물을 꾸미는 추세를 몹시 환영한다. 좋은 사옥을 가진 IT 회사들이 훨씬 많아졌으면 좋겠다.



안랩의 직원은 700명 정도로 알고 있는데, 건물은 1000명도 훨씬 넘게 들어갈 수 있을 것으로 보인다.
안철수연구소에서 일해보고 싶었던 사람들에게는 지금이 기회라는 뜻이기도 하다.


사진을 보다보니 안랩 사옥 중에서 부러운 것 중 하나가 있었는데 바로 운동 시설이다.
휘트니스 클럽은 네이버의 그린팩토리에도 없는 공간인데, 참 과감하게 결정했다는 생각이 든다.
그런데 사람들이 이 넓은 공간을 얼마나 덜 이용하게 될지 또한 몹시 궁금하다. 나중에 꼭 한번 물어봐야겠다.
뭐 비효율적으로 운영된다 할지라도 직원들의 건강을 염려해서 이런 공간을 마련해준 회사가 참 보기 좋긴하다.

아래 안랩 기업 블로그에 가보면 더 많은 사진들을 구경할 수 있다.

'에세이' 카테고리의 다른 글

Write in C  (0) 2012.04.23
Devon 2011, 왜 김택진이 욕을 먹어야 하는가  (2) 2011.11.28
플라워 바이 겐조  (0) 2011.07.12
조그만 술집, 여행  (4) 2011.04.24
디지털 기억  (2) 2011.03.13

출처 : http://www.kubuntu.org/feature-tour


GNOME3에 너무 많은 기대를 해서 그런가. 이번 우분투 11.10은 많이 기대가 되서 알파3 부터 받아서 사용하고 있었는데, 기대가 큰 만큼 실망도 컸다.
문득 KDE는 얼마나 좋아졌나 싶어서 쿠분투를 설치해서 한달여 동안 사용해왔는데, UI 콘트롤들도 다 하나같이 고급스럽고 부드럽게 동작하는게 아주 만족스럽다. 예전에 2008년도 쯤 쿠분투를 설치해봤었을 때 그 조잡함에 충격 받았던 기억이 남아있었기 때문에 사실 좀 놀랐다. 아마 KDE4로 올라오면서 많이 좋아진 것 같다.
한달 동안 많이 익숙해 졌겠다, 정식 버전도 나왔겠다. 이번 주말에는 새로 이미지를 받아서 kubuntu로 데스크탑을 싹 정리했다. 아, 참 깔끔하고 좋다.
Clean Code 클린 코드 - 9점
로버트 C. 마틴 지음, 박재호.이해영 옮김/케이앤피북스
언젠가 어떤 책을 읽다가 모든 디자인 패턴은 중복을 제거하려는 시도로부터 나왔다는 내용을 읽은 적이 있다. 중복을 제거하는데 집중하게 되면 결국 현재 잘 알려진 디자인 패턴 중 하나를 사용하게 된다는 내용이었는데 나는 그 말이 참 마음에 와닿았다. 그 이후로는 쓸데없이 여기는 이 패턴을 적용해야지 하는 생각들을 버리고 그냥 맘 편하게 중복을 제거하는데 집중해서 프로그래밍 하고는 했는데 그 방법이 훨씬 더 좋은 것도 같다. 어쨌거나 그 글을 이 책에서 읽은 줄 알았었는데, 다시보니 이 책이 아니었었나 보다. 어느 책에서 읽었는지 도대체 기억이 나지가 않는다. 다시 한 번 보고 싶은데. 혹시 알고 계신 분이 있으면 좀 가르쳐주세요.

이 책은 책 제목 그대로 어떻게 클린 코드를 작성하는지에 대해서 다룬다. 디자인 패턴하고도 밀접한 관계가 있고 리팩터링하고도 관련이 있다.
변수 이름을 짓는 간단한 방법부터 시작해서 어떻게 잘 설계된 클래스와 인터페이스를 만드는지, 어떻게 리팩터링을 하는지에 대한 훌륭한 지침들이 가득 담겨져 있다. 하나하나 읽으면서 음미할 수 있고 고민이 되는 잘쓰여진 좋은 책이다.

그런데 책 중간부터는 뭔가 실전처럼 보여주기 위해 남의 코드를 리팩터링 하는데 하필 그 중 한 코드가 도널드 커누스가 작성한 코드이다.
리팩터링할 코드는 찾아보면 쌔고 쌨을텐데 하필 커누스인가. 최고의 프로그래머에 대한 예의를 갖추는 것처럼 말은 조심스럽게 하지만 결국 당신 코드는 읽기는 참 어렵단 말이야, 내 코드가 더 낫지! 라고 말하는 것 같다.

..그래서 별 반 개 깍았다. -_-ㅋ
웹 개발자를 위한 웹을 지탱하는 기술 - 8점
야마모토 요헤이 지음, 김성훈 옮김, 권정혁 감수/멘토르
세련되게 잘 만들어졌다고 생각되지는 않지만, 그럼에도 불구하고 어느샌가 세상에 너무도 깊숙이 파고들어 사용되고 있는 응용 프로토콜이 있다. 이 책의 제목인 웹을 지탱하는 기술의 1번 타자인 HTTP 이다.

이 책은 Restful 하다는 것이 무엇인지에 대해서 잘 가르쳐주는 책이다.
책의 초반부에는 웹과 HTTP의 역사를 말해주는데 재밌게 읽었다.
그 이후에는 HTTP 프로토콜에 대해서 많은 장을 할애하고 뒤에서는 Atom, Json, 마이크로포맷 등에 대해서도 다룬다.

아주 깊은 내용을 다루는 것은 않지만 이런 주제를 다루는 한글책이 그동안 거의 없었다는 것을 생각해보면 한번쯤 사서 읽어볼 가치가 있는 책이다. 내용도 꽤 재미있다.
윈도를 쓰면서 불편한 점 중 하나는 일을 하다보면 어느새 10개 20개씩 떠있는 윈도 탐새끼이다. 물론 GNOME의 노틸러스나 KDE의 이상한 탐색기보다는 너무 너무 잘 만들었다고 생각하지만. 

어쨌거나 얼마전에 오픈소스 뉴스를 보다가 Explorer++ 이라는 프로젝트를 발견했다.

http://www.explorerplusplus.com/software/images/screenshots/screenshot_2.png


토탈 커맨더라는 이 분야 최고의(?) 프로그램이 있지만 Explorer++는 오픈소스이고 완전히 자유롭게 쓸 수 있다는 점에서 차별점이 있다.
몇 일간 써봤는데, 그럭저럭 맘에 들어서(맘에 안드는 점들도 많지만) 이제는 Windows + E 키를 Explorer++로 매핑시켜 놓고 잘 사용하고 있다.

좋은 점
  • 탭 기능을 지원한다. 물론 껐다켜면 탭들이 모두 그대로 복원되므로 자주 사용하는 위치들을 탭으로 몽땅 띄워놓고 사용하면 된다.
  • 여러 인스턴스가 뜨지 않도록 할 수 있다. 프로그램을 한번 더 실행시켜도 새 탭만 하나 더 생긴다. 내가 가장 바랐던 기능이다.
  • 폴더 사이즈도 표시할 수 있다. NTFS는 폴더 크기에 대한 정보를 가지고 있지 않으므로 Explorer++이 뒤에서 열심히 돌면서 사이즈를 구해낸다. 나는 이 기능은 사용하지 않는다.
  • 파일 1개 짜리 프로그램이다. 나는 인스톨러로 설치안하고 바로 사용할 수 있는 이런 프로그램들이 너무 좋다.
  • 오픈 소스이다.

나쁜 점

  • 잘 뒤진다.
  • 안 예쁘다. 토탈 커맨더보다는 조금 더 나은 것 같기도 하지만.

근데 난 작명할 때 ++ 이란 말 좀 쓰지 말았으면 좋겠다. 발음하기도 어려운데다가 정말 촌스럽지 않은가?

웹으로 배운다 - 6점
우메다 모치오 & 이이요시 토오루 지음, 김주란 옮김/제이펍
2008년도엔가 우메다 모치오의 웹진화론을 너무 재밌게 읽어서 그가 쓴 신간들은 항상 읽어보고 있는데, 새로나오는 책들은 그 때 만큼 충격적이고 재미있지는 않다.
이 책은 웹진화론에서도 다뤘던 MIT의 오픈코스웨어 같은 무료 오픈 교육을 책 전체의 주제로 다룬다. 나는 처음 책 제목만 보고는 이 책이 그런 내용일 것이라고는 생각들지 않았는데 제목이 좀 잘못지어지지 않았나 싶기도 하다.
 웹진화론에서 우메다씨는 오픈코스웨어가 왜 성공하지 못했었는지 비관적으로 봤었는데, 이 책에서 그런 이야기들을 다른 저자와 함께 토론 형식으로 좀 더 심도있게 다룬다.

현재는 MIT의 OCW 말고도 예일대학교의 OYC나 카네기 멜론대학 OLI가 생겼고 앞으로 더 많은 대학에서 시도할 것 같다. 특히 카네기의 OLI는 MIT처럼 문어발식으로 이것 저것 대충대충(?) 만들지 않고 몇몇 과목에 집중해서 만들려고 하는 의지가 보이는데 아쉽게도 내가 관심있어하는 컴퓨터 과학 분야는 아직 없다. 그렇지만 곧 Secure Coding, Principles of Computing 등 재밌어 보이는 과목들이 개설될 것 같아서 기대하고 있다.

그래도 제일 오래해왔고 가장 많은 강의를 보유한 MIT에는 마법사책으로 유명한 컴퓨터 프로그램의 구조와 해석이나 Introduction to Algorithms 등 아주 유명한 강의들도 있는데, 이게 생각했던 것처럼 도움이 되지는 않는다.
물론 가장 큰 이유는 영어이다. 영어권에서 태어난 사람들은 이런 오픈 강의들이 축복처럼 생각될지도 모르겠다만, 무슨 말인지 하나도 못알아듣겠는데 뭔 공부를 한단 말인가.
몇 년전부터 영어를 위해서 문법 공부만 신나게 했는데, 이런 동영상 강의를 볼 때마다 절반 이상 놓치면서 스트레스만 받고 있는 나를 발견한다.
뭐 그거야 어쨌든 영어를 잘 못하는 내 사정이고, 언젠가는 각 나라별로 자막도 제공해줄 것이라 믿는다. 물론 그 때까지 놀면서 기다려서는 안되겠지만.

또 한가지 아쉬운 점은 MIT에서 제공되는 동영상 강의 같은 경우 화질이 너무 떨어지는데다가 카메라도 거의 움직이지 않고 정적인 화면만을 보여준다는 점이다. 720p정도는 안되더라도 480p 정도로는 만들어야 하지 않을까? 고정된 카메라 화면은 그 자체로 수면제이다. 내가 영어를 완벽하게 이해할 수 있었더라도 이 강의를 보면 재미가 있었을까 하는 생각이 드니 말이다.
물론 이것들 또한 앞으로는 더 좋아질 것으로 기대한다. 하지만 처음 만들 때부터 좀 잘 기획해서 만들었으면 더 좋았을텐데 말이다. 게다가 MIT는 오픈 코스웨어의 갯수에만 집착하고 있는 것 같다. 즉, 이전에 강의를 만들어 놓은 것은 새로 만들지 않고 그걸로 계속 우려먹는다. 따라서 아직 오픈용으로 안만들어져있는 강의나 새로 개설되는 강의만이 오픈코스웨어에 추가되고 있으므로 기존 강의들은(정적이고 저화질의) 전혀 업데이트가 안되니 답답한 노릇이다.
그래서 카네기의 OLI나 다른 새로운 대학에서 새롭게 시도하는 오픈 교육들이 더욱 기다려진다.

P.S 출판사인 제이펍에서 오픈 코스웨어 사이트들을 잘 정리해둔 링크가 있다.
오픈 코스웨어 관련 사이트 모음
프로그래머 그 다음 이야기 - 6점
임백준 외 지음/로드북

얼마전에 나온 신간이며, 프로그래머들이 가볍게 읽어보기 딱 좋은 책이다.
6명의 프로그래머에 대한 에세이들이 있는데 1번타자인 임백준씨의 글을 가장 재밌게 읽었다.

잠시동안 관리자의 역할을 맡게되면서 프로그래밍 실력이 떨어질까봐 걱정하는 마음.
옆의 똑똑한 동료들과 경쟁을 하고 함께 토론을 하면서 실력을 재보고, 또 그들을 도저히 이길 수 없겠다는 한계를 느끼며 좌절하는 감정들을 솔직하게 잘 썼다. 이런 것들은 프로그래밍이라는 것을 정말로 진지하게 생각하고 좋아하지 않으면 느낄 수 없는 감정들이다.

미국 회사들의 분위기를 엿볼 수 있는 것도 좋았다.
아, 그런데 임백준씨도 그렇지만 많은 사람들이 한국에서 일하는 프로그래머들이 너무도 힘든 삶을 살고 있는 것으로 생각한다.
정말 그런가? 나는 비록 경력이 5년 정도 밖에 되지 않고 회사도 2군데 밖에 다녀보지 않았지만 여태까지 그런 것은 느껴보지 못했다. 뜨거운 여름날에 와이셔츠가 온통 땀으로 쩔어서 영업하러 나갔다가 잘 안풀리고 들어와서 욕이나 실컷 얻어먹는 세일즈맨들에 비하면 시원한 사무실에 앉아서 커피 한잔 하며 코딩하는게 얼마나 편안한가.

사람들은 항상 자신이 하는 일을 더 고되고 힘들게 포장해서 자랑스럽게 말하는 경향이 있는 것 같다.
- 우리 부대군기는 진짜 빡셌어.
- 요즘 어린 애들은 버릇이 없어. 우리 때는 그런거 상상도 못했는데.
- 니가 몰라서 그렇지 우리 부서가 얼마나 힘든데.

프로그래머로서 스트레스를 받는 순간이 있다면 기능을 정해진 시간에 맞춰서 구현해낼 수 있을까 하는 약간의 초조함과 동료와 기술적으로 의견 충돌이 발생했을 때, 그리고 심각한 버그를 보고 받았는데 문제가 잘 안 풀릴 때 정도이다.

다른 직종에서 일을 해본적은 없기 때문에 비교해서 생각해볼 수는 없지만, 사람들이 생각하는 것처럼 프로그래머가 못해먹을 직종은 아닌 것 같다. 진짜 못해먹을 일 하면서 사는 사람들이 얼마나 많은데.

임백준씨의 에세이는 아주 즐겁게 읽은 반면에 다른 에세이들에서는 별로 재미를 느끼지 못했다.
이 책에 나오는 프로그래머들은 열심히 살아왔고 좋은 프로그래머들임에는 분명하지만 옆자리에서 흔히 볼 수 있는 평범한 프로그래머들이다. 그럼에도 불구하고 이미 프로그래머로써 무언가 큰 것을 이룬 사람들처럼 자서전을 쓰듯이 글을 썼기 때문에 재미가 떨어지지 않았나 싶다.

그러고 보니 정말로 무언가 큰 것을 이룬 국내 최고의 프로그래머들을 불러다가 어떻게 공부했는지 에세이를 써보라고 하면 그것도 참 재밌는 책이 될 것 같다.