E D R , A S I H C RSS

Teach Yourself Programming In Ten Years

원문 : http://www.norvig.com/21-days.html (Peter Norvig 는 AI 분야에서 아주 유명한 사람. LISP 프로그래머로도 유명)

일본어 - http://www1.neweb.ne.jp/wa/yamdas/column/technique/21-daysj.html
밑의꺼는 번역기 버전. -_- 문맥에 따른 수정 요함.

1. Teach Yourself Programming in Ten Years

Peter Norvig (E-mail: peter@norvig.com)
초출 공개: 2001년 07월 02일, 최종 갱신일: 2002년 03월 29일

1.1. 어째서 모두 그렇게 서두르는 거야?

어느 책방에 발길을 옮겨도,「7일간으로 배우는 Java(Teach Yourself Java in 7 Days)」라고 하는 방법책을 보기 시작하고, 그 곁에는 Visual Basic 나 Windows 나 인터넷등에 대해서, 똑같이 몇일이나 수시간에 배울 수 있으면(자) 파는 책이, 무한의 바리에이션으로 나란해지고 있다.Amazon.com 그리고 이하의 조건으로검색해 보았는데,
{{|
pubdate: after 1992 and title: days and
(title: learn or title: teach yourself)
(타이틀에 「날」이라고, 「배운다」인가 「독습」이라고 하는 단어를 포함한,
1992년 이후에 출판된 책)
|}}

248건의 히트가 있었다.그 중 위로부터 78권은 컴퓨터 관련의 서적이었다(79번째는「30일에 배우는 벵골어」).「날」을「시간」에 옮겨놓아 보았는데, 매우 잘 닮은 결과를 얻을 수 있었다.253권이 히트 해, 위로부터 77권이 컴퓨터 관련의 서적으로, 78번째는「24시간에 배우는 문법과 문체」였다.상위 200권 가운데,96%가 컴퓨터 관련 서적이었다.

결론으로서는, 누구나가 컴퓨터에 대해 배우는데 분주한가, 아니면 컴퓨터라는 것이, 다른 어떤 것보다, 배우는 것이 어찌 된 영문인지 믿을 수 없을 정도 쉽다고 하는 것이 된다.왜냐하면 몇일이나 수시간에 배우는 베토벤이든지, 료코 물리든지, 개의 조교라고 하는 책은 전무인걸.

「3일에 배우는 Pascal」라고 하는 타이틀이 의미하는 곳(중)을 분석해 보면:

배운다:3일간에서는, 의미가 있는 프로그램을 얼마든지 쓰거나 그 과정에서의 성공이나 실패로부터 배우는 시간 등 짝이 없다.경험을 쌓은 프로그래머와 함께 작업을 실시해, 그러한 환경안에서의 생활이 어떤 것인가를 이해하는 얼마 되지 않다.빠른 이야기, 대단한 일을 배울 시간이 없다고 하는 것이다.따라서 그러한 서적은, 외관만 정통하는 것에 대하여 말할 뿐으로, 깊은 이해에는 연결되지 않는다.알렉산더제가 말한 것처럼, 서투른 병법은 상처의 원이다.
Pascal:3일간으로, Pascal 의 문법을 배우는 것은 가능할지도 모르는(유사한 언어를 이미 알고 있으면)가, 그 문법의 이용법까지는 충분히는 배울 수 없다.즉, 예를 들면 당신이 Basic 프로그래머이다고 하여, Basic 스타일로 Pascal 의 문법을 이용한 프로그램의 쓰는 법을 배울 수 있을지도 모르지만, Pascal 가 실제의 곳, 무엇에 향하고 있을까(향하지 않은가)를 배울 수 없다.그런데 여기서의 포인트는 무엇일까? Alan Perlis(역주1) 은 일찌기, 「프로그래밍에 대한 생각에 영향을 주지 않는 것 같은 언어는, 아는 가치는 없다」라고 말했다.여기서 생각되는 포인트는, 당신이 Pascal(그것보다 어느 쪽일까하고 말하면 Visual Basic 나 JavaScript 등의 (분)편이 현실에는 많을 것이다)를 그저 조금 배우지 않으면 안 된다고 하면(자), 그것은 특정의 업무를 실시하기 위해서(때문에), 기존의 툴을 사용할 필요가 있기 때문일 것이다.그러나, 그러면 프로그래밍을 배우는 것으로는 되지 않는다.그 업무의 방식을 배우고 있을 뿐이다.
3일간:유감스럽지만, 이것으로는 충분하지 않다.다음 방향으로 해설한다.

1.2. 프로그래밍을 독습하려면 10년 걸린다


연구자 (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시간이나 몇일이나 수개월 그럼.

1.3. 참고 문헌

Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.
Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.
Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989.
Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.

1.4. 대답

표준적인 1GHz 의 PC로 2001년의 여름에 측정한, 여러가지 연산의 소용 시간

execute single instruction 1 nsec = (1/1, 000,000,000) sec
L1 캐쉬·메모리로부터 1 워드를 읽어내는 2 nsec
메인 메모리로부터 1 워드를 읽어내는 10 nsec
연속한 디스크·로케이션으로부터 1 워드를 읽어내는 200 nsec
디스크로부터 새롭게 장소를 찾아 1 워드를 읽어낸다 8,000,000nsec = 8msec

1.5. 역주

  • 역주 1 - ACM 의 초대 의장을 맡아 튜링상의 제1회의 수상자이기도 한 저명한 컴퓨터 과학자(1922-1990).그가 남긴 에피그램은, 현재도 여러가지 곳에서 참조된다.Google 등으로 그의 이름을 검색하는 것만으로, 본문의 저자가 링크한 페이지 이외에도 동취지의 페이지가 다수 히트 한다.
  • 역주 2 - 영국의 문학자(1709-1784).사전 편찬자로서 영어학의 발전에 기여한 것으로 유명해, 그도 또 남긴 에피그램으로 알려진다.
  • 역주 3 - 이 두 개의 인용에 대해서는, 링크처를 더듬어도, 정확하게 어느 문헌때문인지의 인용이나 특정할 수 없었다.입수할 수 있는 국역을 아시는 바라면, 부디 연락 주세요.
  • 역주 4 - 신요사로부터 「일상생활의 인지 행동 사람은 일상생활에 어떻게 계산해, 실천할까」(무등 타카시·야마시타 키요미·나카노 시게루·나카무라 미요코역)로서 국역이 나와 있다.
  • 역주 5 - ASCII BOOKS 로부터 「학카즈 대사전」(후쿠사키 타카히로역)로서 국역이 나와 있다.덧붙여 본문에 인용되고 있는 ESR 의 문장이 어느 문장으로부터의 인용인가는 몰랐다.본문에서는 ESR 는 The New Hacker's Dictionary 의 저자로서 이름을 들 수 있지만, 현재의 Jargon File 에는 해당 문장은 없었다.
  • 역주 6 - 말할 필요도 없이,Jamie Zawinski 이다.
  • 역주 7 - MythicalManMonthNoSilverBullet.


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:10
Processing time 0.0445 sec