당신은 프로그래머인가요?
제 지리 선생님은 대학에서 첫 강의를 들으셨을 때의 이야기를 해 주신 적이 있어요. 수업을 시작하며 교수님이 학생들에게 아무 도움 없이 최대한 정확하게 독일 지도를 그려 보라고 하셨죠. 그런데 놀랍게도 선생님은 지도에 세부 내용을 많이 채우지 못하셨어요. 심지어 나라의 모양도 좀 흐릿했어요.
선생님은 고국인 독일의 이미지를 수천 번 봤지만, 흐릿한 기억으로는 그 지도를 재현할 수 없으셨어요. 결국 찾아봐야만 했죠.
익숙한 이야기 아닌가요? 우리는 지식의 많은 부분을 기계에 의존하고 있어요. 무언가를 외우려면 힘든 노력이 필요하죠.
여기 프로그래머를 위한 비슷한 테스트가 있어요:
선택한 프로그래밍 언어를 사용하여, 외부 도구의 도움 없이 종이 한 장에 평균 실행 시간 복잡도가 O(n*log n)인 올바른 정렬 알고리즘(Heapsort, Quicksort, Bucketsort, 뭐든지)을 작성하세요.
그리고 올바른의 의미는, 입력했을 때 수정 없이 버그가 없어야 한다는 뜻이에요.
전문 소프트웨어 엔지니어 중 상당한 비율이 이 테스트를 통과하지 못한다는 사실에 놀랄 거예요.
어떤 이들은 프로그래밍 언어 문법의 세부 사항에 대한 지식은 중요하지 않다고 주장할지도 몰라요: "검색 엔진을 사용할 줄 알면 왜 사소한 것들을 다 외워야 하나? 튜토리얼에서 예제를 복사하고 붙여 넣고 수정하면 되지, 왜 빈 상태에서 시작해야 하나? 어차피 몇 년/몇 달마다 다른 언어의 문법을 완전히 다시 배워야 하잖아."
하지만 그건 신화예요. 하나의 프로그래밍 언어를 정말 잘 안다면, 설령 Fortran이나 COBOL처럼 시대에 뒤처진 언어라 해도, 그 지식만으로도 큰돈을 벌 수 있어요. 1975년에 C 언어를 시작했다고 가정해 보세요. 거의 40년이 지난 오늘날에도 같은 문법을 사용할 수 있어요. 텍스트 편집기도 마찬가지고요. Emacs와 Vim은 둘 다 수십 년이 넘었어요. 그들은 수많은 전투를 겪으며 단련된 도구예요. 어느 쪽을 선호하든 상관없지만, 여러분은 인생의 많은 시간을 도구와 함께 보낼 테니, 그것을 마스터하는 데 시간을 투자하세요.
참고로, 어떤 일이든 완벽을 추구하는 사람은 극히 드물어 보여요. 대부분 "충분히 좋은 정도"에 만족하며 살아가죠. 여기에는 다양한 이유가 있을 수 있어요. 저는 누군가 숙제를 하지 않은 것을 탓하는 게 아니에요. 다만 그런 관찰이 저 혼자만의 것은 아닐지도 몰라요.
매뉴얼 없이 도구를 사용할 줄 모른다면, 당신은 형편없는 장인이에요. 간단한 편지 한 통을 쓰는 데 사전이 필요하다면, 작가가 되기는 힘들 거예요. 우아하고 유창한 문장을 만드는 것조차 벌써 어려울 테니까요. 흥미롭고 독창적인 이야기는 말할 것도 없고요. 저는 그런 책들을 읽고 싶지 않아요.
무엇이 프로그래머를 만들까요?
- 자신이 속속들이 아는 프로그래밍 언어가 적어도 하나 있어야 해요.
- 표준 알고리즘(예: 정렬, 탐색)과 자료 구조(예: 트리, 연결 리스트)를 견고하고 충분히 빠르게 즉석에서 구현할 수 있어야 해요.
- 복잡도 이론과 재귀, 포인터 같은 프로그래밍 개념에 대해 최소한 기본적인 이해를 갖고 있어야 해요.
하지만 좋은 프로그래머가 되려면, 다음도 필요해요:
- 근본적으로 다른 두 가지 이상의 프로그래밍 패러다임(예: 선언형, 함수형)으로 코드를 작성할 수 있어야 해요.
- 대규모 소프트웨어 아키텍처 경험이 있어야 해요.
- 운영 체제 같은 프로그래밍 환경과 선택한 정교한 텍스트 편집기에 익숙해야 해요. 이상적으로는 확장하기 쉬운 것이 좋아요.
그리고 그것은 빙산의 일각에 불과해요. "배울 게 너무 많아!"라고 말하는 분들이 있을 거예요. 천천히 시작하세요. Vim을 시작하는 데 필요한 명령어는 세 개뿐이에요: i, ESC, :wq. 첫날에는 그것으로 충분해요.
이런 필수 요소들은 대부분 강의에서 가르치지 않는다는 걸 알고 있어요. 여러분 스스로 많은 부분을 배워야 해요. 하지만 인정하자면, 이런 것조차 모른다면 당신은 프로그래머가 아니라 신입생이에요.
글을 무작위로 읽기