2020년 11월 02일부터 2021년 4월 30일까지 6개월의 대장정 끝에 야곰 아카데미 캠프 1기를 수료하였다. 진작에 회고를 쓰고 싶었지만 취업준비가 어느정도 되면 써야지하면서 계속 미루다가 벌써 한달이 지났다. 이러다가 기억과 느낌이 점점 희미해지겠다 싶어서 더 미루지 않고 5월이 가기전에 회고를 완성하기로 마음을 먹었다.

“참 잘 한 결정이었다.”

2020년 10월에 야곰캠프를 참여하기로 결정한 나에게 하고 싶은 말이다. 야곰 캠프를 하기로 한 것은 고3 때 컴퓨터를 배우기로 했던 것과 더불어 내 인생에서 가장 잘한 결정 중 하나라고 생각한다. 캠프에 참여하면서 단순히 iOS에 대한 지식만 배운 것이 아니라, 앞으로 개발자로서 살아가면서 필요한 더 중요한 것들을 체득할 수 있었기 때문이다. 6개월 동안 겪은 것들을 하나하나 써내려가면서 내가 배우고 얻은 것들을 다시 한번 정리해보고자 한다.

고민

캠프를 시작하기 전에 계속 취업을 준비할지 아니면 캠프를 참가할지 고민을 많이 했었다. 이전에 네이버 부스트코스를 수료하면서 기초를 어느 정도 쌓았다고 생각했기 때문이다. 물론 기술 면접에서 이래저래 깨지면서 기초 공사가 부실함을 많이 느끼기도 했었다. 하지만 이미 과정 하나를 수료했는데(온라인 과정이었지만) 또 과정 하나를 들어야 할까라는 의문이 들기도 했다. 어차피 모집 마감까지는 몇일 더 남았으니깐 좀 더 고민하기로 했다. 그리고 다음날, 모든 인원이 모집되어서 조기 마감이 되었다는 공지를 보았다. 순간 온 몸이 뜨거워지면서 화가났다. 고민을 할게 아니라 진작에 지원 했어야 했다는 생각이 떠나질 않았다. 계속 자책을 하다가 지푸라기라도 잡는 심정으로 야곰한테 메일을 보냈다. 그리고 몇분 지나지 않아 야곰에게 답장이 왔다. 마침 한 사람이 빠져서 들어갈 수 있다는 답장이었다. 생전 기도도 안하는 사람인데 “하느님 감사합니다”라는 말이 절로 나왔다. 이후 코딩과제와 면접을 보고 캠프에 합류할 수 있었다.

화상면접

야곰과 줌으로 화상면접을 진행했다. 그 유명한 야곰을 실시간으로 보다니… 많은 사람들이 얘기하듯이 연예인을 보는 듯한 기분이었다. 하지만 아무렇지 않은척 했다. 아니 아무렇지 않은척 했다기보다 그런 내색을 잘 못해서 하지 못했다는게 더 정확하겠다. 야곰은 왜 iOS를 하려고하는지, 왜 캠프에서 공부를 하려 하는지 등에 대한 질문을 하였다. 나는 생각나는대로 대답하였다. 그리고 iOS를 어디까지 공부 해봤는지에 대한 질문을 받았다. 나는 그때 당시에 부스트코스를 수료한지 얼마 안되서 부스트코스를 수료했다고 답변하였다. 그러자 야곰이 “부스트코스와 비슷한 수준인데 캠프를 해도 괜찮냐”라는 질문을 했다. 순간 다시 고민이 시작되었다. 짧은 고민 끝에 이전에 스스로 결론 내렸듯이 “한번 했지만 아직 제대로 알지 못해서 한번 더하려고 한다”라고 답변하였다. 그리고 마지막으로 야곰이 오리엔테이션과 사전학습에 대한 메일을 보낼테니 확인해보라고 하며 면접이 종료되었다.

사전 학습

야곰이 캠프 시작 전에 사전 학습(예습)해야할 내용에 대해 메일을 주었다. 야곰닷넷의 스위프트 기초왕초보를 위한 iOS 앱개발 을 캠프 시작전에 학습해오라는 내용이었다.(Swift API Guidelinde도 읽어보라고 한 것 같기도…?) 속으로는 이미 부스트코스에서 다 배운 내용인데.. 하다가 다 안다고 자신했던 오만한 내 모습과 모 기업 기술 면접에서 크게 깨졌던 기억이 다시 떠올랐다. 그래서 다시 맘을 잡고 공부를 시작했다. 역시나… 다시 보니 또 새로웠다. 공부는 끝이 없구나 새삼 깨달았다.

오리엔테이션

오리엔테이션에서는 캠프의 규칙과 앞으로 캠프가 어떻게 진행될지 방향에 대해서 들을 수 있었다. 캠프 규칙 중 기억이 나는 것은 아래와 같다.

  • 상호 존중한다.
  • 캠프에서는 실명을 쓰지 않고 닉네임을 사용한다.
  • 반말을 하지 않는다.
  • 나이, 연애여부? 등 실례가 될 수 있는 부분에 대해서 묻지 않는다.
  • 야곰을 선생님이나 야곰선생님, 야곰님이 아닌 야곰이라고 부른다.

처음엔 닉네임을 부르고 불리는게 참 어색했고, 야곰을 야곰이라고 부르는 것도 어색했다. (아버지를 아버지라 부르지 못하고..?) 선생님께 뭔가 무례한 것 같은 느낌이랄까? 하지만 다들 아무렇지 않게 잘 하길래 나도 어느순간 동화되어서 신기했다. 캠프의 진행방향은 수업이 어떻게 진행되는지, 어떻게 공부해야하는지에 대해서 다루었으며 그 중 기억나는 것은 아래와 같다.

  • 월, 화, 목, 금이 캠프 활동 시간이고 수요일과 주말은 휴식이다.
  • 12~13개의 프로젝트가 진행될 것이다.
  • 프로젝트는 개인 또는 팀프로젝트이며, 실무자가 직접 코드를 리뷰한다.
  • 캠프 중간에 두번(일주일씩) 방학을 갖는다.
  • Discord의 회의실에서 스크럼과 팀미팅을 진행한다.
  • Classum에서 수업자료, 수업공지를 하고 TIL(오늘 배운내용 회고), TWL(일주일동안 배운 내용 회고), 팀 그라운드 룰(팀프로젝트 규칙)을 올리고 피드백을 주고 받는다.
  • 수업은 첫주만 매일 진행되고, 이후부터는 주 2회 진행된다.
  • iOS의 A부터 Z까지 모든 내용을 수업으로 배우고 터득하는 것이 아니라, 프로젝트를 진행하면서 필요한 내용을 스스로 학습(자기 주도 학습)해야 한다.
  • 수동적 학습 방법이 아닌 참여적 학습 방법을 지향한다.

그리고 이때 야곰이 한 말중 가장 기억에 남는 것은

“최고의 스승은 사람이 아니라 스스로 의문을 갖고 문제를 해결해나가는 나 자신이다.”

라는 말이었다.

참여적 학습 방법

오리엔테이션에 대한 기억을 쓰면서 든 생각은, 야곰이 지향한 자기 주도 학습과 참여적 학습 방법이 캠프 과정에 잘 녹아들어 있었다는 것, 그리고 그것이 나에게 큰 도움이 되었다는 것이다. 자기 주도 학습이야 워낙 학창시절부터 들었던 익숙한 내용이지만, 참여적 학습 방법은 나에겐 생소했다. 참여적 학습 방법은 그룹 토의, 실습, 다른 사람에게 설명하기를 통해 학습을 하는 것을 의미한다. 아래 이미지는 참여적 학습 방법이 포함되어 있는 학습 피라미드이다. (야곰이 오리엔테이션때 이 이미지를 보여줬다. 아닌가? 2기 오티때 본거 같기도 하고..)

https://www.fitnyc.edu/images/learning-pyramid.jpg

Average Retention Rates를 우리말로 하면 평균 보유율(?)인데, 학습한 내용이 얼마나 남아있는지에 대한 비율을 의미한다. (강의 듣기는 5% 밖에 남지 않는다니.. 고등학생 때 인강만 듣고 있었던 내가 생각났다. 성적이 안나온 이유가 있었다…😅) 다른 사람에게 내가 알고 있는 것을 설명하는 것(가르치는 것)은 90%나 남는다고 한다.

캠프의 거의 모든 과정은 참여적 학습 방법으로 진행되었다. 프로젝트 진행하기, 코드 리뷰를 받고 대응하기, 회고 쓰기, 그리고 수업(활동학습)도 단방향의 지식 전달이 아닌 양방향으로 생각을 주고받는 과정이었다. 심지어 야곰 아카데미 Discord 서버에서 24시간 내내 iOS에 대한 얘기가 오가기도 한다. 이러한 과정은 그동안 내가 갖고 있던 “공부는 홀로 묵묵히 그리고 독하게 해야한다”는 고정관념을 완전히 바꾸어 버렸다. 그리고 내가 iOS에 대해서 더 깊이 파고들게 하고 배울 수 있도록 했다고 생각한다.

아래는 캠프 Discord 서버의 질문답변방에 내가 질문했던 부분을 캡처한 것이다.

Discord

프로젝트 중 발생한 이슈 때문에 내가 질문을 올린 것인데 많은 분들이 의견을 주어서 큰 도움이 되었다. 그리고 질문을 하기 위해 질문 자체를 고민하고 가다듬은 것도 나에게 큰 도움이 되었다. 문제가 정확히 무엇인지, 내가 무엇을 모르는지 그리고 상대방에게 내 질문을 이해시키기 위해서 어떻게 말을 해야하는지를 고민해야했기 때문이다.

수업

수업은 주로 강의와 활동학습으로 구성이 되었다. 활동학습을 하고 강의를 하는 경우도 있었고, 강의를 하고 활동학습을 하는 경우도 있었다. 강의는 Zoom으로 진행되었는데, 적을땐 1시간 많으면 2시간 이상 할 때도 있었다. 활동학습은 3~4명으로 조를 구성하여 수업 주제와 관련된 문제를 같이 풀고 토론을 하는 식으로 진행되었다. 그리고 조별로 푼 문제를 모두 모여서 같이 이야기를 나누면서 정리를 하였다. 가장 기억에 남는 수업은 “동시성 프로그래밍”에 관한 수업이다. (클래스와 구조체에 대한 수업도 너무 좋았지만 동시성 프로그래밍이 미세하게 더 좋아서 동시성 프로그래밍을 꼽았다.) 아래는 동시성 프로그래밍 활동학습 문제를 조원들과 같이 풀면서 만든 결과물 중 일부이다.

concurreny_programming_activity

원활하게 활동학습을 하기 위해 먼저 구글 문서에 활동학습 문제를 붙여넣고, 조원들끼리 각자 조사한 내용을 문서에 추가하고 토론하면서 답을 찾아나갔다. 그리고 다음과 같은 생각이 들었다.

  • “동시성 프로그래밍 그거 학교에서 운영체제 수업 때 이미 배운건데? 그냥 여러 쓰레드에서 프로그램 실행시키는거 아닌가?”
  • “그럼 병렬성이랑 동시성은 뭐가 다른거지? 둘 다 동시에 실행시키는거 같은데 도대체 차이점을 모르겠네.”
  • “그동안 확실하게 공부하지 않았구나…”
  • “어떤 개념을 어떻게 잘 못 알고있는걸까? 제대로 알기 위해선 무엇부터 알아야할까?”

활동학습을 통해 그리고 야곰의 추가 설명을 통해 동시성 프로그래밍과 병렬성 프로그래밍에 대해서 명확히 알 수 있었다. 병렬성 프로그래밍은 물리적인 개념이며, 실제 멀티 코어에서 쓰레드가 실행되는 것이고, 동시성 프로그래밍은 논리적인 개념이며, 단일 코어에서 쓰레드가 실행되지만 동시에 실행되는 것처럼 가상으로 구현한 것임을 알 수 있었다. 그리고 이때 깨달은 내용은 머리속에 정보로만 남는게 아니라 지식과 느낌으로 체화되었다. 내가 알고 있는데까지 일단 말로 표현해보고, 틀리고, 틀린 부분을 다시 자료를 찾아가면서 바로 잡는 것 그리고 각자의 생각에 대해 서로 피드백을 주고 받는 것. 이러한 학습과정이 정보를 머리뿐만 아니라 몸으로 받아들이게 만드는 것 같았다.

마지막으로, 야곰은 수업 중에 이 말을 가장 많이 하지 않았을까 싶다.

“알고 있는 것을 말로 표현하지 못하면, 그건 모르는거에요.”

이 말은 내가 공부를 하고 나서 아는지 모르는지 검증할 수 있는 좋은 지표가 되었다. 즉, 새로 공부한 내용을 제대로 아는지 확인하기 위해 스스로 설명해보거나, 글로 한 두 문장으로 다시 써보면서 점검해보는 습관이 생긴 것이다.

프로젝트

프로젝트는 캠프 생활 중 가장 많은 비중을 차지했다. 이를 통해 많은 것을 배웠다. 특히 협업에 관해서 가장 많이 배웠다. 협업이다 보니 일단 Git과 Github에 능숙해질 수 있었다. 또한 어떻게 일을 분배할지 고민 해보기도 하고, 같은 기능을 각자 구현한다면 각자 구현한 것 중 누구 것을 포기하고 누구 것을 선택할 것인가에 대해서도 많은 고민을 했었다. 상대방의 코드를 선택해야 한다면, 상대방의 코드에 대해서 이야기 할때 잘 듣고 이해해야 하며, 의문이 드는 내용은 다시 질의응답을 통해 해소해야했다. 내 코드를 선택해야한다면 왜 그래야하는지 설득해야했고, 상대방이 기분이 나쁘지 않도록 어떻게 설득할 것인가도 고민을 해야했다. 둘의 코드를 합쳐야 한다면, 머지 후 발생한 Conflict를 해결해야했다. (특히 스토리보드 충돌을 해결하는 것은 매 머지마다 인격수양을 하는 기분이었다..😅)

그리고 팀프로젝트를 하면서 동기들에게도 많은 것을 배울 수 있었다. 이니한테 커밋의 적절한 단위와 커밋메세지를 작성하는 방법을 배울 수 있었다. 엘림에게는 프로젝트를 진행해나가는 추진력과 깃헙을 잘 활용하는 방법(Issues, Projects)을 배울 수 있었다. 솔에게는 유튜브에도 좋은 튜토리얼을 찾아볼 수 있다는 것, 기능을 타입을 정의해서 적절히 분리하는 방법을 배웠다. 그린은 프로젝트를 구현 하면서도, TIL도 쓰고, LLDB도 공부하고, 이력서도 쓰고 그랬는데, 많은 것을 동시에 해내는 모습이 멋있었고, 많은 일을 침착하게 하나씩 해나가는 자세를 배울 수 있었다.

프로젝트를 진행하면서 가장 좋았던 점은 현업자에게 코드 리뷰를 받을 수 있다는 것이었다. 현업자에게 코드 리뷰를 받으면서 안좋은 습관을 많이 고칠 수 있었기 때문이다. 주석을 작성할때 //(슬래시 2개)와 ///(슬래시 3개)를 분별없이 사용하는 것, 적절하지 못한 함수명을 짓는 것, 의미없는 개행을 하는 것, propery의 access control을 적절하게 지정해주지 않는 것, 기능 분리가 제대로 되지 않아서 View Controller를 무거워지게 하는 것, 결합도가 높게 코드를 짜는 것 등 많은 습관들을 고칠 수 있었다. 리뷰어들은 왜 이렇게 코드를 작성했는지 끊임없이 이유를 묻는다. 아래의 이미지처럼 말이다.

review1

review2

review3

review4

이유를 물어보면 대답을 해야한다. 대답을 하려면 생각을 해야하는데 떠오르는 이유가 없다. 나는 특별한 이유없이 “그냥” 그렇게 작성한 것이었다. 그리고 “그냥” 하게 되는 것은 앞으로 고쳐야할 습관임을 알게 된다. 인식된 습관은 점점 사라진다. (계속 인식하려고 노력하는건 어렵다…)

얕게 알고 있거나 깊게 생각하지 않을 때 이유없는 코드가 나온다는 것을 깨달았다. 그래서 “그냥, 이유없이” 하지 않는지 다시 한번 고민하게 되었다.

회고

사소한 것 같은데 결코 사소하다고 말할 수 없는 것이 회고였다고 생각한다. 어떻게 보면 학습만큼이나 중요한 것일지도 모르겠다. 회고를 통해 나 자신을 돌아봄으로써 반복되는 실수가 있는지, 그리고 잘 한 것이 있다면 어떻게 유지하고 발전시킬 수 있을지 고민할 수 있었기 때문이다. 예전에 어디서 본건데, 조훈현 9단이 “복기”에 대해서 강조한 명언이 있다.

“복기의 의미는 성찰과 반성이다. 이때 중요한 건 피하지 않는 것이다. 무엇을 잘못했는지, 진단만큼은 반드시 해야한다. 아파도 뚫어지게 봐야한다. 아플수록 더 날카롭게 들여다봐야 한다. 실수는 우연이 아니다. 내 안에 그런 어설픔과 미숙함이 존재하기 때문이다.” - 조훈현 9단

회고도 일종의 복기라고 생각한다. 그리고 전수열님이 알쓸신잡에서 “성장하는 개발자가 되는법”에 대해서 발표를 해주실 때, 성장하기 위한 회고에 대해서 얘기하면서 조훈현 9단의 말과 비슷한 맥락으로 얘기를 해주신적이 있다. 회고는 피드백이고, 더 나아지기 위한 과정이라고.

회고의 중요성을 충분히 알고 있었지만 회고를 꾸준히 쓰는건 어려웠다. 일단 캠프에서 진행되는 회고가 꽤 많았다. TIL(오늘 배운 내용 정리하기), TWL(일주일동안 배운 내용 정리하기), 일일회고(오늘 하루를 돌아보기), 주간회고(일주일 돌아보기), 프로젝트 회고(프로젝트 돌아보기)가 있었다. 다만 아쉬운 점이 있다면, 회고를 가끔 놓칠 때가 있어서 아쉬웠다. 특히 TIL을 쓰고 싶은 만큼 쓰지 못해서 아쉬웠다. TIL을 캠프 초기에는 그래도 주 3~4회는 썼었는데, 프로젝트가 어려워지면서 시간이 부족해서 수업때 학습한 내용만 겨우 쓸 수 있었다. 아래는 클라썸에 TIL을 올리고 피드백 받은 것을 캡처한 것이다.

TIL

TIL을 쓰면서 수업하면서 배운 내용을 나의 말로 다시 풀어서 쓰려고 노력했다. 복습이 될 뿐만 아니라 수업때 알게된 내용을 다시 내 언어로 써보니 더 머릿속에 각인이 되는 것 같았다. 그리고 댓글로 피드백을 받으면 내가 생각하지 못한 부분을 다시 생각해볼 수 있어서 좋았다. 또한 나만 보는 글이 아니라 다른 사람이 내가 쓴 글을 읽을 수도 있다는 가능성(?)이 내 의도가 다른 사람이 쉽게 이해할 수 있도록 글로 잘 쓰였는가를 계속 고민하게 만들었다.

그동안 쓴 TIL을 내 블로그에도 올렸다. 일주일에 두번정도 밖에 못썼는데도 다 모아놓으니 적지 않게 축적이 된 것 같다. 정말 티끌 모아 태산이구나 다시 느꼈다.

TILs

사람

캠프에서 좋은 사람들과 같이 공부할 수 있어서 좋았다. 야곰, 매니저분들, 리뷰어분들, 그리고 동기들 모두 함께 할 수 있어서 좋았다. 그리고 iOS 학습이라는 주제를 가지고 많은 사람들이 모여서 같이 성장하려고 노력할 수 있다는 것에 감사하고, 그 자체가 신기하기도 하고 다들 멋있다고 느꼈다.

조던 피터슨의 “질서 너머”라는 책에는 다음과 같은 구절이 있다.

“생물학적으로 우리에게는 위대한 경기자에게 긍정적으로 반응하고 그의 행동을 모방하는 장치가 갖춰져 있다.” - 조던 피터슨, 질서 너머, 161 페이지

사람은 좋은 사람에게 긍정적으로 반응하고, 좋은 사람의 좋은 행동을 무의식적으로 따라하게 된다는 의미로 해석하였다. 그래서 사람은 좋은 사람을 만나야하고, 나도 좋은 사람이 되어야한다고 생각한다. 사람은 좋아하든 미워하든 함께하면 서로 닮아가는 것 같다.

나는 6개월 동안 캠프에서 좋은 사람들을 만났다. 그리고 그 사람들의 좋은 생각, 행동, 습관을 내 것으로 만들 수 있었다. “나는 좋은 사람이었을까?” 라는 의문엔 자신있게 그렇다고 말할 수는 없지만… “그러려고 노력하였고, 앞으로도 더 좋아지기 위해 노력할 것이다.” 라고 대답할 수 있을 것 같다.

맺음말

끝으로, 아쉬운 점은 조금만 덜 조급했으면 어땠을까라는 점이다. 취준생으로서, 그리고 적지 않은 나이라서 약간의 조급함이 마음 한 켠에 계속 남아있었다. 당장 배워서 취업을 하는 것도 중요하지만, 어차피 6개월동안 공부할 것이라면 좀 더 마음을 열고 실없는 얘기도 하고 이런저런 얘기를 나눴으면 어땠을까 아쉬움이 남는다.

하여간 내가 배운 것, 얻은 것들을 요약하자면 다음과 같다.

  • 좋은 사람들과 함께 공부한 것.
  • 협업하는 방법(내 생각을 팀원의 감정을 고려하여 말하는 방법, 상대방의 의견을 잘 듣고 수용하는 것 등).
  • 회고하는 습관.
  • 개발할때 나오는 여러 안좋은 습관들을 고친것.
  • 특히, 이유없는 코드를 작성하지 않으려고 조심하게 된 것.
  • 알게 된 것을 나의 말로 표현해보는 습관.
  • 다른 사람과 지식을 공유할때 가장 많이 배운다는 것.
  • 티끌모아 태산이다. (사소한 TIL도 쌓이면 어마어마하다.)
  • 가장 좋은 스승은 스스로 고민해보고 해결방법을 생각해서 문제를 해결해나가는 과정.
  • 공부는 끝이 없다.

지난 6개월 동안 남은 60년을 잘 살아갈 수 있는 기반을 다졌다고 생각한다. 나는 죽을 때까지 개발할거니까…😁, 더 살아서 70년이면 더 좋고 ㅋㅋㅋ

참고 및 출처