🚀 94sssh
Published on

2023.12.03

[프로그래머의 뇌] - 09 / 10

9챕터에서는 어떤 코드가 인지 부하를 일으키는지에 대해 크게 2가지로 나누어 설명하고 있다.

하나는 코드 스멜로, 리팩터링 책을 읽어봤다면 익숙할 용어다.
리팩터링이 필요한 코드에 대한 정의로, 저자가 세운 몇 가지 원칙에 따라 리팩터링이 필요한 코드를 설명하는 데 쓰인다.

사실 리팩터링을 읽을 때, 기준이 명확하고 분류가 확실해서 원칙들을 지키면 좋은 코드가 되겠구나 싶었다가도,
이후에 해당 내용을 반박하는 내용들을 예시와 함께 접해보고나니 강박처럼 원칙을 지키다보면 주객전도가 되겠다는 생각이 들었다.
그래서 내용에 사로잡히진 말아야겠다고 하면서도 코드 스멜이 어떻게 악영향을 미치는가에 대한 과정을 따라가는 방식은 흥미로웠다.
그 중에서도 언어적 안티패턴은 몇 주째 이어지는 고민의 연장선이었다.
언어적 안티패턴은 이름에서 기대되는 역할과 실제 하고 있는 역할의 불일치에서 발생한다.
함수 이름을 작성할 때, get, on, call등의 접두사 중 어느 것이 적절할지 헷갈려 기준을 찾아보곤 했다.
개인적인 프로젝트라면 상관없을 수도 있지만, 협업할 때 이러한 이름을 잘못 사용하면 직관적이지 않고,
이해를 위한 시간이 추가적으로 소요되기 때문에 비효율적이다.
이러한 구조적, 개념적 안티패턴에서 발생하는 잘못된 청킹은 불친절한 코드보다 더 많은 노력과 시간을 요구할 수 있어 주의해야겠다.

이러한 정도가 이번 챕터들에서 유익한 내용이었고, 눈 측정, 피부 측정 같은 내용은 건너 뛰었다.

10챕터에서는 문제 해결에 대한 내용을 다루었다.

문제 해결에 대한 내용은 크게 문제 해결을 위한 접근법과 그에 수반되는 LTM의 역할, 그리고 자동화에 대한 내용으로 나뉘었다.
먼저 문제 해결은 인지 과정이 아니라고 한다.
그보다는 LTM과 작업 기업 공간등의 협업을 통해 문제 상황에 대한 정보를 가져오고, 관련 배경 지식을 검색한다.
이 중 일화적 기억은 과거에 문제를 해결한 기억을 통해 과거의 해결방법을 가져온다.
코드를 작성하고, 알고리즘 문제를 풀면서 한 번에 통과한 경우보다는 틀리고 이유를 찾는 과정이 많았는데,
이런 과정에서 왜 틀렸는지를 이해하고, 어떻게 하면 풀 수 있는지를 학습하면서 일화적 기억이 강화되고 그게 이후의 문제 해결에 많이 도움을 주는 것 같다.

자동화

자동화에 대한 내용은 반사적이라고 이해했다.
자동화된 기억이나 기술에 대한 내용은 그 내용을 떠올리기 위한 어떤 특별한 노력이나 과정없이 바로 결과를 도출할 수 있다.
이러한 기억은 암시적 기억이라고 부르며, 인지 단계 - 연상 단계 - 자율 단계의 정보 저장 단계를 거쳐 만들어진다고 한다.
이 중 자율 단계를 자동화라고 볼 수 있다.
그런데 다른 기술과 달리 프로그래밍에서는 의도적인 연습을 하지 않는다고 한다.
이러한 내용은 단순히 문제를 많이 푼다거나, 코드를 많이 짜본다의 측면이 아니라, 기본기 연습을 위한 노력을 말하는 것이다.
책에서는 예시로 for 루프를 100번 작성해보기를 들고 있다.
예체능 등의 분야를 보면 특히나 숙달된 사람이라고 하더라도 기본기 연습을 게을리 하지 않는다.
그림을 그리는 사람은 크로키를, 기타를 친다면 크로매틱을, 운동을 한다면 기본기 운동을 빼놓지 않는다.

책에서는 문제 해결 능력을 키우기 위한 방법으로 다른 사람들의 풀이를 연구하는 것을 소개한다.

본유적 부하

본유적 부하는 뇌가 LTM에 정보를 다시 저장하기 위한 노력이라고 한다.
인지 부하가 내재적 부하와 외재적 부하로 가득 차면, 본유적 부하를 위한 여지가 없어 문제와 해결책을 기억할 수 없다고 한다.
그리고 앞서 예시로 나왔던 스웰러의 아이들 이야기에서 풀이된 예제를 제공받은 그룹이 더 문제를 잘 푼 이유와 연결지어 설명했다.

처음에는 이해가 되지 않았다.
그렇다면 문제 해결을 위해 더 깊은 고찰을 하는 것보다 풀이된 예제를 제공받아 비슷한 유형의 문제에 익숙해지고, 그로 인해 빠르게 문제를 풀 수 있도록 하는 것이 나은 방식이라는 것인가? 라고 생각했다.
문제은행처럼 반복적인 문제 학습을 통해 암기적인 접근 방식이라면 동의하지만 프로그래밍에서도 이러한 방식의 접근은 생각의 폭을 좁히고 아는 문제만 풀게 되는 것이 아닌가 하고 의견에 쉽게 동의할 수 없었다.

그렇지만 이것이 궁극적인 문제 해결 능력이나, 더 뛰어난 능력을 갖는 방법보다는,
문제를 인식하고 문제를 해결하기 위한 방식을 익히는 데에 있어서 효과적인 뇌과학적인 접근이라고 하면 이해가 됐다. 물론 지금도 뛰어난 프로그래머가 되기 위한 방법으로 깊은 사고 대신 풀이된 예제를 통한 접근이 낫다고는 생각하지 않는다.
그렇지만 풀이된 예제가 문제 해결을 위한 효과적인 접근이라고 생각하고, 많이 접하고, 가장 기본이 되는 책이나 공식 문서 등을 통해 기본을 익힌 다음, 다양하게 활용하면서 익힌다면 전반적인 역량 향상에 도움이 될 것이라고 생각한다.