훌륭한 프로그래머가 알아야 할 인지과학의 모든 것 / 펠리너 헤르만스 지음 도서링크

생소한 코드를 빨리 이해하는 것은 왜 어려울까?

  • 자바 코드 기억하기 실험
    • 짧은 순간에 본 코드는 단기 기억 공간(STM)에 저장된다. 단기 기억 공간은 용량이 한정되어 있다. 이 제한을 장기 기억 공간, 즉 기존에 알고 있던 지식을 활용해 보완한다. 따라서 전문가가 초보자보다 코드를 더 잘 기억하고 처리할 수 있다.
  • 기억하는 대상이 중요한 것이 아니고 기억하는 방식이 중요하다.
    • 코드에서 ‘무엇’을 기억해냈느냐 뿐만 아니라 코드를 어떤 ‘순서’로 기억했는지 파악하는 것도 자가진단에 유용하다.(p27)
    • 디자인 패턴에 대한 지식을 갖게 되면 코드를 청킹하는 능력이 향상되고 더 빠르게 수정할 수 있게 된다.
    • 코드를 기억해내는 일은 프로그래밍에 대한 지식이 어느 정도인지 가늠해볼 수 있는 자가 진단 도구로 사용해볼 수 있다.
  • 코드를 여러 번 연속해도 읽어도 이해가 되지 않는다면? 어디에 중점을 두고 읽어야 하는지 모르거나 어떤 순서로 읽어야 하는지 모르기 때문에 그럴 수 있다. (p61)

  • 주석문 쓰기
    • 프로그래머들은 코드를 읽을 때 주석을 함께 읽는다. 최소한의 주석문을 작성하는 것은 전혀 의미 없는 일은 아니지만, i++ = i를 1만큼 증가 와 같은 저수준 주석문은 코드를 읽는데 방해가 된다.
  • 문법에 대한 지식이 더 많을 수록 코드를 쉽게 파악할 수 있기 때문에 문법을 외우는 것이 중요하다. (p50)

  • 코드 스멜(작동은 하지만 개선의 여지가 있는 코드)는 인지 부하를 초래한다.
    • 코드 스멜이 없는 코드보다 코드 스멜이 포함된 코드가 향후에 수정될 가능성이 더 높다. 배포된 이클립스의 75%이상의 경우에 코드 스멜이 있는 코드가 그렇지 않은 코드보다 수정될 가능성이 더 높있다.
    • 긴 매개변수 목록, 복잡한 스위치 문 : 작업 기억 공간의 용량 초과
    • 코드 클론, 중복 코드 유사한 이름과 유사하지만 정확히 같지는 않은 기능을 가진 두 함수는 이름과 구현이 매우 유사하기 때문에 우리 두뇌는 두 가지 메서드를 혼동할 가능성이 높다. (p165)

버그가 발생하는 이유 (chapter 7)

  • 왜 두번째 프로그래밍 언어가 첫 번째보다 쉬울까?
    • 기존에 알고 있던 지식을 사용해서 새로운 내용을 쉽게 배운다. = 학습 도중 전이. 도움이 되는 전이를 긍정적 전이라고 부른다.
    • 기존 지식이 새로운 것을 배우는 데 방해가 될 수도 있다. = 부정적 전이. 이것은 혼란을 야기하고 버그로 이어질 수 있다.

변수 이름 짓기 (chapter 8)

  • 좋은 이름이 코드를 읽기 쉽게 해준다는 사실은 명백하다.
  • 단일 문자 변수는 사람마다 연상하는 데이터 타입이 다를 수 있다. 따라서 식별자의 이름으로 단어를 선택하거나 명명 규약을 따라는 것이 향후 코드의 이해를 위해 더 나은 방법이다. (p151)
  • 나쁜 이름을 가진 코드에 버그가 더 많다. name hold (이름 틀)을 만들어보자!

화이트보드 프로그래밍 인터뷰, 도움이 될까? (chapter 10.3)

  • 암시적 기억 생성
    • 터치 타이핑 처럼 아무 생각 없이 할 수 있는 작업이다. 암시적 기억을 충분히 훈련하면 그것을 사용하는 데 뇌가 거의 에너지를 소모하지 않는다. 인지 부하를 유발하지 않는다.
    • 프로그래밍에 대한 암시적 기억이 많을 수록 인지 부하를 더 많이 절약할 수 있기 때문에 더 큰 문제를 해결하기 쉽다.

알고리즘을 공부하는 방법 (chapter 10.4) : 풀이를 언제 봐야 할까?

  • 단순히 프로그래밍을 많이 한다고 해서 문제 해결을 더 잘하게 되는 것은 아니다.
  • 문제와 풀이된 예제를 같이 제공 받은 그룹이 추가적인 도움 없이 방정식을 푼 그룹보다 5배나 문제를 더 빨리 풀었다. 첫 번째 그룹이 적용할 수 있는 다른 문제에서도 더 뛰어난 결과를 보였다.
    • 힘든 코딩 작업을 마친 후 때때로 자신이 한 일을 기억하지 못하는 경우가 있다. 작업 기억 공간이 가득 차 있으면 생각을 제대로 할 수 없고, 정보를 장기 기억 공간 - 경험으로 저장하지 못한다.
    • 첫 번째 그룹이 인지부하가 그렇게 높지 않았기 때문에 풀이를 자세히 검토하고 기억할 수 있었다.

업무 중단, 컨텍스트 스위칭에 잘 대비하는 방법

  • 하던 생각 기록 해두기
  • 뭘 하려고 했는 지, subtask 나누어 기록 해두기
  • 멀티 테스킹에 대한 고찰 (chapter 11.2.5) : 이중 과제는 인지적 부담을 가중시킨다.
    • 책을 읽으면서 인스턴트 메신저를 사용하는 그룹 vs 텍스트에 완전히 집중하는 그룹 : 중단된 그룹이 질문에 답하는 데 약 50%의 시간을 더 사용했다.

새로운 팀원의 적응 지원 (chapter 13)

  • 인지 부담을 의도적으로 관리하는 것
    • 책에서 이야기한 내용을 토대로 코드를 파악할 때 어디서 인지 부하가 걸리고 있는지 파악하고 의사소통해보자!
    • 한번에 하나의 작업을 할 수 있도록!
    • 관련 문서화 지원하기
    • 새로 배운 개념을 기존 지식과 연결할 시간이 필요하다!