본문 바로가기

Activity/책 리뷰

[리뷰/책] 《프로그래머의 뇌》 리뷰

반응형

한 줄 요약 : 더 나은 개발자가 되기 위한 메타인지 능력 증대에 참고하기 좋은 책

 


 

'메타인지'는 '자기 성찰 능력'을 뜻한다. 스스로를 객관화하고 강점은 강화하고 약점은 보완한다면 올바른 성장의 길로 나아갈 수 있다. 그렇다면 메타인지는 어떻게 해야 그 능력을 향상시킬 수 있을까? 아무거나 열심히 한다고 되는 것이 아니다. 원하는 목적에 맞게 계획을 세우고 시행착오를 줄여나가야 한다. 이번에 리뷰하는 《프로그래머의 뇌》가 시행착오를 줄여줄 수 있는 책이다.

《프로그래머의 뇌》는 저자가 개발자의 사고 방식을 인지과학 관점에서 바라보고 기록한 책이다. 저자는 프로그래밍을 학습하기위해 '일단 코드를 많이 작성해본다', '코드를 많이 읽는다'와 같이 무작정 덤벼들지 않는다. 코드를 어떻게 인식하고 지식으로 변환하는지 생각한 후 올바르게 습득하는 방법을 고민하고 그에 맞게 받아들인다. 인식된 정보는 다음에 같거나 유사한 정보를 받아들일 때 배경지식으로 사용되거나 다른 입력 방법으로 활용한다. 이 책은 책은 네 개의 영역으로 구분된다. 각 영역은 프로그래머가 긍정적인 방향으로 성장하는 길을 어떻게 찾아야하는지 알려준다.

 

Part 1. 코드 더 잘 읽기
Part 2. 코드에 대해 생각하기
Part 3. 좋은 코드 작성하기
Part 4. 코딩에서의 협업

 

네 영역과 프로그래머의 '뇌'가 어떤 관련이 있을까? 프로그래머 선배 개발자들은 다양한 문제 상황을 만나고, 그 문제를 풀면서 실무 경험이 누적되었을 것이다. 이런 과정들을 분석해보면 몇 가지로 추려낼 수 있다.

1. 무엇이 문제인지 파악한다

2. 문제를 풀기위한 기술(지식)을 습득한다

3. 습득한 기술을 적용하며 맞게 동작하는지 확인한다.

 

1~3의 과정이 학습과정에서 뇌가 활용되는 흐름과 같다. 그래서 책 제목이 《프로그래머의 뇌》인듯하다.

책에서는 단계를 'LTM의 문제, STM의 문제, 작업 기억 공간의 문제'로 정의하고 설명하고 있다.

1. 지식의 부족 -> LTM(장기 기억 공간, Long Term Memory)의 문제

2. 정보의 부족 -> STM(단기 기억 공간, Short Term Memory)의 문제

3. 처리 능력의 부족 -> 작업 기억 공간(Working Memory)의 문제

 

LTM은 익숙해지고 나면 '당연한 것'이라 생각하는 것들이다. 예를 들면 예약어 키워드에 대한 지식이다.

// 예제 1
// APL에서의 이진수 표현
2 2 2 2 2 T n

 

아래 예제는 APL 언어에서 2의 승수 값을 표현한 코드다. MSB부터 LSB까지 각각 2의 4승 ~ 2의 0승 자리를 나타낸다.

참고 : APL Encode(링크)

APL 언어에 대한 배경지식이 있다면 당연하게 느껴지지만 그렇지 않다면 '이게 무슨 의미일까?'하게 하는 코드다.

 

STM은 코딩을 할 때 맥락을 이해하고 넘어가는 것들이다. 예를 들면 변수 이름의 의미가 있다.

// 예제 2
// 자바에서의 이진수 표현
public class BinaryCalculator {
	public static void mian(Integer n) { // mian이 오타라는 것을 인지했다면 자바 언어 지식이 있기 때문이다.
    	System.out.println(Integer.toBinaryString(n));
    }
}

위의 예제는 JAVA 언어로 작성한 이진수 출력 예제 코드다. Integer.toBinaryString이라는 영어를 보며 'n'값을 정수(Integer)형태의 이진수(Binary) 문자열(String)으로(to) 바꾸는 역할을 한다는 것을 추론할 수 있다. 하지만 해당 메소드의 내부에서 어떤 처리 작업을 하는지는 알 수 없다.

 

작업 기억 공간의 예는 변수에 저장되는 데이터 값이 있다.

// 예제 3
// 베이직에서의 이진수 표현
LET N2 = ABS(INT(N))
LET B$ = ""
FOR N1 = N2 TO 0 STEP 0
	LET N2 = INT(N1 / 2)
    LET B$ = STR$(N1 - N2 * 2) + B$
    LET N1 = N2
NEXT N1
PRINT B$

베이직 언어를 알고 있다면 코드를 읽고 따라가는 것에 어려움은 없다. 하지만 3번째, 5번째, 6번째, 7번째 줄에서 각 변수에 들어가는 값은 코드를 실행할 때마다 다를 수 있고, 매번 개발자가 기억하고 있어야 추적할 수 있다.

 

개발자가 생각하는 과정을 STM, LTM, 작업 기억 공간으로 분류한 것처럼 앞에서 소개했던 네 영역(Part 1 ~ 4)은 위에서 설명한 '지식의 부족, 정보의 부족, 처리 능력의 부족'을 인식하고 극복하는 방법을 설명하고 있다. Part 1, 2, 3, 4는 1회성 과정이 아니라 순환과정이다. 즉, Part 1부터 4까지 과정을 거치면 지식은 확장되고, 사고 방법도 달라진다. 이 정보를 바탕한 넓은 시야로 다시 Part 1으로 들어가는 것이다. 제자리 걸음인듯하지만 성장 흐름을 갖는다.

 

바르게 성장을 하기 위해서는 목적의식을 갖고 의도적으로 수련을 해야 한다. 올바른 방향으로 성장할 수 있도록 안내하는 것이 《프로그래머의 뇌》다.

 

마지막 장은 팀에 신규 입사자가 있을 때 도움이 될 내용이다. 회사에 OJT(On the Job Training)가 있는 곳이 있다. OJT가 없더라도 인수인계 과정은 있다. 기존 직원은 신규 입사자가 빠르게 적응할 수 있도록 자료를 준비하고 열심히 설명하지만 전달 받는 신규 입사자는 이해를 못하고 시간이 흐른 뒤 업무를 하며 그 의미를 깨닫곤한다. 이런 경험이 있다면 다른 회사에 입사할 때도 '시간이 해결해준다'는걸 자연스럽게 생각하지만, 그런 경험이 없는 경우 '나한테 문제가 있는걸까?'하는 걱정을 하는 것도 봤다.

이런 간극 또한 사고 과정이 달라서 발생하는 상황으로 그 차이를 인지하고 간극을 줄이는데 도움이 되는 내용을 담고 있었다. 내가 회사에 처음 입사했을 때, 신규 입사자에게 인수인계를 할 때 두 입장에서의 기억이 모두 떠올랐기 때문이다. 책을 읽으며 내가 잘못했던 점과 다음에 인수인계를 할 때 보완해야 할 점도 배웠다.

 

이번에 리뷰했던 《프로그래머의 뇌》는 프로그래밍 경험이 있으나 성장이 정체되었다고 느낄 때 읽으면 좋을 책이다. 인지과학이라는 생소할 수 있는 개념을 개발자의 상황에 대입하여 학습 패턴과 적용 사례를 소개해줘서 좋았다. 과학적인 관점에서 접근에다가 리팩터링을 통해 사고 방식 개선까지 도움을 받을 수 있는 책인듯하다. 만약 성장하고 싶은 개발자라면 읽어보길 권한다.

 

 

 


"제이펍 출판사 리뷰 활동을 위해서 책을 제공받아 작성된 서평입니다."
리뷰를 위해 한빛미디어에서 책을 제공받았지만 주관적인 생각을 그대로 적었습니다.

반응형