소프트웨어

프로그래밍 10년 완성 - 다들 왜 그리 급한가?

falconer 2007. 4. 5. 13:01
서핑하다 정말 좋은 글을 보았습니다. 이런 글을 보기는 쉽지 않은데... 예전에 KLDP에서
보았던 How to be Programmer 라는 글도 괜찮았는데, 이것도 괜찮네요.
아 참 한글 번역도 누군가 해놓으셨더군요. 링크는 다음과 같습니다.

http://tavon.org/work//21-days#answers

여기서의 핵심은 다음 글인 거 같습니다.
약간의 오타는 있지만서도 뭐 내용만 파악하면 되니 별 문제는 없을 것 같습니다. (근데 일관된 오타를 보니 전산하시는 분이 아니신가 하는 생각도 들고 그러네요.)

  • 먼저 프로그램임에 흥미을 가지고, 재미로 조금만 해보십시오. 10년를 투자할 만큼 충분히 재미를 느끼는 것이란 걸 확인해라.
  • 다른 프로그래머들과 대화를 하십시오; 다른 프로그램들의 소스를 읽으십시요. 이것은 어떤 책또는 훈련 과정보다는 더 중요하다.
  • 프로그램잉을 하십시오. 최선의 학습방법은 하면서 배우는 것이다. 더 전문적으로 표현하자면, "특정 영역안에 개인의 성과 극대 수준은 장시간 경험의 기능으로서 자동 적으로 달성하지 않는다. 그러나 성과의 수준은 개량하는 의도적인 노력의 결과으로서 높은 경험자들도 증가될 수 있다(p. 366)." "효과적인 학습은 개인에게 적당한 수준에 어렵고 분명한 업무, 유익한 피드백과 반복과 과실을 고칠 수 있는 기회를 요구한다." (p. 20-21) 인식의 실제: 매일 생활 속의 마음, 수학 및 문화는 이 관점에 관련된 재밌는 참고서다.
  • 원한다면, 대학에 4년을 (또는 대학원에 더) 투자하십시오. 학위는 자격증을 요구하는 직업에 취직 자격을 줄 것이다, 그리고 분야에 더 깊은 이해를 주지만, 학교에 관심이 없다면 (노력을 한다면) 직업을 통해서 비슷한 경험을 얻을 수 있다. 어찌됐든, 혼자서 책으로만 배우는 건 부족하다. "솔과 안료을 공부함으로 전문화가가 될 수 없듯이 아무나 컴퓨터 과학 교육으로만 전문프로그램어를 만들지 못한다."라고 Eric Raymond가 The New Hacker's Dictionary에 적었다. 내가 이제까지 고용한 최고의 프로그래머중 한 사람은 고졸이였다. 그는 좋은 소프트웨어를 많이 만들었고, 그의 고유 뉴스 그룹도 가지고 있으며, stock option으로 나보다 더 부자임은 틀림없다.
  • 다른 프로그래머들과 같이 프로젝트들을 하십시오. 때론 프로젝트의 가장 실력있는 프로그래머가 되고; 때론 프로젝트의 가장 실력없는 프로그래머가 되라. 가장 실력있는 프로그래머일땐 다른 사람들에게 비젼을 주고 그리고 사람들을 이끄는 능력을 시험하게 된다. 가장 실력없는 프로그래머일때는 고수들이 하는 것들과 그들이 싫어하는 것들을 배울 수 있다 (왜냐면, 싫어하는 것들은 당신에게 시킨다).
  • 다른 프로그래머들을 시작한 프로젝트에 뒤늦게 동참하십시오. 다른사람이 짠 프로그램을 이해하도록 몰두하십시오. 원래 프로그래머가 없었을때 그 것을 이해하고 고치기 위해서 무엇이 요구되는지 보십시오. 당신의 프로그램을 다른 사람이 유지해야 할때 보다 더 쉽게 관리 할 수 있도록 어떻게 당신의 프로그램들을 디자인해야 할까를 고민하십시오.
  • 최소 다섯가지 프로그램잉 언어를 배우십시오. class abstractions (자바 또는 C++) 지원하는 언어, coroutines을 (Icon 또는 Scheme) 지원하는 언어, functional abstraction (Lisp 또는 ML) 지원하는 언어, syntactic abstraction (Lisp) 지원하는 언어, declarative specifications를 (Prolog또는 C++ 템플렛) 지원하는 언어, 그리고 parallelism을 (Sisal) 지원하는 언어를 한개씩 배우십시오.
  • "컴퓨터 과학"안에 " 컴퓨터"가 있는 것을 기억하십시요. 당신의 컴퓨터가 한 명령을 실행할때, 메모리에서 word를 가지고 올때, 디스크에서 연속 word를 가지고 올때, 디스크안에 새로운 위치를 찾을 때 걸리는 시간과 속도를 아십시오.
  • 언어 표준화 노력에 참여하십시오. ANSI C++ 위원회 일 수도 있거나, 당신의 현 코딩 스타일을 2칸 아니면 4칸 들여쓰기 할 것인가를 결정할 수도 있다. 다른사람들이 한 언어의 어떤 것을 좋아는지, 그들에게 그 것들이 얼마나 중요한 것인지, 어쩌면 왜 그것을 좋아하는지까지도 알게 될 것이다.
  • 가능한한 빠르게 언어 규격화 노력에서 해방되는 좋은 느낌을 채험해 보십시오.
  • 여기서 말하고 있는 건 실천해본 것도 있고 아닌 것도 있네요. 뭐 어쨌든 최고의 프로그래머로 가기 위한 다들 어느 정도 알고 있으면서 다 실천하지는 못할 ...다 그런 항목인 거 같습니다.

    그나마 눈에 한 방에 들어오는 건 언어를 뭐 배워라 라는 거네요.
    Programatic Programmer 에서도 언급하지만 언어를 뭐를 배워라는 것은 참 흥미를 자극하는 것 같습니다.
    글고 보니 Ruby를 배우면 1, 2, 3번은 어느 정도 조금 맛은 볼 수 있을 것 같습니다. ^^ Scheme 은 LISP 변형인 줄만 알았더니 코루틴까지 지원한 줄은 처음 알았습니다.

    LISP은 꼭 한번 배워야 하는데...벼르고만 있네요. Haskell 도 어느 정도 맛만 보았는데 괜찮더군요.
    Prolog는 논리형 언어였던 가 그랬던 것으로 기억하는데 분류를 이런 식으로 하면 C++ 템플릿과 같이 묶여질 수도 있군요. IBM 쪽에서는 본격적으로 상용 제품에 활용하던데, 이것도 기회되면 한번 해봐야 겠습니다.

    그나저나 마지막 Sisal 은 처음 들어보네요.
    조사해보니 소스포지에 나오는데, 흠 Erlang쪽을 배우는게 더 좋지 않을까 싶네요.

    출처 : snaiper