1. 알고리즘·자료구조 학습에서의 문제
- 왜 우리는 학교에서 `프로그래밍을 하는 과정'이나 `디자인 과정'(소프트웨어 공학에서 말하는 개발 프로세스가 아니라 몇 시간이나 몇 십 분 단위의, 개인적인 차원의 사고 과정 등을 일컫습니다)을 명시적으로 배운 적이 없을까요?
- 알고리즘 공부에서 중요한 것
- 알고리즘을 스스로 생각해낼 수 있는 능력
- 다른 알고리즘과 효율을 비교할 수 있는 능력
- 알고리즘을 컴퓨터와 다른 사람이 이해할 수 있는 언어로 표현해낼 수 있는 능력
- 이것의 정상작동(correctness) 여부를 검증해 내는 능력
3. 실질적이고 구체적인 문제를 함께 다루라
- 구상(concrete) 다음에 추상(abstract)
- ACM ICPC(세계 대학생 프로그래밍 경진 대회)
4. 알고리즘 디자인 과정의 중요성
- Program Development by Stepwise Refinement (http://www.acm.org/classics/dec95)
- Stepwise Program Construction (http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD227.PDF)
- 알고리즘 검증: 루프 불변식(loop invariant)
- 맨버(Udi Manber) 『Instruction to Algorithms: A Creative Approach』
- 다익스트라의 『A Discipline of Programming』
- 그라이스(Gries)의 『The Science of Programming』
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와 함께..
- 리팩토링 수련법
- 일취집중후각법: 앞에 소개한 본지 2001년 11월호에서 인용된 글 참조
- 주석 최소화: 주석을 최소화하되 코드의 가독성이 떨어지지 않도록(혹은 오히려 올라가도록) 노력합니다. 이렇게 하면 자동으로 리팩토링이 이뤄지는 경우가 많습니다.
- AOO 따르기: OAOO 법칙을 가능하면 최대한, 엄격하게 따르려고 합니다. 역시 자동으로 좋은리팩토링이 이뤄집니다. 여기서 디자인패턴이 창발하기도 합니다. GoF 책을 한번도 보지 못한 사람이 디자인패턴을 자유자재로 부리는 경우를 보게 됩니다.
- 디미터 법칙(Law of Demeter) 따르기: 디미터 법칙을 가능하면 지키려고 합니다. 어떤 리팩토링이 저절로 이뤄지거나 혹은 필요 없어지는가요?
- 짝(Pair) 리팩토링: 함께 리팩토링합니다. 혼자 하는 것보다 더 빨리, 더 많은 걸 배우게 됩니다. 특히, 각자 작성했던 코드를 함께 리팩토링하고, 제3자의 코드를 함께 리팩토링해 봅니다. 사람이 많다면 다른 짝이 리팩토링한 것과 서로 비교하고 토론합니다.
- `무엇'과 `어떻게'를 분리: 어떻게에서 무엇을 분리해 내도록 합니다. 어떤 리팩토링이 창발합니까?
- 레이브와 웽거(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. 마이크로패턴
- 커리프스키의 「Stop Over-Engineering!」(SoftwareDevelopment Magazine, Apr 2002, http://www.sdmagazine.com/documents/s=7032/sdm0204b/0204b.htm)
- 존 블리스사이즈가 쓴 「Diversify」http://www.research.ibm.com/people/v/vlis/pubs/gurus-99.pdf
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. 익스트림 프로그래밍 공부
- 필독서
- 『XP Explained』(Kent Beck): XP 선언서
- 『XP Installed』(Ron Jeffries et al): C3 프로젝트에 적용한 예, 얻은 교훈 등
- 『Planning XP』(Kent Beck, Martin Fowler): 계획 부분 설명(관리자, 코치용)
- 『Refactoring』(Martin Fowler): 리팩토링에 대한 최고의 책
- 『XP Applied』: 유즈넷과 메일링 리스트의 논의 등 최근 자료를 반영
- 『XP Explored』: 가장 쉽고 구체적인 XP 안내서
- 여유가 된다면,,
- 『The Timeless Way of Building』
- 『XP in Practice』(Robert C. Martin 외)
- 『XP Examined』: XP 컨퍼런스에 발표된 논문 모음
- 『Peopleware』(Tom DeMarco)
- 『Adaptive Software Development』(Jim Highsmith)
- 『Surviving Object-Oriented Projects』(Alistair Cockburn)
- 『Software Project Survival Guide』(Steve McConnell)
- 『The Psychology of Computer Programming』(Gerald M. Weinberg)
- 『Agile Software Development』(Alistair Cockburn)
- 『Software Craftsmanship』(Pete McBreen)
- 『Agile Software Development with SCRUM』(Schwaber Ken)
- 『A Practical Guide to eXtreme Programming』(David Astels 외)
- 『Agile Modeling』(Scott Ambler)
- 『Agile Software Development Ecosystems』(Jim Highsmith)
- 『Test Driven Development』(Kent Beck)
- IEEE Software/Computer, CACM, Software Development Magazine 등에 실린 기사
- 『XP Conference, XP Universe 등의 논문들(특히 최근 것들)
- 유즈넷, 메일링 리스트, 오리지널 위키 http://c2.com의 논의들
14. Refactor Me
- 실 생활에서 직접 실험을 해보면서 - 이 때 욕심 부리지 않고 한 가지씩 지긋이 해보는 느긋함과 음미의 정신이 필요할지도 모르겠습니다 - 자신의 경험을 축적해 나가고, 동시에 이 글을 적절히 리팩토링해서 자신만의 패턴을 차근히 만들어 나가길 바랍니다.
[출처] Minjae's PX : 김창준님 프로그래머를 위한 공부법 정리
요즘 프로그래밍을 하다보면 꼭 접하게 되는 것들...
이전 따로 떼고 생각하기가 힘든 대세일까나...
아직 내게는 익숙하지 않은 옷 같은 처지... 무량수불....
댓글 없음:
댓글 쓰기