Expert Beginner
얼마 전에 ‘개발바닥’ 유튜브에 이력서 리뷰를 하는 영상을 보게 되었다
이력서를 리뷰하다가 Expert Beginner라는 내용을 향로님이 언급해주면서 어떤 블로그를 하나 공유해주셨다
블로그의 내용이 유익한 것 같아 나름 정리한 내용을 팀원들에게 공유하고자 자료를 만들게 되었다
더 이상 배우려 하지 않는 개발자 : Expert Beginner의 등장
🤢 좋은 소프트웨어 집단이 변질될 때
사해 효과
사해는 이스라엘과 요르단 사이에 있는 거대한 수역이다
유입된 물은 증발하면서 소금이 축척되어 8배나 더 짜게 만들어진다
소프트웨어 집단이 유해한 문화와 장애에 빠지게 되는 이유
사해효과는 조직 문화에 안티패턴에 빗대어 표현할 수 있다
급여와 기술 스택이 충분히 매력적이면 기업은 보통 인재를 유치하는 데 문제가 없다
어려운 부분은 실제로 그 재능을 오랫동안 유지하는 것이다
소프트웨어 집단이 유해한 문화와 장애에 빠지게 되는 이유
회사 문화가 퇴화한다고 느끼면 두 가지 선택권이 있을 것이다
한 부류는 회사를 떠나 이직하기 ✈️
한 부류는 회사에 남아 유지하기 🧚♂️
그런데 대체로 능력있는 엔지니어는 이직할 기회가 많고 그만큼 능력도 있다
그래서 대체로 회사를 떠날것이다
그리고 회사에 남는 부류는 대체로 능력이 없다…..
그래서 남아 있는 부류는 회사에서 본인이 할 것을 찾는다..
대체로 특별한 능력이 필요 없는 유지보수 업무가 메인이 될 것이다
이렇게 회사는 점차 남아 있는 부류로 채워질 것이고 회사 문화는 악화되고 만다…
사해효과 이외의 특별한 문제가 하나 더 있다
개인적으로 집단 전체를 무능력하게 만드는 데에는 특별한 요소가 더 있다고 생각한다
개인이 영속적으로 안주하게 되면서도 높은 보상을 받게 되는지를 살펴보자
🎳 볼링 배우기
초보자 볼링
대부분의 사람들은 볼링을 할 때 엄지와 두개의 손가락을 공에 넣고 조심스럽게 커브를 돌아 중앙으로 굴러가게끔 던진다
그것을 익힐 만큼의 인내심이 없었던 나는 공에 손가락을 하나도 넣지 않고, 팔꿈치를 돌려서 비슷하게 그 스킬을 흉내낼 수 있었다
하지만 그 후에 160점에서 더는 늘지 않았다….
나는 예전 매니저에게 어떻게 하면 더 성장할 수 있을지 물어봤고, 흥미로운 이야기를 해줬다
볼링을 그런 식으로 하는 동안은 무슨 수를 써도 실력이 늘지 않는다 실력을 더 높이고 싶다면 제대로 볼링 하는 법을 배워야 한다 그러나 그렇게 하면 지금보다 훨씬 실력은 떨어질 것이다
다시 지금의 점수를 내기 위해서는 아마 꽤 오랜 시간이 걸릴 것이다
나는 한동안 이것을 부정했다
🛫 가시적 성과와 성장의 구속
기술 습득의 이론
드레이퍼스라는 성을 가진 형제가 기술 습득의 이론을 발표했다
기술을 습득하는데에는 5가지 단계가 있다
Novice(초심자)
Advanced Beginner(숙련된 초심자)
Competent(실력을 갖춤)
Proficient(능숙함)
Expert(전문가)
낮은 곳에 달린 열매
무언가를 배울 때 사람은 “큰 그림을 보지 못하고 정해진 규칙만 따라가기”에서 시작해서“직감적으로 규칙 전반을 넘어서 큰 그림을 볼 수 있는 상태”에 도달하게 된다
특정한 기술을 배우기 시작하는 시점에서는 누구나 완전히 무능하며 짜증을 느끼게 된다
또한 누군가가 가르쳐주는 것을 곧이곧대로 따라하는 동안 답답한 감정을 겪게 된다
한동안 이렇게 완전한 초기 과정을 겪고 나면, 연습을 통해 스스로 스킬을 익힐 수 있게 되고,신이 난 학습자는 “낮은 곳에 달린 열매”들을 열심히 따며 빠르게 성장하게 된다
하지만 열매들이 모두 바닥난 후에는 지속 불가능할 정도로 빨랐던 성장 속도가 점점 느려지게 되고, 차차 성장하는 것이 어려워지기 시작한다
기술 습득의 한계점
Competence의 수준까지 도달할 때 까지는 빠르게 성장했지만, 곧 완전히 기세가 꺾였다
내 상태를 개선하거나 계속해서 노력하기에는 다른 일로 너무 바빴기 때문에 성장이 지역적 최고점에 도달한 후에는 완전히 멈춰버렸다
이러한 현상을 ‘성장의 구속’이라고 부른다
보통 학습자는 두 가지 이유로 성장의 구속으로 인한 기술 능력 정체에 이르게 된다
첫번째는 재능의 벽에 부딪치는 것이다
두번째는 자발적으로 의미있는 성장을 하려는 시도를 멈추고자 하는 마음가짐이다
첫번째 가능성은 무시하고 두번째 경우에 집중하자
더 이상의 성장은 불가능하다고 느끼는, 즉 성장에 대한 자발적인 거부. 이것이 곧 Expert Beginner라고 명명하는 자다
The Expert Beginner
Expert Beginner 단계는 학습자가 큰 그림을 보지 못하는 단계 중에서 가장 마지막에 있다
다르게 말하면 학습자는 자신이 Expert 라고 착각할 수 있는 단계인 것이다
Competent 단계의 학습자는 자신이 부족한 부분이 무엇인지를 알고 있다
Advanced Beginner들은 “기술이 없는” 쪽에 가까우므로, “내가 이해할 수 없으면 분명 중요하지 않은 걸거야”라는 생각에 사로잡힌다
Advanced Beginner들은 결국 양갈래길에 놓이게 된다
하나는 Competent로 나아가서 큰 그림을 보고 자신이 어디에 있는지를 자각하는 것이다
하나는 자신들이 이미 Expert로 졸업했다고 생각하여 Expert Beginner에 속하게 되는 것이다
다시 볼링 경험으로 돌아보자
처음에는 볼링을 잘 못했겠지만, 따기 쉬운 열매들을 신나게 따며 빠르게 실력을 키워갔다
스스로의 성장이 꽤 빨랐던 점을 감안하여 내가 볼링에 꽤 재능이 있다고 결론을 내렸다
한 걸음 더 나아가 내가 볼링 스킬의 정점에 올랐다고 꽤 합리적으로 결론을 내렸을 수도 있다
왜냐하면 주변에는 나보다 잘 하는 사람이 없으니까 내가 어떤 경지에 오른 것이 아닐까 하는 생각이 든다
🧐 나는 내 자신에 대한 긍정적 평가를 서서히 논리적 오류에 활용하게 된다
“나는 전문가야. 전문가는 뭐든 잘 하게 되어있고, 지금 하는 것도 모두 제대로 하고 있어”
각 단계에서 학습자는 다음 단계로 넘어가거나 혹은 현 단계에 그대로 머물 수 있다
성장을 위해서는 스스로가 아직 배울 것이 많고,아직 목표에 도달하지 않았다는 사실을 스스로 인지해야 하므로 Expert Beginner는 더 이상 어떠한 진전도 이룰 수 없다
Expert Beginner는 매주 똑같은 볼링 기술과 습관을 이용하면서 300점중에 160점을 따는 데에 달인이 되었다 😤
소프트웨어 업계의 Expert Beginner들
볼링에서는 몇 분 간격으로 피드백이 돌아오지만, 소프트웨어는 수 개월, 혹은 수년에 걸쳐 피드백이 돌아오는 경우가 많다
하나의 프로젝트를 진행하면서 개발자는 코딩, 소스코드 관리, 수정, 테스트 그리고 이전의 디자인과 설계 등을 유지보수 하는 경험을 하게 된다
이 모든 과정을 개발자가 운이 좋아 6개월 안에 모두 경험했다고 친다면 5년 후에는 10건 남짓의 애플리케이션 개발 경험을 가지게 된다
이는 곧 소프트웨어 개발자가 빠르게 성장하는 기간이 몇 주가 아닌 몇 년일 확률이 높다는 뜻이다
빠르게 기술을 습득해 나가면서 주니어, 시니어, 리드 혹은 아키텍트 또는 총책임이라는 직급을 넘나들 것이다
그리고 헤드헌터들 로부터 락스타, 닌자 등의 별명도 얻게 될것이다
돌아볼수 있는 기회가 필요하다
Expert beginner 단계로 자연스럽게 입장하는 것을 막을 수 있는 유일한 방법은 피어 리뷰와 개발자 커뮤니티와의 교류 뿐이다
Advanced Beginner가 더 큰 커뮤니티와의 교류에 관심이 없고 주변 동료들과도 교류하지 않는다면 어떻게 될까?
인지부조화를 해소하고 현 상황에서 도피할 수 있기 때문에, 그들 역시 남 탓으로 상황을 해결하려 한다
이미 Expert 레벨에 도달하였으며, 더 이상 올라갈 곳이 없다고 생각하는 것이다
Expert Beginner 되짚어 보기
Expert Beginner들은 큰 그림을 볼 수 있을 정도의 역량이 없으므로, 자신들이 expert가 아니라는 사실을 자각하지 못한다
Expert Beginner는 “내 기술 세트 안에 들어있지 않거나 내가 경험해보지 않은거라면, 딱히 값어치 있는게 아니다”라고 결론 짓는 자기중심적인 마인드를 말한다
또 다른 특징은 그들이 집단 내에서 어느 정도의 권위나 영향력을 가진 위치에 올라 있다는 것이다
작은 스타트업에서는 같은 일을 하는 동료도 없으니 그의 기술을 평가할 수 있는 사람은 나 자신과 IT 지식 없이 칭찬을 해주는 사람들 뿐이다
그는 장님들만 있는 거리의 외눈박이이며, 굉장히 현실적이고 동시에 불운하게도 지역적(local)전문가이다
다시 볼링으로 돌아가보자…
볼링장들의 매출이 선수들이 얼마나 볼링을 잘 치는가에 달려 있다고 가정해보자
작은 마을에 스타트업 볼링장에서 볼링을 치고 있다
나나 그들이나 내가 뭘 하고 있는지는 잘 모르지만,내가 거기서 볼링을 치기 시작한 후로, 자세가 우스꽝스럽긴 해도 나의 실력이 빠르게 느는것을 발견한다
평균점은 올라가고, 볼링장은 돈을 벌고, 모든게 완벽하다
이윤과 성공적 커리어 앞에서 누가 불만이 있겠는가…….
내 평균이 150을 웃돌고 나의 성장세에 끝이란 없을 것처럼 보일때쯤,볼링장은 몇몇 초보 선수들을 영입하여 내 밑에서 일하게 하기로 결정했다
볼링장 고인물
그들의 첫 출근 날, 나는 어떻게 공을 드는지를 보여주고 어떻게 나처럼 걷는지를 가르친다
그들이 엄지와 손가락 구멍들은 어디에 쓰는 거냐고 물어보면, 나는 그냥 “아 그건 신경쓰지마. 여기선 그거 안 써”라고 답한다
시간이 지나고, 그들 대부분은 내 식대로 하는 것에 만족한다
하지만 몇몇은 의지가 충만하여 여유 시간에 연습을 따로 하기 시작한다
그런던 어느날, 그들이 나에게 “TV에서는 손가락을 공 안에 넣고 쳐서 엄청 높은 점수를 내던데요. 200 이상이요!”
그들은 내가 자신들 만큼이나 성장에 관심이 있기를 기대하지만, 나는 이렇게 반응하고 그들은 풀이 죽고 만다
새드엔딩
“아냐. 여기선 그렇게 안해.나는 너희들이 태어나기 전부터 볼링을 했고, 내가 어떻게 하고 있는지는 내가 제일 잘 알아.. 그리고 TV에서 나오는 걸 다 믿으면 안돼”
내가 볼링장에서 더 오래 일했으니, 나에게 결정권이 있다는 것을 그들에게 상기시킴으로써 집단의 혁신을 빠르고 확실하게 제거한다
이 시점에서 열정적인 선수들 중 절반은 “공 안에 손가락을 넣는”방법을 포기하고, 절반은 다른 볼링장에서 퇴근 후에 만나 조용히 연습을 한다
시간이 지나 그들의 점수는 내 점수를 제치고, 그들은 이 접근법이 더 우수하다는 것을 객관적으로 증명했으니 변화를 일으킬 수 있다고 믿게 된다
하지만 내가 화를 내며 그들의 성과는 그저 꼼수일 뿐이며,나도 한번은 205점을 낸 적이 있다고 한바탕 설교를 하고 나자 그들은 남은 동료들을 두고 사라진다
볼링장은 가장 높은 점수를 내는 선수들을 다른 볼링장이 아닌, Expert Beginner에게 빼앗겼다
🤢 전체를 오염시킨다
두 가지 교훈
떠나지 않은 볼링선수들은 두 가지 흥미로운 교훈을 얻게 된다
첫번째는 그들이 자신의 차례를 기다리면, 실제 능력과 상관없이 무조건적인 권력을 얻게 된다는 것
두번째는 이 볼링장에서는 그저 그런 상태로 있어도 괜찮거나, 심지어는 더 좋을 수도 있다는 것이다
새로운 선수들이 고용되었을 때, 회사의 ‘라인’을 유지하고 본인들의 차례를 기다리기 위해서 그들의 과거 경험 그대로 신입들에게 나쁜 방법을 강권하는 것에 동참한다
Expert Beginner는 자신의 행동과 본보기로 새로운 Expert Beginner들을 만들어내고 이는 곧 Expert Beginnerism의 문화를 생성하는 것이다
또 하나의 흥미로운 전개는 채용 프로세스에 미치는 영향이다
열정 넘치는 어린 신입들을 만나기 싫은 나는, 채용 프로세스를 그저 그런 “팀 플레이어”들을 모집하는 방향으로 바꾼다
뜬구름 잡는 “손가락에 공을 넣기” 같은 소리나 해서 나의 위치를 위협하지 않을 팀 플레이어들이다
사해 효과의 완성
이 채용 결정은 명시적인 행동 이라기보다 무의식, 혹은 합리화에 가깝다
“나보다 더 나은 사람들은 채용하지 않겠다”가 아니라“이 사람들은 나의 “고정관념을 깨는” 또한 “전문적인” 방법들과는 어울리지 않아”라고 생각하는 것이다
이제 볼링장은 Expert Beginner 패거리들에게 빼앗기게 된다
이에 “사해 효과”가 완성, 실현되는 단계임을 알 수 있다
실제 소프트웨어 개발 환경에 적용 가능할까?
소프트웨어 개발 환경의 부재
자동화 테스팅의 부재
거대한 함수나 클래스들
수 많은 복사/붙여넣은 코드
오래 되었거나 적절히 못한 툴 사용
자신들이 무엇을 모르는지 자각하지 못하고, 전문가인 본인들이 모르는 것은 알 필요가 없다는 생각한다
이것은 재능있고 열정적인 사람들을 떠나게 하거나 혹은 그런 집단에 합류하게 만드는 유해한 문화이다
Expert Beginner들은 사실은 인격적인 문제가 없을 수도 있다
나는 이것이 외부와 격리된 환경, 낮은 기대치, 그리고 실제로 효율성 산출이 불가능한 그저 그런 수행능력에 대한 꾸준한 보상이 만들어낸 자연스러운 결과라고 생각한다
현실로 돌아와서
우리 산업의 특성에 대해 한번 생각해볼 필요가 있다
릴리즈 일정이 늦어지고, 버그는 많고, 예산까지 초과 했을 때에 따로 릴리즈 팀을 운영하는 회사를 몇번이나 보았는가?
마치 작동할 것처럼 보였지만 결국엔 지면에서 떨어지자 멈춰버리고, 추락하는 로켓을 만들고 나서도 승급을 하는 로켓 기술자들 마냥, 그들은 그렇게 하고도 승급을 하고 포상을 받는다
나는 우리 업계가 완전히 바뀌어야 한다고 불평하고자 하는 것이 아니다
다만, 외부 피드백과 우리 자신의 인식에 따라 얼마나 쉽게 실제 배운 것보다 많이 알고 있다고 생각하게 될 수 있는지를 설명하고 하는 것이다
🦁 정제하지 않고 진전하는 문화 만들기
정체하지 않고 진전하는 문화 만들기
이번에는 이러한 사태를 최대한 방지할 수 있는 비교적 간단한 방법들을 제시해 보려고 한다
첫째로, Expert Beginner의 덫에 빠지지 않기 위해서 제일 중요한것은 자기 자신의 들뜬 감정을 믿지 않는 것이다
자신이 한 것에 대해서 적절한 자신감을 가지되, 이성적인 주장 혹은 증거 없이 자신의 학습이 완성 되었다거나,나는 직급이나 연차가 이 정도 되었으니 질문을 받을 필요가 없다거나 하는 식의 생각을 지양해야 한다
건강한 겸손함과 지속적으로 성장하기 위한 노력을 겸비하고, 객관적 수치들을 주관적인 고려사항들보다 우선순위에 둔다면 Expert Beginner로부터 충분히 거리를 둘 수 있을 것이다
소프트웨어 집단으로서 이 현상을 막기 위한 방법도 몇가지 리스트로 만들어 보았다
팀 멤버들에게 최대한 자유롭게 상상할 수 있는 기회를 주고, 그들이 발견한 방법을 직접 보여줄 수 있도록 독려하라
새로운 언어, 접근법, 프레임워크, 패턴, 스타일 등을 학습하는 것에 대한 인센티브를 제공하라
특정 주장이 더 낫다고 평가하거나 수용할 때, 절대로 그 사람의 연차를 근거로 삼지 말아라
외부의 의견을 사내에 강제적으로 주입받을 수 있는 정책을 만들어라(네트워킹, 월간 트레이닝, 감사 등)
가능하다면 논쟁이나 의견 충돌이 있을 때 직급이나 투표 들의 주관적 기준이 아닌 좀 더 객관적인 기준으로 해결하라
“증명하는 문화”를 만들어라. 실제 레퍼런스, 통계, 사실 등이 확인되지 않으면 그 의견은 없는 것이나 다름 없다
주기적으로 주니어와 시니어를 아우르는 설문을 진행하라. 그들의 강점과, 강점의 갯수만큼 자신이 모르는 것, 혹은 알고 싶은 것에 대한 것을 작성하도록 하라
정체하지 않고 진전하는 문화 만들기
가능하다면, 몸소 실펀해서 보여줌으로써 주도 해보라
만약 이것이 모두 소용이 없다면, 내 개인적인 생각으로 이미 가망이 없는 것이니 가능성이 있는 곳으로 떠나기 바란다
당신의 그룹이 성장하고 있지 않다면, 부패하고 있는 것이다
출처
Last updated