티스토리 뷰

2부 고수가 말하는 프로그래밍 기술 연마 방법

2부에서는 1부의 프로그래밍 관련 인사이트를 이어 여러 전문가들이 이야기하는 프로그래밍을 연마하는 방법들을 정리했다.

매일 출근하기 위해 차를 운전하지만, 전문적으로 운전하는 사람과는 거리가 멀다. 마찬가지로 매일 프로그래밍을 한다는 사실 자체가 그 사람을 전문 프로그래머로 만들어 주지는 않는다. 에릭슨은 중요한 것은 경험 그 자체가 아니라 어떤 사람이 현재 가지고 있는 능력을 약간 뛰어넘는 수준의 도전을 끊임없이 부여되고 그에 대응하는 '노력이 담긴 학습'이라고 주장한다.

'노력이 담긴 학습'은 현재 능력의 최첨단 끝에 놓인 문제점을 끊임없이 개선하는 것이다. 현재시점에서 풀어내지 못하는 문제 말이다. 코드 카타가 바로 '노력이 담긴 학습'을 실천하고 프로그래밍 기술을 연마하는 방법인데 스티브가 쓴 코드 카타는 다음과 같다.

  1. 이력서를 작성하라. 보유하고 있는 모든 기술을 나열하고 그 중 100년 뒤 유용할 만한 것을 확인

  2. 존경하는 프로그래머의 목록을 적어보기. 훈련을 위해 그들의 도움이 필요하다. 그들의 특별히 강한 분야는? 당신이 더 잘하고 싶은 분야면 더더욱 좋다.

  3. 위키피디아에서 컴퓨터 공학 항목을 찾아 하단 '컴퓨터 공학의 위대한 선구자들' 섹션을 보고, 한 사람을 선택해 그에 대해 읽어봐라.

  4. 다른 사람이 작성한 코드를 20분 정도 읽어보라.

  5. 가장 좋아하는 프로그래밍 도구 10가지를 적어볼 것. 없으면 견딜수 없는 것들. 도구 중 아무거나 골라 그 도구르 설명한 내용을 한 시간동안 읽어보기. 새로운 사실 또는 방법을 알아내도록 노력하자.

  6. 프로그래밍과 아무 상관 없는 것 중 자기가 잘하는 것을 생각해보라. 그 분야의 전문가나 최고수가 어떤 훈련을 할지 생각해보자. 배운 내용을 프로그래밍에 적용할 수 있을까?

  7. 한 무더기의 이력서와 검토할 사람들과 함께 한 시간정도 시간을 보내라. 한 이력서를 적어도 세 사림이 검토하게 하라. 점수 폭이 가장 큰 이력서를 놓고 토의해보자.

  8. 기술적 전화 인터뷰에 참가해서 들어보기. 끝나면 피드백을 적고, 후보자에 대한 자신의 의견을 밝히고, 인터뷰를 진행한 사람과 의견이 일치한지 보자.

  9. 많이 알지 못하는 분야에 정통한 후보자를 대상으로 기술적인 인터뷰를 진행해보자. 후보자에게 해당 분야와 관련된 내용은 듣는 사람이 아무것도 모른다고 가정하고 아주 기초적인 것부터 설명해보라고 요구하라. 최대한 이해하려하고 질문도 던져라.

  10. 다른 사람이 진행하는 기술 인터뷰에 참관할 것.

  11. 질문을 주고바들 수 있는 친구를 구할 것. 주마다 순서를 바꿔 상대방에게 프로그래밍과 관련된 질문을 던져라.


<10년동안 프로그래밍 배우기>에 정리되어 있는 프로그래밍 학습에 대한 피터 노빅의 일반적 조언

  1. 다른 프로그래머와 이야기하고 소스코드를 읽기. 책이나 강의보다 더 좋음

  2. 프로그램을 짜라! 최선의 배움은 실행

  3. 대학이나 대학원에서 프로그래밍 수업을 들을 것

  4. 프로젝트 참여

  5. 다른 사람이 수행한 프로젝트를 이어받아 운영할 것. 유지보수하는 법을 배우자. 효과적으로 유지보수할 수 있는 코드 작성법

  6. 다른 프로그래밍 언어를 배우자

  7. 하는 일에 하드웨어가 어던 영향을 주는지 이해하기. 명령하난 수행, 메모리에서 워드 하나 읽어오기, 디스크에서 연속된 워드 읽어오기, 디스크 새로운 위치 찾기

데이브의 21가지 코드 카타 참고하기, 코딩 도조 참여하기.

저자의 코드 카타

  1. 블로그를 시작하라. 잘 쓰고 의사소통에 능숙한 사람의 목소리만이 다른 사람에게 전달되는 법이다.

  2. 몇 가지 주목할 만한 오픈소스 프로젝트에 활발히 참여할 것. 말만 하는 사람인가, 실천도 하는 사람인가? 공적이고, 구체적이며, 유용한 일들에 대한 흔적을 남기자.


책에서 언급되어 있는 코드 카타는 4가지인데 여러 가지를 참고해 자신만의 코드 카타를 만드는 것도 개인의 노력에 동기부여를 줄 수 있지 않을까 한다.

단위 테스트가 버그를 포착하는 비율은 25퍼센트, 기능적 테스트는 35퍼센트, 통합 테스트는 45퍼센트다. 이에 비해 설계와 코드를 리뷰하는 것의 평균적인 효과는 55퍼센트에서 60퍼센트에 달한다.

개별적 사람들도 위대한 일을 수행할 수 있지만 동기부여가 잘 된 두 사람이 함께 일하면 그보다 훨씬 더 많은 일을 해낼 수 있다. 충분히 존중할 수 있는 프로그래머 한 명 있어야 한다.


저자가 강조하는 부분중 하나가 개발을 할 때 동료가 있어야 한다는 점이었는데 혼자 개발을 하는 입장에서 설계 논의를 하고 코드 리뷰를 하는 과정이 빠진 부분이 아쉽다. 그래서 적어도 존중할 수 있는 프로그래머를 알아가기 위해서는 여러 방법을 동원하고 있다.

웹 디자인의 원칙

웹 페이지의 첫인상을 훌륭하게 만드는 요소

  1. 페이지가 상당히 빨리 로드되어야 한다.

  2. 일종의 엘리베이터 토크. 간결하고 명확하게

  3. 최소한 내가 애플리케이션을 사용할 때 어떤 화면을 보게 될지 미리 알게 해주는 스크린샷을 생생한 현실의 구체적 예와 함께 몇 개만이라도 보여줘. 회원가입하거나 동영상 클립이나 슬라이드쇼 한심한 일을 피하라.

  4. 장애물 없는 명확한 동작이 가능하게. 쉽게 결정내릴 수 있게 하기. 영리한 프로그래머라면 사용자가 살펴보는 동안 입력한 데이터를 회원가입 후 남겨둘 것이다.

  5. 일부 사용자를 포기하더라도 진짜 의미있는 사용자를 놓치지 않도록 노력하자.


— 좋은 웹사이트를 만들기 위해 참고할만한 책

<상식이 통하는 웹사이트가 성공한다>
<스티브 크룩의 사용성 평가, 이렇게 하라>
<웹 사용성과 눈궤적 쫓기>
<프로그래머를 위한 사용자 인터페이스> - 조엘 스폴스키


"모든 사용자는 거짓말을 한다" 편에서

...이러한 차이는 사용자가 단순히 듣기만 하는 것보다 사용자가 실제로 행동하는 것을 관찰하는 것이 왜 그렇게 중요한지를 설명해준다. 이런 작업을 전문적으로 수행하는 사람을 우리는 '경제학자'라고 부른다. 관찰은 강력한 기술이다. 경제학자들은 말이 아니라 실제 행동을 보고 판단을 내리는 법을 학습한다. 사람의 주머니에서 돈이 나오게 만드는 행위보다 더 신중하게 고려해야 하는 것은 없다. 그렇기 때문에 우리는 모두 <괴짜 경제학>을 읽어야 하고, 심지어 <이코노미스트> 매거진도 읽어야 하는 것이다. 더불어 아직 그렇게 하고 있지 않다면 당장 괴짜 경제학 블로그를 구독 목록에 추가해야 하는 이유도 여기에 있다.


당신의 사용자를 알아라

<웹 평판 시스템 만들기> — "사회적인 소프트웨어를 만드는 데 따르는 모든 문제와 답의 출처는 바로 사람들 안에 있다." 작은 우주 안에 존재하는 연속성을 침해하지 않으면서 커뮤니티를 이끌고 자극하는 기술을 습득하고 싶을 때

읽어볼 만한 내용

프로그래머는 책을 읽지 않지만 당신은 읽어야 한다


이 말의 뜻은 IT 서적이 출간되는 수가 한정적인데다 몇 년이 가지 않는 책들이 대부분인 점을 비판해서 나온 주제였는데 저자는 몇 년후 사라질 책이 책장에 꼿혀 있다면 책을 잘못산 것이라고 말한다. 몇 년후 사라지는 책이 완전히 무의미한 것인지는 모르겠지만 내 책장에도 몇 권이 꽃혀져 있다.

— 모든 프로그래머가 소장해야 한다고 주장하는 책 5권

<코드 컴플리트 2>
<상식이 통하는 웹사이트가 성공한다>
<피플웨어>
<실용주의 프로그래머>
<소프트웨어공학의 사실과 오해>


이렇게 해서 어수선하지만 정말 마음에 들었던 내용들을 정리해보았다. 다음에는 여기서 언급한 책들 중 몇 권을 읽고 방법들을 실행해보는 주제로 글을 써 보아야 겠다.


댓글