7. 생각의 버그
- 두뇌를 돕는 데 사용하는 기술이 아무리 유용해도, 여전히 코드에 대해 잘못 생각할 수 있습니다.
#
7.1 왜 두 번째 프로그래밍 언어가 첫 번째보다 쉬울까?- 무언가를 배울 때, 이미 배운 지식은 다른 영역에서도 유용합니다. 이를 전이(transfer) 이라고 부릅니다.
- LTM에 저장된 프로그래밍 지식은 새로운 프로그래밍 개념을 배우는 데 두 가지 방식으로 도움이 됩니다.
- LTM에 저장된 정보를 사용해서 새로운 내용을 쉽게 배우는 이 과정을 학습 도중 전이(transfer during learning) 이라고 부릅니다.
- 학습 전이(transfer of learning)이며, 이는 완전히 낯선 상황에 이미 알고 있는 내용을 적용할 때 일어납니다.
#
7.1.1 기존 프로그래밍 지식을 활용할 가능성을 높이는 방법- 한 작업에서 다른 작업에서 전이할 수 있는 학습의 양은 달라질 수 잇고 많은 요인에 의해 영향을 받습니다.
- 숙달, LTM에 이미 저장되어 있는 지식과 관련한 작업을 얼마나 잘 숙달했는지에 대한 것입니다.
- 유사성, 두 작업 간의 공통점입니다.
- 배경, 환경이 얼마나 비슷한지에 대한 것입니다.
- 중요 특성, 어떤 지식이 효과적인지에 대해 분명하게 알고 있는지에 대한 것입니다.
- 연관, 두 작업이 비슷하다고 얼마나 강하게 느끼는지에 대한 것입니다.
- 감정, 작업에 대해 어떻게 느끼는지에 대한 것입니다.
#
7.1.2 전이의 다른 형태- 전이에 대해서는 여러 관점이 있습니다.
#
고도 전이와 저도 전이- 자동화된 기술의 전이와 의식적으로 습득한 기술의 전이는 차이가 있습니다.
- 저도 전이(low-road transfer)는 자동화된 기술을 이전하는 것입니다.
- 고도 전이(high-road transfer)는 복잡한 작업이 전이 되는 것을 의미하며, 인지하는 경우가 많습니다.
#
근거리 전이와 원거리 전이- 가까운 영역 사이에서 전이될 때 근거리 전이(near transfer)가 일어납니다. (ex. 자바와 C#)
- 자바와 프롤로그와 같이 서로 먼 영역 간에 일어나는 전이를 원거리 전이(far transer)이라고 합니다.
#
7.1.3 이미 알고 있다는 것은 저주인가 축복인가?- 새로운 것을 배우거나 새로운 작업을 할 때 도움이 되는 전이를 긍정적 전이(positive transfer) 라고 부릅니다.
- 기존 지식이 새로운 것을 배우는 데 방해가 될 때, 이것을 부정적 전이(negative transfer) 라고 부릅니다.
- 변수를 초기화하지 않거나 예외를 잘못 처리하는 것은 비교적 작은 오류로, 쉽게 수정할 수 있습니다.
#
7.1.4 전이의 어려움- 상황이 비슷해야 전이 가능성이 높아집니다.
- 프로그래밍 교육의 영향에 관한 연구 대부분이 프로그래밍 교육의 효과가 거의 없다는 것을 보여줍니다.
- 하나의 프로그래밍 언어를 숙달했다는 사실이 새로운 언어를 배우는 데 항상 도움이 되는 것은 아닙니다.
#
7.2 오개념: 생각의 버그- 코드가 작동한다고 확신함에도 불구하고 여전히 오류가 발생한다면 코드에 대한 오개념(misconception, 오해)가 문제일 가능성이 있습니다.
- 어떤 신념이 오개념이 되려면, 다음과 같이야 합니다.
- 사실과 다르다
- 서로 다른 상황에서 일관되게 유지된다.
- 확신에 사로잡혀 있다.
- 프로그래밍에서 오개념은 흔하게 목격할 수 있습니다.
#
7.2.1 개념 변화를 통한 오개념 디버깅- 오개념은 강한 확신 속에 있는 잘못된 사고방식입니다.
- 이미 알고 있는 프로그래밍 언어 때문에 생긴 오개념을 현재 학습 중인 새로운 언어에 맞는 정신 모델로 대체하는 과정을 개념 변화(conceptual change) 라고 합니다.
- 새로운 프로그래밍 언어를 배울 때는 이전 프로그래밍 언어에 대한 기존의 지식을 떨쳐내기 위해 많은 에너지를 소비해야 합니다.
#
7.2.2 오개념 제압하기- 잘못된 사고방식의 오래된 기억은 여전히 남아있습니다.
- 두뇌가 어떤 저장된 개념을 사용할지 결정하는 기제는 정확히 알려져 있지 않지만 억제(inhibition) 가 일정 역할을 한다는 것은 알려져 있습니다.
#
7.2.3 프로그래밍 언어에 대한 오개념- 대표적인 유명한 오개념은 다음과 같습니다.
- 오개념 15: 원시 데이터 타입 변수에 대한 할당은 수식 또는 아직 연산 실행이 되지 않는 표현식을 저장합니다.
- 오개념 33: 조건이 거짓(false)으로 변경되는 즉시 while 루프가 종료됩니다.
- 오개념 46: 매개변수 전달에는 호출과 정의에 서로 다른 변수 이름이 필요합니다.
#
7.2.4 새로운 프로그래밍 언어를 배울 때 오개념 방지하기- 오개념을 막을 좋은 방법은 다음과 같습니다.
- 첫째, 자신이 옳다고 확신하더라도 여전히 틀릴 수도 있다는 것을 아는 것이 주용합니다.
- 둘째, 흔하게 발생하는 오개념에 대해 의도적으로 연구해봄으로써 그런 오개념에 빠지는 것을 방지할 수 있습니다.
- 셋째, 같은 프로그래밍 언어를 같은 순서로 학습한 다른 프로그래머들에게 조언을 구하는 것입니다.
#
7.2.5 새로운 코드베이스에서의 오개념 진단- 함께 프로그래밍하는 방법도 좋은 방법 중 하나입니다.
- 문서화는 오개념을 해소할 방법 중 하나입니다.
#
요약- LTM에 이미 저장된 지식은 새로운 상황으로 전이될 수 있습니다. 때로는 기존의 지식이 학습 속도를 높이거나 새로운 작업을 더 잘 수행하는 데 도움이 됩니다. 이를 긍정적 전이라고 합니다.
- 한 도메인에서 다른 도메인으로의 지식 전이는 부정적일 수도 있습니다. 부정적 전이가 일어나면 기존 지식은 새로운 것을 배우거나 새로운 작업을 수행하는 데 방해가 됩니다.
- LTM에서 관련 정보를 적극적으로 검색하면 긍정적인 전이가 일어나 새로운 것을 보다 효과적으로 배울 수 있습니다.
- 우리는 오개념을 가질 수 있습니다. 자신이 옳다고 확신하지만 실제로는 틀릴 때 오개념을 갖게 됩니다.
- 오개념은 단순히 자신이 틀렸다는 것을 깨닫거나 듣는 것만으로는 해결되지 않습니다. 오개념을 바로잡기 위해서는 오래되고 잘못된 모델을 대체할 새로운 정신 모델이 필요합니다.
- 올바른 모델을 배웠더라도 오개념을 다시 사용할 위험이 있습니다.
- 오개념을 방지하는 데 도움이 되기 위해 코드베이스 내의 테스트 및 문서화를 사용합니다.