Posts 프로그래머의 뇌 6장 코딩 문제 해결을 더 잘하려면
Post
Cancel

프로그래머의 뇌 6장 코딩 문제 해결을 더 잘하려면

이 장에서는 여러 가지 소프트웨어 설계에 관한 결정을 할 때 통찰력을 얻는데 도움이 될 만한 두가지 프레임워크에 대해 다룬다

  • 문제 해결과 프로그래밍 작업 도중 두뇌가 생성하는 심적 표상
  • 문제를 풀 때 어떻게 컴퓨터에 대해 추상화하는지

6.1 모델을 사용해서 코드에 대해 생각해보기

모델은 실재를 간단히 표현한 것으로, 문제에 대해 생각하고 해결하는 데 도움을 주기 위한 것이다. 모델은 여러 모양과 다양한 수준의 형식을 띌 수 있다

문제를 풀 때 코드의 모델을 명시적으로 사용하는 것은 두가지 장점이 있다

  • 프로그램에 대한 정보를 다른 사람과 공유할 때 유용하다
  • 두뇌의 인지 부하를 줄일 수 있고, 문제에 제약사항을 더해 LTM이 관련된 기억을 찾는데 도움을 준다.

하지만 모든 모델이 같은 수준으로 동일하게 도움이 되는 것은 아니다. 문제를 어떻게 표현하는지가 중요하다. 따라서 언어에따라 다른 표현의 방식은 문제 해결에 도움이 될 수도 해가 될 수도 있다

6.2 정신 모델

상태표, 의존 그래프 등은 두뇌의 바깥에서 생성되는 모델로 다른 사람과 의사소통하거나 문제에 대해 깊이 생각할때 활용할 수 있다. 두뇌 내부에서 모델이 생성될 수도 있는데, 이를 정신 모델이라고 한다.

정신 모델은 문제에 대해 추론하기 위해 사용할 수 있는 작업 기억 공간 내의 추상화이다. (ex : 파일시스템, 코드의 실행 방법).

이러한 모델은 우리 생각과 다를 수 있는데, 최적화를 수행한 코드를 실행할 때는 컴파일러의 최적화로 개발자의 생각과 다르게 진행될 수도 있다.

정신모델 자세히 살펴보기

  • 정신모델은 불안정하다. 같은 상태를 계속 유지할 필요도 없다
  • 서로 간에 모순이 있다해도 여러개의 정신 모델이 공존할 수 있다
  • 종종 이상하고 미신처럼 느껴지는 정신모델이 있을 수 있다
  • 사람들은 가급적으면 정신 모델을 사용하지 않으려한다. 에너지가 많이 들기 때문이다

새로운 정신모델 배우기

정신모델은 여러개가 공존할 수 있다. 프로그래밍을 배우며 사람들은 새로운 정신 모델을 배워나가는데, LTM에는 이전에 생성된 정신 모델이 있을 수 있다. 따라서 이전에 배운 불완전한 정신 모델을 무심코 다시 사용될 가능성이 존재한다.

정신모델의 효율적 사용

정신 모델은 LTM에 저장되어 필요할 때 인출되는가? 아니면 코드를 생각할 때 작업 기억 공간에서 만들어지는가? 어떻게 처리되는지 알면 모델을 효과적으로 사용하는데 도움이 될 것이다. 여기에는 두가지 서로 다른 견해가 있다

작업 기억 공간에서의 정신 모델

존스-레어드는 두뇌가 추론을 하는 동안 정신 모델이 사용되고, 따라서 작업 기억 속에 존재한다고 주장했다. 이렇다고하면 작업 기억공간 속에 정확하고 구체적인 정신 모델은 어떻게 만들 수 있을까? 다음 단계를 수행하면 도움이 될 것이다.

  1. 국지적 모델을 만든다
    • 상태표, 의존 그래프와 같이 손으로 직접 작성한 모델을 만든다.
    • 이는 코드의 국지적인 부분만 나타내지만 작업 기업 공간의 부하를 줄일 수 있고, 더 큰 규모의 정신 모델의 구성 요소로 사용할 수 있기에 도움이 된다.
  2. 코드에서 관련된 모든 객체와 객체간의 관계, 제약조건을 나열한다.
  3. 시스템에 대한 질문을 만들고, 이 질문의 답을 사용하여 모델을 개선한다

LTM의 정신 모델

정신 모델이 LTM에 저장되며 필요할 때 기억해낼 수 있다는 주장도 있다. 이를 활용하여 프로그래밍에서는 예를들어 트리를 탐색하는 것에 대한 추상적인 표현을 저장할 수 있다. 이를 통해 이전에 본 것과 유사한 상황을 새로 접했을 때 사용할 수 있다.

플래시카드를 사용하여 LTM에 저장되는 정신 모델을 확장할 수 있다. 한쪽에는 정신모델의 이름을 적고, 다른 한쪽에는 간략한 설명이나 시각화된 정보를 적는다

이 플래시카드를 통해 아래와같이 활용 가능하다

  1. 지식 테스트
  2. 이해하기 어려운 코드를 만났을때, 이해를 돕기위한 정신모델 탐색

6.3 개념적 기계

개념적 기계는 컴퓨터가 코드를 실행하는 방법에 대해 추론할 때 사용하는 모델이다 프로그래밍 언어가 어떻게 동작하는지 이해하고자 할 때, 대부분은 프로그래밍 언어를 통해 더 높은 개념적 수준에서 일어나는 효과에 관심이 있다.

이러한 개념적 기계는 불완전할지는 몰라도 프로그래밍 언어의 실행에 대해 일관적이고 정확하게 추상화한 것이다. 정신 모델은 잘못되거나 일관되지 않을 수도 있다

예를들어 아래와 같은 코드가 있을 때

1
2
double celsius = 10;
double fahrenheit = (9.0 / 5.0) * celsius + 32;

우리는 아래와 같이 생각한다.

1
double fahrenheit = ((9.0 / 5.0) * 10) + 32;

이렇게 우리는 마음속으로 기계가 어떻게 동작할건지 예측한다. 이는 기계가 내부적으로 정확히 어떻게 동작하는지와는 다르지만 유용하게 사용할 수 있다.

개념적 기계는 프로그래밍 언어 수준에서 작동하며 기저에 있는 시스템의 모든 세부사항은 추상화한다. 따라서 코드에 대해 추론할 때 자신이 어떤 세부사항을 무시하고 있는지 아는 것이 중요할 수 있다.

6.4 개념적 기계와 언어

프로그래밍에 관해 말할 때는 암시적으로 개념적 기계가 바탕에 깔려있고 특정 정신 모델로 이어지는 경우가 많다.

  • 파일의 열림/닫힘
  • “포인터”가 특정 값을 “가리킨다”

이러한 개념적 기계는 하나만 있는 것이 아니라 서로 겹치는 여러 개의 개념적 기계들이 있다. 하나가 다른 개념적 기계의 구성요소로 쓰이는 경우도 있다.

하지만 개념적 기계가 만들어내는 정신 모델은 서로 충돌할 수도 있다. 예를들어 변수를 상자로 이해하는 것과 이름표로 이해하는 것은 서로 충돌한다. 이러한 정신 모델의 차이가 실제로 프로그래밍 개념을 이해하는데 영향을 끼칠 수 있으니, 컴퓨터의 동작을 현실 세계의 사물로 비유하여 이해하는 것은 신중히 이뤄져야한다

6.5 개념적 기계와 스키마타

개념적 기계는 단점은 있지만 프로그래밍에 관해 생각할 때 일반적으로 효과적이다. 효과적인 개념적 기계는 프로그래밍 개념을 일상생활의 개념과 연관 짓는데, 이런 일상생활의 개념에 대해서는 강한 스키마타가 이미 형성되어있기 때문이다.

스키마타는 LTM이 정보를 저장하는 방식이다. 그렇기에 일반적으로 사람들이 강한 정신모델을 가진 개념과 연관지어서 이해하면 추가적인 인지부하가 발생하지 않는다. (ex : 변수는 상자와 같다) 따라서 설명을 듣는 사람들이 익숙한 개념과 연관 지으면 더욱 효과적이다

This post is licensed under CC BY 4.0 by the author.

프로그래머의 뇌 5장 코드를 더 깊이 있게 이해하기

프로그래머의 뇌 7장 생각의 버그

Comments powered by Disqus.