2014년 1월 1일 수요일

Teach Yourself Programming in Ten Years, Peter Norvig

이전 블로그에서 이전 함 (원본 글 2014/01/01 작성)

Teach Yourself Programming in Ten Years, Peter Norvig

이전 오픈소스 책에서 Interviewee가 묻는 질문 중 하나여서 찾아봄.

처음에 한 책(3일안에 C++ 배우기)을 언급하며 
여러 분야에서 전문가가 되기 위해서는 오랜 시간 (보통 10년)이 걸리는데 
우리는 프로그래밍 기술을 배우는데 왜 이리 급하냐라고 묻고 있음.

그리고 프로그래머로 성공?(그냥 좋은 프로그래머가 되는 것이라고 보고 싶다.)하기 위한 방법을 소개하고 있음. 내용과 개인적인 생각을 함께 정리하자면 다음과 같다.

- 10년 혹은 10000 시간 동안 프로그래밍에 관심을 가지고 뭘 해봐라.
 : 대학생때에 이렇게 해보지 못한걸 좀 후회한다.. 휴학을 하고 좀 배우긴 했지만 학부때 놀아버린 것을 만회하진 못했다. 그리고 CS 전공 과목을 모두 숙지하지 못한것도..

- 프로그램을 만들어보는 것이 최고의 배움 방법이다.

- 프로그래머들과 교류하거나 다른 코드를 공부하라.
 : 좀 이르긴 하겠지만 대학생 때 Open Source community에 참가하는 것도 좋겠다는 생각이 들고 아니면 소프트웨어 멤버쉽 같은 것도 좋고.. 다만 방산이나 취직은 좀 일단 학부 때 취직하면 전공은 소흘해 지니까. 

- Computer Science 학위는 좀더 다양한 일을 선택할 수 있게 해주고 좀 더 깊은 지식을 얻게 해주겠지만 직업을 가지고 일을 하면서도 같은 경험을 얻을 수 있다. 
 : The New Hacker's Dictionary 책을 언급하며 말함.

- 다른 프로그래머와 함께 일을 하며 최고의 프로그래머가 되어 프로젝트를 이끌어 보고 최악의 프로그래머가 되어 리더가 어떻게 하는 지를 배우라.

- 다른 프로그래머를 이어서 일을 해보라. 다른 사람의 코드를 도움 없이 이해하고 유지보수를 경험하며 어떻게 하면 유지보수성이 높은 프로그램을 설계할지를 고민해 보라.

- 적어도 여섯개 정도의 프로그래밍 언어를 배우라, 예시... class abstraction 지원 언어(Java, C++ 같은)나 functional abstraction 지원 언어(Lisp, ML 같은), syntactic abstraction 지원 언어(Lisp 같은), declarative specifications 지원 언어(Prolog, C++ templates 같은), co-routines 지원 언어(Icon, Scheme 같은), parallelism 지원 언어(Sisal 같은) 많기도 하다..

- Computer Science에서 Computer가 내부적으로 어떻게 동작하는 지를 생각해 보라. 
 : 내 생각으로는 이건 프로그래밍 뿐만 아니라 내면?의 부분에도 관심을 가지고 이해하라는 얘기 인듯. 사실 application 개발자로 살면서 middleware나 operating system 이면을 들여다 보지 못하면 performance를 이해할 수 없게 되는 것과 같이 그런 부분을 지적한 것이 아닌 가라는 생각.

- 프로그래밍 언어 표준화에 참가해보라. ISO C++ 표준을 만드는 것이나 내부적인 coding style을 정하는 것도 상관없다. 다만 다른 사람들이 생각하는 언어와 왜 그렇게 생각하는지에 대해서 경험하라.

- 프로그래밍 언어의 표준화(표준화 보다는 규칙이나 룰이 아닐까?)를 벗어나는 경험을 해보라. 


그리고 마지막으로 Fred Brooks의 에세이인 "No Silver Bullet"에서 언급된 Great software designer를 찾는 세가지 방법을 소개하며 누구나 great software designer가 되는 자질은 가지고 있으나 다만 조급함을 버리고 지속적으로 연습하는 노력이 필요한 것이다라고 다시 한번 말하고 있다.. 

자신이 good software designer가 아닌 great software designer가 되고자 한다면 아래의 방법을 뒤집어 생각하고 지속적인 노력이 필요할 것으로 보인다. (본인은 grate software designer가 모두를 먹여 살린다에 동의하지는 않는다.)

1. 신속하고 체계적으로 top designer를 찾으십시요.
 : 주변의 능력있는 개발자(wannabe?)를 찾고 영향을 받는게 중요하겠음.

2. 해당 인력의 경력을 세심히 관리하고 가능성을 개발할 수 있는 Career mentor를 지정하라.
 : 멘토까지는 아니더라도 선배니 동종 업계에서 근무하는 사람들의 조언을 받는 것도 방법 이겠다.

3. 인력들 간에 software designer로서 교류하며 동기부여하며 성장할 수 있는 기회를 제공하라.
 : 교류.. 사실 우물안 개구리 처럼 책만 보면서 있다간 초보적인 기술만 보게 될 것이고 능력 증대를 배가하기 위한 방법은 다른사람의 잘짜여진 코드를 보는 것임.

댓글 없음:

댓글 쓰기