토요일, 4월 28, 2012

[독서광] 읽기 좋은 코드가 좋은 코드다

봄바람이 불어 바깥 나들이 가기 좋은 날씨가 계속되고 있지만, 책상에 산더미처럼 쌓인 책의 유혹을 이기지 못하고 요즘 계속 기술서를 집중적으로 읽고 있는 상황이다. 오늘은 한빛미디어에서 따끈따끈하게 신간으로 보내준 '읽기 좋은 코드가 좋은 코드다'라는 책을 독자 여러분께 소개해보려 한다.

2년 전에 클린 코드: 애자일 소프트웨어 장인 정신이라는 책을 번역해서 독자 여러분들께 선보인 적이 있다. 물론 여러 가지 이유로 인해 흥행은 참패했지만(흑흑흑), 구입한 몇몇 분들로부터 책 내용 정말 좋다는 칭찬을 받아 기분이 좋긴했다. 엉클 밥 마틴의 공력이 느껴지는 이 책이 다루는 주제는 "깨끗한 코드"인데, 실제 코드 쓰기보다 코드 읽기를 훨씬 더 많이 하는 우리 프로그래머 관점에서 깨끗한 코드야 말로 축복이자 성전이라 말해도 과언이 아니다. '클린 코드'는 다소 주관적인 특성이 있긴하지만(저자가 엉클 밥이라는 사실을 기억하자. ㅋㅋ) 자바를 집중적으로 다루기 때문에 깊이도 있고 분량도 만만하지 않으므로 갓 자바에 입문한 초급 개발자가 읽기에는 애로 사항이 여기저기서 꽃필 가능성이 높다. 하지만 오늘 소개할 '읽기 좋은 코드가 좋은 코드다'는 그림과 쉬운 설명을 곁들여 여러 가지 프로그래밍 언어를 대상으로 초보 개발자에 적합한 방식으로 내용을 전개하므로 "클린 코드"에 앞서 워밍업으로 읽어보면 좋을 것 같다는 생각이 들었다.

'읽기 좋은 코드가...'는 10%의 노력으로 90%의 효과를 발휘하는 방법을 기술하는 책이라고 보면 틀림없다. 각 장에서 설명하는 내용은 난이도가 엄청나게 높지도 않고 실천하기도 크게 어렵지는 않지만 일단 실천하게 되면 당장 본전을 뽑을 수 있는 내용이 많기 때문에 개발 과정에서 자주 틀리는 부분을 포스트 잇으로 붙여 두고 주기적으로 복습하는 방법을 사용하면 좋은 성과를 얻을 수 있다. 게다가 실용적인 방식으로 접근하므로 뭔가 치밀한 규칙을 정해놓고 여기에 딱 맞춰 숨도 쉬기 어렵게 강제하는 대신 상식선에서 생각하는 방안을 제시한다는 또 다른 장점도 있다(늘 그렇듯 규칙이 너무 엄격하면 지키기가 어렵다). 물론 실천이 가장 중요하다는 사실은 절대로 변하지 않으므로 이 책을 읽는 당시에만 기분 좋다가 끝나버리면 안 된다는 사실도 명심하자.

자 그러면, 이 책의 구성은 어떤 식일까? 우선 '핵심 아이디어'에 간결하게 골자를 제시하고 실제 나쁜 코드를 예로 들어 좋은 코드로 바꾸는 방법을 설명한다. 그리고 나서 조금 더 어려운 내용으로 넘어가며 앞서 배운 내용을 확장한다. 마지막에는 요약을 둬서 앞에 나온 내용을 일괄 정리하고 있다. 이 책에서 구체적으로 다루는 내용은 1) 표면적인 수준에서 개선이 필요한 이름, 미학, 주석, 2) 루프와 논리를 단순화하기 위해 필요한 흐름 제어, 복잡한 논리, 변수와 가독성, 3) 코드 리펙터링을 위한 하위 문제 추출, 작은 작업, 생각을 코드로 만드는 방법, 코드 분량을 줄이는 방법, 4) 마지막으로 테스트와 가독성, '분/시간 카운터' 사례다. 분량이 250페이지도 채 안 되므로 부담없이 각자 관심 있는 부분부터 즐겁게 읽으며 남에게 보여도 부끄럽지 않을 정도로 코드 수준을 높이면 좋겠다.

EOB

일요일, 4월 22, 2012

[독서광] Make Vol 3.

이번에 새로 나온 Make Vol 3.(한국어판 4월호)를 받고서 출퇴근하며 재미있는 시간을 보냈다. 이번 호는 아두이노에 집중한 지난 호와는 달리 전통적인 루베 골드버그 기계식 내용이 많아 조금 고전적인 냄새를 풍겼다. 표지에 강조한 부제가 '잃어버린 과거의 지식을 찾아서'니 당연히 여기에 부합해야 하지 않을까?

이번 호에서 가장 재미있게 읽었던 내용은 역시 '잃어버린 과거의 지식을 찾아서'에 나오는 몇 가지 고전적인 Make 프로젝트였다. 특히 스티브 잡스도 즐겨 읽은 시를 지은 윌리엄 블레이크 소개가 가장 흥미로웠다. 이번 호 Make를 보지 않았으면, 블레이크가 시인인 줄로만 생각했을텐데, 자기 시에 삽화를 컬러로 인쇄하기 위해 조판 시스템을 개발한 업적을 비롯해 선구적인 Maker라는 사실을 처음 알았다(이래서 사람을 배워야 해. ㅋㅋ). 그 다음으로 흥미로웠던 내용은 커피광의 호기심을 증폭시키는 '플로렌스 사이폰 아라비카 커피 추출기'였다. 드립 커피보다 좀더 탁월한 커피 맛을 제공한다는 설명에 홀려 잠시 만들까 생각했는데, 이건 손재주 없는 내가 만들 수 있는 물건이 절대로 아니었다(유리관 가열해서 구부리는 모습을 보고는 바로 좌절 모드로...). 그래서 에소프레소 커피에 만족하고 살기로 했다. T_T

Make 책을 보면서 늘 드는 생각이지만 나도 손재주가 좋았으면 좋겠다. 손재주도 연습하면 좋아진다는 이야기를 하시는 분들도 계시지만, 프로그래밍도 연습하면 좋아지긴 한다. 하지만 어느 수준 이상(예: Make 잡지를 보고 바로 공구 챙겨 뚝닥거리는 수준, 프로그래밍 분야에서 예를 들자면 C언어로 간단한 BASIC 인터프리터를 바로 만드는 수준)을 뛰어넘기가 너무 어렵기 때문에 그냥 눈팅만 하고 지내련다.

EOB

토요일, 4월 14, 2012

[독서광] 자바스크립트 성능 최적화

요즘 자바스크립트가 여기저기서 뜨고 있다. Ajax를 사용한 동적인 웹 프로그래밍의 기본 스크립팅 언어로 자리잡은지는 한참 되었고, MongoDB 대화식 셸과 Node.js에서는 서버 쪽 언어로 자바스크립트를 사용하고 있기에 개발자들 사이에 관심이 집중되고 있다. TIOBE 인기 순위에 따르면 자바스크립트는 작년 10위에서 올해 9위로 올라섰고 파이썬의 위치를 위협하고 있다. 그렇다면 개발자 입장에서 자바스크립트를 접했을 때 가장 머리 아픈 점은 무엇일까? 여러 가지 대답이 나오겠지만, 그 중 하나는 성능이다. 특히 웹의 대화식 특성으로 인해 조금이라도 페이지 로딩이 느려지면 바로 벗어나므로, 자바스크립트가 병목으로 작용하지 않도록 개발자들은 각별히 주의해야 한다. 하지만 C/C++/Java와 같은 다른 전통적인 프로그래밍 언어에 비해 자바스크립트와 관련해 성능을 높이는 방법을 익히기란 쉽지 않다. 웹 브라우저라는 (사실상 가상이 아닌) 가상 기계에서 동작하기 때문에 브라우저별로 특성이 제각각이기 때문이다.

오늘 소개할 책인 '자바스크립트 성능 최적화'는 자바스크립트 관련 성능 문제로 고민하기 시작한 중급(스크립트 키드나 초급 개발자들이 보기에는 조금 난이도가 높을지도 모르겠다. 물론 고급 개발자들이라면 다른 프로그래밍 언어에서 겪은 내용이 데자뷰로 펑펑 터지기 때문에 그냥 이틀 정도면 다 읽고나서 "뭐 자바스크립트도 별거 없네!"라고 말할지도... T_T) 개발자들에게 성능 관점에서 자바스크립트 언어를 새롭게 바라보는 좋은 기회를 제공할 것이다. 본문 중에 은총알은 나오지 않지만, 평상시에 무심코 지나가면서 작성한 코드가 성능에 어떤 식으로 치명타를 가했는지 여러 가지 나쁜 관례를 예로 들어 설명하므로 "내가 만든 웹 페이지는 왜 이렇게 느려?"라고 고민하는 개발자분들께 많은 도움이 될 것 같다.

목차를 보면, 스크립트를 내려받아 실행할 때까지 웹 브라우저가 어떤 삽질을 하는지 설명하는 '로딩과 실행', 그리고 프로그래밍 언어 관점에서 자바스크립트가 다른 프로그래밍 언어에 비해 독특한 특성이 있으므로 '스코프와 객체 관리'에 경각심을 불러 일으키는 '데이터 접근', 원래부터 느려터진 DOM과 조금이라도 친해지기 위한 각종 테크닉을 제시하는 'DOM 스크립팅'으로 시작한다. 그리고 나서 웹 브라우저뿐만 아니라 서버 쪽 언어에서도 도움이 될만한 일반적인 내용인 '알고리즘과 흐름 제어', '문자열과 정규 표현식'을 설명하고 나서 다시 웹과 밀접한 관련이 있는 주제인 '응답성 좋은 인터페이스', 'Ajax'를 설명한다. 그리고 다시 일반적인 내용인 '프로그래밍 사례'를 소개하고 나서 마지막으로 '애플리케이션 빌드와 배포', 프로파일링에 필요한 '도구'를 설명하며 마무리한다.

참고로 자바스크립트는 컴파일 언어가 아니며(물론 요즘 나오는 브라우저는 사정이 다르다. 파이어폭스는 JIT로 실행 중에 필요한 부분을 컴파일하는 TraceMonkey라는 엔진을 탑재하고 있고, 크롬은 아예 대놓고 자바스크립트를 컴파일해서 사용하는 V8이라는 엔진을 탑재하고 있다), 브라우저와 얽힌 여러 가지 특성으로 인해 기존 컴파일 방식의 언어에 비해 저주순 최적화 내용은 기대하기 어렵다는 사실을 감안하면, 책의 목차에서 일반적인 순수 자바스크립트 코드 최적화에 할당된 페이지 분량이 적은 이유를 이해하리라 본다. 이 책을 다 읽고 나도 웬지 섭섭한 독자분들께서는 Chrome V8 Design ElementsTamarin Tracing 페이지를 참조해 내부 동작 방식에 대한 지식을 쌓으면 좋겠다.

그러면 즐거운 자바스크립트 프로그래밍을 즐기시기 바라며!

EOB

토요일, 4월 07, 2012

[독서광] START! 링크드인 LinkedIn

한국에서야 페이스북이랑 트위터에 눌려 그리 널리 알려진 편은 아니지만 비즈니스 세계에서 가장 유명한 SNS는 뭐니뭐니해도 링크드인이 아닐까 싶다. 국내에 들어오기 상당히 오래 전부터 가입해서 사용해오던 서비스라(물론 적극적인 활동은 요즘에 들어와서야 가속 페달을 밟고 있긴 하지만...) 언제 한번 독자 여러분들께 링크드인의 놀라운 세상을 소개할까했지만 몇 년이 흘러버렸다. T_T 하지만 가장 늦었을 때가 가장 빠르다고 했던가? 오늘은 링크드인을 소재로 (놀랍게도 국내서!) 나온 START! 링크드인이라는 책을 한번 소개해보려고 한다.

이 책에는 '세계로 향하는 개인과 기업의 필수 비즈니스 SNS 가이드'라는 부제가 붙어있는데, 과장이라고 생각하면 오산이다. 과장 전혀 안 보태 전세계적으로 놀려면 반드시 링크드인 가입해 영어로 자기 이력서를 다듬어야 한다는 생각이다(물론 한국에서 직장을 구할 강력한 목표를 삼은 분들이께서는 잡코리아에만 의존하면 된다는 이야기는 절대 아니다). IT 기업을 비롯해 잘 나간다는 상당수 회사들은 혹시 자신들이 필요한 인재가 없는지 지금 여러분들이 이 글을 읽고 있는 순간에도 자체 HR 팀에서 링크드인을 이잡듯 뒤지고 있을테니까, 링크드인이 없다는 사실 하나만으로 상당히 불리한 출발선에 놓일지도 모른다는 생각이다. 영어로 링크드인을 운영하는 블로그 주인장인 B급 프로그래머 역시 외국 회사 몇 군데(사생활 보호를 위해 꼭 찍어 어디라고는 말하지 않겠다. 여튼 독자 여러분들도 알고 나도 아는 유명한 몇몇 회사가 있다. ㅋㅋ)서 '면접 한번 볼래?'라는 편지를 링크드인을 거쳐 받은 경험이 있을 정도니까 정말로 영어 잘하고 능력 좋으신 분이라면 눈 딱 감고 하루 투자해보면 어떨까 싶다.

자 여기까지 뽐뿌질을 했으니, 이미 링크드인 사이트에 가입했을테고... 구체적인 활용 방안에 대해 궁금하실텐데, 가장 좋은 방법은 직접 써보는거다. 하지만 황금 같은 시간을 아끼기 위해 남들의 경험을 활용하는 방법을 동원하면 더욱 좋을 것이다. 이 책이 바로 링크드인 초보자들에게 좋은 나침반이 되어주리라는 생각이다. 다행스럽게 책 분량도 적고 내용도 이해하기 쉬우므로(약간 중복되는 내용이 있긴 하지만, 모든 독자가 책을 첫페이지부터 끝페이지까지 읽지는 않으므로 이런 구성을 이해할만 하다), 책을 읽으면서 필요에 따라 웹 브라우저로 링크드인 내용을 채워나가기 시작하면 어느 순간 전문적인(때깔나는) 전자 이력서를 하나 확보하게 되리라 확신한다.

이렇게 이력서를 꾸며놓은 다음에, 자신이 아는 사람들의 네트워크를 하나씩 구성해보자. 주로 친한 친구들을 중심으로 네트워크가 형성되는 페이스북과는 달리, 링크드인은 $이 걸린 비즈니스 네트워크를 구축할 수 있기 때문에 자신의 이력이나 경력을 제대로 관리하고 싶은 분이라면 이 멋진 도구를 사용해 인맥을 형성해나가는 재미를 쏠쏠하게 느낄 것이다. 취업, 프로젝트 진행, 전문가 찾기와 같은 활동 과정에서 오히려 근처에 있는 아주 친한 사람보다는 약간 느슨한 네트워크에서 도움을 받을 확률이 높다는 사실을 기억하면 좋겠다.

혹시 필요한 독자분들을 위해 부끄럽지만... (에구 이 글 쓰기 전에 번개처럼 몇 가지 더 추가하고 다듬고 난리를 쳤다) B급 프로그래머의 링크드인 주소를 공유해드린다. 채울 건 대충 다 채웠으므로 어떤 구성 요소가 있는지 확인 차원에서 귀엽게 봐주시면 감사하겠다. 그러면 여러분들도 모두 링크드인 시민으로 즐거운 SNS 생활하시기 기원하며 뽐뿌질은 여기까지.

뱀다리: 이력서를 멋지게 관리하고 싶은 개인 뿐만 아니라, 회사 역시 링크드인을 활용해 회사의 가치를 높일 수 있기 때문에 만일 이 글을 읽는 애독자분들 중에서 애사심이 크신 분들께서는 지금 당장 링크드인에 로그인해 회사가 등록되어 있는지 확인하고, 그렇지 않다면 회사 HR 팀을 졸라서 링크드인에 회사 프로필 등을 등록하도록 요청하면 좋겠다.

EOB