더닝 크루거(Dunning Kruger)효과는 한 마디로 '무식하면 용감하다'라는 것을 과학적으로 연구한 사례입니다. 아래의 더닝 크루거 곡선이 좀 더 잘 알려져있죠.
잠시만 설명하면, 이 곡선은 지식(X축)과 자신감(Y축)으로 이루어져 있고, 자신감이 최대치에 달하는 무지의 산(Mount Stupid)까지는 빠르게 상승하지만, 곧 현실을 깨닫고 절망의 계곡(Valley of Despair)에 빠지게 되며, 깨달음의 언덕(Slope of Englightenment)를 지나, 지속의 고원(Plateau of Sustainability)에 도달한다는 이론입니다.
이번 글에서는 16년차 SW개발자로써도 저의 경험을 이 곡선에 빗대어 적어보려 합니다.
전 사실 SW개발을 전공하지는 않았습니다.(이 부분은 나중에 계속해서, 저의 개발자 커리어에 발목을 잡았습니다) 계산을 위한 코딩은 곧잘 했으나, 어플리케이션 개발과는 거리가 멀었습니다. 첫 직장에서 여러 사정으로 SW개발이 주 업무가 되어 본격적인 개발자로서의 커리어를 시작하게 되었습니다.
첫 직장의 Legacy시스템은 대부분 C++ MFC기반의 데스크탑 어플리케이션이였지만, 입사한 시점부터 C# .NET기반으로 변경을 하기로 결정이 되었습니다. 그래서 모두가 새로 배우는 분위기에서 비교적 편하게 개발을 시작할 수 있었고, 지금 생각하면 운이 좋았습니다.
모두가 C#을 처음 배우기 시작했지만, 기존 선배들은 아무래도 기본 지식이 있다보니 쉽게 쉽게 배워나갔고, 나와 같은 신입들은 아무래도 뒤쳐질 수 밖에 없기는 했습니다. 하지만 신규 시스템의 UI를 WPF(Windows Presentation Foundation)기반으로 개발하기로 하면서, xaml이라는 다소 생소한 마크업 언어를 적용해야 되자, 난색을 표하는 사람들이 생겨났습니다. 전 그기서 WPF를 집중적으로 공부하며, 치고 나가기 시작했고, 나만의 분야를 만들 수 있었습니다. 그렇게, 개발한 시스템으로 해외 인증도 받고, 이어서 판매까지 이루어지며 현장 적용까지 성공하자 이 일이 재미있기 시작했습니다. 그리고 뒤를 이은 프로젝트는 웹 어플리케이션 개발에서도, 과거 재미로 연구실 홈페이지를 만들었던 경험을 살리고, 처음 접해보는 DB프로그래밍도 공부해가며, 또 다시 성공적인 마무리를 했습니다.
4~5년이라는 비교적 짧은 시간에, WPF, WCF, APS .NET MVC, ADO .NET 등을 학습해가며, 학습 내용을 바로바로 신규 개발 시스템에 적용할 수 있었고, 또 그 시스템 또한 사업부의 지원으로 판매가 되면서 매출 성과도 낼 수 있어, 배우며 개발하는 그 자체가 보람된 나날이었습니다.
입사 후 5년 쯤이 되었을 때, 사업부의 기조가 조금씩 바끼기 시작했습니다. 주변에 같이 일하던 개발자들이 한 둘 그만두거나, 아니면 다른 부서로 옮기는 일이 경우가 많아졌습니다.(이는 10년차에 퇴사를 하기 전까지 이어졌습니다) 그러나, 그 와중에도 윗 분들이 잘 봐주셨는지, 저는 신규 개발을 계속 이어서 할 수 있었습니다. 그 것도 팀을 꾸리고 실질적인 리더로서의 역할도 수행하면서 말이죠.
그렇게 만들어진 크고 작은 팀에서 동일하게 계속 성과를 내었고, 점점 대외 활동도 많아졌습니다. 이 때쯤 나는 왠만한 데스크탑 어플리케이션은 바로바로 설계해서 개발이 가능할 정도의 실력이 쌓였고, 그런 SW개발 능력과 원래의 전공 지식을 살려내자, 제 이름이 사업부에만 머물지 않고 회사 전체 R&D조직에서도 알려졌습니다. 때마침 대학원 선배들이 연구소 요직을 차지하기 시작하면서 더욱 부곽되었죠. 지금 생각하면 굉장히 운이 좋았던 시절이었네요.
사업부를 떠나, 전사적으로 활동을 하자, 더 많은 기회가 주어졌고 난 그렇게 더 성장할 수 있었습니다. 매년 새로운 일을 주어졌기에 점점 버거워지고 있었지만, 기쁜 마음으로 받아들여 정말 열심히 했었습니다. (퇴사할 즈음, 5개 시스템의 유지보수와 2개 신규 프로젝트를 담당하고 있었네요. 미친 짓이죠.)
더닝 크루거 이론에서는 절망의 계곡 추락은 지식의 부족함을 인지하면서 시작합니다. 저의 경우는 여기에 다른 외부적인 요인도 더해졌습니다.
일단 외부적인 요인을 보면, 당시에 제 직급은 책임 연구원 즉 과장이였습니다. 사실 어느 정도 규모가 있는 회사라면 과장급이 되면 관리 업무가 많아집니다. 개발만 하던 사람이 관리 업무가 추가되면 많은 부담감을 가질 수 밖에 없습니다. 특히 일을 할 때 내가 잘못되었다고 비판했던 간부들의 행위들을, 제가 간부의 입장에서 직접해야만 되는 상황이 되자 굉장히 자괴감이 들었습니다. 후배들에게 그런 모습을 보이는 것이 싫었기 때문에, 전 제가 직접 뛰는 길을 선택했습니다. 덕분에 몸이 엄청 축났죠. 임신과 육아로 힘든 아내를 두고 잦은 출장으로 집을 비워야 했기에, 그 부분도 아내에게 굉장히 미안했습니다.
아무리 힘들어도, 내가 하는 일이 가치가 있다면, 보람을 느꼈다면 그래도 견딜 수 있었다고 생각합니다. 하지만 아무리 잘해도 내가 하는 일이 사업부에서는 계륵취급당하고, 위의 선배들이 계속해서 내쳐지는 것을 보고, 별다른 이유없이 하는 일이 제지당하기도 하자, 전 퇴사를 결심했습니다.
그 동안, 제가 있던 도메인에서는 누구보다 잘났다고 자부했었지만, 이직 시장에서는 찬밥이었습니다. 이력서를 넣을 때까지만 해도 자신감이 있었으나, 계속된 서류탈락에 점점 조급해져만 갔죠. 그 와중에 회사는 구조조정까지 실시하고 내가 있던 사업부는 분사가 추진되는 등 분위기는 더욱 어수선해져갔습니다.
1년이 넘는 이직 시도끝에 깨달았습니다. 저와 같은 개발 경력은, 전문 SW분야에서는 하찮다는 것을, 저의 전공과 저의 회사가 SW개발과 무관한 것은 큰 편견을 심어준다는 것을, 그리고 저보다는 어린 후배들은 잘 이직해가는 것을 보며, 제가 나이도 많다는 것을.. 아 물론 그 분들도 능력이 되니깐 잘 이직하셨겠죠. 폄하하지는 않습니다.
현실을 깨닫고 눈높이를 낮추어 지원을 하기 시작했고, 또 다시 운이 좋게 먼저 이직한 회사 선배의 추천으로 한 회사로 따라 이직할 수 있었습니다.
이직한 회사는 중소기업이긴 했으나, C++기반의 엄청난 Legacy 시스템을 보유한 회사였습니다. 그리고 규모에 비해 굉장히 개발 시스템이 잘 짜여진 곳이였죠. 엄청나게 방대한 코드들(나중에 소스라인만 카운트하는 프로그램을 만들어 돌려봤는데, 유의미하든 무의미하든 전체 소스가 천만 라인이 넘어가더라구요)을 이해하기란 굉장히 어려웠고, 오랜만에 접하는 C++에 다시 익숙해지는 것도 어려웠습니다. 무엇보다 산업 도메인이 완전히 달라졌기 때문에 그 도메인 지식을 익히는 것 또한 숙제였죠. 덤으로 애자일(Agile)이라는 개발 방법론도 적응의 대상이였죠.
그렇게 전 예전에 책을 보며 코드를 따라하던 시절로 돌아가게 되었습니다.
첫 직장에서의 저는 충분한 리소스가 주어지지 않았기에, 기획/설계/개발/설치/시운전/AS까지 모든 것을 다 해야만 했었다. 개발 정도만 몇 안되는 팀원과 일을 나눌 수 있었습니다. 그 마저도 팀원들이 떠나가며 힘들어졌지만..
새로 이직한 직장에서는 철저히 개발만 담당했습니다.
처음에는 시스템 적응 단계로 메인 커맨드의 작업 옵션하나 개발하는 것부터 시작했는데, 지금보면 시시하지만 그때는 그것도 어려웠습니다. 버턴 하나 제 자리에 추가하는 것이 뭐가 그리 어렵든지..
두 번째 직장에서 인정받기 시작한 것은 성능 개선 작업이었습니다.
아직 시스템이 이해가 안되던 시절이었기에, 퇴근하고 집에서도 원격으로 코드를 분석해가며 성능 관련 이슈들을 하나씩 해결하기 시작했습니다. 그 중에 나름 드라마틱하게 개선을 한 이슈가 생기자, 그 이후로 어지간한 성능 개선 이슈는 저한테 떨어졌습니다.
이 업무를 통해, 기존 코드에 익숙해졌다는 성과도 있으나, 더욱 큰 성과는 예전에는 단순히 기능을 위한 개발을 했다면, 지금은 코드의 구조적인 면까지 볼 수 있게 되었다는 점입니다. 병렬 쓰레드에 대한 부분도 터득한 것도 덤이구요. 코드적인 부분도 그렇지만, 새로운 도메인 지식도 점차 축적되어갔고, 단순히 기존 기능의 개선이 아니라, 전문적인 기능을 설계하고 구현할 수 있는 수준까지 성장해 나갈 수 있었습니다. 그리고 본부장의 배려로 조금 더 연구적인 활동에 매진하였고, 매일 매일이 공부의 연속인 나날이 계속 되었습니다.
두 번째 직장에서 나름 적응해가며 성과도 내고, 연말에 시상도 받고 했지만, 예전처럼 자신감이 올라오진 않더군요. 그런거에 일희일비 안하는 나이가 되어서일 수도 있고, 첫 직장에서 모든 열정을 소진한 탓일 수도 있겠네요. 그리고 이제는 아이들과 조금 더 가까이 지내야 한다는 생각이 더 듭니다.
현재는 세번째 직장으로 이직을 했습니다. 중간에 다소 우여곡절이 있었죠.
지금 회사에서도 두번째 회사와 비슷한 업무를 하고 있습니다.
다만, 전 회사는 전문가들이 있어 도움을 받을 수 있었지만, 지금은 온전히 혼자 해내야 한다는 점과 GPU를 쓰서 좀 더 극한에 이르렀다는 점이 다르기는 합니다.
그럼 난 지금 어디쯤 있을까? 깨달음의 언덕? 안정의 고원? 자신감은 쌓여가는가? 이 물음이 사실 제가 이 글을 적는 이유입니다.
더닝 크루거 이론 자체가 초보들의 끝없는 자신감에 초점을 맞추고 있기 때문에 아무도 뒤 이야기를 다루진 않습니다. 다들 그냥 깨달음을 얻고 절대 고수가 되었다라는 행복한 결말만 말하죠. 하지만 전 지식이라는 관점에 있어서는 자신감이 없습니다. 곡선으로 보면 오히려 점점 떨어지는 형태입니다.
첫 직장을 퇴사할 때즘의 나,
두번째 직장에서의 나,
지금의 나를 비교하면, 지금의 제가 가진 지식이나 이해도는 월등히 높다고 말할 수는 있습니다. 하지만 자신감은 없네요. 오히려 나날이 불안감이 더해지고 있습니다.
16년을 개발하고, 예전에는 이해하지 못했던 것을 지금은 많이 이해하는 수준이 되었지만, 알면 알수록 공부하면 할수록, 모르는 것이 더 많습니다. 이 세상에는 너무나 많은 지식이 있고, 너무나 똑똑한 사람들이 수많은 연구를 해냈고 지금도 하고 있습니다. 그것을 따라가는 건 재미있기도 하지만 벅찬 일입니다. 특히 성과를 내야 한다는 내면의 강박관념과 더해져서 불안감을 일으킵니다. 아마 제가 도메인을 크게 2번 바꿨고, 또 업무가 도메인 지식을 완전히 이해할 필요가 있기 때문에 발생한 부분일 수도 있습니다. 무조건 깊숙히 들어가야만 하는..
예전에는 한 10년 일하면 완전 전문가가 될 줄 알았는데, 지금은 생각이 많이 바뀌었습니다. 매체에 나오는 또래의 전문가들을 보면 쟤들은 얼마나 똑똑하고 많이 알기에, 저렇게 당당하게 말할까, 난 한 마디하기도 더 어려워졌는데.. 이런 생각이 많이 듭니다.
30년은 일해야 될 거 같아요. 30년 동안 꾸준히 공부하면서 말이죠. 한숨부터 나오네요.
하긴 30년 뒤에도 똑같은 고민을 할지도 모르겠네요....