You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
이번 장은 문제 해결에 대한 내용을 답고 있는데 먼저, 문제를 해결한다는 것 자체를 살펴본다.
10.1 문제 해결이란 무엇인가?
이 장의 목표는 문제를 해결하는 데 LTM이 수행하는 역할을 살펴보고 문제 해결 능력을 개선하는데 도움이 될 만한 전략을 배우는 것이다.
10.1.1 문제 해결 요소
목표 상태, 즉 우리가 달성하고자 하는 것. 목표 상타에 도달하면 문제가 해결된 것으로 간주한다.
문제를 해결해야 하는 시작 상태
시작 상태에서 목표 상태에 도달하는 방법을 규정하는 규칙
10.1.2 상태 공간
프로그램을 해결할 때 고려할 수 있는 모든 단계를 문제의 상태 공간이라고 한다.
틱택토 게임을 예로 모든 가능한 칸의 경우가 상태 공간이다.
문제 해결은 가능한 한 적은 단계로 목표 상태에 도달하기 위해 상태 공간을 최적의 방식으로 탐색해나가는 것을 의미한다.
10.2 프로그래밍 문제를 해결할 때 LTM의 역할은 무엇인가?
10.2.1 문제 해결은 그 자체로 인지 과정인가?
어떤 사람들은 문제 해결이 일반적인 기술이며, 따라서 두뇌 속의 특정한 과정이라고 생각한다.
사고 체계
문제 이해
계획 수립
계획 실행
그러나 일반적 접근법의 인기에도 불구하고, 문제 해결은 일반적 기술도, 인지 과정도 아니라는 것이 지금까지의 연구 결과가 일관되게 보여주는 사실이다.
문제 해결 시 LTM 사용
첫째, 우리는 어떤 문제를 풀 때 원하는 목표 상태와 적용해야할 규칙에 대한 지식을 염두에 둔다.
우리가 설계할 수 있는 해결책은 문제 자체에 영향을 받는다.
문제를 이해한다.
계획을 세운다. (해석)
계획을 실행한다. (해결)
두뇌는 익숙한 문제를 해결하는 것이 더 쉽다
일반적인 문제 해결 방법이 효과적이지 않고 LTM의 작업과 관련이 있는 두 번째 이유가 있다.
3장에서 LTM에 있는 기억은 서로에 대한 네트워크로 지정된다고 설명했다.
두뇌가 문제를 해결하려고 할 때 이 전략을 인출하려고 한다.
그러나 일반적인 방법으로 문제를 해결하려고 하면, 관련 전략이 발견되지 않을 수 있다.
이에 단서가 필요.. 단서가 구체적일수록 올바른 기억을 찾을 가능성이 높다.
10.2.2 문제 해결을 위한 LTM 교육 방법
앞서 문제 해결이 인지 과정이 아니라는 것을 알아봤다.
따라서 문제 해결을 위해 어떻게 훈련을 해야할까?
10.2.3 문제 해결에 역할을 하는 두 가지 유형의 기억
첫째, 운동 능력이나 의식하지 않고 발휘하는 기술에 대한 기억인 절차적 기억이 있다.
절차적 기억의 예로는 신발 끈을 묶거나 자전거를 타는 법 등이 있다.
기억의 종류는 다양하고, 절차적 기억은 무언가를 하는 방법을 보여준다. 선언적 기억은 우리가 명확하게 알고 있는 기억으로 구성된다.
선언적 기억은 두 가지 유형으로 나뉘는데 일화적 기억에 저장되는 경험과 의미적 기억에 저장되는 사실로 구분된다.
문제를 해결할 때 역할을 수행하는 두 번째 유형의 기억은 선언적 기억이다.
자바로 for 루프를 쓰는 방법이 그 예다.
선언적 기억은 다시 일화적 기억과 의미적 기억으로 나뉜다.
일화적 기억은 기억 그자체를 의미한다. (여름 캠프에서 배우자를 만난 기억)
다른 범주로 의미적 기억이 있는데, 의미적 기억은 으미, 개념 또는 사실에 대한 기억이다.
문제를 해결할 때 어떤 유형의 기억이 역할을 수행하는가?
이러한 모든 형태의 기억은 프로그래밍을 수행하는 역할이 있다.
가장 먼저 떠오르는 기억은 명시적 기억일 것이다.
해당 언어에 대한 자신의 기억을 인출한다.
일화적 기억은 과거에 문제를 어떻게 해결했는지 기억할 때 사용한다. (게층 구조에는 트리를 사용한 기억)
전문가들은 문제를 해결할 때 특히 순간적인 기억력에 크게 의존하는 것이라고 한다.
절차적(암시적)기억은 아무렇지 않게 ctrl+c, ctrl+v를 사용한다.
탈학습
암시적, 절차적 기억이 작업을 신속하게 하는데 도움이 된다는 것을 알았다.
하지만 이러한 기억은 학습을 방해할 수 있다.
쿼티 키보드를 쓰다 드보락 키보드를 쓴다던가, C#언어의 문법을 너무 많이 쓰다 다른 언어를 배울 때 의식적으로 C#언어의 문법을 사용하는 것을 막아야 한다.
10.3 자동화: 암시적 기억 생성
이제 문제 해결 능력을 높이는 방법에 대해서 알아본다.
먼저 첫 번째 기술은 자동화다.
걷기, 독서, 신발 끈 묶기와 같이 어떤 기술을 여러 번 연습한 후에 아무 생각 없이 할 수 있을 정도가 되면 이 기술을 자동화했다고 한다.
게임에서 새로운 기술을 익히는 과정으로 생각할 수 있는데, 더블점프를 익히면 이전에는 도달하지 못했던 영역에 도달할 수 있기 때문이다.
따라서 프로그래밍 기술의 자동화는 더 크고 복잡한 문제를 해결할 수 있는 열쇠다.
하지만 어떻게 해야 자동화된 기술을 가질 수 있을까?
10.3.1 시간 경과에 따른 암시적 기억
프로그래밍에 대한 암시적 기억이 많을수록 인지 부하를 더 많이 절약할 수 있기 때문에 더 큰 문제를 해결하기 쉽다.
어떤 사실을 명시적 기억으로 저장하려면 명시적 주의가 필요하다.
자바의 for 루프를 사용하는 방법을 배우려면 명시적으로 이를 기억해야 한다.(스스로 배우고 싶어 해야함)
반면 암시적 기억은 다른 방식, 즉 반복에 의해 생성된다.
밥을 먹을 때 국물을 숟가락으로 떠먹는 등 시간이 지나면서 차츰 익히게 된다.
인지 단계
인지 단계는 무언가 새로운 것을 배우는 때로 새로운 정보를 더 작은 부분으로 나누고 당면한 작업에 대해 명시적으로 생각한다.
연상 단계
이 단계에서는 응답 패턴이 나타날 때까지 새 정보를 적극적으로 반복해야 한다.
자율 단계
마지막으로, 기술이 완벽한 자율 단계에 도달한다.
10.3.2 자동화를 통해 보다 신속하게 프로그램을 실행할 수 있는 이유
기술에 관한 대규모 저장소를 만들면 새로운 기술을 계속 습득해나갈 수 있는 일종의 툴박스를 만들 수 있ㄷ.
이는 LTM의 일화적 기억이 인출함으로써 이루어진다고 주장하며 '인수분해에 대한 기억'이라는 클래스의 한 인스턴스로 간주되기 때문에, 이 이론을 인스턴스 이론이라고 부른다.
객체지향적으로 유사한 작업을 만났을 때 해당 인스턴스 기억을 많이 가지고 있다면 이전에 수행했던 방법으로 동일한 방법을 적용할 수 있다.
10.3.3 암시적 기억 개선
프로그래밍에서는 일반적으로 의도적 연습을 하지 않는다.
오류 없는 루프를 작성하는 데 어려움을 겪고 있다고 해서, 의도적으로 for루프를 100번 작성하는 것은 개발자 세계에서 없는 일이다.
의도적 연습은 다른 방법으로도 가능하다.
첫째, 연습하고자 하는 기술이 필요한, 유사하지만 다른 프로그램을 많이 작성해보는 것이다.
10.4 코드와 해설에서 배우기
문제 해결 능력을 향상하기 위해 사용할 수 있는 두 번째 방법은 다른 사람들이 문제를 어떻게 해결했는지 의도적으로 연구하는 것이다.
다른 사람들이 문제를 어떻게 해결했는지 연구함으로써 얻는 해결책은 종종 풀이된 예제라고 부른다.
10.4.1 새로운 유형의 인지 부하: 본유적 부하
본유적 부하는 두뇌가 LTM에 다시 저장하기 위해 수행하는 노력을 의미한다.
모든 인지 부하가 내재적 부하와 외재적 부하로 가득 차면, 본유적 부하를 위한 여지는 남아 있지 않게 된다.
힘든 코딩 작업을 마친 후 때때로 자신이 한 일을 기억하지 못하는 경우가 있을 것이다.
이것이 바로 이런 이유 때문이다.
두뇌가 해결책을 저장할 수 없을 정도로 몰입해 있었던 것이다.
10.4.2 개발 작업 시 풀이된 예제 활용하기
동료와의 협업
첫째, 코드를 혼자 공부할 필요는 없다.
누군가와 함께 공부하는 것이 더 유용하다.
깃허브 탐구
혼자서 코드를 읽어야 한다면 온라인에 소스 코드와 설명서가 많이 있다.
소스 코드에 대한 책 또는 블로그 읽기
마찬가지로 블로그도 좋은 게시물들이 있다.
요약
프로그래밍에 종사하는 많은 사람은 문제 해결이 일반적인 기술이라고 주장하지만, 그렇지 않다. 프로그래밍에 대한 사전 지식이 현재 해결 중인 문제와 경합해 프로그래밍 문제를 얼마나 빨리 해결할 수 있는지에 영향을 미친다.
LTM은 다양한 유형의 기억을 저장하는데, 이들은 문제를 해결할 때 모두 각자 다른 역할을 한다. 기억의 저장의 가장 중요한 두 범주는 암시적 기억과 명시적 기억이다. 암시적 기억은 '근육 기억'으로 타자 타이핑 같은 작업을 말하고 명시적 기억은 for루프 문법과 같은 능동적으로 불러와야 하는 기억이다.
프로그래밍과 관련된 암시적 기억을 강화하려면 터치 타이핑, 관련 단축키 암기 같은 관련 기술을 자동화하는 것이 가장 효과적이다.
프로그래밍과 관련된 명시적 기억을 강화하려면 기존 코드, 가급적이면 코드 설계 방법에 대한 설명이 포함된 코드를 탐구하라
The text was updated successfully, but these errors were encountered:
복잡한 문제 해결을 더 잘하려면
이번 장은 문제 해결에 대한 내용을 답고 있는데 먼저, 문제를 해결한다는 것 자체를 살펴본다.
10.1 문제 해결이란 무엇인가?
이 장의 목표는 문제를 해결하는 데 LTM이 수행하는 역할을 살펴보고 문제 해결 능력을 개선하는데 도움이 될 만한 전략을 배우는 것이다.
10.1.1 문제 해결 요소
10.1.2 상태 공간
프로그램을 해결할 때 고려할 수 있는 모든 단계를 문제의 상태 공간이라고 한다.
틱택토 게임을 예로 모든 가능한 칸의 경우가 상태 공간이다.
문제 해결은 가능한 한 적은 단계로 목표 상태에 도달하기 위해 상태 공간을 최적의 방식으로 탐색해나가는 것을 의미한다.
10.2 프로그래밍 문제를 해결할 때 LTM의 역할은 무엇인가?
10.2.1 문제 해결은 그 자체로 인지 과정인가?
어떤 사람들은 문제 해결이 일반적인 기술이며, 따라서 두뇌 속의 특정한 과정이라고 생각한다.
사고 체계
그러나 일반적 접근법의 인기에도 불구하고, 문제 해결은 일반적 기술도, 인지 과정도 아니라는 것이 지금까지의 연구 결과가 일관되게 보여주는 사실이다.
문제 해결 시 LTM 사용
첫째, 우리는 어떤 문제를 풀 때 원하는 목표 상태와 적용해야할 규칙에 대한 지식을 염두에 둔다.
우리가 설계할 수 있는 해결책은 문제 자체에 영향을 받는다.
두뇌는 익숙한 문제를 해결하는 것이 더 쉽다
일반적인 문제 해결 방법이 효과적이지 않고 LTM의 작업과 관련이 있는 두 번째 이유가 있다.
3장에서 LTM에 있는 기억은 서로에 대한 네트워크로 지정된다고 설명했다.
두뇌가 문제를 해결하려고 할 때 이 전략을 인출하려고 한다.
그러나 일반적인 방법으로 문제를 해결하려고 하면, 관련 전략이 발견되지 않을 수 있다.
이에 단서가 필요.. 단서가 구체적일수록 올바른 기억을 찾을 가능성이 높다.
10.2.2 문제 해결을 위한 LTM 교육 방법
앞서 문제 해결이 인지 과정이 아니라는 것을 알아봤다.
따라서 문제 해결을 위해 어떻게 훈련을 해야할까?
10.2.3 문제 해결에 역할을 하는 두 가지 유형의 기억
첫째, 운동 능력이나 의식하지 않고 발휘하는 기술에 대한 기억인 절차적 기억이 있다.
절차적 기억의 예로는 신발 끈을 묶거나 자전거를 타는 법 등이 있다.
문제를 해결할 때 역할을 수행하는 두 번째 유형의 기억은 선언적 기억이다.
자바로 for 루프를 쓰는 방법이 그 예다.
선언적 기억은 다시 일화적 기억과 의미적 기억으로 나뉜다.
일화적 기억은 기억 그자체를 의미한다. (여름 캠프에서 배우자를 만난 기억)
다른 범주로 의미적 기억이 있는데, 의미적 기억은 으미, 개념 또는 사실에 대한 기억이다.
문제를 해결할 때 어떤 유형의 기억이 역할을 수행하는가?
이러한 모든 형태의 기억은 프로그래밍을 수행하는 역할이 있다.
가장 먼저 떠오르는 기억은 명시적 기억일 것이다.
해당 언어에 대한 자신의 기억을 인출한다.
일화적 기억은 과거에 문제를 어떻게 해결했는지 기억할 때 사용한다. (게층 구조에는 트리를 사용한 기억)
전문가들은 문제를 해결할 때 특히 순간적인 기억력에 크게 의존하는 것이라고 한다.
절차적(암시적)기억은 아무렇지 않게 ctrl+c, ctrl+v를 사용한다.
탈학습
암시적, 절차적 기억이 작업을 신속하게 하는데 도움이 된다는 것을 알았다.
하지만 이러한 기억은 학습을 방해할 수 있다.
쿼티 키보드를 쓰다 드보락 키보드를 쓴다던가, C#언어의 문법을 너무 많이 쓰다 다른 언어를 배울 때 의식적으로 C#언어의 문법을 사용하는 것을 막아야 한다.
10.3 자동화: 암시적 기억 생성
이제 문제 해결 능력을 높이는 방법에 대해서 알아본다.
먼저 첫 번째 기술은 자동화다.
걷기, 독서, 신발 끈 묶기와 같이 어떤 기술을 여러 번 연습한 후에 아무 생각 없이 할 수 있을 정도가 되면 이 기술을 자동화했다고 한다.
게임에서 새로운 기술을 익히는 과정으로 생각할 수 있는데, 더블점프를 익히면 이전에는 도달하지 못했던 영역에 도달할 수 있기 때문이다.
따라서 프로그래밍 기술의 자동화는 더 크고 복잡한 문제를 해결할 수 있는 열쇠다.
하지만 어떻게 해야 자동화된 기술을 가질 수 있을까?
10.3.1 시간 경과에 따른 암시적 기억
프로그래밍에 대한 암시적 기억이 많을수록 인지 부하를 더 많이 절약할 수 있기 때문에 더 큰 문제를 해결하기 쉽다.
어떤 사실을 명시적 기억으로 저장하려면 명시적 주의가 필요하다.
자바의 for 루프를 사용하는 방법을 배우려면 명시적으로 이를 기억해야 한다.(스스로 배우고 싶어 해야함)
반면 암시적 기억은 다른 방식, 즉 반복에 의해 생성된다.
밥을 먹을 때 국물을 숟가락으로 떠먹는 등 시간이 지나면서 차츰 익히게 된다.
인지 단계
인지 단계는 무언가 새로운 것을 배우는 때로 새로운 정보를 더 작은 부분으로 나누고 당면한 작업에 대해 명시적으로 생각한다.
연상 단계
이 단계에서는 응답 패턴이 나타날 때까지 새 정보를 적극적으로 반복해야 한다.
자율 단계
마지막으로, 기술이 완벽한 자율 단계에 도달한다.
10.3.2 자동화를 통해 보다 신속하게 프로그램을 실행할 수 있는 이유
기술에 관한 대규모 저장소를 만들면 새로운 기술을 계속 습득해나갈 수 있는 일종의 툴박스를 만들 수 있ㄷ.
이는 LTM의 일화적 기억이 인출함으로써 이루어진다고 주장하며 '인수분해에 대한 기억'이라는 클래스의 한 인스턴스로 간주되기 때문에, 이 이론을 인스턴스 이론이라고 부른다.
객체지향적으로 유사한 작업을 만났을 때 해당 인스턴스 기억을 많이 가지고 있다면 이전에 수행했던 방법으로 동일한 방법을 적용할 수 있다.
10.3.3 암시적 기억 개선
프로그래밍에서는 일반적으로 의도적 연습을 하지 않는다.
오류 없는 루프를 작성하는 데 어려움을 겪고 있다고 해서, 의도적으로 for루프를 100번 작성하는 것은 개발자 세계에서 없는 일이다.
의도적 연습은 다른 방법으로도 가능하다.
첫째, 연습하고자 하는 기술이 필요한, 유사하지만 다른 프로그램을 많이 작성해보는 것이다.
10.4 코드와 해설에서 배우기
문제 해결 능력을 향상하기 위해 사용할 수 있는 두 번째 방법은 다른 사람들이 문제를 어떻게 해결했는지 의도적으로 연구하는 것이다.
다른 사람들이 문제를 어떻게 해결했는지 연구함으로써 얻는 해결책은 종종 풀이된 예제라고 부른다.
10.4.1 새로운 유형의 인지 부하: 본유적 부하
본유적 부하는 두뇌가 LTM에 다시 저장하기 위해 수행하는 노력을 의미한다.
모든 인지 부하가 내재적 부하와 외재적 부하로 가득 차면, 본유적 부하를 위한 여지는 남아 있지 않게 된다.
힘든 코딩 작업을 마친 후 때때로 자신이 한 일을 기억하지 못하는 경우가 있을 것이다.
이것이 바로 이런 이유 때문이다.
두뇌가 해결책을 저장할 수 없을 정도로 몰입해 있었던 것이다.
10.4.2 개발 작업 시 풀이된 예제 활용하기
동료와의 협업
첫째, 코드를 혼자 공부할 필요는 없다.
누군가와 함께 공부하는 것이 더 유용하다.
깃허브 탐구
혼자서 코드를 읽어야 한다면 온라인에 소스 코드와 설명서가 많이 있다.
소스 코드에 대한 책 또는 블로그 읽기
마찬가지로 블로그도 좋은 게시물들이 있다.
요약
The text was updated successfully, but these errors were encountered: