요약
키워드 : 구조화의 중요성, 분류, 일반화
"일반화 될때까지 점진적으로 도약한다"
[ 다시하기 → 분류 → 일반화 (학습 파이프라인) ] -> 지속적인 사이클
알고리즘과 자료구조
구성주의
철학에서의 구성주의
"지식은 습득하고 지식을 구성하는 능력” → 사고, 지식 생산형 학습
어떤 알고리즘을 배운다면 그 알고리즘을 고안해낸 사람이 어떤 사고과정을 거쳐 그 해법에 도달했는지를 구경할 수 있어야 한다. 각자 스스로만의 해법을 차근차근 concrete구성할 수 있어야 한다
“전문가가 하는 것을 배우지 말고, 그들이 어떻게 전문가가 되었는지를 배우고 흉내 내야 한다”
올바르게 질문하기
어떤 사고 과정을 거쳐, 그리고 어떤 디자인, 프로그래밍 과정을 거쳐서 그 것에 도달할 수 있었나요?
권장하는 구체적인 학습방법
개념만 따로 이해해보고 안보고 직접 구현해본다
알고리즘에서 중요한 것
- 스스로 생각해내는 능력
- 다른 알고리즘과 효율을 비교할 수 있는 능력
- 다른 사람이 이해할 수 있는 언어로 표현해낼 수 있는 능력
- 정상 작동 여부를 검증해 내는 능력
기계적, 무의식적으로 풀어재끼는 기계 (x) -> 머리가 아닌 손이 푸는 거다
개발자로서의 역량
사람에게도 설명하고 그다음 내가 자리에 앉아 컴퓨터에게도 설명할 수 있어야 한다
사람한테 설명하는 거랑, 컴퓨터가 이해할 수 있게 설명할 수 있다는 것은 다른 차원의 능력을 필요로 한다
실질적이고 구체적인 문제를 함께 다루어라
- 구상 다음 추상이 온다
- 실제 문맥속에서 여러번 보는 것이 훨씬 좋다
알고리즘 디자인 과정의 중요성
서적 추천 및 요약
- 큰틀을 기반으로 구조적 설계의 중요성
- 점진적으로 개선해나가는 것이 중요
조금씩 개선하기는 구조적 프로그래밍에서의 핵심적 역할
다익스트라의 「Stepwise Program Construction」(Selected Writings on Computing: A Personal Perspective, Springer-Verlag, 1982)
알고리즘과 패러다임
- 큰 줄기를 알아야 한다
- 자신만의 분류법을 만들어라
- 비슷한 문제들을 서로 묶어서 일반화 해야한다
- 다시하기 -> 매번 풀때마다 새로운 도전 혹은 개선점을 찾아준다
효과적인 학습 테크닉
- 어려운 문제 푼 후, 처음부터 완전히 새로 푼다
- 좀 전에 얻은 통창만을 유지하면서
- 해법이 내가 희망하는 것 만큼 명료하고 직접적인 나의 것이 될때까지 반복한다
- 좀 전에 얻은 통찰만을 유지하면서 비슷한 문제들을 공략할 어떤 일반적인 룰을 찾는다
- 그런 다음, 비슷한 문제들을 공략할 어떤 일반적인 룰을 찾습니다.
- 아까 주어진 문제를 아예 처음부터 최고로 효율적인 방향에서 접근하도록 이끌어 줬을 그런 룰을 찾는거죠