함께 자라기 애자일로 가는 길 - 독후감 연재

[#5] 가장 학습하기 힘든 직업이 살아남는다 / 달인이 되는 비결

지상낙원 2021. 8. 2. 20:55
저는 알파고 같은 인공지능 시대에 대비하려면 배우기 힘든 것에 집중하라고 말하고 싶습니다.

  "배우기 힘든 것"에 조건은 다음과 같습니다.

1. 목표(Goal)가 모호하고 주관적일 수 있으며 동적이다.
2. 매 순간 선택할 수 있는 행동/선택의 종류(Move)가 불확실하다.
3. 매 순간 내가 목표에 얼마나 근접했는지를 알기 어렵다. (내가 한 선택의 피드백을 빨리 얻기 어렵다.)
4. 주로 열린 시스템(즉, 예상 못 한 외부 요소가 갑자기 들어오는 경우가 흔한) 속에서 일한다.
5. 과거의 선택과 결과에 대한 구조화된 기록이 별로 없다.
독창성, 사회적 민감성, 협상, 설득, 타인을 돕고 돌보기 같은 것들이 요구되는 수준이 높을수록 그 직업은 컴퓨터화하기 힘들다.
무엇에 집중할 것인가
(중략)
자신이 주로 하는 일이 남이 시킨 대로 혼자 프로그램을 만드는 것이라면 그런 스킬과 경력만 계속 쌓일 것입니다. 반면 컴퓨터화하기 어려운 부분은 크게 성장하지 못하겠죠. 자신의 커리어에 대해 진지하게 다시 생각해 봐야 할 것입니다.

  남이 시킨 대로 만들면, 그것만 만들 수 있을 것입니다. 그런데 남이 시키더라도 그것을 만들면서 여러가지 고민을 해보면 그런 스킬도 발전할 수 있다고 생각합니다. 예를 들면, 자바로 어떤 반복문을 작성한다고 가정하면, 기존에는 for문을 사용하여 작성했던 것을 stream를 이용해서 작성할 수도 있을 것이고, 계산기의 연산 기능을 메서드로 정의 할 수도 있겠지만, 연산기능을 전략패턴을 이용하여 구현할 수도 있을 것입니다. 이러한 작은 노력들이 쌓여서 발전한다고 생각합니다.

결론적으로, 미래에는 암묵지와 직관을 잘 학습하는 사람들이 높은 경쟁력을 가질 것입니다.
(중략)
이런 것들은 배우기가 어렵습니다. 자신이 얼마나 잘하는지 판단하기도 어렵습니다.
(중략)
그럼에도 불구하고 이 분야에서 두각을 나타내고 싶다면 어떻게 해야 할까요?
지금부터라도 암묵지와 직관을 배우고 수련하는 방법을 배우면 됩니다.

  암묵지라는 단어를 몰라서 찾아 봤습니다. (링크) 이런 암묵지가 개발자한테는 어떤 부분이라고 할 수 있을까 생각해 보았습니다. 어떤 에러가 있을 때, 그것이 무엇인지를 대략적으로 예측하거나 높은 확률로 맞추는 것이 암묵지이지 않을 까요? 예를 들면, 멀티쓰레드 환경에서 동기화 처리를 안해서 생기는 간헐적 수치에러를 찾아내고 동기화 영역을 결정해 줄 수 있다면 이러한 것도 암묵지가 될 수 있을 것 같다고 생각합니다.

  그럼, 암묵지와 직관을 배우는 방법이 무엇일까요? 정답은 뒤에 나오지만 미리 공개합니다. 바로 타당성과 피드백이라고 이야기 합니다. 그전에 무조건 반복을 하면 전문가가 될 수 있다는 오류에 빠지지 말아야 함을 "양치"하는 것을 예로 들어서 이야기 합니다.

우리는 (거의) 평생 세수와 양치질을 꾸준하게 반복했건만 왜 세수와 양치의 달인이 안 될까요? 예컨대 10년이 지나도 여전히 양치질을 제대로 못 해서 치과에 갈까요. 가서는 의사에게 "이쪽 치아는 하나도 안 닦으시나 봐요" 같은 소리를 듣고요.
...
정리하자면 꾸준한 반복으로 달인이 되려면 적어도 
1. 실력을 개선하려는 동기가 있어야 하고
2. 구체적인 피드백을 적절한 시기에 받아야 한다.
...
특정 영역에서 개인이 성취할 수 있는 최고 수준의 퍼포먼스는 경험을 오래한다고 해서 자동으로 얻을 수 있는 것은 아닙니다.

  저도 개발 경력을 쌓으면서 느끼는 것이지만, 켄트 벡이 언급한(Make It Work, Make It Right, Make It Fast) 이 말을 기준으로 생각하면 Make It Work(돌아가게 만들어라)까지 했지 Make It Right(올바르게 만들어라 - 리팩터링, 풍부한 테스트 코드)나 Make It Fast(빠르게 만들어라 - 성능 개선)까지의 수준으로 해본 적이 거의 없는 것 같아, 자신에게 매우 부끄러운 생각이 듭니다. 이런면에서 본다면 제 수준은 주니어 수준입니다. 그런데 더 문제는 일터에서 주니어 수준 이상을 하려고 노력하는 제 노력이 그리 높게 평가받지는 못하는 것 같습니다. 일단 프로그램이 작동이 잘되고, 문제가 생기는 것은 인력으로 대체하는 방식으로 진행되는 것이 더 효율적이라고 생각되는 것 같습니다.

  적어도, 이 글을 보시는 경력이 짧거나 저와 비슷한 환경에 계신 분들은 자발적 노력이 없다면, 년차만 쌓일 뿐 실력은 늘지 않은 개발자가 되어있는 모습을 발견하실 것 입니다. 그래서 "실력을 개선하려는 동기"는 매우 중요하다고 할 수 있습니다.

  그리고 "구체적인 피드백을 적절한 시기"에 받아야 하는 것이 첫번째보다 더 어렵습니다. 일터에서는 피드백을 줄 누군가를 찾아야 하는 데 이런 사람을 만나기 쉽지 않고, 혼자서는 할 수 없는 것 이기 때문입니다. 그래서 저는 여러가지 고민에 빠져있다가 넥스트스텝(링크)를 우연히 알게 되었습니다. 여기서 교육자료를 듣거나 읽는 입장에서 벗어나, 주도적으로 구현을 해야하며, 그에 대한 피드백을 바로 받을 수 있다는 점입니다. 이렇게 피드백을 받으면 내가 한 것에 대해서 잘한 점 / 못한 점을 알 수 있으며, 그 내용을 기반으로 개선을 할 수 있다는 것입니다.

  제가 개선된 것 중의 하나는 블로깅하는 것을 전에는 매우 어렵게 생각했는데요. 지금도 쉽지는 않지만 꾸준하고 있습니다. 이는 누군가에게 피드백을 받고 저 또한 누군가에게 열심히 피드백을 하면서 자연스럽게 글을 쓰게 되는 것 같습니다.

   부족한 글 읽어주셔서 감사합니다.