빠르게 성장하는 개발자가 되기 위해 필요한 개념을 배워보자.
인터넷을 통해 거의 모든 지식들을 얻을 수 잇다. 하지만 정보를 얻는 것은 절반의 성공에 불과하다. 궁극적으로는 얻은 정보를 본인만의 기술로 만들어 익히는 것이 중요하다.
이 차이를 알지 못하면 실질적인 발전을 이루지 못하고 튜토리얼을 반복하는 튜토리얼 지옥에 빠지곤 한다.
특히 새로운 지식을 배우는 것이 직업의 정수인 소프트웨어 개발자에게는 효과적으로 학습하는 방법을 아는 것이 매우 중요하다. 새로운 언어, 프레임워크를 빠르게 익힐 수 있다면 다른 개발자보다 획기적으로 생산성을 높일 수 있다.
학습에는 크게 두 가지 카테고리가 있다.
가이드를 따르는 학습 : 튜토리얼 읽기, 강좌 수강하기, 유튜브 동영상 시청하기 등
가이드 없는 주도적 학습 : 처음부터 나만의 프로젝트 만들기, 튜토리얼에서 확장된 영역을 학습하기, 문서에서 직접 정보를 찾기 등
가이드만 따라가다보면 문제 해결 능력을 기르기 어려울 수 잇다. 이런 사람이 본인만의 프로젝트를 만들려고 시도하면 어디서부터 시작해야 할지 막막해져서 실무에서 필요한 기술을 익히지 못한 채 시간을 허비할 수 있다.
반면, 가이드 없는 학습에 집중하면 시간이 오래 걸릴 수 있다. 이미 다른 사람이 해결한 문제를 탐구하는데 몇 주가 걸려 길고 답답한 여정이 될 수 있다. 최악의 경우 자신이 이 문제를 해결할 만큼 똑똑하지 않다는 생각에 포기하게 될 수 있다.
이런 이분법적인 문제를 인지하고, 도전적인 목표(stretch goals), 사고 실험, 고난도의 연습 문제등을 통해 가이드와 주도적 학습기회를 혼합한 학습방법을 가져가는 것이 좋다.
가이드가 있는 상황에서 주도적 학습을 혼합하는 방법을 알아보자
튜토리얼을 따를 때 코드를 그대로 복사, 붙여넣기 하는 대신 한 줄을 생략하면 어떻게 될지, 일부 값을 변경하면 어떤 결과가 나올지 보면서 튜토리얼의 코드를 가지고 놀아보자.
과학자처럼 행동하는 것도 좋다. 코드가 어떻게 작동해야 하는지 가설을 세우고, 코드를 변경해 예상한 결과가 나오는지 확인하자. 가설을 테스트하는 것이다. 가설에 결함이 있다면 튜토리얼을 멈추고 구글링하거나 '나중에 살펴볼 것' 목록에 추가할 수 있다.
이러한 과정을 반복하면 코드 기능이나 작동 원리를 이해하지 못한 채, 그저 복사/붙여넣기만 반복하는 습관을 피할 수 있다. 학습은 능동적인 것이다. 코드를 찔러보고 들여다보면 무슨 일이 일어나고 있는지 모델을 구축하는데 도움이 된다.
이 과정은 과학자적인 사고방식과 마찬가지로 집중력을 요구하기 때문에 유용하다. 튜토리얼 없이 업무를 수행하는 방법을 배우게 된다.
예를 들어 공식 튜토리얼을 따라 틱택토 게임을 개발한다고 해보자. 여기에 추가할 수 있는 기능은 아주 많다.
여기에 관심있는 기능을 추가하면서 창의성을 발휘해보자.
이 전략은 새로운 프로젝트를 시작할 때 빈 캔버스에서 오는 스트레스를 피할 수 있어 좋다. 이미 완벽하게 작동하고 잘 이해된 프로젝트가 있기 때문에 탄탄한 기초 위에 벽돌을 추가하기만 하면 된다.
더 나아가 튜토리얼 프로젝트에 독특하고 눈에 띄는 확장 기능을 추가하면 이 기능에 관한 내용을 포트폴리오에 연결할 수도 있다.
틱택토 프로젝트를 성공적으로 마쳤다면 다른 튜토리얼로 넘어가기 전에 비슷한 프로젝트를 처음부터 만들어 보는 것도 좋은 방법이다.
예를 들어, 빙고 게임 등 틱택토 프로젝트에서 익힌 새로운 기술(상태 관리, 이벤트 리스닝)을 약간 다른 맥락에서 사용해 볼 수 있다. 튜토리얼에서 다루지 않은 부분은 구글링으로 해결책을 찾을 수 있다. 만약 어렵다고 느껴지면 프로젝트를 보류하고, 다른 튜토리얼을 몇 개 더 완료한 뒤 다시 돌아오면 된다.
One on, One off 전략은 먼저 가이드를 따라가면서 배우고, 그 후에는 가이드 없이 유사한 프로젝트를 만드는 것이다. 예를 들어 인스타 클론 튜토리얼을 완료했다면, 직접 트위터 클론을 만들어 보는 것이다.
처음에는 가이드를 따르는 학습에 초점을 맞출 수 밖에 없다. 개발 언어의 구문이나 기초에 익숙하지 않아 가이드 없이 무언가를 만드는 것은 어렵다.
하지만 기술에 익숙해지면 균형점이 바뀌어야 한다. 주도적 학습에 더 많은 시간을 투자하고, 흥미로워 보이는 프로젝트에 집중하자. 물론 낯선 문제를 마주치면 튜토리얼을 찾아야겠지만 경험이 쌓이면 가이드 찾는 빈도가 줄어들 것이다.
물론 처음부터 자기주도적 학습을 할수도 있다. 결국 중요한 것은 적절한 균형을 찾는 것이다. 기억해야 할 점은 어느 것에 초점을 맞추든 한가지에만 매몰되지 않는 것이다. 자연스럽게 균형을 찾아가 보자.
새로운 기술을 빠르게 익히고 싶다면 올바른 사고방식을 기르는 것이 매우 중요하다. 소프트웨어 개발은 결코 순조롭게 진행되지 않는다. 의도한 대로 코드가 작동하지 않는 시련에 부딪히기 마련이다.
이는 좌절감과 자기 의심, 가면 증후군으로 가득 찬 하향 나선형으로 이어질 수도 있고, 반대로 긍정적인 학습기회로 여겨질 수도 있다. 올바른 사고방식만 있다면 더 빠른 개발을 배우는 데 있어, 이해할 수 없는 오류 메시지만큼 도움이 되는 것도 없다.
사실 쉽게 성공하는 것보다 고군분투하고 실패하는 과정에서 훨씬 더 많은 것을 배울 수 있다. 성장 마인드를 가진 사람이라면 고난이 재미있지는 않더라도 좋은 운동처럼 생산적으로 느껴질 수 있다.
원하는 구체적인 목표가 있다면 좌절을 극복하고 계속 발전할 수 잇다. 단순히 재미 혹은 이력서게 넣기 위해 일을 한다면 성장 마인드를 키웠다 하더라도 일이 잘 풀리지 않으면 금방 포기할 것이다.
사람마다 동기 부여 포인트는 다르다. 하지만 본인이 진정으로 흥미를 느끼는 목표가 무엇인지, 그것을 염두에 두는 것이 중요하다. 그렇지 않으면 무언가를 처음 시작할 때의 설렘이 사라진 후에 필요한 동기를 유지하기 어려울 것이다.
적은 시간을 자주 학습하는 시스템을 갖자. 하루에 7시간을 공부하는 것보다 일주일에 걸쳐 하루에 1시간씩 공부하는 것이 더 효과적이다.
공개적으로 학습할 때 얻을 수 있는 이점은 다음과 같다
기술은 마치 재산과 같다. 더 많은 기술을 습득할 수록 빠르게 축적된다. 한 분야에서 얻은 아이디어와 기술은 다른 영역에서도 충분히 도움될 수 있다.
깊이 있는 전문 지식을 쌓는 것은 가치 있는 일이다. 그러나 기술 네트워크가 넓어질수록 새로운 것을 배울 때 더 큰 이점을 얻을 수 있다.