스포츠와 개발 문화의 공통점 - 위코드 1달을 마무리하며
저는 지금 부트캠프에서 공부중입니다. 정확히는 ‘위코드’라는 업체가 제공하는 교육을 이수하는 중이죠. 이 곳의 일정상 한 달은 기본적인 교육을 마무리하는 기간입니다. 여기선 이를 파운데이션이라고 부릅니다. 그 동안 HTML과 CSS로 이뤄진 웹의 기초적인 뼈대를 공부했습니다. 이후 프론트 앤드로 방향을 정한 저는 Javascript라는 언어를 공부했습니다. 2주가 넘어서면서부터는 React라는 자바스크립트의 라이브러리와 익숙해지는 시간을 가졌습니다. 오늘은 이 일련의 공부에서 느꼈던 점 혹은 개인적인 감상을 이야기해보려 합니다.
1달이라는 기간의 기본기 다지기
저는 어린시절 운동을 했습니다. 그래서 성인이 된 지금도 운동을 하던 그 시절의 관점이 많이 남아 있습니다. 지금도 배워나가고 새로운 것을 점하고 사람과 소통할 때 당시의 시각이 나타나곤 합니다. 그 시선으로 해석하자면 위코드에서의 한 달 동안의 ‘개발’ 공부는 기본기를 배워나가는 것이었습니다. HTML, CSS, Javascript는 프론트앤드 개발자의 시선에서 초급적인 지식에 불과합니다. 만약 첫 날 배웠던 내용들을 지식 자체로만 판단한다면 별 볼일 없어 보이겠죠. 제가 한 달 공부해봤자 선배 개발자들의 시선엔 이제 한 걸음 발자국 내딘 어린아이 수준입니다.
제 처음의 기억을 하찮게 남기기 싫었습니다. 그래서 저는 제 또다른 처음을 떠올렸습니다. 스피드 스케이팅을 하던 제가 처음 빙판 위에 설 때를 상상했습니다. 얼음 위에 처음 서는 사람은 90%이상 넘어집니다. 심하게 적응을 못하는 경우 하루 온 종일 서있는 것만 연습하기도 합니다. 그만큼 누구에게나 처음은 어렵습니다. 그리고 종일 노력한 결과가 고작 서있는 자신이라는 것을 발견하면 스스로 자괴감에 빠지기도 하죠. 그러나 뛰어난 중견 선수들도 넘어지는 아이들을 보며 부러워하는 것이 있습니다. 바로 그들의 성장 속도입니다. 넘어지고 뒹굴기 일쑤이지만 그들은 하루가 다르게 성장합니다. 얼음과 처음 만나면서 배우는 기본적인 기술들은 매우 단순합니다. ‘자세 낮추기’, ‘날 올바르게 밀기’, ‘무개 중심이동 바르게 하기’ 그리고 마지막으로 ‘바닥을 보거나 포기하지 않기’. 그러나 이 단순한 기술이 스케이터로서 평생동안 단련해야 하는 중요한 것들입니다. 최고 수준의 선수들도 중요한 경기에서 상술한 기본기가 흔들려서 올림픽이나 선수권에서 제 기량을 발휘하지 못하곤 합니다.
개발과 만난 첫 1개월은 앞서 말한 기본기를 다지는 시간이라 느낍니다. 지금 배우는 지식이 비록 기본이지만 하찮은 것이 아닙니다. 오히려 평생을 단련해야 할 것들이죠. 웹의 뼈대인 HTML,CSS를 자유롭게 다루지 못하는 프론트 앤드 개발자를 위한 자리는 없습니다. 또한 Javascript와 자유로운 대화가 불가능하면 아무리 라이브러리, 프레임워크에 능숙해도 성장에 한계를 보일 수 밖에 없습니다. 물론 리엑트라는 라이브러리를 배우기도 했지만 그 보다 중요한 것이 HTML, CSS, Javascript라고 생각합니다. 더 나아가서 이 세가지보다 더 중요한 것은 웹이란 환경에서 고객과 서버의 소통을 연결하는 프론트앤드의 본질적인 역할을 배운 것입니다. 지금부터 개발자로 성장하기 위해 평생을 단련해야 하는 기본기들을 이야기 해보려고 합니다.
개발은 문제를 ‘발견’하고 ‘소통’을 통해 해결 해나가는 일
어린 선수들은 경기 운용의 전술적인 부분과 ‘날 들밀기’ 등 테크닉적인 요소를 중요한 요소로 착각하는 경향이 많습니다. 사실 본질은 처음 얼음 위에서 배우는 기본기들입니다. 한 달 동안의 위코드 생활에서 저는 개발 역시 다르지 않다고 느꼈습니다. 마지막에 배운 React는 배울 것이 많고 생소한 개념으로 어려웠습니다. 물론 개발을 도와주는 도구들을 능숙하게 다루는 것도 중요합니다. 때문에 현업에서 중요한 React를 비교적 오랜 시간인 2주에 걸쳐 배우죠. 그러나 그에 앞서 2주동안 배웠던 ‘본질’에 대해서 잊지 않으려고 합니다. 이곳의 멘토님들은 끝없이 배우고 성장해 나가는 것을 추구하는 것이 개발자의 자세라고 말합니다. 또한 문제를 발견하고 올바른 소통을 통해 해결해 나가는 것이 개발자의 일이라고 강조합니다.
수리적으로 사고해라
개발을 대해야 하는 태도를 저는 ‘코드카타’를 통해 가장 깊게 느꼈습니다. ‘코드카타’는 위코드에서 3주차부터 실시하는 아침 알고리즘 공부입니다. 2명이 팀으로 배정되어 진행되는 이 공부는 앞서 설명한 문제를 ‘발견’하고 올바른 ‘소통’을 통해 함께 해결해 나가는 법을 경험합니다. 마치 수학 문제를 푸는 것 같은 이 시간은 우리가 현실의 문제를 수리적으로 해석해 해결하는 법을 알려줍니다. 수리적인 문제의 해결은 첫 달에 배운 가장 중요한 기본기입니다. 멘토님들은 이것을 컴퓨팅 사고라고 부르기도 했습니다. 용어만 다르지 둘은 동일하다고 봅니다.
컴퓨터적 사고, 혹은 수리적 사고는 인간의 사고와 다릅니다. 문제를 정확하게 서술하고 구체적으로 해야 할 일들을 지시해야 합니다. 특히 주관적 해석으로 채워지는데 익숙한 사람과 다르게 컴퓨터는 해야 할 행동을 모두 지시해줘야 오류가 발생하지 않습니다. 학교에서 배우던 수학과 다를 것이 없습니다. 몇몇 멘티들은 여기까지 와서 수학(비슷한 것)을 다시 할 줄은 몰랐다고 하소연 하기도 했습니다. 그러나 컴퓨터의 아버지 ‘폰 노이만’과 ‘앨런 튜링’이 모두 수학자이고 ‘알고리즘’의 어원이 이란의 수학자 ‘알 콰리즈미’인 것을 보면 컴퓨터와 개발에서 수학을 때어 놓기도 어려워 보입니다. 앞으로 우리가 다룰 컴퓨터를 제작한 사람들이 이 기계를 수리적으로 사고하도록 만들었다면 우리도 익숙해져야 하는 것이죠. 멘토님들은 다양한 세션을 통해 이런 컴퓨터의 특징을 설명하죠. 또한 코드 카타를 통한 수리적 사고의 적응은 개발을 하며 평생 따라가는 필수적 과제라는 것을 강조합니다.
바보야 문제는 ‘소통’이야
스케이팅을 하던 시절에 아이스링크장의 하키부원들과 자주 만나곤 했습니다. 개인 스포츠를 하던 저에게 그들의 훈련 방식, 경기를 이끌어 나가는 스타일은 상당히 흥미로웠습니다. 개인 스포츠는 본인 스스로 페이스와 운용을 모두 통제할 수 있기 때문에 빠른 상황 판단이 가능합니다. 또한 이 판단을 기반으로 스스로 원하는 대응을 하는 것도 전혀 지체될 것이 없죠. 그러나 팀 스포츠는 문제를 ‘판단’하고 이를 ‘대응’(혹은 실행)에 옮기는 과정에서 모두 장애물이 존재합니다. 바로 다른 팀원이죠. 팀 스포츠에서 개인의 존재는 1/팀원입니다. 아무리 존재감이 크고 중요한 사람도 결국은 한 명의 구성원일 뿐입니다. 그래서 체력을 단련하는 시간과 동일한 시간을 손발을 맞추는 훈련에 투자합니다. 특히 전술의 복잡도와 불확실성이 심해진 현대 스포츠 환경에선 더 이상 위대한 개인이 혼자 팀을 이끌어 성공을 이룰 순 없습니다.
스포츠 못지 않게, 혹은 더 역동적인 IT 개발 환경에서도 ‘Team First’ 논리는 동일하게 적용됩니다. 위코드는 5주차부터 현업과 상당히 동일한 기준으로 ‘프로젝트’를 진행하죠. 제 관점에서 이 ‘프로젝트’는 개인 종목 선수들이 처음으로 동료를 만나 손발을 맞춰가는 연습을 하는 것처럼 느꼈습니다. 본격적인 프로젝트를 들어가기 전이지만 멘토님들은 건강한 커뮤니티를 유지하고 소통의 중요성을 강조하면서 ‘협업’이 개발에서 얼마나 중요한 요소인지 설명했습니다. 한 달전에는 개발이 ‘개인 종목’이라는 착각을 했지만, 위코드는 모든 소프트웨어 개발의 과정이 ‘팀 스포츠’임을 알려줬습니다. 개인 스스로 능력을 갖추는 것 만큼 팀원들과 효과적인 커뮤니케이션을 통해 팀의 능률을 올리는 일도 중요함을 알려준 것이죠. 협업의 경험을 위해 앞서 말한 ‘코트카타’ 등 다양한 활동을 팀 단위로 진행하면서 협력으로 문제를 해결해 나가는 과정을 진행합니다.
협업을 처음 경험하는 사람들은 협력을 통한 문제 해결을 어려워 합니다. 나 만큼 잘 통제되지 않는 타인으로 인해 답답함을 경험하죠. 또한 소통이 능숙하지 못하면 소통이 장애물로 여겨지기도 합니다. 특히 학창 시절 내내 ‘개인 종목’같던 입시를 통과하고 취직 역시 개인의 과제로 생각하는 우리 문화에서 협업을 경험하는 일은 흔하지 않습니다. 대학교의 ‘팀플’이 효과적으로 진행되는 경우가 적은 이유가 있는 것이죠. 그만큼 협업은 어렵습니다. 그러나 어려운 만큼 결실도 달콤합니다. 집단이 이뤄낸 성취에 도달한 개인은 역사적으로 존재하지 않습니다. 인류가 이뤄낸 가장 위대한 성취는 모두 집단의 결과물입니다.
팀보다 위대한 개인은 없다
지금 우리가 개발을 해 나가는 환경이 구축된 과정만 봐도 그렇습니다. ‘앨런 튜링’이라는 한 천재의 아이디어로 처음 인지된 컴퓨터는 ‘폰 노이만’이라는 또 다른 천재가 구체화합니다. 이어 미국, 독일, 영국의 수 많은 엔지니어들이 이를 발전시키죠. 완전히 다른 분야에서 ‘애덤 스미스’는 협업을 통해 생산력의 극대화를 제안합니다. 이를 기반으로 ‘존 포드’는 처음으로 공장식 생산방식을 구축합니다. 이런 공장식 생산 방식을 기반으로 컴퓨터도 대량 생산이 가능해집니다. ‘IBM’과 ‘Apple’은 최초로 개인에게도 컴퓨터를 보급했죠. 다양한 사람이 PC를 소유하게 되자 MS 등 소프트웨어 기업은 시장성을 가지게 됩니다. 그리고 지금 우리는 그 소프트웨어 산업에 몸 담기 위해서 공부를 하고 있습니다.
이렇게 인류 역사의 단편에 불과한 ‘컴퓨터’의 발전 역시 거대한 팀 플레이였습니다. 위에 등장한 인물 중 하나라도 빠졌더라면 컴퓨터의 역사는 다른 방향으로 갔을지도 모르죠. 이제 우리는 왜 이렇게 ‘힘든’ 협업을 해야 하는지 확인 할 수 있습니다. 우리 개개인이 이뤄내는 것 그 이상을 이루기 위함입니다.
위코드는 항상 ‘우리’, ‘공동체’, ‘커뮤니티’를 강조합니다. 그리고 그것이 개발자의 문화이자 에너지라고 말하죠. 그러나 앞서 보았듯 이것은 인간이 가진 가장 위대한 영역입니다. 다른 동물들은 이런 거대한 협업을 이뤄내지 못하기 때문이죠. 커뮤니티가 중요한 의미를 이해하지 못하면 단순히 좋은 분위기를 조성하라는 잔소리로만 들릴 수 있습니다. 그러나 위코드에서 강조하는 것은 우리가 앞으로 이 위대한 협업에 함께할 것을 알려주는 겁니다. 홀로 서 있는 개인이 아니라 공동체 속에서 긍정적인 영향을 주는 ‘살아있는’ 개인으로 성장하라는 것이죠.
지금까지 어떠셨나요?
이렇게 위코드에서 한 달 동안 배운 다양한 기본기를 소개해드렸습니다. 한 마디로 정리하면,
“끝없이 성장을 추구하고, 수리적으로 문제를 해결하며, 소통에 능한 팀의 구성원”
으로 거듭나는 것입니다. 본인도 아직 미숙하다고 생각합니다. 그러나 앞서 언급했듯이 저 한문장은 제가 개발자로서 평생에 걸쳐 단련해 나가야 할 가장 중요한 요소들입니다. 이제 알았으니 실천에 옮겨나가야겠죠.
글을 마무리 할 시점이네요. 그러나 저 문장으로도 배웠던 모든 기본기를 적기에 조금 부족해 보입니다. 사실 개인적으로 가장 중요하다고 느끼는 마지막 요소가 있기 때문에 그것을 추가하려고 합니다.
위코드의 멘토님들은 하루의 마무리를 하거나 시작을 할 때 멘티들에게 묻는 질문이 있습니다.
“여러분 배웠던 것 어떠셨어요?”
별 것 아닌 질문이지만 이 질문을 통해 배움을 어떻게 느꼈는지 돌아보도록 도와줍니다. 그리고 대부분의 멘토들이 본인이 처음 개념을 배웠을 때, 혹은 처음 협업을 했을 때의 짜릿함을 언급하며 배움을 긍정적으로 해석하도록 도와줍니다. 주의 깊게 보지 않으면 지나칠 수 있는 이 질문과 해석은 개발자로서 배움을 이어 나가는데 큰 도움을 줍니다. 개발자는 끊임없이 배워야 하는 직업입니다. IT 환경은 인간이 만든 그 어떠한 시스템보다 빠르게 변합니다. 새로 배울 것이 없다는 개발자는 스스로 개발자라고 말할 자격이 없습니다. 때문에 우리는 계속 해 나가야 합니다.
개발은 마라톤이다
100, 200m 스프린트가 아닙니다. 42.195km를 달리는 마라톤에 더 가깝죠. 일반인이 마라톤을 뛰면 약 3만보를 뛰어야 한다고 합니다. 언뜻 불가능해 보이죠? 그러나 저 같은 아마추어 러너들은 돈까지 지불하며 참가하기도 합니다. 무얼 위해서 달릴까요? 다이어트? 개인의 목표? 모두 이유가 될 수는 있겠지만 그 정도 이유만으로 3만보를 뛰기는 어렵습니다.
제 개인적인 소감으로, 러너들이 마라톤을 달리는 이유는 마라톤의 한 걸음, 한 걸음이 모두 행복하기 때문입니다. 물론 기록이 중요한 몇몇 경우는 스트레스가 있을 수 있습니다. 하지만 그럼에도 스스로를 ‘러너’라고 부르는 모든 이들은 달리기의 모든 순간을 사랑합니다.
그렇다면 러너와 비슷한 개발자로서 우리는 어떠한 태도를 가져야 유리할까요? 개발의 모든 순간을 사랑해야 합니다. 문제를 직면하고, 팀원과 소통해 해결해 나가는 모든 과정을 즐기는 사람만이 스스로를 ‘개발자’라고 부를 수 있는 것이 아닐까요? 물론 처음엔 마냥 즐겁지는 않습니다. 모든 상황이 처음이라 낯설기 때문이죠. 그러나 인간이 적응은 또 기막히게 해낸답니다. 러닝도 처음엔 고통의 연속입니다. 그러나 익숙해지면 그 달리는 순간의 자유로움이 없으면 우울증이 오기도 합니다. 과정에서 즐거움을 발견하는 순간 그 사람은 ‘러너’이며 ‘개발자’로 거듭나는 겁니다.
이제 ‘‘어떠셨냐?’‘는 멘토님의 질문에 저 나름의 답변이 준비된 것 같습니다. 아마 저번주는 처음이라 여기 저기 알도 배기고 긴장도 많이 되었지만, 이번주는 덜 하다고, 다음주 쯤엔 훨씬 즐기면서 달려나갈 수 있을 거 같다고 말할 것 같습니다.