들어가면서
대부분의 사람들은 단순히 공식을 암기하고, 풀이과정을 외우는 등의 공부 방법을 지향해왔을 것이다.
하지만 진정한 학습의 의의는 ‘야생 학습’에 있다. ‘야생 학습’이란, 협력적이고, 비순차적이며, 정답이 없는 학습을 의미한다.
도인을 만나 몇년동안 물을 기르고.. 이러다 보면 어느순간 내공자가 되어 있다는 도인 메타포는 거짓이다.
우리는 기존의 학습 방법에서 벗어나 ‘진짜 자라는 방법’을 알아야 한다.
방향성 없는 노력은 우리를 배신할 수도 있다
개발자 뿐만 아니라 대부분의 직업에 있어, 경력은 실력을 판가름할 수 있는 ‘객관적인’ 지표로 손꼽힌다. 하지만 이는 적어도 개발자에게는 적용되기 어렵다.
1년차 프로그래머와 10년차 프로그래머는 확실히 실력 차이가 엄청날 것이지만, 5년차와 10년차의 연차 차이는 실력을 판단하는 데 있어 큰 의미가 없을 확률이 높다.
그렇다면 실력을 높이기 위해서는 무엇이 중요할까? ‘의도적 수련’이다.
의도적 수련이란, 말 그대로 정말 기량 향상을 목적으로 자신의 약점을 개선하려고 애쓰는 수련을 말한다.
이를 위해서는 두 가지 전제 조건이 필요한데, 1. 피드백을 짧은 주기로 얻는 것, 2. 실수를 교정할 기회가 있는 것이다.
제자리 걸음에서 벗어나는 방법
의도적 수련이 되기 위해서는 본인의 실력과 작업의 난이도가 비슷해야 한다. 다음 그림을 살펴보자.
- 실력이 난이도에 비해 매우 좋거나, 실력이 작업 난이도를 따라갈 수 없는 경우 우리는 제자리걸음을 반복하게 된다.
- 반면 실력과 난이도가 적절한 균형을 이룰 경우, 우리는 ‘몰입’의 상태를 유지할 수 있다.
이처럼 의도적 수련은 ‘몰입’의 상태에서 나온다. 자신이 뛰어난 실력을 가지고 있다고 하더라도, 난이도가 그에 상응하지 못한다면 성장하지 못하는 것이다. 즉, 뛰어난 스케이터는 넘어지지 않는 스케이터가 아닌, 엉덩방아를 더 많이 찧는 스케이터이다.
지루함을 느끼고 있는 경우, 실력을 낮추거나 난이도를 높일 수 있다(a1, a2). 실제로 훌륭한 개발자들이 사용하는 방법은 a2이다. 이는 작업을 바꾸라는 의미가 아닌, 기존의 작업을 다른 방법, 보다 어려운 방법으로 접근한다는 의미이다. 예컨대, 새로운 언어를 사용하거나 버그를 더 많이 찾는 등이 있을 수 있다.
불안함을 느끼고 있는 경우, 실력을 높이거나 난이도를 낮출 수 있다. 난이도를 낮추는 방법이 중요한데, 예를 들어 숲을 만들고자 한다면 우선 씨앗을 하나 심는 것 부터 시작하는 것이다. 이는 애자일의 WTSTTCPW(What’s The Simplest Thing That Could Possibly Work?)와 상통하는 내용이다.
즉, 앞서 이야기한 메커니즘(a1, a2, b1, b2)를 사용해 우리는 동적 균형을 이루어야 한다. 지속적으로 상황을 주시하는 메타인지 전략이 중요하다는 이야기이다.
실수는 관리되었을 때 비로소 성공의 어머니가 된다
실수는 미연에 방지되어야만 할까? 단순히 일차원적으로만 생각하면 답은 ‘그렇다’ 이다.
그럼에도 불확실한 상황에서 실수는 항상 존재한다. 그렇다면, 실수를 예방하는 것 만큼 중요한 것은 실수를 관리하는 것이다. 실수는 관리되었을 때 좋은 학습의 밑거름이 된다.
좋은 조직이란, 실수 예방이 아닌 실수 관리를 중요시 해야 한다. 누군가 실수를 저질렀다면 비난하기보다는 실수를 오히려 공개하며, 서로 이야기하며 학습하는 분위기가 구성되어야 한다.
단순히 ‘실수를 실수로 치부하는 것’은 생산성 없는 행위라는 것이다. 따라서 우리는 실수를 공연하게 공개하고 그것에 대해 논의할 수 있는 심리적 안정감을 가진 조직 시스템을 만들어야 한다.
전문가는 고독한 늑대가 아니다
사회에서 전문가를 판단하는 일반적인 기준은 무엇인가? 단순히 ‘고독한 늑대’ 처럼, 엄청난 기술을 갖고 있어서, 혼자 모든 일을 처리하는 사람을 떠올리기 쉽다.
그렇지만 적어도 소프트웨어 전문가는 고독한 늑대가 아니다. 좋은 사회적 자본을 가지고 있는 경우가 대부분이며, 뛰어난 개발자일수록 타인과에 인터랙션에 더 많은 시간을 쏟는다.
어떤 기술적 실천법이라도 그걸 현실에서 적용하기 위해서는 사회적 자본과 사회적 기술이 필요하기 때문에 전문가는 이러한 부분에서 두각을 나타내는 것이다.
협력의 진짜 가치는 상상 그 이상이다
소프트웨어 개발 팀의 능률을 향상시키는 방법은 무엇이 있을까?
개발 툴 바꾸기, 일일 빌드 만들기 … 이러한 것들이 정말로 소프트웨어 개발팀의 능률을 높일 수 있을까?
답은 ‘아니오’ 이다. 소프트웨어 개발 팀 관리자라면 이러한 정적인 요소들보다는 커뮤니케이션과 협력을 중요시해야 한다.
추상화란, 소프트웨어 분야에서도 매우 중요한 키워드이고 소프트웨어 공학의 역사는 곧 추상화를 높이기 위한 여정이다. 이러한 추상화를 높일 수 있는 방법을 찾기 위해서 많은 노력이 투입되었다는 의미이다.
추상화를 높이기 위한 가장 쉽고 빠른 한 가지 방법이 있다. 그건 바로 ‘타인과의 협력’이다.
좋은 커뮤니케이션을 위한 전제조건
앞서 말한 ‘커뮤니케이션과 협력’은 무작정 타인과 대화를 하라는 것이 아니다. 이는 신뢰가 뒷받침되어야 한다.
그렇다면 신뢰는? 어떻게 증진되어야 할까?
작업물을 공유할 때 하나 공유, 최고 공유가 아닌 복수 공유를 하는 것이다. 하나 공유, 최고 공유는 오히려 신뢰를 저하시킬 수 있다. 예를 들어서, 협업 프로젝트에서 본인이 맡은 기능에 대해 접근방식 A, B, C를 모두 적용해봤다고 해보자.
이런 상황에서 '성능이 가장 좋거나', '가장 좋은 것으로 추정되는' 접근방식만 공유하지 말고, A, B, C 모두를 공유하자는 것이다.
또한 신뢰를 위해서는 기본적으로 ‘사람에 대한 이해’가 수반되어야 한다. 인간은 비교적 주관적이며 감정적이다. 따라서 신뢰를 위해서 객관적 자료를 제시한다거나 하는 것이 아니라, ‘해당 사람에게 맞는 주관적인 자료’를 제시하자. 예를 들어 agile 기법을 팀에 도입하고자 한다면, 단순히 agile 기법이 효과적이라는 논문 자료 등을 제시하는 것 보단, 각자의 관심사가 무엇인지, 어떤 성격 유형을 가지고 있는지에 따라 유동적인 자료를 제시하면 된다.
또한, 협력을 진행하면서 비난과 비판을 정당하게 여겨서는 안된다. 앞서 이야기했던 것처럼 서로의 실수를 격려하면서 실수 관리를 하고, 감정적인 부분까지 관리를 해주는 것이 커뮤니케이션 효율을 높이기 위한 가장 빠른 방법이다.
탁월한 팀의 비밀
일반적으로 전문가의 이미지는 ‘모든 것을 한번에 계획하고 수행하는 사람’으로 생각되는 경우가 많다. 즉, top-down 방식의 일처리를 할 것이라 생각된다는 것이다.
하지만 실제로는 그렇지 않다. 전문가는 오히려 더 문제 해결 과정에 있어 추상화 정도를 높였다가 줄였다가 하는 삼투압 모형을 구성한다. ‘삼투압적 의사소통’은 뛰어난 팀이 공통적으로 가지고 있는 특징이기도 하다.
협력에 있어 이러한 삼투압적 의사소통 능력을 보유한다면 은연중에 서로 간에 정보가 스며들기가 쉽다. 이를 웹 개발에 적용하면? 개발의 5단계를 waterfall 방식으로 차근차근 진행해 나가는 것이 아니라, 처음부터 5단계를 모두 왔다갔다 할 수 있어야 한다는 것이다.
또한 탁월한 팀이 되기 위해서는 심리적 안정감이 중요하다. 즉, 실수를 하거나 드러났을 때에 처벌이나 놀림을 받지 않는다는 믿음이 있어야 한다는 것이다.
이러한 조건들을 엔진삼아 ‘애자일’은 동작한다.
애자일: 고객에게 가치를 전하자
애자일은 불확실성이 클 때 우리가 어떻게 해야 하는지에 대한 결과물(방법론)이다.
앞서 말했듯이, 학습과 협력은 애자일의 핵심적인 구동원리이다. 이를 다르게 이야기하면, 학습과 협력은 불확실성을 다루는 가장 좋은 수단이다.
하지만 애자일에서 간과해서는 안되는 부분이 있다.
그것은 바로 우리가 만드는 것이 결국은 고객에게 가치를 전하기 위함이라는 것. 따라서 고객과도 커뮤니케이션을 두려워하지 말자. 그것은 우리가 애자일을 더욱 잘 다루게 될 수 있는 가장 좋은 방법이다.
함께 자라기를 읽고
우연한 계기로 이 책을 추천받아서 읽게 되었다.
나는 여태까지 애자일을 이론으로만 배웠다. 단순히 회의를 자주 하고, 필요한 기능을 먼저 배포해서 유저와의 interaction을 추구하는 .. 이런 것이 애자일 방법론이라 생각했다.
물론 위 내용도 결과론적으로 보면 맞는 말이다. 하지만 무엇이 그걸 가능하게 하는지에 대한 생각은 하지 않았었다. 애자일의 핵심 동력은 학습과 협력이다. 즉, ‘함께’ + ‘자라는 것’ 이 중요하다는 말이다.
하지만 더 중요한 것은, 애자일은 ‘방법론’임과 동시에 인생 전체에 영향을 미칠 수 있는 ‘가치관’이라는 것이다.