경험 많은 개발자나 초보 개발자가 새로운 팀원으로 들어왔을 때 그들에게 제공하는 적응 지원을 개선하는 방법을 다루자.
먼저 전문가와 초보자가 어떻게 다르게 생각하는지 살펴보고, 새로운 팀원을 대상으로 수행할 수 있는 다양한 활동을 살펴보자.
13.1 적응 지원의 문제
- 너무 많은 것을 동시에 교육하여 작업 기억 공간의 용량을 과도하게 늘리는 경우
- 두뇌가 너무 많은 인지부하를 경험하면 효과적인 사고가 억제되며, 본유적 부하를 위한 여유 공간이 없기에 정보가 저장되지 않는다
이와 같은 상황은 교육자와 피교육자 모두에게 오해를 심어준다. 교육자는 피교육자가 능력이 떨어진다고 생각할 수 있고, 피교육자는 프로젝트가 매우 어렵다고 느낄 수 있다.
어떤 기술을 충분히 익히면 그 기술을 배우는 것이 얼마나 어려운지 잊어버리는 전문가의 저주
에 걸리기에 팀의 선임자들은 새로운 팀원을 교육하는데 애를 먹는다.
13.2 전문가와 초보자의 차이
전문가와 초보자는 매우 다른 방식으로 생각하고 행동한다
- 전문가는 관련 정보가 LTM에 많이 기억되어있어 작업 기억 공간이 필요로 할 떄마다 가져온다
- 전문가는 코드 및 코드와 관련있는 모든 사항을 매우 효과적으로 청킹할 수 있다.
이로인해 전문가를 초보자를 과소평가할 수 있고, 이는 전문가의 저주에 빠진 상황이다
초보자의 행동에 대한 심층적 이해
신피아제주의 : 새로운 정보에 직면했을 때 사람들이 어떻게 행동하는지 설명하는 심리학 프레임워크
피아제의 원래 모델
- 감각운동기 : 아이들은 계획이나 전략이 부족하다. 단순히 물건을 더듬어 잡는다
- 전조작기 : 아이들은 가설과 계획을 형성하기 시작하지만 이것들을 사고할 때 안정적으로 사용하지 못한다.
- 구체적 조작기 : 아이들은 자신들이 보는 구체적인 것에 대해 추론할 수 있으나 일반적인 결론을 끌어내기는 어렵다
- 형식적 조작기 : 형식적 추론이 가능하다
프로그래밍에 적용한 신피아제주의 모델
신피아제주의의 핵심은 피아제의 수준이 일반적이 아니라 특정 영역에 해당된다는 것이다. ex) 자바에서는 형식적 조작기지만, 파이썬에서는 감각운동기일수 있음
- 감각운동기 : 프로그래머는 프로그램 실행에 대해 일관되지 못하게 이해한다. 프로그램을 정확하게 추적할 수 없다
- 전조작기 : 프로그래머는 상태표 등을 만들어 여러 줄의 코드 결과를 수동으로 예측할 수 있다.(귀납적 방법 사용) 이 단계의 프로그래머는 종종 코드의 일부가 무엇을 하는지 추측한다.
- 교육할때 가장 좌절감을 많이 느끼는 단계로, 전이된 사전 지식 덕분에 어떤때는 정확하지만, 어떤때는 틀린 말을 할 수 있다.
- 플래시카드 등으로 코드 어휘를 확장하면 다음 단계로 나아갈 수 있다.
- 구체적 조작기 : 프로그래머는 코드 자체를 읽음으로써 코드에 대해 연역적으로 추론한다.
- 사전지식을 사용해 청크를 인식하고, 주석문과 이름을 파악할 수 있다.
- 하지만 코드베이스 전체에 대한 이해가 부족하여, 전략을 선택하는데 어려움을 겪을 수 있다. 이는 처음 정한 전략에 과도하게 몰입하는 형태로 나타날수 있다.
- 형식적 조작기 : 논리적이고 일관적이며 체계적으로 추론할 수 있다. 여기서의 추론은 자신의 행위를 뒤돌아보는 것을 포함하여 이는 디버깅에 필수적이다
이때 4가지 단계는 서로 연속적이다. 새로운 정보를 학습하면 일시적으로 다른 것들을 잊어버려 다시 하위 단계로 떨어질 수 있다
개념을 구체적으로 보는 것과 추상적으로 보는 것의 차이
전문가들은 종종 개념에 대해 매우 포괄적이고 추상적으로 얘기한다. 하지만 초보자들은 칼 메이튼의 의미적 파동(semantic wave)
를 따른다
- 초기 : 어떤 개념이 일반적으로 무엇인지 파악함 (ex : 가변 인수 함수는 여러개의 인수를 가질 수 있다)
- 포장 풀기 : 그 개념에 대한 세부 사항을 배움 (ex :
*
로 받을 수 있고, 매개변수 목록을 리스트로 구현하여 실제론 하나만 받음) - 재포장 : 세부사항에서 벗어나 추상적인 수준으로 되돌아와 개념이 일반적으로 어떻게 동작하는지 이해함. 이 과정에서 사전 지식과 관련하여 LTM에 통합함
여기서 무엇가를 가르칠 때 안티패턴이 있다
- 고 평면선 : 추상적인 내용만 가르치고 구체적인 내용은 살피지 않는 것.
- 저 평면선 : 그 개념에 대한 일반적인 내용은 설명하지 않고 세부사항만 많이 설명하는 것
- 하향식 : 재포장 할 시간을 주지 않는 것.
13.3 적응 지원 개선
가장 중요한 것은 교육을 받는 사람들의 인지 부담을 의도적으로 관리하는 것이다. 특히 새 팀원이 스스로 인지 부하를 관리할 수 있다면 매우 유용한데, “이 부분은 인지 부하가 심하다”, “파이썬에서는 청킹이 잘 안된다”라고 말한다면 의사소통이 훨씬 더 쉬워진다
작업은 하나의 프로그래밍 활동으로만 제한
11장에서 코드베이스에서 수행할 수 있는 5가지 활동인 전사, 탐수, 이해, 검색, 증가에 대해 설명했다. 이 활동들은 서로 다른 인지적 요구사항을 부과하기에, 서로 다른 활동을 번갈아 가면서 하는 것은 새 팀원에게 힘든 일이다.
따라서 새 팀원에게는 한번에 한가지 씩 시키는 것이 좋다.
- 탐구 : 코드베이스의 전체적인 이해를 위한 코드 훑어보기
- 검색 : 특정 인터페이스를 구현한 클래스 찾기
- 전사 : 구현할 메서드에 대한 명확한 계획을 알려주기
- 이해 : 코드의 여러 측면에 대해 이해하기. (ex : 특정 메서드 요약하기)
- 증가 : 향후 계획을 포함하여 기존 클래스에 한가지 기능을 추가하기
각 활동은 다른 활동을 기반으로 이뤄질 수 있고, 이어서 진행할 수 있다.
새 팀원의 기억 지원
- LTM 지원 : 주요 도메인 정보, 배포 방법, 프로젝트에서 사용되는 주요 개념의 링크 등 관련 정보를 문서화할 수 있다
- STM 지원 : 여러 가지 작업을 한번에 시키기보단 한 단계씩 진행하는 것이 좋다
- 특히 이해를 위해서는 간단한 구현보다는 이해에만 집중하는 것이 좋다. ex) 기존 클래스 요약, 특정 기능을 위한 코드들 기록
- 간단한 기능 구현을 시킬 수도 있는데, 이때는 검색이 발생하지 않도록 임시로 관련 코드를 한곳에 모이도록 리팩터링하여 기능 구현에만 집중하게 할 수 있다.
- 작업 기억 공간 지원 : 코드의 큰 그림을 볼 수 있는 도표를 만들 수도 있다.
- 도표의 유용성을 자주 모니터링해서 도움이 되지 않는 도표는 사용하지 않는 것이 좋다.
13.3 코드 함께 읽기
코드를 함께 읽으며 5장에서의 기법을 사용할 수 있가
- 활성화 : 읽기가 시작되기 전에 코드와 관련된 개념을 살펴본다. ex) MVC 등
- 모니터링 : 새 팀원이 어느정도 이해하고 있는지 추적한다
- 중요도 결정
- 추론 : 문서화 되지 않고, 명시적으로 언급되지 않은 세부 사항을 짚어줄 수 있음
- 시각화 : 교육자가 도표를 제공할 수 있고, 새 팀원보고 그려보라고 할 수 있다
- 질문 : 정기적으로 질의응답시간을 거치면서 인지 부하를 확인해야한다.
- 요약 : 함께 읽은 코드의 요약을 작성한다