2009년 4월 23일 목요일

김창준님 프로그래머를 위한 공부법 정리

1. 알고리즘·자료구조 학습에서의 문제

  • 왜 우리는 학교에서 `프로그래밍을 하는 과정'이나 `디자인 과정'(소프트웨어 공학에서 말하는 개발 프로세스가 아니라 몇 시간이나 몇 십 분 단위의, 개인적인 차원의 사고 과정 등을 일컫습니다)을 명시적으로 배운 적이 없을까요?
2. 자료구조와 알고리즘 공부
  • 알고리즘 공부에서 중요한 것
  1. 알고리즘을 스스로 생각해낼 수 있는 능력
  2. 다른 알고리즘과 효율을 비교할 수 있는 능력
  3. 알고리즘을 컴퓨터와 다른 사람이 이해할 수 있는 언어로 표현해낼 수 있는 능력
  4. 이것의 정상작동(correctness) 여부를 검증해 내는 능력

3. 실질적이고 구체적인 문제를 함께 다루라

  • 구상(concrete) 다음에 추상(abstract)
  • ACM ICPC(세계 대학생 프로그래밍 경진 대회)

4. 알고리즘 디자인 과정의 중요성
5. 알고리즘과 패러다임
  • 로버트 플로이드(Robert Floyd)의 튜링상 수상 강연(The Paradigms of Programming, 1978)
  • 죠지 폴리야(George Polya)의 『Howto Solve it』
  • 알고리즘 개론 교재 CLR (Introduction to Algorithms, Thomas H. Cormen, Charles E. Leiserson,and Ronald L. Rivest)
  • 존 벤틀리(Jon Bentley)의『Programming Pearls』

6. 리팩토링 학습에서의 문제
  • 무색 무미 무취의 무위(無爲)적 자연(自然) 코드가 되는 그 날을 위해 오늘도 우리는 리팩토링이라는 유위(有爲)를 익힌다.

7. 리팩토링 공부
  • TDD와 함께..
  • 리팩토링 수련법
  1. 일취집중후각법: 앞에 소개한 본지 2001년 11월호에서 인용된 글 참조
  2. 주석 최소화: 주석을 최소화하되 코드의 가독성이 떨어지지 않도록(혹은 오히려 올라가도록) 노력합니다. 이렇게 하면 자동으로 리팩토링이 이뤄지는 경우가 많습니다.
  3. AOO 따르기: OAOO 법칙을 가능하면 최대한, 엄격하게 따르려고 합니다. 역시 자동으로 좋은리팩토링이 이뤄집니다. 여기서 디자인패턴이 창발하기도 합니다. GoF 책을 한번도 보지 못한 사람이 디자인패턴을 자유자재로 부리는 경우를 보게 됩니다.
  4. 디미터 법칙(Law of Demeter) 따르기: 디미터 법칙을 가능하면 지키려고 합니다. 어떤 리팩토링이 저절로 이뤄지거나 혹은 필요 없어지는가요?
  5. 짝(Pair) 리팩토링: 함께 리팩토링합니다. 혼자 하는 것보다 더 빨리, 더 많은 걸 배우게 됩니다. 특히, 각자 작성했던 코드를 함께 리팩토링하고, 제3자의 코드를 함께 리팩토링해 봅니다. 사람이 많다면 다른 짝이 리팩토링한 것과 서로 비교하고 토론합니다.
  6. `무엇'과 `어떻게'를 분리: 어떻게에서 무엇을 분리해 내도록 합니다. 어떤 리팩토링이 창발합니까?
  • 레이브와 웽거(Jean Lave, Etienne Wenger)의『Situated Learning : Legitimate Peripheral Participation』
  • 마소 2001년 12월호 「허실문답 XP 강화」
  • 조선시대 사상가 혜강 최한기는『신기통』

8. 디자인패턴 학습에서의 문제
  • 우리가 궁극적으로 추구하는 것은 패턴이 아니라 현실이어야 한다
  • 미국 캘리포니아 주립대학의 교수 베티 에드워즈(Betty Edwards) 『Drawing on the
    Right Side of the Brain』

9. 디자인 패턴 공부
  • 삐아제와 비갓스키(Lev Vygotsky)의 구성주의
  • 어떤 패턴의 필요성을 자신의 경험 속에서 절감하지 못한다면 그 패턴을 제대로 아는 것이 아니다

10. 소프트웨어 개발에 푹 빠지기
  • 독일어를 마스터하기 위해서는 독일어 문화에 자기 자신을 푹 담궈야(immerse) 한다.
  • 커리프스키(Joshua Kerievsky)의 「A Learning Guide To Design Patterns」http://www.industriallogic.com/papers/learning.html
  • 스터디 그룹의 패턴 언어를 서술한 「Knowledge Hydrant」http://www.industriallogic.com/papers/khdraft.pdf
  • 『A Learning Guide To Design Patterns』
  • 랄프 존슨 "싱글톤 패턴을 가르치기 전에 콤포짓, 스트래터지, 템플릿 메쏘드, 팩
    토리 메쏘드 패턴을 가르친다. 이것이 훨씬 더 일반적인 것들이며,"

11. 마이크로패턴
12. 디자인패턴 추천서 디자인패턴
  • 『Design Patterns Explained』(Shalloway, Trott)
  • 『Design Patterns Java Workbook』(Steven John Metsker)
  • 『Refactoring』(Martin Fowler)
  • 『Design Patterns』
  • 『Design Patterns Smalltalk Companion』
  • 『Pattern Hatching』(John Vlissides)
  • 『Smalltalk Best Practice Patterns』(Kent Beck)
  • 『Pattern Languages of Program Design』1,2,3,4: 패턴 컨퍼런스 논문 모음집
  • 『Pattern-Oriented Software Architecture』1,2
  • 『Concurrent Programming in Java』(Doug Lea)
  • 『Patterns of Software』(Richard Gabriel)
  • 『Analysis Patterns』(Martin Fowler)
  • 『A Timeless Way of Building』(Christopher Alexander)
  • 『The Natureof Order』
  • 『A Pattern Language』(Christopher Alexander)
  • 『Problem Frames』(Michael Jackson)

13. 익스트림 프로그래밍 공부
  • 필독서
    1. 『XP Explained』(Kent Beck): XP 선언서
    2. 『XP Installed』(Ron Jeffries et al): C3 프로젝트에 적용한 예, 얻은 교훈 등
    3. 『Planning XP』(Kent Beck, Martin Fowler): 계획 부분 설명(관리자, 코치용)
    4. 『Refactoring』(Martin Fowler): 리팩토링에 대한 최고의 책
    5. 『XP Applied』: 유즈넷과 메일링 리스트의 논의 등 최근 자료를 반영
    6. 『XP Explored』: 가장 쉽고 구체적인 XP 안내서
  • 여유가 된다면,,
    1. 『The Timeless Way of Building』
    2. 『XP in Practice』(Robert C. Martin 외)
    3. 『XP Examined』: XP 컨퍼런스에 발표된 논문 모음
    4. 『Peopleware』(Tom DeMarco)
    5. 『Adaptive Software Development』(Jim Highsmith)
    6. 『Surviving Object-Oriented Projects』(Alistair Cockburn)
    7. 『Software Project Survival Guide』(Steve McConnell)
    8. 『The Psychology of Computer Programming』(Gerald M. Weinberg)
    9. 『Agile Software Development』(Alistair Cockburn)
    10. 『Software Craftsmanship』(Pete McBreen)
    11. 『Agile Software Development with SCRUM』(Schwaber Ken)
    12. 『A Practical Guide to eXtreme Programming』(David Astels 외)
    13. 『Agile Modeling』(Scott Ambler)
    14. 『Agile Software Development Ecosystems』(Jim Highsmith)
    15. 『Test Driven Development』(Kent Beck)
    16. IEEE Software/Computer, CACM, Software Development Magazine 등에 실린 기사
    17. 『XP Conference, XP Universe 등의 논문들(특히 최근 것들)
    18. 유즈넷, 메일링 리스트, 오리지널 위키 http://c2.com의 논의들

14. Refactor Me
  • 실 생활에서 직접 실험을 해보면서 - 이 때 욕심 부리지 않고 한 가지씩 지긋이 해보는 느긋함과 음미의 정신이 필요할지도 모르겠습니다 - 자신의 경험을 축적해 나가고, 동시에 이 글을 적절히 리팩토링해서 자신만의 패턴을 차근히 만들어 나가길 바랍니다.

 

[출처] Minjae's PX : 김창준님 프로그래머를 위한 공부법 정리

요즘 프로그래밍을 하다보면 꼭 접하게 되는 것들...
이전 따로 떼고 생각하기가 힘든 대세일까나...
아직 내게는 익숙하지 않은 옷 같은 처지... 무량수불....

댓글 없음:

댓글 쓰기