Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions 10장/우창완.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# 복잡한 문제 해결을 더 잘하려면

### 10.1 문제 해결이란 무엇인가?

문제 해결 3요소

- 목표 상태 -> 목표 상태에 도달하면 문제가 해결된 것이다.
- 현재 상태
- 시작상태에서 목표 상태에 도달하는 방법을 규정하는 규칙

### 10.2 프로그래밍 문제를 해결할 때 LTM의 역할은 무엇인가?

#### 10.2.1 문제 해결을 그 자체로 인지 과정인가?

인지 과정이라는 해석이 어색한 것 같은데,
여기에서 말하는 문제해결은 일반적인 기술이나, 두뇌 속의 특정 과정이 아니다.(즉, 일반화할 수 없다.)

문제 해결 단계는 아래와 같다.

- 문제 이해
- 계획 수립
- 계획 실행

#### 10.2.3 문제 해결에 역할을 하는 두 가지 유형의 기억

암시적 기억: 운동 능력(머슬 메모리.?) 나 의식하지 않고 발휘하는 기술 (신발 묶고 자전거 타는 것)
명시적 기억: 어떤 것을 안다는 사실
memory와(일상적 기억) semantic(지식 느낌.?) 으로 나누어짐

탈학습: 때로는 암시적기억이 인지부하가 되는 경우가 있음

### 10.3 자동화: 암시적 기억 생성

A라는 문제를 푸는 것이 체화되면 A를 이용하여 더 큰 B라는 문제를 풀 때 인지부하가 A만큼 인지부하가 덜하다.
그런데, 명시적 기억보다 암시적 기억이 체화에 더 유리할 것 같다. 하지만 프로그래밍에서는 명시적 기억이 더 중요한 것이 아닐까?
for문, list 컴프리헨션등의 체화 예시가 프로그래밍 중의 굉장히 일부의 예시여서 와닿지는 않는다.

### 10.4 코드와 해설에서 배우기

최근에 고민하고 있는 주제인데, 나는 개발을 시작할 때 야생형 개발자가 되어야한다는 말을 많이 들었다. 그래서 특정 프로그래밍 컨셉을 공부할 때 코드를 직접 작성해보면서 기술에 대해 학습하고 있었다.
나에게 맞는 학습 방법이 되어가고 있었다.
최근에 이에 관해서 문제해결이 엄청 뛰어난 분과 이야기할 기회가 있었는데, 특정 기술에 대해 바로 개발을 시작해보는 것보다, 어떤 것이 best practice이고, 소스 코드를 직접 찾아가며 검증하고, 다른 best practice는 무엇이 있는지 찾아본다는 이야기를 나누게 되었다.
분명 시행착오를 많이 줄여줄 수 있겠다는 생각이 들면서도, 아직 복잡한 코드를 먼저 보는 것이 익숙하지 않아서인지 망설여지기도 한다. 그래도 츄라이 해봐야겠다.
(책에 따르면 문제해결은 일반화할 수 있는 기술이 아니라, 풀고자 하는 문제에 대해 사전지식이 얼마나 빠르게 문제를 해결할 수 있는지에 영향을 미친다고 한다.)