- 현실 세계에는 학교 학습보다 야생 학습이 더 많이 필요하다.
- 야생 학습의 특징
- 대부분 협력적이다.
- 대부분 비순차적이다.
- 대부분 자료에 한정이 없다.
- 대부분 명확한 평가가 없다.
- 대부분 정답이 없다.
- 대부분 목표가 불분명하고 바뀌기도 한다.
- 불확실성이 높을수록 야생 학습이 중요하다.
당신은 몇 년 차?
경력, 그 견딜 수 없는 무거움
- 경력 연차라는 것으로부터 이 사람이 초급인지 아닌지 정도의 정보만 기대할 수 있다.
- 초급이 아닌 사람들에 대해서는 경력 연차가 오히려 혼동을 불러일으키는 발못된 정보로 작용할 수 있다.
- 고로 경력 연차로 채용 여부나 임금 수준을 경정하는 것은 판단 편의적이고 관료주의적이며 결과적으로 조직에 손해를 줄 수 있는 방식이다.
소프트웨어 기수자 등급별 노임 단가
- 소프트웨어 기술자들을 ‘기술자격 및 경험’이나 ‘학력 및 경험’기준으로 등급을 나누고, 각 등급에 대해 노임 단가를 책정해 놓은 것
- 이것은 사실상 ‘경험’이라는 요소가 가장 결정적인 역할을 한다.
- ‘기술자격’은 기사 자격증을 가진 사람의 경력이 몇 년이냐에 따라 등급을 나눈다.
- ‘학력’이라는 기준도 결국 경력의 테두리 안에 있는 것으로 볼 수 있다.
- 이 글에서 이야기하려는 것.
- 경력 연차라는 것으로부터 이 사람이 초급인지 아닌지 정도만 기대할 수 있다.
- 초급이 아닌 사람들에 대해서 경력 연차가 오히려 혼동을 불러일으키는 잘못 된 정보로 작용할 수 있다.
- 경력 연차로 채용 여부나 임금 수준을 결정하는 것은 판단 편의적이고 관료주의적이며 겨로가적으로 조직에 손해를 줄 수 있는 방식이다.
직원을 뽑을 때 무엇이 그 사람의 실력을 가장 잘 예측할까?
- 존 헌터, 론다 헌터, 프랭크 슈미트가 채용 시 가장 효과적인 예측변수가 무엇이냐에 대해 연구했다. (상관성: 0.5를 넘으면 강한 효과, 0.2이하는 약한 효과)
- 작업 샘플 테스트(실제 채용후 해야 할 작업의 일부를 해보는 테스트): 0.54
- 아이큐 같은 지능 테스트: 0.51
- 구조화된 인터뷰(모든 후보에게 직무 분석을 토대로한 같은 순서의 동일한 질문): 0.51
- 성실성: 0.41
- 연차: 0.26
- 필체나 나이: 0.01
- 연차는 직무 성과와 상관성이 낮다.
- 경력이 얼마되지 않았을 때 몇 년간은 연차의 상관성이 꽤 높은 편. 하지만, 연차가 조금이라도 높아지면 상관성이 없다.
소프트웨어 개발에서 경력과 실력
- 경험이 많은 사람으로서의 전문가: 문제를 이해하는 데 더 많은 시간과 노력을 기울인다.
- 실력이 뛰어난 사람으로서의 전문가: 문제를 이해하는 데 시간을 적게 쓴다.
- 경력과 실력을 동등하게 보는 함정에 빠지면 잘못된 전문가상을 갖는다.
중요하다고 생각하는 것이 중요하지 않다.
- 경력을 지나치게 중요하게 여기는 회사가 많다.
- 경력보다는 구조화된 인터뷰, 작업 샘플 테스트가 좋다.
잘 뽑는 것 이상으로 중요한 것
- 뽑은 사람을 어떻게 교육, 훈련 시킬 것인지.
- 일주일간 업무 능력 향상을 위해 사용하는 시간과 직무 성과 간에는 통계적으로 유의미한 상관성이 있었다.
- 이런 전문성 관리를 개인에게만 맡긴 후 회사는 손을 떼고 일 년에 한 번씩 하위 10%를 해고하는 것은 회사에게나 개인에게나 손해다.
- 시스템
- 아무리 훌륭한 사람을 뽑아도 조직의 시스템과 문화에 문제가 있으면 그런 사람은 묻혀버리기 숩고, 반대로 실력이 평범한 사람일지라도 좋은 시스템 속에서 뛰어난 성과를 낼 수도 있다.
개발자가 할 수 있는 것
- 1만 시간 법칙에서 1만 시간은 ‘자신의 기량을 향사시킬 목적으로 반복적으로 하는 수련’을 한 시간을 일컫는다. 이 수련을 의도적 수련이라고 부른다.
- 애자일을 이용한 의도적 수련 방법
- 피드백 주기가 짧다.
- 실수를 교정할 기회가 있다.
자기계발은 복리로 돌아온다
- 자기계발이 축적 되면 엄청난 차이를 만든다.
- 자기가 습득한 지식이나 능력은 복리로 이자가 붙기 때문이다.
복리의 비밀
- 더글러스 엥겔바트의 작업 구분
- A 작업: 그 조직이 하기로 되어 있는 일을 하는 것
- B 작업: A 작업을 개선하는 것
- C 작업: B 작업을 개선하는 것
- A작업은 겉으로 가장 잘 드러나는 수준이다. 한 회사의 제품과 서비스 개발, 생산, 판매와 관련있다.
- 하지만 다음 수준인 B 작업 없이는 효과적인 A 작업은 불가능할 것이다. 회사가 자신의 제품과 서비스를 개발, 생산, 판매하는 걸 가능케 해주는 시스템과 프로세스를 설계하는 것과 관련이 있다.
- 가장 기묘하고 잠재적으로 가장 영행력이 큰 것은 C 작업이다. 이는 우리의 사고방식과 상호 작용 방식을 개선한다.
- B와 C작업을 통해 지수적 증가를 해야된다.
- 지수적 증가를 위한 힌트
- 자신이 이미 갖고 있는 것들을 잘 활용하라.
- 새로운 것을 유입시키는데만 집중하다 보면 새로 들어온 것들이 이미 있는 것들을 덮어버릴 수 있다.
- 이미 갖고 있는 것들을 하이퍼링크로 서로 촘촘히 연결하라.
- 새로운 것이 들어오면 이미 갖고 있는 것들과 충돌을 시도하라.
- 현재 내가 하는 일이 차후에 밑거름이 될 수 있도록 하라.
- 외부 물질을 체화하라.
- 계속 내부 순환하면 하다가는 일정 수준에 수렴할 위험이 있다.
- 외부 물즐 유입 이후 생긴 내부의 갈등을 해결하는 데에 노력을 기울어야 한다.
- 자신을 개선하는 프로세스에 대해 생각해 보라.
- A 작업을 되돌아보는 회고/반성 활동을 주기적으로 하는 프로세스를 만들어라.
- 피드백을 자주 받아라.
- 사이클 타임을 줄여라. 새로운 정보를 얻었다면 1년 후에 크고 완벽할 실험을 하려고 준비하기보다는 1달, 혹은 1주 후에 작게라도 실행해 보는 것이 좋다.
- 일찍, 자주 실패하라. 실패에서 학습하라.
- 자신의 능력을 높여주는 도구와 환경을 점진적으로 만들어라.
- 자신이 이미 갖고 있는 것들을 잘 활용하라.
학습 프레임과 실행 프레임
- 실행 프레임: 현재 주어진 과업이 뭔가 좋은 성과를 내는 걸로 생각하는 틀
- 학습 프레임: 현재 주어진 과업이 내가 얼마나 배우느냐로 여기게 되는 틀
- 실행 프레임은 목표가 학습을 통한 성장이라면 불리한 선택이다.
가장 학습하기 힘든 직업이 살아남는다
- 알파고 같은 인공지능 시대에 대비하려면 배우기 힘든 것에 집중해야된다.
- 인공지능 시스템에 유리한 조건
- 목표가 분명하고 객관적으로 정해져 있으며 정적이다.
- 매 순간 선택할 수 있는 행동/선택의 종류(Move)가 유한하게 정해져 있다.
- 매 순간 자신이 목표에 얼마나 근접했는지를 알 수 있다(내가 한 선택의 피드백이 빨리 주어진다).
- 주로 닫힌 시스템 속에서 일한다.
- 과거의 선택과 결과에 대한 구조화된 기록이 많다.
- 컴퓨터화에 병목이 되는 카테고리
- 지각과 조작
- 창의적 기능
- 사회적 기능
- 컴퓨터 프로그래머: 스펙대로 코드를 만드는 사람
- 소프트웨어 개발자: 사용자의 요구사항을 분석하고 그에 대한 솔루션을 설계하는 것까지 포함한 사람
- 지각과 조작, 창의적 기능, 사회적 기능의 카테고리에 속하는 변수들로 컴퓨터화 가능한 확률을 계산해보니, 컴퓨터 프로그래머는 48%, 소프트웨어 개발자는 4.2% 였다.
- 자신이 주로 하는 일이 시킨 대로 혼자 프로그램을 만드는 것이라면 살아남기 힘들다.
- 암묵지와 직관을 배우고 수련하는 방법을 배워라.
달인이 되는 비결
- 양치질을 10년한다고 양치질 전문가가 되는 것이 아니다.
- 오래해도 실력이 오르지 않는 이유 2가지
- 동기가 부족하다
- 피드백을 제때 받지 못한다
수십 년 동안 전문가가 안 되는 비결
- 직관적 전문성의 조건
- 타당성: 직관이 적용되는 영역에서 어느 정도 인과관계와 규칙성이 존재해야 한다.
- 예: 포커는 내가 카드를 한 장 받으면 상대에게 어떤 카드가 있을 또는 없을 확률이 보정된다는 추가적인 정보가 생긴다. 따라서 타당성이 있다.
- 예: 주사위는 그런 정보가 없다. 타당성이 없다.
- 피드백: 자신이 내린 직관적 판단에 대해 빨리 피드백을 받고 이를 통해 학습할 기회가 주어지는 환경이 갖추어져 있다.
- 타당성: 직관이 적용되는 영역에서 어느 정도 인과관계와 규칙성이 존재해야 한다.
- 소프트웨어 개발은 타당성도 낮고 피드백도 낮은 편이다.
- 전문성을 향상시키기 위해서 개발하는 방식을 바꾸어 타당성과 피드백을 높일 수 있어야된다.
당신이 제자리걸음인 이유
실력을 높이기 위해서는 ‘의도적 수련’이 중요하다.
의도적 수련을 효과적으로 하기 위한 필수 요건
- 동기
- 피드백
- 적절한 난이도
칙센트미하이의 몰입 이론
- 실력에 비해 작업 난이도가 쉬우면 지루함을 느낀다.
- 실력에 비해 작업 난이도가 어려우면 불안함을 느낀다.
- 개인 능력에 맞는 적절한 과제 수준을 받으면 몰입을 경험한다.
불안하거나 지루함을 느낀다면 이 전략들을 사용해야 된다.
- a1: 실력 낮추기
- 평상시 즐겨 쓰던 보조 도구를 일부러 안 쓰기
- 30초마다 한 번씩 하던 컴파일을 5분에 한 번씩하기
- a2: 난이도 높이기
- 하루 만에 개발하라고 주어진 업무 한 시간 만에 개발해보기
- 100rps면 되는 시스템을 1000rps 기준으로 만들기
- 익숙한 작업을 새로운 언어로 진행해 보기
- 자신의 업무가 아닌 것을 의지로 추가해보기
- 남들보다 일을 좀 더 효율적/효과적으로 하기 위해 내가 직접 도구, 방법을 만들기
- b2: 실력 높이기
- 스터디나 교육 듣기
- 실력을 높이는 3가지 접근
- 사회적 접근: 나보다 뛰어난 전문가의 도움 얻기
- 도구적 접근: 다른 도구의 도움 받기
- 내관적 접근: 비슷한 일을 했던 경험을 머리속에서 되살려 보기
- b1: 난이도 낮추기
- 자신이 맡은 일의 가장 간단하면서 핵심적인 결과물을 첫 번째 목표로 삼기
- a1: 실력 낮추기
실제로는 자신의 실력이나 작업의 난이도가 계속 조금씩 요동친다. 지속적으로 자신의 감정 상태를 살피면서 지금 지루한지 불안한지를 알아내고 만약 지루함이나 불안함을 느낀다면 앞의 네 가지 전략을 적절히 사용해야된다.
- 메타인지: 자신의 상태를 살피는 과정
프로그래밍 언어 배우기의 달인
튜토리얼을 읽을 때 뭘 만들지 생각하고 읽는다
- 튜토리얼을 읽다가도 이 정도면 그 프로그램을 작성할 수 있겠다는 생각이 들면 읽기를 멈추고 코딩을 시작한다.
- 프로그램을 완성하면 잠시 멈췄던 자리로 돌아와서 읽기를 계속한다. 이때에는 다음 프로그램을 목표로 둔다.
- 적극적 읽기: 무언가를 읽을 때 구체적인 질문이나 목적을 가지고 하는 방법
공부할 때 표준 라이브러리 소스코드를 읽는다
- 표준 라이브러리는 보통 해당 언어 발명자가 직접 작성하거나 적어도 해당 언어의 스타일을 따르는 소수의 사람들이 작성한다.
- 표준 라이브러리 코드를 읽어 그 언어의 숙어와 패턴, 스타일을 배우는 것이 중요하다.
공부 중 다른 사람의 코드에 내가 필요한 기능을 추가한다
- 튜토리얼을 읽으며 이해한 내용을, 실제로 살아 있는 코드를 수정하고 돌려보고 하는 등 실험하면서 피드백을 받을 수 있다.
전문성을 효과적으로 뽑아내는 전문가가 되기
- 뭔가 잘하고 싶다면 이미 잘하는 사람을 관찰하고 인터뷰하는 것부터 시작하는 것이 큰 도움이 된다.
실수는 예방하는 것이 아니라 관리하는 것이다
- 실수 관리: 실수는 어떻게든 할 수밖에 없다. 대신 그 실수가 나쁜 결과로 되기 전에 일찍 발견하고 빨리 고치면 된다.
- 실수가 없으면 학습하지 못한다. 실수를 관리하는 문화일수록 학습을 더 잘한다.
- 교육 중에 실수를 더 유도해야 오히려 학습 전이가 더 잘 일어난다.
뛰어난 선생에 대한 미신
- 지식이 많은 사람이라고 해서 꼭 좋은 선생이라고 할 수 없다.
- 전문가가 가르칠 때, 필요한 것의 30%만 가르쳐 놓고 자신은 다 가르쳤다고 생각할 확률이 높았다.
- 전문가가 되면 자신이 하는 일이 반복적으로 몸에 익고 자동화되어서 결국 암묵적이 되어 버린다. 그래서 오히려 인식이 없어진다.
- 선생이 인지적 작업 분석에 능숙한가 하는 것이 학생들의 학업성취도에 높은 영향을 미친다.
- “내가 이 문제를 해결할 떄 어떤 과정을 거치는가"를 생각하며 자신의 머릿속을 관찰하고, 질문을 던지고 분석하는 것이 좋다.
나홀로 전문가에 대한 미신
- 실무에서 전문 지식을 적용할 때 접하는 문제
- 상사나 동료의 지원 없이 추가적으로 일을 하려니, 시간이 모자라 계쏙 미루게 되어 결국 적용하지 못한다.
- 팀원, 팀장들에게 전파 교육을 하려하지만 팀원들 가운데 몇몇은 추가 업무를 왜 하는지 필요성도 못 느끼는 상태에서 강제로 해야 한다는 스트레스를 받아서 부작용이 생긴다.
- 배운 것을 팀 내에서 열심히 적용했으나 지원해주는 임원이 없어 확대하는 데 실패하고, 조직 내에서는 한 팀의 별난 문화로 치부되어 실행 범위가 축소된다.
- 배운 대로 팀에서 실천했더니 “다른 부서는 그런 거 없이도 잘하는데 너희는 왜 그런 거 하면서 아웃풋아 안나오냐"며 이해할 수 없다고 말하는 상사나 협력 팀의 리더와 갈등을 겪는다.
- 기술적으로 어떻게 해야 할지 모르겠는데, 주변에 물어볼 사람이 없어 인터넷 검색하느라 몇 시간씩 보낸다. 하지만 결국 원하는 정보를 찾지 못해서 적용을 포기한다.
- 회사에서 여력이 없어 배운 것을 집에서 시도해 보려 했더니, 가족들의 여러 요구로 인해 집중할 수 없어 화를 내거나, 가족 요구대로 하느라 내가 할 일은 시작도 못 하거나, 그냥 포기하고 잠을 자게 된다.
- 아무리 기술적인 실천법이라도 해도 그 기술은 사회적 맥락 속에서 실천되어야 하며 그 기술의 성공을 위해서는 사회적 자본과 사회적 기술이 함께 필요하다.
- 어떤 기술적 실천법이라도 그걸 현실에서 적용하기 위해서는 사회적 자본과 기술이 필요하다.
- 신뢰가 꺠어져 있는 상태에서는 어떤 행동을 해도 악의적으로 보인다.
- 이 신뢰를 사회적 자본의 일종이라고 한다.
- 전문가는 사회적 자본과 사회적 기술 또한 뛰어나다.
- 뛰어난 소프트웨어 개발자일수록 타인과 인터랙션에 더 많은 시간을 쓰며, 초보 개발자들에게 조언을 할 때 사회적인 측면이 포함된다.