프로그래밍 전문성에는 지름길이 없으며, 의도적인 연습과 장기적인 경험이 필요하다는 글입니다.
어느 서점에 들어가도 24시간 안에 Java 독학하기 같은 책과, 며칠 또는 몇 시간 안에 C, SQL, Ruby, 알고리즘 등을 가르쳐 준다는 끝없는 변형본을 보게 될 것이다. Amazon 고급 검색에서 [제목: 독학, 시간, 이후: 2000를 검색해 보니 이런 책이 512권 나왔다. 상위 10권 중 9권은 프로그래밍 책이다(나머지 한 권은 부기에 관한 책이다). "독학"을 "학습"으로, "시간"을 "일"로 바꾸어도 비슷한 결과가 나온다. 결론은 사람들이 프로그래밍을 배우는 데 몹시 서두르고 있거나, 프로그래밍이 다른 어떤 것보다도 믿을 수 없을 만큼 배우기 쉽다는 것이다. Felleisen _등_은 자신의 책 _프로그램 설계 방법_에서 이렇게 말하며 이 추세를 언급한다. "나쁜 프로그래밍은 쉽다. _바보들_도 _21일_이면 배울 수 있다. _초보자들_이라 해도 말이다." Abtruse Goose 만화도 이 주제에 대한 견해를 내놓았다.
24시간 안에 C++ 독학하기 같은 제목이 무엇을 뜻할 수 있는지 분석해 보자.
연구자들(Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973))은 체스, 음악 작곡, 전신기 조작, 회화, 피아노 연주, 수영, 테니스, 신경심리학과 위상수학 연구를 포함한 매우 다양한 분야에서 전문성을 기르는 데 약 10년이 걸린다는 것을 보여 주었다. 핵심은 의도적인 연습이다. 단순히 반복하는 것이 아니라, 현재 능력보다 약간 어려운 과제로 자신에게 도전하고, 시도하며, 수행하는 동안과 수행한 뒤에 자신의 성과를 분석하고, 모든 실수를 바로잡는 것이다. 그러고 나서 반복한다. 또 반복한다.
진정한 지름길은 없는 듯하다. 4세에 음악 신동이었던 Mozart조차 세계적 수준의 음악을 만들기 시작하기까지 13년을 더 들였다. 다른 분야에서 Beatles는 1964년에 연속된 1위 히트곡과 Ed Sullivan 쇼 출연으로 갑자기 등장한 것처럼 보였다. 그러나 이들은 1957년부터 Liverpool과 Hamburg의 작은 클럽에서 연주해 왔고, 초기에 대중적 호응을 얻기는 했지만 비평적으로 처음 거둔 큰 성공인 _Sgt. Peppers_는 1967년에 발매되었다. Malcolm Gladwell은 이 생각을 널리 알렸지만, 그는 10년이 아니라 10,000시간에 집중한다. Henri Cartier-Bresson (1908-2004)에게는 또 다른 기준이 있었다. "처음 10,000장의 사진은 최악의 사진이다." (그는 디지털카메라로 어떤 사람들은 일주일 안에 그 수에 도달할 수 있다는 점을 예상하지 못했다.)
진정한 전문성에는 평생이 걸릴 수 있다. Samuel Johnson (1709-1784)은 "어느 분야에서든 탁월함은 오직 평생의 노력으로만 얻을 수 있으며, 더 싼 대가로 살 수 있는 것이 아니다"라고 말했다. Chaucer (1340-1400)는 "삶은 너무 짧고, 배울 기술은 너무 길다"고 탄식했다. Hippocrates (기원전 약 400년)는 "ars longa, vita brevis"라는 구절로 알려져 있는데, 이는 더 긴 인용문 "Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile"의 일부다. 이를 한국어로 옮기면 "인생은 짧고, 기술은 길며, 기회는 덧없고, 실험은 위험하며, 판단은 어렵다"가 된다.
물론 어떤 단일 숫자도 최종 답이 될 수는 없다. 모든 기술(예를 들어 프로그래밍, 체스, 체커, 음악 연주)이 정확히 똑같은 시간을 들여야 숙달된다고 가정하는 것은 타당하지 않으며, 모든 사람이 정확히 같은 시간이 걸린다고 가정하는 것도 마찬가지다. K. Anders Ericsson 교수는 이렇게 말한다. "대부분의 분야에서 가장 재능 있는 사람들조차 최고 수준의 수행 능력에 도달하려면 얼마나 많은 시간이 필요한지 놀라울 정도입니다. 10,000시간이라는 숫자는 우리가 주당 10~20시간씩 여러 해를 이야기하고 있다는 감각을 줄 뿐이며, 어떤 이들이 타고난 재능이 가장 뛰어나다고 주장할 사람들조차 최고 수준에 이르려면 그 시간이 필요합니다."
프로그래밍 성공을 위한 나의 방법은 다음과 같다.
이 모든 점을 고려하면, 책으로만 배워서 얼마나 멀리 갈 수 있는지는 의문스럽다. 첫 아이가 태어나기 전, 나는 모든 방법 책을 읽었지만 여전히 아무것도 모르는 초보자처럼 느꼈다. 30개월 뒤 둘째 아이가 태어날 예정이었을 때, 복습을 위해 다시 책으로 돌아갔을까? 아니다. 대신 나는 개인 경험에 의지했고, 그것은 전문가들이 쓴 수천 쪽의 글보다 훨씬 더 유용하고 안심이 되었다.
Fred Brooks는 자신의 에세이 _은탄환은 없다_에서 훌륭한 소프트웨어 설계자를 찾기 위한 세 부분의 계획을 제시했다.
이는 어떤 사람들은 이미 훌륭한 설계자가 되는 데 필요한 자질을 갖추고 있으며, 해야 할 일은 그들을 올바르게 북돋우는 것이라는 가정에 기반한다. Alan Perlis는 이를 더 간결하게 표현했다. "모든 사람은 조각하는 법을 배울 수 있다. Michelangelo라면 조각하지 않는 법을 배워야 했을 것이다. 위대한 프로그래머도 마찬가지다." Perlis는 위대한 사람들에게는 훈련을 초월하는 어떤 내적 자질이 있다고 말한다. 그러나 그 자질은 어디에서 오는가? 타고난 것인가? 아니면 부지런함을 통해 발전시키는 것인가? _Ratatouille_의 가상 요리사 Auguste Gusteau가 말했듯이, "누구나 요리할 수 있지만, 위대해질 수 있는 것은 두려움 없는 사람뿐이다." 나는 이를 의도적인 연습에 인생의 큰 부분을 바치려는 의지에 더 가깝다고 생각한다. 하지만 _두려움 없음_은 그것을 요약하는 방법일지도 모른다. 또는 Gusteau의 비평가 Anton Ego가 말했듯이, "모든 사람이 위대한 예술가가 될 수는 없지만, 위대한 예술가는 어디에서나 나올 수 있다."
그러니 그 Java/Ruby/Javascript/PHP 책을 사라. 아마 어느 정도는 쓸모가 있을 것이다. 하지만 24시간이나 21일 안에 인생이나 프로그래머로서의 진정한 전반적 전문성을 바꾸지는 못할 것이다. 24개월 동안 꾸준히 향상되도록 열심히 노력해 보는 것은 어떤가? 이제야 뭔가를 향해 가기 시작하는 셈이다...
Bloom, Benjamin (편) 젊은이의 재능 개발, Ballantine, 1985.
Brooks, Fred, 은탄환은 없다, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.
Bryan, W.L. & Harter, N. "전신 언어에 관한 연구: 습관 위계의 습득. 심리학 리뷰, 1899, 8, 345-375
Hayes, John R., 완전한 문제 해결사 Lawrence Erlbaum, 1989.
Chase, William G. & Simon, Herbert A."체스에서의 지각"인지 심리학, 1973, 4, 55-81.
Lave, Jean, 실천 속의 인지: 일상생활의 마음, 수학, 문화, Cambridge University Press, 1988.
일반적인 PC에서 여러 작업에 걸리는 대략적인 시간:
일반 명령어 실행 1/1,000,000,000초 = 1나노초
L1 캐시 메모리에서 가져오기 0.5나노초
분기 예측 실패 5나노초
L2 캐시 메모리에서 가져오기 7나노초
Mutex 잠금/해제 25나노초
주 메모리에서 가져오기 100나노초
1Gbps 네트워크로 2K 바이트 전송 20,000나노초
메모리에서 1MB를 순차적으로 읽기 250,000나노초
새 디스크 위치에서 가져오기(탐색)8,000,000나노초
디스크에서 1MB를 순차적으로 읽기 20,000,000나노초
미국에서 유럽까지 패킷을 보내고 되돌아오기 150밀리초 = 150,000,000나노초
여러 사람이 처음에 어떤 프로그래밍 언어를 배워야 하는지 물어 왔다. 하나의 답은 없지만, 다음 사항을 고려하라.
이 기준을 고려하면, 첫 프로그래밍 언어로 내가 추천하는 것은 Python 또는 **Scheme**이다. 또 다른 선택지는 Javascript다. 초보자를 위해 완벽하게 설계되어서가 아니라 Khan Academy의 튜토리얼처럼 온라인 튜토리얼이 아주 많기 때문이다. 그러나 당신의 상황은 다를 수 있고, 다른 좋은 선택지도 있다. 나이가 한 자릿수라면 Alice, Squeak, Blockly를 더 좋아할 수도 있다(나이가 더 많은 학습자도 이를 즐길 수 있다). 중요한 것은 선택하고 시작하는 것이다.
여러 사람이 어떤 책과 웹페이지로 공부해야 하는지 물어 왔다. "책으로만 배우는 것은 충분하지 않다"는 말을 다시 강조하지만, 다음 자료는 추천할 수 있다.
<
T. Capey는 Amazon의 완전한 문제 해결사 페이지에 이제 "21일 안에 Bengali 독학하기"와 "문법과 문체 독학하기"가 "이 상품을 구매한 고객이 함께 구매한 상품" 섹션에 나온다고 지적한다. 그 책을 보는 사람 중 상당수가 이 페이지에서 왔다는 뜻인 듯하다. Hippocrates에 관한 도움을 준 Ross Cohen에게 감사한다.
다음 저자들 덕분에 이 페이지는 다음 언어로 번역되어 있다: