연구자 (Hayes, Bloom)에 의하면, 체스, 작곡, 회묘, 피아노 연주, 수영, 테니스, 그리고 신경 심리학이나 위상 기하학의 연구를 포함한, 광범위한 분야의 머지않아에 대해서도, 전문 기술을 몸에 익히려면 대략 10년 걸린다고 한다.지름길 등 실재하지 않는 것 같다.4세로 해 음악의 신동이었던 모차르트조차, 세계적인 악곡을 만들어 내기까지 13년 이상의 시간을 필요로 했던 것이다.사뮤엘·존슨(역주2)는, 「어떤 분야에 있어도, 생애에 걸치는 노력 없애 뛰어난 것에는 달할 수 없다.그것보다 싼 대상으로 손에 넣을 수 없는 것이다」라고, 거기에는 10년 이상 걸린다고 생각했다.
여기서 프로그래밍으로 성공하기 위한, 나나름의 레시피를 소개하면(자):
프로그래밍에 흥미를 가져, 그것을 즐거움을 위해서(때문에) 할 것.그것이 충분히 즐거운 계속 것이면 , 10년이라도 기꺼이 계속할테니까.
다른 프로그래머와 이야기를 해, 타인의 프로그램을 읽는 것.이것은 어떠한 서적이나 트레이닝·코스보다 중요한 일이다.
프로그램을 쓰는 것.학습하는 최고의 방법은,실천에 의한 학습이다.보다 기술적으로 표현한다면, 「특정 영역에 있어 개인이 최대한의 퍼포먼스를 발휘하는 것은, 장기에 걸치는 경험이 있으면 자동적으로 실현된다고 하는 것이 아니고, 매우 경험을 쌓은 사람이어도, 향상하자고 하는 진지한 노력이 있기 때문에, 퍼포먼스는 늘어날 수 있다」(p. 366) 것이며, 「가장 효과적인 학습에 필요한 것은, 그 특정의 개인에게 있어 적당히 어렵고, 유익한 피드백이 있어, 게다가 반복하거나 잘못을 정정하거나 할 기회가 있는, 명확한 작업이다」(p. 20-21)의다(역주3).Cambridge University Press 로부터 나와 있는 J. Lave 의「Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life」(역주4)라고 하는 책은, 이 관점에 대한 흥미로운 참고 문헌이다.
만약 그러한 있고 것이라면, 4년간 대학에서(혹은 대학원에 가, 더욱) 배우는 것.그러면 성적 증명서를 필요로 하는 일자리에 접근하고, 그 분야에 도착해보다 깊은 이해를 얻게 된다.하지만, 학교를 즐길 수 없다고 한다면, (열의가 있으면) 일을 하는 과정에서 같은 체험을 얻을 수 있다.어느 경우이든, 책에 의한 학습만으로는 충분하지 않다.「컴퓨터·사이언스의 교육으로 누군가를 프로의 프로그래머로 하려고 하는 것은, 브러쉬나 그림도구에 대해 배우게 해 프로의 화가로 하는 것 같은 정도 어렵다」라고 The New Hacker's Dictionary(역주5) 의 저자인 Eric Raymond 는 말한다.내가 지금까지 고용한 중에서 최고의 프로그래머의 한 명(역주6)은, 고등학교까지 밖에 나오지 않았다.그렇지만, 그는 많은훌륭한소프트웨어를 만들어, 지금은 자신의뉴스·그룹까지 가지고 있어, 스톡옵션 덕분에, 틀림없이 내가 일생 걸려 벌 수 있는 것보다 좀 더 부자다.
프로젝트로, 다른 프로그래머와 함께 일하는 것.몇개의 프로젝트로, 제일의 프로그래머가 되는지, 그렇지 않으면 맨뒤의 프로그래머가 되는 것.당신이 제일이라면, 프로젝트를 지휘해, 다른 사람들에게 당신의 비전을 닦아 넣는 능력을 시험하게 된다.당신이 맨뒤라면, 달인이 할 것을 배워, 그들은 어떤 말하는 것을 하고 싶지 않은 것인지 알게 된다(그러한 일은 당신에게 시키려고 하기 때문에).
다른 프로그래머가 일을 끝낸후의프로젝트에 임하는 것.사람이 쓴 프로그램의 이해에 열중하는 것.원래의 코드를 쓴 프로그래머가 근처에 없는 경우, 그 프로그램을 이해하거나 고치거나 하려면 무엇이 필요한가 생각하는 것.당신의 프로그램을, 다음에 다른 사람이 메인트넌스 하기 쉽게 하려면 어떻게 디자인하면 좋은가 생각하는 것.
적어도 반다스의 프로그램 언어를 배우는 것.그 중의 하나는 클래스 추상을 서포트하는 것(예를 들면 Java 나 C++), 하나는 함수 추상을 서포트하는 것(예를 들면 Lisp 나 ML), 하나는 구문 추상을 서포트하는 것(예를 들면 Lisp), 하나는 선언적 기술을 서포트하는 것(예를 들면 Prolog 나 C++ 템플릿), 하나는 coroutine 를 서포트하는 것(Icon 나 Scheme), 그리고 하나는 병렬처리를 서포트하는 것(예를 들면 Sisal)인 것.
「컴퓨터·사이언스」안에, 「컴퓨터」가 있는 것을 잊어서는 안된다.컴퓨터가 하나의 명령을 실행하거나 메모리로부터 1 워드 읽어내거나(캐쉬에 들어가 있는 경우와 그렇지 않은 경우와), 디스크로부터 연속해 데이터를 읽어내거나 디스크상에 새로운 영역을 찾거나 하는데 어느 정도 시간이 걸릴까 알아 두는 것.(대답은 이쪽)
언어 표준화의 시도에 참가하는 것.ANSI C++ 위원회라면 그것이 생길 것이고, 가족에서의 코딩·스타일에 대해, 인덴트의 공백을 2 문자로 할까 4 문자로 하는가 한 레벨에서도, 결정하게 될 수 있다.어쨌건 간에, 다른 사람이 프로그램 언어의 어떤 곳을 좋아하는가, 얼마나 깊고 좋아하는가, 그리고 아마, 왜 그렇게 좋아하는가는 일도 조금, 배우게 된다.
가능한 한 빨리, 언어 표준화로부터 멀어지는 분별을 가지는 것.
이상 모든 것을 고려하면(자), 책으로 배우는 것 만으로는, 어디까지 습득할 수 있을까 의심스러운 것으로 있다.최초의 아이가 태어나기 전은, 나는 방법책을 전부 읽어 조차도, 자신을 아무것도 알지 않은 신참자에게 생각된 것이다.30개월 후, 두번째의 아이가 태어나게 되었을 때, 나는 책으로 복습했는지라는? 그렇지 않았다.그렇지 않고, 나는 자신의 개인적인 경험을 믿어 전문가에 의해 쓰여진 몇천 페이지보다, 쭉 쓸모있어 해, 자신을 가지고 있었다.
Fred Brooks 는, 에세이「No Silver Bullets」 (IEEE Computer, 20. p. 10-19) (역주7)에서 뛰어난 소프트웨어·디자이너를 기르는 3단계를 분명히 하고 있다.
가능한 한 조기에 탑 디자이너를 체계적으로 인정한다.
유망한 인재의 육성을 책임을 가지고 실시하는 캐리어 어드바이저를 임명해, 면밀한 캐리어 파일을 보관 유지한다.
육성중의 디자이너가 서로 교류·서로 자극할 기회를 준다.
이상은, 이미 뛰어난 디자이너가 되는데 필요한 자질을 가지고 있는 사람이 존재한다고 하는 것을 전제로 하고 있다.거기서 해야 한다 (일)것은, 그들을 확실히 유도 해 주는 것이다.Alan Perlis 는 그것을 보다 간결하게 표현하고 있는:「누구라도 가르쳐 주면, 조각을 할 수 있도록(듯이)는 된다.미켈란젤로는, 방물어라고도 조각을 하고 있었을 것이다.뛰어난 프로그래머도 마찬가지다」
자 어서, 그 Java 의 책을 사세요.그것은, 무엇인가의 도움이 될지도 모른다.그렇지만, 그래서 당신의 인생은 변함없고, 프로그래머로서의 진짜 기능 총체도 그렇다.24시간이나 몇일이나 수개월 그럼.