프로그래밍 어떻게 공부할 것인가

프로그래밍 어떻게 공부할 것인가

4. 전문성에 대한 과학적 근거들#

전문성에 대한 다양한 의견들#

  • 초보자의 의견

    • 지식인
  • 전문가의 의견

  • 다양한 책

  • 내가 어렸을 때부터 들어왔던 이야기

  • Expertise Research 전문성 연구

    • 설명적 Description 현상을 묘사하는 것
      • 전문가와 비전문가는 어떻게 다르게 일하는가? 현상 연구
      • 전문가가 어떤 과정을 거쳐 되는가?
    • Prescriptive 어떻게 하는게 좋다.
      • 어떻게 하면 더 높은수준의 전문가가 빨리 될 수 있을까?
      • 전문가라는 것 자체가 모호할 수 있다.
      • 주 연구 대상은 체스기사였다. 음악가, 과학자들, 개발자들
  • 경력과 퍼포먼스의 상관성은 비례하지 않는다. 추세선을 그으면 수평비슷하게 나온다. 20년 경력이 1년 경력이 20번 반복된 것일수도 있다. 프로젝트를 끝날때 마다 까먹는 경우. 전문성 연구의 핵심은 높은 수준의 실력이 라는것은 오래한다고해서 자동적으로 획득되지 않는다. 개선할려는 의도적인 노력이 필요하다. 단순히 반복한다고 해서 개선으로 이끌어 지지 않는다.

  • 전문성을 예측하는 최고요인은 가장 유의미한 것은 혼자서 연습한 시간, 누적 연습량이었다. 대략 10년 정도라고 한다. 일하는 시간은 연습시간에 넣지 않는다.

  • 주의점: 업무랑 연습은 다르다.

  • 모든 활동을 다음세가지로 분류

    • work
    • play (밥, 자는것)
    • deliberate practice
  • 주의점: 일반적 연습과 의도적 수련은 다르다.

    • 의도적 수련은 내가 약한부분을 수련하는것.
    • 의도적 수련의 조건:
      • 잘정의된 작업, 적절한 난이도, 정보가 풍부하고 때맞는 피드백, 반복과 실수보정의 기회
  • 시도해보기: 약점훈련 -- 혼자하는거에 있어서 시작만 좋다.

5. 질답: OOP와 영어공부, 코드 읽기 실력#

  • 영어공부

    • 전문성 연구는 분야에 특수화 되어있다.
    • 다른분야에 적용하는 것을 Transfer 이라고 하는데 쉬운것이 아니다.
    • 인지적 단위, 기억, 추론, 비유는 효과적 학습방법의 비슷한 점도 있을 것이다.
    • OOP 설계보다 영어 공부는 추상적이다. 타겟팅이 중요
    • OOP 설계는 행위(적극적, 정리, 만들기, 연구하기), 영어는 재료에 대해 이야기 하고 있다. 즉 읽기라는 행위로 종합할 수 있다.
    • 기억에서 인출해 내는 행위가 중요하다
  • 소스리딩

    • 전문가는 더 잘 파악한다.
    • 전문가는 OOP 언어에 대해, 숲을 볼 수 있고 어떤 클래스, 메소드가 있는지 파악을 먼저한다
    • 잘 못하는 사람은 for if 이런것들에 집중, 순서대로 줄줄읽고, 시간이 오래걸린다.
    • 숲을 보는 훈련필요
    • 책 읽기에 대한 연구
      • SQ3R 방 법
        • survey, 전체적인 지형보기, 개요보기: 전반적으로 짧은시간안에 탐사
        • Question: 질문 뽑아보기
        • 3R: read, recite, review
          • read: Q를 먼저헀기 때문에 능동적으로 읽게 된다.
          • recite: 봤던 내용들을 말로하거나 종이에 써본다. (기억 인출)
          • review: recite 한것을 맞추어봄
          • 3R만 해도 효과적이다
    • 코드의 세부적인 내용에 빠져들지 않고 전체적으로 본 다음 할려는 일에 대해 질문을 뽑아내기
    • 궁금한 질문들을 공격적으로 찾아보기(실행순서대로 읽지 말기)
    • 읽었던 것에 대해 그림이나, 표 등 질문의 답을 써보기
    • 코드 리뷰

6. 의도적 수련의 조건 (1): 새로운 프로그래밍 언어 배우기를 중심으로#

  1. 잘 정의된 작업
    • 기준
      • 잡지 떼기의 위력 (잡지의 모든 페이지를 직접 그리는 일)
      • 프로그램을 끝내겠다 -> XX값으로도 테스트해보겠다. (완료작업의 구체적인 기준)
      • 디자인 패턴 열심히 써야지 -> 일주일 동안 짰던 코드를 검토하며 이번주의 패턴을 최소 세 군데 이상 적용해 봐야지
      • 목표를 위한 구현의도가 좋다.
    • 프로그래밍 언어 학습의 달인 : 뭐가 다른가?
      • 목표 프로그램이 있다.
  2. 적절한 난이도
    • 6인치 짜리 반사경을 만드는 것보다 4인치 짜리를 만들고 6인치짜리를 만드는 시간이 더 빠르다
    • 인지 부하 이론 Congnitive Load Theory
      • 배우는 것이 있을 때, 배우는 것 외적으로 인지 부하가 생기면 학습력이 떨어진다.
      • 새 언어로 새 문제를 풀지 마라
        • 둘 중에 하나는 편한걸로
    • 자신의 실력과 난이도가 비슷할 때 몰입이 생기고, 난이도가 높고 실력이 낮을때는 걱정, 두려움, 실력은 높은데 난이도가 낮으면 지루함이 생긴다.
      • 행복함은 무엇을 하느냐보다 몰입을 할 때 생긴다.
      • 지루할 때는 난이도를 높인다.
      • 지루할 때 실력을 떨어뜨리는 경우, 기능을 안쓴다거나,,
      • 걱정이나 두려움을 느낄경우 난이도를 줄이거나, 툴을 쓰거나 다른사람의 도움을 받는다.
    • 프로그래밍 언어 학습의 달인: 뭐가 다른가?
      • 너무 쉽거나 너무 어려운 건 뒤로 제끼고
        • 이미 아는단어와, 전혀모르는 단어를 체크 -> 애매한 단어가 남는다. 그것을 먼저 학습하면, 이미 아는 단어가 되고, 전혀 모르는 단어가 애매한 단어로 바꾸어 진다.
      • 프로그래밍에서도 목차를 본다. 여기서도 적용
      • 쉬우면 어렵게 만들어 공부하고
      • 어려우면 쉽게 만들어 공부하고
  3. 정보가 풍부하고 때에 맞는 피드백
    • 달인의 비결은 매일 세수하고 양치하듯이 꾸준하게 반복하는 것.. 단순
    • 그런데 왜 양치질의 달인이 되지 않을까
    • 이빨을 닦을 때 거울을 보고 판단을 한다. 혹은 병원에 주기적으로 간다. 하지만 이것보다
    • 적절한 시기에, 좀 더 구체적이고 정확한 피드백이 필요하다.
    • Egg Dropping - 피드백의 중요
      • 1시간에 1번씩 계란을 떨어뜨려 만든그룹
      • 계란을 무제한으로 제공해 준 그룹. 이 그룹은 테스트를 잘안하게
      • 첫번 째 그룹의 성적이 2배로 좋았다.
    • 수십년 해도 전문성이 안 느는 대표직업
      • 공항 보안검색
        • 본인이 찾은 칼의 개수를 알지만 찾지못한 개수를 알지 못했기 때문. 실수를 알지 못함
    • 내가 오늘 실수한 것들을 알게 됐는가
    • 결과에 대한 피드백, 과정에 대한 피드백
      • 과정 피드백 팀이 성과가 더 좋다. 학습에 더 도움이 된다.
      • 결과 피드백은 학습이 늦게 일어난다.
    • 타이밍의 중요성
      • 인간의 뇌는 피드백 기간이 늦어지면 학습효과가 떨어지게 된다.
    • 프로그래밍 언어 학습의 달인 : 뭐가 다른가?
      • 여러 경로의 피드백을 자주 받는다.
        • 컴파일러
        • 단위 테스트
        • 코드 리뷰 . 내가 짠 코드도 리뷰 가능
        • 동료
        • 커뮤니티
  4. 반복과 실수 교정의 기회
    • 하나의 문제를 다른 해법으로 푸는 방법을 찾아 반복을 한다. 일반적인 룰을 찾을 때까지
    • 도자기 평가
      • 하나의 퀄리티가 좋은 도자기 평가.
      • 많은 양의 도자기를 제출한 평가
      • 후자가 더 좋은 퀄리티가 나왔다. 후자는 자기 실수에서 배웠기 때문임. 전자는 완벽함을 이론화만 했기 때문임.
    • Error Training
      • 엑셀 강의
        • 실수가 적게 하는 수업
        • 실수를 더 많이하게끔 하는 수업
        • 대부분의 학습은 전이가 중요하다. 엑셀도 그렇다 (불확실성 수업). 그럴수록 실수 경험이 더 좋다. 응용능력이 길러진다.
    • 프로그래밍 언어 학습의 달인 : 뭐가 다른가?
      • 같은 걸(다르게, 다른 맥락에서) 여러 번 해보라
      • 조금씩 더 개선해 보라
      • 실수를 많이 하라

프로그래밍하는 사람을 위한 효과적 학습법 (1) : 교육심리학의 최근 연구 적용하기#

  • 효과적 학습법
    • 확실한 것
      • (연습) 시험 치기
        • 여러번 읽는 것보다 테스트를 더 많이 하는 것이 효과적이다.
      • 분산 연습
        • 공부하는 것 사이사이 간격을 띄우는 것.
      • 방금 읽은 부분이 왜 그런지 자주 자문해보기
      • 새 정보가 이미 아는 것과 어떻게 관련있는지 (혹은 문제푸는 단계를) 설명해보기
      • 섞어서 공부하기
  • 비효과적 학습법
    • 같은 자료를 반복해 읽기
      • 시간 투자 대비 얻는게 적지만, 자신감이 증가한다. 다시 읽으면서 낮은 수준의 확인을 준다. 이해와 암기의 착각. 처음읽고 다시읽을 때 사이간격을 늘리면 더 효과적이다.
    • 형관펜 및 밑줄 긋기기
      • 심지어 부정적 효과
      • 학생들이 뭐가 중요한지 모른다.
      • 중요하지 않은 곳에 밑줄을 그어서 집중이 분산된다.
      • 형광펜 밑줄 긋기는 머리에 땀이 나지 않는 행위이다.
    • 요약하기
      • 텍스트를 보면서 요약을 하느냐 안보면서 요약을 하느냐에 따라 다르다. 또 그에 대한 상반된 의견들도 많다.
      • 잘한 요약과 못한 요약으로도 나뉜다.
      • 훈련이 필요한 것이다.

연습 시험치기#

  • Cornet Note 노트 한페이지를 3개의 섹션
    • 1번은 키워드: 힌트
    • 2번은 내용
    • 3번은 요약을 적는다.
|
|
1 | 2
|
----------------------
3
  • 백견이 불여일타
  • 백타가 불여일시(시험)

분산 연습#

  • 한번 공부할 때 오랜 시간 들여서?
    • A: 1주에 3시간 2번
    • B: 1주에 1시간 6번
    • B가 실력오름이 더 크고 기억이 오래간다. 만족도는 A가 높다.
    • 만약 1주일 기억하고 싶으면 12-24 시간 정도 떨어뜨려 공부
    • 5년 기억하고 싶을때 6 -12 개월 떨어뜨려 공부한다.
  • Anki(Spaced Repetition Software)
    • 분산연습을 잘하도록 도와준다.
    • 기억하고 싶은 것이 있을 때에 알고리즘으로 공부할 때를 선정해 준다.

섞어서 공부하기#

  • 받아쓰기 숙제의 비애
    • 철수는 학교에 갑니다 문장을 철철철철... .하는것 보다 한줄씩 다쓰는 것이 좋다
  • 영어 영어 영어 공부하는 것보다 영어 수학 영어 수학.. 공부하는 것이 낫다.
  • 분수분수분수 문제 푸는 것보다 분수 확률 분수 확률 돌아가면서 푸는 것이 낫다.
  • 챕터별로 쭉 볼필요도 없다.

자문하기/설명하기#

  • 단순히 질문해주는 것만으로도 놀라운 효과

  • 특히 전이 효과가 높음

  • 이게 참일까 거짓일까 생각하는것.

  • 문제풀이 단계를 설명하는 것.

  • 프로그래밍 책을 보면서 스스로에게 말을 걸어본다. 디자인 패턴 중에 나 스스로 이미 알고 있었던 것. 과거 경험에서 이 패턴이 쓰일 만한 경우를 이야기 해본다.

  • 코딩하다가 에러가 났을 때, 왜 에러가 난게 맞지 이유를 설명해 보거나, 에러가난 과정을 소스코드를 안보고 설명을 해본다.

  • 전이를 높이기 위해서..

    • Variety(w /some repetition)
      • 다양성과
      • 반복
      • A그룹은 10m 거리 바구니에 10번 넣는 것을 연습하고 B그룹은 5m 15m 번씩 반복해서 하였다. B그룹이 성적이 더 좋다.
      • 예제를 변형해서 풀어보기. 문제 축소 확장
      • 한문제를 전혀 다른 스타일로 풀어보기
    • 프로그래밍에서는 전이가 중요하다.

프로그래밍하는 사람을 위한 효과적 학습법 (2) : 프로그래밍 순서#

  • 일반적인 프로그래밍 언어 입문서 목차
    • 의구심, 이 순서대로 공부하는 것이 맞는가?
  • 원자적 설계 왜 문제인가?
    • 주제의 서브스킬을 쪼개서 가르치는 것.
    1. 구획화(Compartmentalization)
      • 지식, 스킬, 태도 를 따로따로 가르치는 것.
      • 결합되야 한다.
    2. 분절화(Fragmentation)
      • 목차들이 떨어져 있다.
      • 반복문만 쓰는 경우는 없다. 조건문 모두 섞어서 한다.
    3. 전이의 Paradox
      • 버그를 찾고 진단하는 것에서 e1, e1, e1, e2, e2,e2, e3,e3,e3 문제를 푸는데 e2를 할때 e1를 까먹고, e4의 전이가 어렵다.
      • 섞어서 공부하는 것이 좋다.
      • ch1, ch2, ch3 ... 공부를 하면 응용도 안되고 기억이 가물해진다.
      • ch1 조금, ch2 조금 ... / Ch2 더, ch3, 더.. /ch1 다른면 .... 반복적 공부
      • 현실적 문제를 다뤄야 한다.
  • 대안
    • 전체론적 설계
    • Part_Task vs Whole-Task
  • 예시: Correlation Table 상관계수
    • 키와 체중의 상관성.
    • 키, 체중, 나이, 수입 등... 이 있다면 짝들이 여러개 나올 수 있다. (키, 체중), (키, 수입) ... (행렬)
    • 개발이나 알고리즘을 풀 때, 버전을 나누고, 하나일 경우, 경우가 여러개일 경우 점진적으로 해본다.
    • 확인을 계속하기 때문에 삽질이 없다. 재미와 성취감이 있다.
    • 각각의 단계가 잘 정의 되어있고
    • 점진적으로 쉽게 쪼개었기 떄문에 적절한 난이로를 낮출 수 있다..
    • 때에 맞고 정보가 풍부한 피드백
      • 각 단계별로 실행이 가능해진다.
    • 반복과 실수의 교정의 기회

최종정리#

  • 전문성/전문가에 대해 미신이 많다

  • 머리에 땀이나야 공부된다.

  • 의도적 수련이 중요

  • 의도적 수련의 4가지 조건

  • 효과적 학습 방법

  • 공부 전략 설계

Last updated on