우아한 테크코스 레벨 1 담당 코치인 솔라와 면담을 하게 되면서 그동안 해왔던 고민들을 얘기해볼 수 있는 시간을 가졌다. 그래서 면담을 통해 얻게 된 인사이트를 정리하면서 회고하고자 한다.
[솔라와의 면담]
코치와의 면담을 진행하기 전에는 항상 면담 설문을 작성해야 한다. 이번 면담 전 작성했던 설문 내용은 다음과 같았다.
면담을 통해 논의하고 싶은 내용
레벨 1을 지나오면서 굉장히 많은 것들을 접하고 배웠던 것 같습니다. 자바 그 자체에 대해서도 많이 배웠지만 여러 디자인 패턴에 대해서도 배우고 비개발적인 요소에 대해서도 생각할 수 있었던 시간이었습니다. 다만 한가지 마음에 걸리는 게 있습니다. 이래저래 미션에 치이다 보니 이론적으로 머리에 쌓이는 지식이 많다는 생각은 들지 않았던 것 같아요. 물론 이런 부분을 방지하기 위해 필독서가 있다고 생각해요. 하지만 미션을 진행하다보면 책을 읽을 엄두를 못내고 있는게 현실인 것 같습니다.
너무 미션에만 집중하는 것이 부정적인 요소로 작용하는 걸까요?
머리로는 독서를 통한 이론적 학습과 미션을 통한 실습이 병행되어야 한다는 것을 알고 있지만서도 항상 일정에 치이다 보면 이론적 학습이 뒤로 밀리는 경우가 일상 다반사입니다.
과제와 학습 사이의 밸런스 문제를 의식적으로 해결해보고 싶은데 어떤 방식으로 하면 좋을지 논의하고 싶습니다.
문제를 인식한 계기
솔라와 면담을 시작하고 가장 먼저 했던 것은 위에 서술한 내용이 문제라고 인식된 계기가 무엇인지에 대해서부터 생각해보는 것이었다. 레벨 1의 블랙잭 미션과 체스미션은 진행하면서 느꼈던 체감이 정말 달랐다. 블랙잭은 리팩토링을 시도하려고 할 때마다 대규모 수정이 이뤄졌어야 했던 반면 체스미션은 훨씬 가볍게 리팩토링할 수 있었다. 그 원인이 무엇이었을까 혼자 생각해봤을 때 도메인 차원의 설계 차이가 아니었을까라고 결론짓게 되었다.
블랙잭 미션을 진행하면서 테코톡 준비와 야크 쉐이빙 덕분에 거의 며칠에 가까운 시간을 날린 것도 분명 한몫을 했을 것이다. 하지만 그것과는 별개로 미션을 진행하면서 내가 설계한 도메인 로직에 대한 확신을 찾기가 굉장히 어려웠다. 반면 체스미션에서는 페어 프로그래밍이 끝나고 완성된 코드를 돌아봤을 때 '정말 도메인 설계 깔끔하게 한 것 같은데?' 라는 개인적인 생각이 들었다. 그 원인이 무엇이었을까 체스미션 페어였던 엔초와 얘기를 나눠봤다. 엔초는 '객체지향에 대한 사실과 오해' 필독서를 읽고 스스로도 느끼기에 생각하는 것이 정말 많이 바뀌었다고 얘기해줬다. 여기에서 뒷통수를 한 대 맞은 것 같은 느낌을 받았다.
분명히 레벨 1 초반에 진행했던 '우테코를 어떻게 보낼 것인가' 강의에서도 얘기했던 사항이었다. 미션만 진행하다 보면 반드시 이론적 학습에 빈틈이 생기기 마련이니 필독서를 읽으며 이론적 학습을 병행하라고 했었다. 의도했던 건 아니었지만 열심히 미션만 했던 사람은 바로 나였던 것 같다. 😭
이런 배경에서 책을 읽어야지 읽어야지 생각은 계속 해왔다. 하지만 미션 데드라인에 치여서 생각에서 그쳤을 뿐 행동으로 옮긴적은 손에 꼽았던 것 같다. 솔라와 얘기하며 지금의 문제를 인식하게 된 계기에 대해서 정리할 수 있었다.
솔라의 조언! (을 토대로 정리해본 내용!)
학습을 진행하는데 있어 사람마다 스타일은 전부 다르다. 이론적 학습을 선행하고 실습을 하는 것이 더 잘 맞는 사람이 있는 반면, 실습을 일단 먼저 해보고 그 다음 이론적 학습이 이어지는 것이 더 좋은 사람도 있다. 레벨 1에서는 실습을 90의 비중으로 선행하고 이론을 10의 비중으로 후행하는 방식으로 지냈던 것 같다. 하지만 이 방식에 대해 아쉬운 점이 많이 남은 것 처럼 들린다.
사실 필독서는 한 번 읽어보면 좋다~ 정도의 추천서이다. 크루들마다 원래 알고 있던 배경지식과 상황이 전부 다르다. 그렇기 때문에 똑같은 책을 읽어도 누군가는 막혀있던 부분이 뚫릴 정도로 큰 깨달음을 얻어가는 반면 누군가는 아무것도 얻지 못할수 도 있다. 오히려 이론적 학습을 선행하면 그게 정답처럼 느껴져서 그렇게 해야만 할 것 같은 강박관념이 생겨 힘들다고 말하는 크루들도 있었다고 한다. 그래서 필독서를 강제하지 않는 이유도 그 때문이다. 만약 레벨 1을 진행하면서 책을 읽을 필요성을 강하게 느꼈다면 잘 경험한 것이다. 앞으로 이론과 실습에서 느껴지는 간극을 줄이기 위해 의식적으로 노력하면 된다.
여태까지 책을 읽어야지라고만 생각하고 실질적으로 계획을 세워 실천해 볼 여력이 없었던 것 같다. 한 번 냉정하게 일주일 가용 시간을 계산해보자. 일주일에 학습을 하는 총 시간 중에서 이 정도는 책 읽는데 투자할 수 있겠다 정도의 시간을 정해보자. 일주일에 고정시간을 정해 혼자 해보거나 혹은 모여서 각자 자기 할 것을 진행하는 스터디를 만들어서 자율적인 강제성을 부여해보자. (가장 중요한 단락!)
스스로 계획한 대로 이론과 실습을 parallel 하게 진행해보고, 이게 두 마리 토끼를 다 잡기는 힘든 것 같다고 판단이 들 수 있다. 만약 그렇다면 다시 이론과 학습의 비중이나 순서를 조절하는 식으로 진행해보자.
스토리 라인이 있는 책이 아니라면 먼저 책을 읽어본 크루에게 가장 재밌있던, 중요했던 단원이 어디였는 지 물어보고 거기부터 읽어나가는 식으로 읽어보자. '좋은 코드, 나쁜 코드'는 레벨 1에서 읽어야 하는 책 1권만 추천한다면 이걸 추천하겠다 했을 때 코치들 사이에서도 이견이 갈렸던 책이다. 그렇기 때문에 지금 읽고, 나중에 10개월이 지나서 읽고, 현직자로 시간이 지나서 읽을 때 다 다가오는 느낌이 다를 수 있다. 책을 읽는데 너무 안 와닿고 머리에 들어오지 않는다면 지금 나에게 필요한 책이 아니구나라고 판단해볼 필요도 있다. 나중에라도 필요한 지식이라면 다시 돌아오기 마련이니 미련없이 뒤로 미룰 수 있는 용기가 필요하다.
[솔라와의 커피챗]
성하의 데일리 미팅 미션으로 아마란스, 아코와 함께 솔라와의 커피챗을 진행하게 되었다. 커피챗이었다 보니 그렇게 무겁지 않은 일상적인 주제들로 얘기를 했다. 그래도 개발자가 셋 이상 모이면 개발 얘기를 하게 될 수 밖에 없다고 했던가? 리팩토링과 일정 추산에 대한 주제로 얘기를 나눴던 내용을 회고해보려 한다. (생각해보니 리팩토링 관련 내용도 내가 얘기를 꺼냈네...?)
리팩토링
Q : 이번 블랙잭 미션 리팩토링을 진행하면서 특정한 한 부분을 리팩토링하려고 했을 때 다른 부분이 연쇄적으로 리팩토링이 필요한 경우를 경험했다. 현업에서 리팩토링은 훨씬 더 규모가 크고 복잡할 것 같은데 어떻게 하는게 일반적인지 궁금하다.
A: 현업에서도 리팩토링은 굉장히 보수적으로 접근하는 작업이다. 최대한 작은 단위의 기능부터 해나가는 것이 일반적이다. 예를 들어 안쓰는 메서드를 파악해 삭제한다던가, 메서드의 이름을 좀 더 적절하게 바꾼다던가 하는 작업부터 진행하는 식이다.
리팩토링이라는 두꺼운 책이 따로 한 권 있을 정도로 리팩토링은 굉장히 어려운 작업이다. 해당 책에서는 첫번째 리팩토링 원칙으로 단위 테스트 코드가 없으면 리팩토링 하지 말라고 한다. 두번째 원칙으로는 단위 테스트 코드가 없음에도 리팩토링을 해야한다면 단위 테스트 코드를 먼저 작성하라고 얘기한다. 이렇듯 테스트 코드 없이 리팩토링을 진행한다는 것은 불가능에 가까울 정도로 어려운 작업이다.
얘기하다 보니 리팩토링에 대한 주제로 얘기를 꺼내게 된 배경은 사실 일정 추산과 관련된 내용으로부터 파생된 것이라는 생각이 들었다. 뒤에서도 얘기하겠지만 블랙잭 미션 리팩토링을 거치며 가장 힘들었던 부분은 생각했던 소요 시간보다 더 많은 시간들이 필요한 경우가 내내 반복되었던 게 컸었다. 자세한 내용은 후술하겠다.
일정 추산
솔라의 데일리 미팅에서 진행했던 일정 추산을 실제로 지켜보려고 하니 느꼈던 부분들이 많다. 여기서 일정 추산이란 해야할 일들에 대해서 끝마치는데 실제로 어느 정도 시간이 걸릴지 예상하는 작업을 말한다. 데일리 미팅 당일 원래 계획대로라면 블랙잭 미션 리팩토링을 완료하고 PR 요청을 날리는 게 내 목표였다. 그래서 일정 추산 결과 순 소요 시간은 6시간 정도가 필요한 것으로 계산했다. 하지만 실제로 그 날 저녁 11시까지 남아있었는데도 PR 요청은 커녕 리팩토링 완료도 하지 못했다고 한다...
이런 과정을 겪으면서 왜 이렇게 되었을까를 생각해봤다. 평소에도 '오늘 안에 다 끝내겠지~' 라고 생각했던 것들을 하는데 오랜 시간을 써버리고 다음날까지 이어서 하게되는 경험은 이번 뿐만이 아니었다. 스스로 되돌아 본 결과 나는 태스크를 수행하며 중간에 추가되는 사항들을 인지를 못해서 일정 추산이 안되는구나를 많이 느꼈다.
일단 어떤 태스크를 해야겠다고 생각했을 때 세부적으로는 또 어떤 것들을 해야하는지 생각해보는 습관이 아직 없는 것 같다. 바꿔 말하면 너무 큰 덩어리의 태스크 단위로만 생각한다는 것이 문제라고 말할 수 있겠다. 그래서 실제로 태스크를 처리하다 보면 중간에 계속 해야할 것들이 생겨나는 느낌을 자주 받았던 것 같다.
또 하나의 문제점은 그렇게 세부적인 혹은 부가적인 태스크들이 늘어나는 상황에서, 할 게 늘어난 거라고 인정하고 일정 조정을 해야되는데 그걸 못한다는 것이다.
이번에 블랙잭 미션을 리팩토링하면서 느낀 것처럼 일정 상 태스크에 대한 추산이 틀렸다는 걸 인지한 순간 반드시 일정을 재조정해야 한다. 지금이야 혼자서 학습하는 기간이니 어떻게든 조정이 가능할 수 있겠지만 현업에서는 정말 모든 게 어그러질 수 있기 때문에 반드시 필요한 덕목이다. (혼자라고 하더라도 번아웃 없이 지속 가능한 학습을 이어나가기 위해서는 반드시 습관화해야 겠다고 생각했다.)
처음에 한 덩어리로 묶어서 생각했던 태스크를 쪼개서 여러 태스크로 나누고 다시 그 안에서 우선순위를 결정한다. 만약 재조정된 태스크들을 고려해봤을 때 정해진 데드라인 혹은 생각한 시간 안에 해결하지 못할 것 같다면 이제 포기할 것들을 우선순위에 의거하여 결정한다.
실제 개발자들은 일정 추산을 할 때 자신이 예상하는 추산 시간에 1.5 ~2 를 곱해서 말해야 한다는 웃지못할 밈이 있다고 한다. 항상 일정을 고려할 때 그만큼 오차 범위를 생각해야 한다는 것이다.
처음엔 일정을 잘 계산하며 살다가도 할 게 너무 많이 들이 닥치는 때가 오면 모두 놔버리고 거기에 매몰되서 살아가게 되는 관성이 있다. 앞으로 그런 상황에서도 의식적으로 태스크를 관리하고 정확한 일정을 추산해서 처리할 수 있도록 노력해보자!
'우아한테크코스 > 회고' 카테고리의 다른 글
[우아한테크코스] LV1 - 블랙잭 미션 회고 (0) | 2023.04.10 |
---|---|
[우아한테크코스] LV1 - 4기와의 수다타임 회고 (1) (0) | 2023.04.02 |
[우아한테크코스] 테코톡 발표 회고 (6) | 2023.03.05 |
[우아한테크코스] LV1 - 사다리 타기 미션 회고 (6) | 2023.02.26 |
[우아한테크코스] LV1 - 자동차 경주 미션 회고 (1) | 2023.02.14 |