개발자가 되는 길

[번역]더 이상 배우려 하지 않는 개발자 : Expert Beginner의 등장

예나부기 2021. 7. 25.

*이 글은 Erik Dietrich How Developers Stop Learning: Rise of the Expert Beginner를 번역한 글입니다. 모든 저작권과 권리는 Erik에게 있습니다.
*This article is a translated version of 
Erik Dietrich’s article: How Developers Stop Learning: Rise of the Expert Beginner. All rights goes back to him.

사해를 넘어서: 좋은 소프트웨어 집단이 변질될 때

앞서 언급했던 글에서 나는 브루스 웹스터의 “사해 효과”를 이용해서, 가장 뛰난 개발자들이 곧 제일 잘 나가는 개발자들이며, 그들은 상황이 조금 안 좋아지면 바로 더 좋은 곳을 찾아 떠나게 된다는 것을 설명했다. 반대로, 제일 재능이 없는 개발자들은 다른 회사들에게 자신을 어필하기 힘들기 때문에 그대로 머무는 경우가 많다. 이것은 우리가 흔히 마주치는 “어마어마하게 대단한 최고의 선임 아키텍트”라는 별명의, 고액의 연봉을 받는, 영향력도 많은, 하지만 실제로 실력은 별로 없어보이는 사람들을 이해하는데에 중요한 요소이다. 하지만 한편으로 이는 아직 개인 단계의 분석이다. 이 접근법은 낮은 질의 개발 그룹이 발생하는 이유를 그런 사람들로만 구성되어있어서 라고 밖에는 설명하지 못한다(혹은 상황이 극도로 나빠져서 이러한 부류의 사람들이 다른 사람들을 모두 쫓아내버렸다거나).

나는 소프트웨어 그룹을 망치는 데에는 외부 요소가 아닌, 집단에서 발생하는 독특한 역학관계가 존재한다고 믿는다. 물론 앞서 언급한 브루스의 사해 효과가 기본적으로 이러한 결과를 발생시키는 촉매제이자 결과라는 것을 부정할 수는 없지만, 개인적으로는 집단 전체를 무능력하게 만드는 데에는 단순한 외부적 문제 외에 어떠한 특별한 요소가 더 있다고 생각한다. 어떻게 하나의 소프트웨어 집단이 유해한 문화와 장애에 빠지게 되는지는 다음 포스팅에서 설명하고, 이번 글에서는 어떻게 개인이 영속적으로 안주하게 되면서도 높은 보상을 받게 되는지를 설명하려 한다.

볼링 배우기

앞서 말한 것들을 알아보기 전에, 나의 볼링의 역사를 들려주고자 한다. 농담이 아니고 정말로.

나는 꽤 운동을 좋아하는 편이다. 자라나면서 나는 어떤 스포츠에서든 적어도 상위 1/3에 속하고는 했다. 모든 방면에서 에이스였지만, 최고인 적은 없었던 것이다. 이러한 과거는 나를 큰 노력 없이도 어느 정도의 실력과 더불어 조금 부적절하다고 볼 수 있을 정도의 자신감을 가지게 했고, 볼링에서도 마찬가지였다.

대부분의 사람들은 볼링을 할 때 엄지와 두개의 손가락을 공에 넣고, 조심스럽게 공이 넓게 커브를 돌아 중앙으로 굴러가게끔 던진다. 그것을 익힐 만큼의 인내심이 없었던 나는 공에 손가락을 하나도 넣지 않고, 팔꿈치를 돌려서 비슷하게 그 스킬을 흉내낼 수 있었다. 멋져 보이지는 않았지만, 꽤 잘 먹혔다.

 

이 기술은 꽤나 효과가 좋아서, 내가 퇴근 후 리그에 취미로 참가하기 시작하자 평균점이 상당히 높아졌다. 물론 리그 내 최고 수준은 아니었다. 내 매니저를 포함한 몇몇 사람들은 170에서 200 사이의 평균 점수를 냈기 때문이다. 하지만 나는 몇 개월만에 130,140을 금방 넘어서 160 안팎의 점수를 낼 수 있었다. 썩 나쁘지 않았다.

하지만 이상한 일이 생겼다. 성장이 멈춘 것이다. 160 정도에서 벽에 부딪쳤다. 나는 내 예전 매니저에게 어떻게 하면 더 성장할 수 있을지를 물어봤고, 그는 내게 매우 흥미로운 이야기를 해줬다. 요약하자면 이런 내용이었다:

그런 식으로 볼링은 하는 동안은 무슨 수를 써도 실력이 늘지 않을거야. 이미 한계에 다다른거지. 실력을 더 높이고 싶다면, 제대로 볼링하는 법을 배워야해. 다른 공을 사용해서, 다른 방법으로 던지고, 어른답게 제대로 손가락을 공에 집어넣어야 한다고. 그렇게 하면 지금보다 훨씬 실력이 떨어질거고, 그게 제일 견디기 어려울거야. 다시 지금의 점수를 내기 위해서는 아마 꽤 오랜 시간이 걸리겠지.

나는 한동안 이것을 부정했지만, 내 정체된 실력에 곧 질려버렸고 (나는 개인적으로 장인의 수준에 도달하지 않고서는 못 견디는 성격이 있다) 더 어려운 길을 택했다. 나는 볼링공을 새로 사고, 알맞게 구멍을 낸 후 제대로 볼링을 치기 시작했다. 아이러니하게도 나는 그 직장을 곧 그만두었고, 그 후로 8번 정도밖에 더 볼링을 치지 않았지만, 뭐 인생이 다 그런것 아니겠는가. 이제는 볼링장에 가게 되어도, 볼링화를 빌리거나 내 손가락에 맞는 공을 찾아다닐 필요가 없다.

드레이퍼스, 가시적 성과와 성장의 구속

1980년, 드레이퍼스라는 성을 가진 형제가 기술 습득의 이론(model of skill acquisition) 이라는 것을 발표했고, 이는 학습과 그 과정, 그리고 연습 방법 등의 토론에 있어 상당한 영향을 끼쳤다. 후에 그들은 이 논문을 기반으로 한 책을 발표했고, 위키피디아에서 볼 수 있듯이 이 이론을 조금 더 현대에 맞춰 바꾸어 재구성하였다. 이 이론에 따르면 기술을 습득하는데에는 5가지 단계가 있다- Novice(*역:초심자), Advanced Beginner(*역:숙련된 초심자), Competent(*역:실력을 갖춤), Proficient(*역:능숙함), 그리고 Expert(*역:전문가). 이것을 설명하는데에 책 한권을 써야 했을 정도이니 복잡한 내막이 있지만, 요점은 무언가를 배울 때 사람은 “큰 그림을 보지 못하고 정해진 규칙만 따라가기” 에서 시작해서 “직감적으로 규칙 전반을 넘어선 큰 그림을 볼 수 있는 상태”에 도달하게 된다는 것이다.

혹자는 이를 보고 가라테에서 승급하거나 돈이 벌리는 원리와 같이, 노력과 실력 사이에는 직선 관계가 존재한다고 생각할 수 있다. 하지만 실제로는 감정과 마음가짐이라는 요소가 있어 좀 다르게 나타난다. 특정한 기술을 배우기 시작하는 시점에서는 누구나 완전히 무능하며, 이 때 짜증을 느끼게 된다. 또한 누군가가 가르쳐주는 것을 곧이곧대로 따라하는 동안 (혹은 드레이퍼스가 말하듯이 아기처럼 다른사람들의 행동을 어리숙하게 따라하는 동안) 답답한 감정을 겪게 된다. 하지만 한동안 이렇게 완전한 초기 과정을 겪고 나면, 연습을 통해 스스로 스킬을 익힐 수 있게 되고, 신이 난 학습자는 “낮은 곳에 달린 열매”들을 열심히 따며 빠르게 성장하게 된다.
하지만 그 열매들이 모두 바닥난 후에는 지속 불가능할 정도로 빨랐던 성장 속도가 점점 느려지게 되고, 차차 성장하는 것이 어려워지기 시작한다. 

 

이것은 실제로 내가 볼링을 배울 때 전혀 못하는 수준에서 어느정도 가능하게 될 때 까지의 성장곡선과 매우 흡사하다. 나는 competence의 수준까지 도달할 때 까지는 빠르게 성장했지만, 곧 완전히 기세가 꺾였다. 나의 경우, 내 상태를 개선하거나 계속해서 노력하기에는 다른일로 너무 바빴기 때문에 성장이 지역적 최고점에 도달한 후에는 완전히 멈춰버렸다.
이러한 현상을 나는 이 글의 문맥상 “성장의 구속”(arrested development)라고 부르고자 한다 (같은 이름의 다른 개념이 심리학에서 존재한다는 것은 알고 있지만 편의상 여기서는 이런 의미로 이해를 부탁한다). 기술 습득에 있어서, 보통 학습자는 두가지 이유로 성장의 구속으로 인한 기술 능력 정체에 이르게 된다. 첫번째는 재능의 벽에 부딫치는 것이고, 두번째는 자발적으로 의미있는 성장을 하려는 시도를 멈추고자 하는 마음가짐이다.

이제부터 나올 내용에 대해서 첫번째 가능성은 무시하고,(대부분의 전문 프로그래머들은 competence 단계나 그 전 단계에서 재능의 부족을 느낄 가능성이 적다) 더 흥미롭고 구체적인 두번째 경우에 집중해 보도록 하자 — 이미 전문가의 위치에 도달했으니, 더 이상의 성장은 불가능하다고 느끼는, 즉 성장에 대한 자발적인 거부. 이것이 곧 내가 “Expert Beginner”(*역:전문적 초심자)라고 명명하고자 하는, 기술 습득에 있어 끝없이 안주하는 단계의 입문 과정이다.

The Expert Beginner

드레이퍼스 모델을 다시 한번 떠올려보면, 큰 그림은 전혀 보지 못하고 정해진 규칙에만 집착하는 단계에서 직관적으로 모든것을 파악하게 되는 단계까지의 패턴이 있다는 것을 알 수 있다. Expert Beginner 단계는 학습자가 큰 그림을 보지 못하는 단계 중에서 가장 마지막에 있다. 즉, 다르게 말하면 학습자는 자신이 Expert라고 착각할 수 있는 단계인 것이다. Competent 단계의 학습자는 자신을 Expert라고 생각하기에는 너무 많은 것을 알고 있다. 즉, 자신이 부족한 부분이 무엇인지를 알고 있는 것이다.
Advanced Beginner의 단계에서는 이것이 불가능한데, Dunning-Kruger 효과에 따르면 Advanced Beginner들은 “기술이 없는(unskilled)” 쪽에 가까우므로, “내가 이해할 수 없으면, 분명 쉬운걸꺼야” 라는 생각에 쉽게 사로잡히게 된다.

 

Advanced Beginner들은 결국 양갈래길에 놓이게 된다. 하나는 Competent로 나아가서 큰 그림을 보고 자신이 어디에 있는지를 자각하는 것이고, 하나는 자신들이 이미 Expert로 졸업했다고 생각하여 Expert Beginner에 속하게 되는 것이다. 당장은 그렇게 나빠 보이지 않을 수 있다.
다시 한번 나의 볼링 경험으로 돌아가서 내가 그 골목의 최고가 되었었다고 상상해보자. 처음에야 잘 못했겠지만, 따기 쉬운 열매들을 신나게 따며 빠르게 실력을 키워갔을 것이다. Dunning-Kruger 법칙에도 불구하고, 나는 스스로의 성장이 꽤 빨랐던 점을 감안하여 내가 볼링에 꽤 재능이 있다고 결론내렸을 수 있다. 그리고 한 걸음 더 나아가 내가 볼링 스킬의 정점에 올랐다고 꽤 합리적으로 (혹은 꽤 오만하게) 결론내렸을 수도 있다. 왜냐하면 주변에는 나보다 잘 하는 사람이 없으니까, 분명 내가 어떤 경지에 오른것이 아닐까, 라는 생각을 하게 되는 것이다.

이것의 가장 큰 문제는, 몇가지의 꼭 틀렸다고 볼 수는 없는 추론들이 나를 거짓된 성취감에 이르게 했고, 결국 나를 더 나은 성장으로부터 멀어지게 했다는 것이다. 볼링을 계속 하면서 나는 내 자신에 대한 긍정적 평가를 서서히 논리적 오류에 활용하게 된다. “나는 전문가야. 전문가는 뭐든 잘 하게 되어있고, 지금 하는 것도 모두 제대로 하고 있어” (논리적 오류에 대해서 조금 더 설명을 보태자면, 이것은 순환론, 혹은 선결문제 요구의 오류이다).

위의 그림은 드레이퍼스 모델에 기반한 상태들의 흐름을 표현하고 있다. 각 단계에서 학습자는 다음 단계로 넘어가거나 혹은 현 단계에 그대로 머물 수 있다(Novice나 Advanced Beginner는 내 생각에 그 단계에 그리 오래 머물 수 없으므로 제외하고). 다른 점이라면, 내가 이 그림에 Expert Beginner를 추가했다는 것이다.

성장을 위해서는 스스로가 아직 배울 것이 많고, 아직 목표에 도달하지 않았다는 사실을 스스로 인지해야 하므로 Expert Beginner는 더 이상 어떠한 진전도 이룰 수 없다. Expert Beginner 는 Advanced Beginner의 조금 더 위, 그렇지만 Competence보다는 조금 더 낮은 단계에 위치한다. 이것은 본인의 현 상태의 모순에 대해서 인지할 정도의 능력은 없지만, 반대로 Beginner로서 굉장히 많은 ‘연습’을 했으므로 Advanced Beginner보다는 조금 더 우위에 있기 때문이다. 만약 “10년의 경험인가 아니면 같은 경험을 10년동안 한것인가” 라는 말을 들어본 적이 있다면, Expert Beginner는 후자의 정점이다. Expert Beginner는 매주 똑같은 볼링 기술과 습관을 이용하면서 300점중에 160점을 따는 데에 달인이 되었다. 이것은 그가 160점이 최고의 점수라고 생각하고 있기 때문이다.

소프트웨어 업계의 Expert Beginner들

소프트웨어는, 당연하게도, 볼링과는 다르다. 볼링에서는 몇분 간격으로 피드백이 돌아오지만, 소프트웨어는 수 개월, 혹은 수년에 걸쳐 피드백이 돌아오는 경우가 많다. 여기서 내가 말하는 소프트웨어의 피드백이란 컴파일링이나 유닛 테스트 등이 아니라 프로젝트 단위를 말하는 것이다. 하나의 프로젝트를 진행하면서 개발자는 코딩, 소스코드 관리, 수정, 테스트, 그리고 이전의 디자인과 설계 등을 유지보수 하는 경험을 하게 된다. 만약 이 모든 과정을, 개발자가 운이 좋아 6개월 안에 모두 경험했다고 친다면 5년 후에는 10건 남짓의 애플리케이션 개발 경험을 가지게 된다 (이는 평균치로, 누군가는 이 기간동안 하나에 매진해 있을 수도 있고 누군가는 여러개를 할 수도 있다).

이는 곧 소프트웨어 개발자가 빠르게 성장하는 기간 (Advaned Beginner의 기간)이 몇주가 아닌 몇 년일 확률이 높다는 뜻이다. 그리고 이 기간동안 소프트웨어 개발자들은 이직과 승진을 거듭하게 된다. 빠르게 기술을 습득해 나가면서 소프트웨어 개발자 1 이나 소프트웨어 개발자 2를 거쳐 “주니어”(*역: 원래 Associate이나 주니어로 의역), “시니어”, 그리고 “리드” 혹은 “아키텍트”, 또는 “총책임”(Principal)이라는 직급을 넘나들 것이다. 즉 Dunning-Kruger의 법칙과 Advanced Beginner로서의 역경을 거치면서 전문가를 연상시키는 직급을 부여받고, 헤드헌터들로부터 “rock star”(*다크호스와 비슷한 어감) 혹은 “닌자” 등의 별명도 얻게 될 것이다. 이런 상황에서 이들이 Expert Beginner 단계로 자연스럽게 입장하는 것을 막을 수 있는 유일한 방법은 피어리뷰(peer review)와 개발자 커뮤니티와의 교류 뿐이다.

하지만 Advanced Beginner가 더 큰 커뮤니티와의 교류에 관심이 없고, 주변 동료들과도 별로 교류하지 않는다면 어떻게 될까? Daily WTF 사이트는 이런 예시들로 넘쳐 흐른다. 언제든 그렇듯이 다른 사람의 탓을 하면 손쉽게 인지부조화를 해소하고 현 상황에서 도피할 수 있기 때문에, 그들 역시 남탓으로 상황을 해결하려 한다. 이미 Expert 레벨에 도달하였으며, 더 이상 올라갈 곳이 없다고 생각하는 것이다. 그들은 이로서 Expert Beginner가 되고, 하나의 집단에서 오랫동안 안주하면서 높은 연봉을 받을 준비를 마친다. 주변 사람은 물론 그들 스스로도 그들이 훨씬 더 많은 것을 할 수 있다는 사실을 모르기 때문이다.

이번 글을 마치며

이렇게 Expert Beginner의 등장에 대한 이야기, 즉 그들이 어디서 나타나고 왜 성장을 멈추는지에 대해 탐구해 보았다. 이 시리즈의 다음 편에서는, 한명 이상의 Expert Beginner들이 모였을 때 어떻게 다른 재능있는 구성원들이 있음에도 불구하고 하나의 집단을 퇴행시키고 내부적으로 부패하게 하는지에 대한 이야기를 해 보도록 하겠다.

 

출처 : https://medium.com/@jwyeom63/%EB%8D%94-%EC%9D%B4%EC%83%81-%EB%B0%B0%EC%9A%B0%EB%A0%A4-%ED%95%98%EC%A7%80-%EC%95%8A%EB%8A%94-%EA%B0%9C%EB%B0%9C%EC%9E%90-expert-beginner%EC%9D%98-%EB%93%B1%EC%9E%A5-dd40c40aeedf

 

[번역]더 이상 배우려 하지 않는 개발자 : Expert Beginner의 등장

*이 글은 Erik Dietrich의 How Developers Stop Learning: Rise of the Expert Beginner를 번역한 글입니다. 모든 저작권과 권리는 Erik에게 있습니다. *This article is a…

medium.com

 

댓글