Are you a Programmer?

Matthias Endler

당신은 프로그래머인가요?

원문은 Matthias Endler님이 에 게재했습니다. 이 블로그 구독하기

지리 선생님이 대학 첫 수업에 대한 이야기를 들려준 적이 있다. 오리엔테이션으로 교수가 학생들에게 아무런 도움 없이 독일 지도를 가능한 한 정확하게 그려 보라고 했다고 한다. 놀랍게도 선생님은 지도를 세세하게 채우지 못했다. 나라의 윤곽조차 어렴풋했다고 한다.

그녀는 독일(모국)의 이미지를 수천 번이나 봤지만, 흐릿한 기억만으로는 재현해 낼 수 없었다. 결국 찾아봐야 했다.

낯익지 않은가? 우리는 지식의 상당 부분을 기계에 의존해 관리한다. 무언가를 제대로 외우려면 고된 노력이 필요하다.

프로그래머를 위한 비슷한 테스트가 있다.

원하는 프로그래밍 언어를 사용해 외부 도구의 도움 없이 종이 위에 평균 시간 복잡도가 O(n*log n)인 올바른 정렬 알고리즘(Heapsort, Quicksort, Bucketsort 등)을 작성해 보라.

여기서 올바르다는 것은 그대로 입력했을 때 수정 없이 버그가 없어야 한다는 뜻이다.

전문 소프트웨어 엔지니어 중 이걸 해내지 못하는 비율이 얼마나 높은지 알면 놀랄 것이다.

누군가는 프로그래밍 언어 문법의 세부 사항을 아는 건 중요하지 않다고 주장할지도 모른다. “검색 엔진 쓸 줄 아는데 그런 사소한 것까지 왜 외워야 하죠? 튜토리얼 예제를 복사해 붙여 넣고 고치면 되는데 왜 백지부터 시작해야 하죠? 어차피 몇 년, 몇 달마다 다른 언어의 문법을 완전히 새로 배워야 하는데요.”

하지만 그건 착각이다. 단 하나의 프로그래밍 언어라도 정말 잘 안다면 — 심지어 Fortran이나 COBOL처럼 오래된 것이라도 — 그 지식만으로 충분히 큰돈을 벌 수 있다. 1975년에 C를 시작했다고 해보자. 거의 40년이 지난 지금까지도 같은 문법을 그대로 쓸 수 있다. 텍스트 에디터도 마찬가지다. Emacs와 Vim은 모두 수십 년 된 에디터다. 오랜 시간 단련된 도구들이다. 무엇을 선호하든 상관없지만, 인생의 많은 시간을 도구와 함께 보내게 될 테니 숙달하는 데 시간을 투자하라.

덧붙이자면, 무슨 일을 하든 완벽을 추구하는 사람은 극소수인 것 같다. 대부분 “그 정도면 충분하다”에 만족한다. 여기에는 여러 이유가 있을 수 있고, 숙제를 안 했다고 누구도 비난하려는 건 아니지만, 이런 생각을 하는 게 나 혼자만은 아닐 것이다.

도구를 매뉴얼 없이 다루지 못한다면 형편없는 장인이다. 간단한 편지 한 통을 쓰는 데도 사전을 찾아봐야 한다면 작가가 되기 어렵다. 우아하고 유려한 문장을 만드는 것조차 버거울 텐데, 흥미롭고 독창적인 이야기는 말할 것도 없다. 나는 그런 책은 읽고 싶지 않다.

프로그래머란 무엇인가?

  • 적어도 하나의 프로그래밍 언어를 속속들이 알고 있다.
  • 정렬, 탐색 같은 표준 알고리즘과 트리, 연결 리스트 같은 자료구조를 즉석에서 견고하고 합리적으로 빠르게 구현할 수 있다.
  • 복잡도 이론과 재귀, 포인터 같은 프로그래밍 개념에 대해 최소한 기초적인 이해를 갖추고 있다.

하지만 좋은 프로그래머가 되려면

  • 최소 두 가지 근본적으로 다른 프로그래밍 패러다임(예를 들어 선언형, 함수형)으로 코딩할 수 있어야 한다.
  • 대규모 소프트웨어 아키텍처에 대한 경험이 있어야 한다.
  • 운영체제나 자신이 선택한 고성능 텍스트 에디터 같은 프로그래밍 환경에 익숙해야 한다. 가급적 쉽게 확장할 수 있는 에디터가 좋다.

그리고 이건 빙산의 일각에 불과하다. “배워야 할 게 너무 많아요!”라는 말이 들리는 듯하다. 천천히 시작하라. Vim을 시작하는 데 필요한 명령은 i, ESC, :wq 세 가지뿐이다. 첫날에는 그걸로 충분하다.

이런 필수 요소 대부분은 강의에서 가르쳐 주지 않는다는 걸 안다. 상당 부분은 스스로 배워야 한다. 하지만 현실을 직시하자. 이런 것들을 모른다면 당신은 프로그래머가 아니다, 신입생일 뿐이다.

이 글은 muse-spark-1.2-contributor 모델을 사용해 번역했습니다.

댓글