프로그래머의 뇌(33%작성)

yongseok·2022년 10월 2일
0

책으로 배운 개발

목록 보기
1/2

프로그래머의 뇌 : 훌륭한 프로그래머가 알아야 할 인지과학의 모든 것 / 펠리너 헤르만스 지음 ; 차건회 옮김(2022)

시작

올해 프로그래밍 학습을 다시 시작하면서 활동 중에 많은 분이 추천해주신 책이다. 책은 프로그래밍 과정에서의 사고의 과정이 어떠한지? 어떤 부분에 어떤 제약과 장애가 따르는지를 뇌 과학을 기반으로 설명한다. 개인적으로 어떤 대상이나 상황에 대해서 완전하지 않더라도 설명하려고 시도하는 편이 노력하지 않고 외면하는 것보다 유익하다고 생각한다.

뇌 과학적 설명을 통해서 프로그래밍 과정에서의 우리의 인지 과정을 이해해 앞으로의 만나는 어려움이나 율속반응단계, 병목지점이 어디에 있는지 확인하는 데 도움이 될 것을 기대했다.

전체를 한 번에 다 보는 것이 도움이 될 것 같지 않았다.(대부분을 그냥 그렇구나 하고 넘겼을 것이고, 정말 일부분만 남길 수 있었을 것 같다) 우선 각 쳅터의 요약을 읽어 전체의 분위기를 살피고 싶었다. 요약을 읽으면서 다행스럽게도 학부 때 ‘암기’와 ‘기억’에 대한 책을 읽어나간 적이 있었는데, 뇌 과학에서의 기억구조나 메타인지에 대해서 얼추 알고 있어 쳅터별 요약만을 가지고도 전반적으로 말하고자 하는 것을 확인할 수 있었다.

그렇구나! 끄덕끄덕 동의하면서 본문을 읽어나갈 수 있을 것으로 기대하고 있다. 4개 파트 13개 쳅터로 되어있고, 서로 독립적으로 보기는 어려울 것 같아 순서에 맞춰서 읽는 것이 좋겠다고 생각했다.

단순하게 지식적으로 많이 알고 있는 것이 중요한 게 아니고, 내 개발 실력 향상에 도움이 되도록 실천하고 활용해야 가치가 있다고 느끼고 있어 책을 읽는 목적을 실천 요소를 뽑아서 삶에 적용하기로 설정했다.

독서 기간은 총 4주가 될 것 같다. 목표는 주당 1개 쳅터를 읽으며 쳅터별로 실천할 요소를 뽑아 실천의 결과를 함께 공유하려고 한다. 오늘은 요약을 읽고 앞으로 집중할 포인트를 정리해 본다.

요약

part1. 읽기

  1. 기억의 종류
    1. 장기기억
    2. 단기기억
    3. 작업기억
  2. 두뇌에서 처리가 쉽도록 하려면?
  3. 인출 연습의 필요성
  4. 인지부하
    1. 내재적
    2. 외재적

part2. 생각

  1. 이해하기 좋으려면?
    1. 변수역할
      1. 텍스트 구조지식
      2. 계획지식
    2. 시각화/요약
  2. 표현 방식
    1. 개념적 기계
    2. 정신모델
  3. 기존 지식의 활용
    1. 전이
      1. 긍정적 전이
      2. 부정적 전이
    2. 오개념을 극복하기

part3. 작성

  1. 컨밴션의 효과
    1. 기억에 유리
    2. 식별에 유리
    3. 네이밍: 이름-개념-단어의 결합
  2. 코드스멜→인지부하 유발
    1. 구조적 문제
    2. 안티패턴→오해를 부르는 것들
      1. 이름과 구현의 불일치
  3. 사전 지식의 중요성
    1. 암시적 기억
    2. 명시적 기억

part4. 협업

  1. 중단이 미치는 영향
    1. 계획(문서화)로 대비 필요
    2. 지속할 수 있는 환경 조성
  2. 트레이드오프
    1. CDN→CDCB
    2. 최적화 대상
    3. 요구사항
  3. 주니어 성장
    1. 전문가→추상적 추록에 능함
    2. 새로 배운다: 추상적 용어, 예를 익힌다
      1. 기존지식과 연결
    3. 어떻게 지원할 수 있을까?

앞으로

꾸준하게 읽으며, 필요지식을 정리하고 적용해 좋은 습관을 만들고 싶다. 포스팅을 마치는 한달 뒤 어떤 배움이 있었는지, 추천하고 싶은 방법이 있는지 꼭 정리하고 싶다.


Part1.읽기

1장.

  • 장기기억:HDD/SDD→지식: 외부 참조가 필요한 것
  • 단기기억:RAM→정보: 적으면 해결할 수 있는 것
  • 작업기억:CPU→처리: 생각/사고로 해결 가능한 것(일부는 장기기억으로 만들 수 있다.)

메타인지 높이기(*의식적으로 생각해보기)

어떻게 동작하는가?→어디가/무엇이 문제인가?→어떻게 발전시킬까?

  • 어떤 기억을 사용하였는가?
    • 구체적으로 어떤 정보를 인지하는데 사용했는가?
  • 무시한 정보는 없는가?(필터링)
  • 광범위하게 작업기억을 사용한 부분은 ?
    • 어떤 부분을?
    • 어떻게 이해하였는가?

활용: 학습하면서 어디서 무엇이 문제인지 인지하기

2장.

  • 코드를 읽는 목적→특정 정보를 찾는다
    • 기능 추가 → 적당한 부분
    • 버그발견 → 마지막 수정에서 버그가 있을 법한 곳
    • 더 큰 시스템의 이해 → 특정 메서드가 어떻게 구현 됐는지
  • 영상기억공간
    • 코드의 구조는 어떻게 되어있는가?
      • 깊이 중첩된 구조인가? 아니면 중첩이 없는 평탄한 구조인가?
      • 눈에 띄는 라인은 있는가?
    • 코드에서 들여쓰기는 어떻게 되어 있는가?
      • 코드에 간격은 있는가?
      • 코드에 큰 뭉치처럼 보이는 것은 있는가?
  • 기억에 유리한 코드 작성
    • 디자인패턴의 사용
    • 주석문 쓰기
    • 표식 남기기
  • 의도적 연습
    • 코드선정
    • 코드파악
      • 사용하는 표식의 적극적 확인
    • 코드재현
    • 회고
      • 어느 부분을 쉽게 기억했는가?
      • 부분적으로 기억한 코드가 있는가?
      • 전체를 다 기억하지 못한 코드가 있는가?
      • 기억하지 못한 라인들이 있다면 그 이유는 무엇일까?
      • 기억하지 못한 라인에 본인이 익숙하지 않은 프로그래밍 개념이 들어 있지는 않은가?
      • 기억하지 못한 라인에 본인이 익숙하지 않은 도메인 지식이 있지는 않은가?
    • 코드에 다시 적용
    • 다른 사람과 비교

활용: 코딩테스트를 준비하면서 다른사람의 코드를 이해하고 재현하기

3장.

  • 업무 중단이 미치는 나쁜 영향→코딩을하면서 검색을 한다는 것은 흐름이 끊기게 된다.
  • 플래시카드 사용 연습
    • 앞면에 개념 적기 뒷면에 코드적기
    • 안키 사용중이니 잘 활용해 보자
    • 인출과 정교화
  • 새로운 개념을 만나면 해야할 일
    • 새로운 개념이 어떤 다른 개념을 생각나게 했는가? 모든 관련된 경험을 적기
    • 위에서 적은 관련된 개념에 대해 다음 질문들에 답하기
      • 새로운 개념은 왜 이미 알고 있는 그 개념을 생각나게 했을까?
      • 문법에 공통적인 점이 있는가?
      • 비슷한 환경에서 사용될 수 있는가?
      • 이 새로운 개념은 이미 알고 있는 그 개념 대신 사용될 수 있는가?
      • 동일한 목적을 달성하기 위해 작성할 수 있는 다른 방법의 코드를 알고 있는가?
    • 어떤 문제를 해결하는데 도움을 주는가?

활용: 새로운 지식 학습시 적용, 프로그래밍 문법 플래시 카드 안키 활용

4장.

  • 인지부하의 종류
    • 내재적 부하: 문제 자체가 얼마나 복잡한지
    • 외재적 부하: 외부적 요인에 의해 문제에 추가된 것
    • 본유적 부하: 생각을 LTM에 저장하는 과정에서 일어나는 인지부하
  • 부하줄이기→리팩터링
  • 보조 수단
    • 의존성 그래프 생성
      • 모든 변수를 원으로 표시
      • 비슷한 변수를 연결
      • 모든 메서드나 함수 호출을 원으로 표시
      • 메서드나 함수 호출을 정의와 연결
      • 클래스의 모든 인스턴스를 원으로 표시
      • 클래스와 그 클래스의 인스턴스를 연걸
    • 상태표 사용
      • 모든 변수를 나열
      • 테이블을 만들고 각 열에 하나의 변수를 기입
      • 코드의 실행단계마다 행을 만든다
      • 코드를 각 단계별로 실행하고 그 단계에서 변수들의 값을 해당하는 열과 행에 적는다.

활용: 정보처리기사 실기 문제에 우선 적용.

0개의 댓글