회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
AWS 이용 중이라면 최대 700만 원 지원받으세요
본문은 요즘IT와 번역가 Chase가 함께 조쉬 코모(Josh Comeau)의 글 <How To Learn Stuff Quickly>을 번역한 글입니다. 필자인 조쉬 코모는 언스플래쉬, 칸 아카데미 등에서 일했고 현재는 웹사이트 Joshwcomeau.com를 운영하며 리액트, CSS, 애니메이션 등에 대한 다양한 아티클과 강의를 제공하고 있습니다. 이 글은 개발자로서 새로운 기술을 빠르게 습득하는 방법을 다루고 있습니다.
회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
회원가입을 하면
성장에 도움이 되는 콘텐츠를
스크랩할 수 있어요!
확인
본문은 요즘IT와 번역가 Chase가 함께 조쉬 코모(Josh Comeau)의 글 <How To Learn Stuff Quickly>을 번역한 글입니다. 필자인 조쉬 코모는 언스플래쉬, 칸 아카데미 등에서 일했고 현재는 웹사이트 Joshwcomeau.com를 운영하며 리액트, CSS, 애니메이션 등에 대한 다양한 아티클과 강의를 제공하고 있습니다. 이 글은 개발자로서 새로운 기술을 빠르게 습득하는 방법을 다루고 있습니다.
필자에게 허락을 받고 번역했으며, 글에 포함된 각주(*표시)는 ‘번역자주’입니다. 글에 포함된 링크는 원문에 따라 표시했습니다.
흔히 인터넷이 교육의 민주화를 가져왔다고 말하곤 합니다. 구글링을 통해 원하는 모든 지식을 얻을 수 있기 때문입니다. 그러나 정보를 얻는 것은 절반의 성공에 불과합니다. 궁극적으로는 얻은 정보를 본인만의 기술로 만들어 익히는 것이 중요하죠.
많은 사람들이 이 차이 때문에 실질적인 발전을 이루지 못하고, 튜토리얼을 반복하는 튜토리얼 지옥에 빠지곤 합니다.
특히 새로운 것을 배우는 것이 직업의 정수인 소프트웨어 개발자에게는 효과적으로 학습하는 방법을 아는 것이 매우 중요합니다. 새로운 언어, 프레임워크, 도구를 빠르게 익힐 수 있다면 다른 개발자보다 획기적으로 생산성을 높일 수 있죠.
이 글에서는 제가 학습하며 배운 것을 공유하고, 새로운 기술을 빠르게 습득하는 방법에 관해 설명하겠습니다.
학습에는 크게 두 가지 카테고리가 있습니다.
가이드만 따라가다 보면 개발자로서 성공하는 데 필요한 문제 해결 능력을 기르기 어려울 수 있습니다. 이런 사람이 본인만의 프로젝트를 만들려고 시도한다면, 어디서부터 시작해야 할지 막막해져 실무에서 필요한 기술을 익히지 못한 채 시간을 허비할 수 있습니다.
반면 가이드 없는 학습에 집중하면 시간이 오래 걸릴 수 있습니다. 이미 다른 사람이 해결한 문제를 탐구하는데 몇 주가 걸려, 길고 답답한 여정이 될 수 있죠. 최악의 경우 자신이 이 문제를 해결할 만큼 똑똑하지 않다는 생각에 포기하게 될 수도 있습니다.
일부 프로그램은 이러한 이분법적인 문제를 인지하고, 코스에 가이드 없는 주도적 학습 기회를 포함하고 있습니다. 도전적인 목표(stretch goals), 사고 실험, 고난도의 연습 문제 등이 그 예시입니다.
그렇다면 가이드가 있는 상황에서 주도적 학습을 혼합할 수 있는 몇 가지 방법을 살펴보겠습니다.
여러분도 아마 저처럼 실수하는 것을 좋아하지 않을 수 있습니다. 어떤 일이든 처음부터 완벽하게 처리하는 걸 추구하는 타입이죠. 일반적으로 완벽주의적인 사고방식은 우리에게 도움이 됩니다. 예를 들어, 자동차 정비사는 한 번의 실수로 수십만 원의 부품 비용을 손해 볼 수 있고, 치과의사가 실수한다면 환자의 아름다운 미소를 망칠 수도 있습니다.
하지만 소프트웨어 개발은 실수에서 비교적 자유롭습니다. 실수를 발견하면 편집기로 돌아가서 코드를 변경하고 다시 시도할 수 있기 때문에 큰 문제가 되지 않습니다. 또 오류 메시지가 가끔은 올바른 해결 방향을 제시하기도 합니다. 개발자들은 이러한 유연성의 큰 장점을 충분히 활용하지 못하고 있을지도 모릅니다.
저는 튜토리얼을 따를 때 코드를 가지고 노는 것을 좋아합니다. 코드를 그대로 복사, 붙여넣기하는 대신 한 줄을 생략하면 어떻게 될지, 일부 값을 변경하면 어떤 결과가 나올지 보는 거죠.
과학자처럼 행동하는 것도 좋습니다. 코드가 어떻게 작동해야 하는지에 대한 가설을 세우고, 코드를 변경해 예상한 결과가 나오는지 확인해 보세요. 가설을 테스트하는 거죠. 가설에 결함이 있다면 튜토리얼을 멈추고 구글링하거나, ‘나중에 살펴볼 것’ 목록에 추가할 수도 있고요.
이러한 과정을 반복하면 코드 기능이나 작동 원리를 이해하지 못한 채, 그저 복사/붙여넣기만 반복하는 습관을 피할 수 있습니다. 학습은 능동적인 과정입니다. 코드를 찔러보고 들여다보면 무슨 일이 일어나고 있는지 모델을 구축하는 데 도움이 됩니다.
튜토리얼 페이드제가 일을 처음 시작했을 때 저는 ‘튜토리얼 페이드(tutorial fade)’라고 부르는 학습 프로세스를 도입했습니다.
방법은 간단합니다.
이러한 과정은 과학자적인 사고방식과 마찬가지로 집중력을 요구하기 때문에 유용합니다. 튜토리얼 없이 업무를 수행하는 방법을 배우게 되죠. 이 방법은 매우 효과적이지만, 반복을 싫어하는 사람에겐 통하지 않을 수도 있습니다. 그러나 튜토리얼 지옥에서 탈출하지 못하고 있다면 한 번 시도해 볼 만한 가치가 있습니다. |
이번에는 리액트에서 공식 튜토리얼을 따라 틱택토(tic-tac-toe) 게임을 개발한다고 가정해 보겠습니다. 튜토리얼을 잘 따라왔다면 미니멀하지만 완전한 기능을 갖춘 게임을 만들 수 있을 겁니다.
여기에 추가할 수 있는 재미있는 기능은 아주 많습니다.
여러분이 관심 있는 기능을 추가하면서 창의성을 발휘해 보세요!
이 전략은 새로운 프로젝트를 시작할 때 빈 캔버스에서 오는 스트레스를 피할 수 있어 좋습니다. 이미 완벽하게 작동하고 잘 이해된 프로젝트가 있기 때문에 탄탄한 기초 위에 벽돌을 추가하기만 하면 됩니다.
더 나아가 튜토리얼 프로젝트에 독특하고 눈에 띄는 확장 기능을 추가하면, 이 기능에 관한 내용을 포트폴리오에 연결할 수도 있습니다.
틱택토 프로젝트를 성공적으로 마쳤다면 다음 단계가 궁금해질 겁니다. 이때 다른 튜토리얼로 넘어가기 전에 비슷한 프로젝트를 처음부터 만들어 보는 것도 좋은 방법입니다.
예를 들어, 빙고 게임을 만들어 볼 수 있습니다. 틱택토 프로젝트에서 익힌 새로운 기술(상태 관리, 이벤트 리스닝)을 약간 다른 맥락에서 사용해 볼 수 있습니다. 튜토리얼에서 다루지 않은 부분은 구글링으로 해결책을 충분히 찾을 수 있을 겁니다.
만약 어렵다고 느껴지면 일단 빙고 프로젝트를 보류하고, 다른 튜토리얼을 몇 개 더 완료한 뒤에 다시 돌아와도 괜찮습니다.
이 전략은 ‘원 온, 원 오프(one on, one off)’라고 불립니다. 먼저 가이드를 따라가면서 배우고, 그 후에는 가이드 없이 유사한 프로젝트를 만드는 거죠. 예를 들어, 인스타그램 클론 튜토리얼을 완료했다면 직접 트위터(현 X) 클론을 만들어 보세요.
적절한 균형 찾기저도 처음에는 주로 가이드를 따르는 학습에 초점을 맞췄습니다. 그때는 아직 개발 언어의 구문이나 기초에 익숙하지 않아서 가이드 없이 무언가를 만드는 것이 어려웠죠.
하지만 기술에 익숙해지면서 균형점이 바뀌었습니다. 주도적 학습에 더 많은 시간을 투자하고, 흥미로워 보이는 프로젝트에 집중하기 시작했습니다. 물론 지금도 낯선 문제를 마주치면 튜토리얼을 찾기도 하지만, 경험이 쌓이면서 가이드를 찾는 빈도가 줄어들고 있죠.
제 그래프는 이런 모습입니다.
여러분의 그래프와는 다르더라도 궁극적으로 적절한 균형을 찾는 것이 중요합니다. 기억할 점은 가이드를 따르든, 따르지 않든 한 가지에만 매몰되지 않는 것입니다. 계속해서 자연스럽게 균형을 찾아가 보세요. |
몇 년 전, 저는 친구들과 볼링을 치러 갔는데 이날을 예로 들어보겠습니다. 당시 제 볼링 실력은 형편없었습니다. 대부분의 공이 거터로 빠졌고 결국 제 점수가 가장 낮았죠. 이 상황을 해석하는 방법은 두 가지가 있습니다.
어떻게 해석하든 그것이 현실이 될 수 있기 때문에 상황을 해석하는 사고방식은 정말 중요합니다. 볼링 실력이 앞으로도 형편없을 것이라 믿든, 향상할 수 있다고 믿든 그렇게 될 수 있습니다. 우리 모두는 발전할 수 있는 잠재력이 있기 때문이죠.
그래서 새로운 기술을 빠르게 익히고 싶다면 올바른 사고방식을 기르는 것이 매우 중요합니다. 소프트웨어 개발은 결코 순조롭게 진행되지 않습니다. 의도한 대로 코드가 작동하지 않는 시련에 부딪히기 마련이죠.
이는 좌절감과 자기 의심, 가면 증후군*으로 가득 찬 하향 나선형으로 이어질 수도 있고, 반대로 긍정적인 학습 기회로 여겨질 수도 있습니다. 올바른 사고방식만 있다면 더 빠른 개발을 배우는 데 있어, 이해할 수 없는 오류 메시지만큼 도움이 되는 것도 없습니다.
*번역자 주: 자신이 이뤄낸 업적을 스스로 받아들이지 못하는 심리적 현상
우리는 사실 쉽게 성공하는 것보다 고군분투하고 실패하는 과정에서 훨씬 더 많은 것을 배울 수 있습니다. 성장 마인드를 가진 사람이라면 고난이 재미있지는 않더라도 좋은 운동처럼 생산적으로 느껴질 수 있기 때문이죠. (참고: 성장 마인드 키우는 방법)
우리는 소셜 미디어의 과대광고가 난무하는 세상에 살고 있습니다. SNS에 떠도는 최신 유행 자바스크립트 라이브러리를 모두 배워야 한다는 압박감을 느끼기 쉽죠.
개인적으로 이러한 트렌드를 따라가려고 할 때마다 잘되지 않았습니다. 저는 동기를 유지하려면 흥미로운 목표를 세우고, 그 목표를 구체화해야 하는 사람입니다. 그래서 그저 학습을 위한 학습에는 의욕이 떨어지는 편입니다.
예를 들어, 몇 년 전 저는 ‘비트 세이버’라는 음악에 맞춰 광선검으로 블록을 공격하는 VR 비디오 게임을 발견했습니다. 모든 노래에는 독특한 안무가 있었고, 사용자가 자신만의 안무(커뮤니티에서는 ‘맵’이라고 함)를 만들 수 있는 소프트웨어도 있었지만, 저는 직접 비트 세이버를 위한 맵 에디터를 만들고 싶었습니다.
몇 달 동안 힘들고 때로는 좌절감을 느꼈던 작업 끝에 저는 다음과 같은 목표를 달성했습니다.
프로젝트를 시작하기 전, 3D에 관한 경험이 전혀 없었기 때문에 WebGL, Three.js, react-three-fiber를 공부해야 했습니다. 배우는 과정은 어려웠고, 성장 마인드를 키웠다 하더라도 일이 잘 풀리지 않는 날도 있었습니다.
하지만 정말 원하는 구체적인 목표가 있었기 때문에 좌절을 극복하고 계속 발전할 수 있었습니다. 단순히 재미 혹은 이력서에 넣기 위해 배웠다면 아마 금방 포기했을지도 모릅니다.
그렇다고 당장 이러한 틈새 프로젝트를 찾아야 한다는 뜻은 아닙니다. 사람마다 동기 부여 포인트는 다르니까요. 하지만 본인이 진정으로 흥미를 느끼는 목표가 무엇인지, 그것을 염두에 두는 것이 중요하다고 생각합니다. 그렇지 않으면 무언가를 처음 시작할 때의 설렘이 사라진 후에 필요한 동기를 유지하기 어려울 테니까요.
만약 기억력이 좋지 않은 편이라면 학습에 어려움을 겪을 수 있습니다. 저 또한 기억력이 좋지 않지만, 다행히도 간격 반복(spaced repetition)이라는 시스템을 갖고 있습니다.
간격 반복 학습의 핵심 아이디어는 기억이 사라지려고 할 때 바로 그 기억에 접근해야 한다는 것입니다. 그리고 기억을 강화할 때마다 그 기억은 조금씩 더 오래 지속됩니다. 복잡해 보이지만 저는 라이트너 박스(leitner box)라는 간단한 도구를 사용해서 간격 반복을 적극 활용하고 있습니다. 저는 이 상자에 수백 장의 인덱스카드를 넣어 사용합니다. 그리고 매일 몇 장의 카드를 꺼내어 리뷰함으로써 기억을 강화하고 있죠.
간격 반복 학습법에 대해 더 자세히 알고 싶다면, 닉키 케이스(Nicky Case)의 ‘무엇이든 영원히 기억하는 방법’이라는 흥미로운 포스트를 참고해 보세요.
예를 들어, 일주일에 7시간을 새로운 것을 배우는 데 투자하기로 했다고 가정해 봅시다. 이때 하루에 1시간씩 투자하는 것이 더 효과적일까요, 아니면 매주 일요일에 7시간씩 투자하는 것이 더 효과적일까요?
저는 적은 시간을 자주 투자했을 때 훨씬 더 많은 성공을 거두었습니다. 모든 사람이 매일 여유시간이 있는 건 아니겠지만, 여유가 있다면 매일 일정 시간을 투자하는 쪽을 강력히 추천합니다.
자주 하는 것이 왜 더 효과적인지에 관한 가설은 다음과 같습니다.
저는 Swyx의 ‘Learn in Public’ 철학의 열렬한 팬입니다. 학습한 내용을 공개함으로써 미래의 자신뿐만 아니라, 다른 이들에게도 도움을 줄 수 있다는 것이 이 철학의 핵심입니다. 새로운 것을 발견하면 블로그, 트윗, 유튜브 동영상과 같은 작업을 통해 문서화해야 합니다.
이에 대한 반문이 생길 수 있습니다. “학습 시간에 블로그를 작성하는 것은 시간 낭비가 아닌가요?”
이렇게 공개적으로 학습하면 얻을 수 있는 이점은 다음과 같습니다.
여기서 한 가지 주의할 점은 처음부터 완벽한 블로그를 만드느라 몇 주를 소비하지 마세요. 데브(Dev)나 트위터(현 X)와 같은 플랫폼에 게시하는 것부터 시작해도 좋습니다. 공개적으로 학습하는 것을 정말 좋아하게 된다면, 멋진 블로그를 만들어서 언제든지 게시물을 옮길 수 있으니까요.
최근 저는 블렌더를 사용해 3D 일러스트를 만드는 방법을 배우기 시작했습니다. 아직은 이 기술을 익히는 데 약 150시간을 투자한 초보 수준이지만 꽤 괜찮은 작품을 만들 수 있었습니다.
제가 만든 작품 몇 가지를 소개합니다.
이 글에서 소개한 다양한 전략을 적용함으로써 저는 블렌더 기술을 신속하게 터득할 수 있었습니다. 더불어 제가 익혀둔 몇 가지 기술을 마치 보완 기술(complementary skill)처럼 블렌더에 적용될 수 있었습니다.
3D 일러스트레이션은 사실 하나의 기술이 아니라 수십 가지의 개별 기술이 모인 집합체입니다. 3D 모델링과 같이 처음 다루는 기술은 처음부터 배워야 하지만, 일부 기술은 이미 꽤 익숙했습니다. 예를 들어, 사진을 찍는 취미는 렌더링에서 오브젝트를 배치하는 데 큰 도움이 되었습니다. 몇 년 전부터 이미 구도에 대해 배우고, 뷰포트 내에서 매력적인 사진을 찍기 위한 요소 배치법을 익혔거든요.
또한 프론트엔드 개발 경험이 디테일을 주의 깊게 보는 데 도움을 주었고, 픽셀을 다루는 작업은 경사와 두께에 적합한 값을 찾는 데 이바지했으며, UI 디자인 경험은 색채 이론과 미학을 깊이 이해하는 데 도움이 되었습니다.
이러한 다양한 경험이 3D 일러스트레이션과의 뜻밖의 시너지 효과를 만들어 냈습니다. 기술은 마치 재산과 같습니다. 더 많은 기술을 습득할수록 빠르게 축적됩니다. 또 한 분야에서 얻은 아이디어와 기술은 다른 영역에서도 충분히 도움이 될 수 있습니다.
저는 여러분이 완전한 제너럴리스트가 되어야 한다고 조언하는 것이 아닙니다. 깊이 있는 전문 지식을 쌓는 것은 여전히 가치 있는 일입니다. 그러나 기술 네트워크가 넓어질수록 새로운 것을 배울 때 더 큰 이점을 얻을 수 있습니다.
또한 저는 자바스크립트 개발자를 위한 CSS 강좌를 만들고 있는데요. 이름 그대로 특별히 자바스크립트 개발자들이 기존 지식을 활용하여 CSS를 쉽게 배울 수 있는 강좌입니다. 백지상태에서 지식을 쌓아 올리기보단 자바스크립트 지식을 활용해 CSS를 설명하려고 합니다. 제 목표는 CSS가 답답하고 직관적이지 않다는 편견을 바꾸는 것이기 때문입니다.
지금까지 제가 학습하며 배운 것들을 소개해 봤습니다. 도움이 될지 모르겠지만, 여러분의 학습 여정에 행운이 있길 바랍니다! 끝까지 읽어주셔서 감사합니다.
<원문>
위 번역글의 원 저작권은 Josh Comeau에게 있으며, 요즘IT는 해당 글로 수익을 창출하지 않습니다.