토요일, 4월 30, 2016

[B급 프로그래머] 끝내주는 프로그래머가 되기 위해 필요한 요건은?

Quora를 읽다 보니 What are the things required to become a hardcore programmer?라는 질문이 올라와서 한 번 정리해보았다. "끝내주는 프로그래머가 되기 위해 필요한 요건은?" 과연 무엇일까?

  1. 모르는 코드에 대해 용감하게 뛰어들어라. 익숙하지 않은 코드 기반으로 뛰어드는 행위는 불편함과 공포를 초래한다. 많은 사람들은 심지어 시도조차 하지 않는다. 만일 이런 두려움을 개의치 않는다면 훨 씬 쉽게 중요한 기술을 습득하게 되며, 이런 과정을 거치며 상당히 뛰어난 프로그래머가 된다. 오픈소스 라이브러리나 다른 팀에서 만든 라이브러리가 생각처럼 동작하지 않는다면, 디버깅을 위해 원시 코드로 뛰어드는 유연성을 제공한다. 여기서도 성장 마인드셋이 중요하다.
  2. 디버깅 기술을 완벽하게 습득하라. "예상처럼 코드가 동작하지 않는 이유가 무엇일까?" 소프트웨어 공학자로서 매일 묻는 질문이다. 효율적인 디버깅 능력은 일을 제대로 해내기 위한 공학도의 능력에 예상외로 많은 영향을 미친다. 하지만, 학교에서 제대로 가르치지 않으며 기술 면접에서도 저평가된 부문이다. 효율적인 디버깅 방법은 무엇일까? 핵심을 말하자면 과학적인 수단을 동원해 파고들면 된다.
    • 무슨 일이 일어나고 있는지 추측하자.
    • 추측이 옳다고 가정하고, 추측의 추이가 어떻게 될지 파악하자.
    • 이런 추이를 반박하는 증거를 수집하기 위해 관찰하자.
    • 모순점을 발견했다면, 추측이 틀렸으므로 다시 추측하자. 모순점을 발견하지 못했다면, 가능한 설명을 하나 확보했다.
  3. 시간을 절약하는 도구에 투자하라. 컴퓨터가 처음 등장했을 때, 컴퓨터 자원은 제한되어 있었으며 비쌌기에 프로그래머는 최대한 아껴서 사용했어야만 했다. 오늘날 아마존 클라우드 비용은 몇 푼 안 된다. 반면에 여전히 하루는 24시간이고 일주일은 7일이다. 이는 컴퓨터에 넘길 수 있는 수작업이 있다면 이를 최대한 컴퓨터에 넘겨야 함을 의미한다. 시간을 절약하는 도구와 자동화된 작업 흐름에 투자함으로써 이를 달성할 수 있다. 자동화는 밤낮을 가리지 않으며 다른 문제에 초점을 맞출 수 있게 만든다. 기계가 할 수 있는 일을 사람이 하지 마라.
  4. 반복 속력을 최적화하라. 정의된 함수 위치를 찾아 탐색하는 데 12초가 걸린다고 가정하자. 하루에 60회 비슷한 작업을 한다면, 파일을 뒤적거리는 과정에 매일 12분을 소비하는 셈이다. 텍스트 편집기에서 키보드 단축기를 충분히 익혀 12초가 아니라 2초에 가능하게 만든다면 10분을 절약할 수 있다.
  5. 시스템 수준의 사고 능력을 배양하라. 프로그래밍을 할 때, 명세에 맞춰 코드를 구현했다면, 작업이 "끝난" 것으로 간주하기 쉽다. 하지만 실제로는 빙산의 일각에 불과하다. 정말 중요한 코드를 빌드하고 배포하기 위해서는 전체 시스템 수준으로 코드 범위를 확장하게 사고 단계를 높여야 한다.
    • 코드가 다른 코드 기반이나 다른 사람이 만들고 있는 기능과 어떻게 맞아 떨어지는가?
    • 충분히 자체 테스트를 진행했으며, QA 팀에서도 만들어진 기능을 충분히 테스트했는가?
    • 코드 배포를 위해 양산 환경에 어떤 변경을 가할 필요가 있는가?
    • 새로운 코드가 다른 동작 중인 시스템의 성능이나 행동 방식에 불리한 영향을 주지 않는가?
    • 코드를 사용하는 고객이나 사용자가 예상처럼 행동하는가?
    • 코드가 예상대로 비즈니스에 좋은 영향을 미치는가?
EOB

댓글 없음:

댓글 쓰기