난 레벨 1 동안 어떤 경험들을 했을까?
1. 객체지향에 입문하다.
우테코 내에서, 그리고 여러 글을 통해 “부끄지만 2년 넘게 자바를 사용하면서도 객체지향에 대해 깊게 고민해본적이 없다”는 말을 했었다.
레벨1 동안 가장 많이 성장한 점은 객체지향을 바라보는 태도의 변화이다.
그동안은 객체를 그냥 ”클래스의 인스턴스 그뿐”이라고만 생각했었고, 객체지향은 “자바의 패러다임”이라는 이론적인 단어로만 생각했었다.
4번의 페어프로그래밍을 진행하고, 객사오를 읽으면서 객체가 무엇이며, 객체지향을 위해 어떻게 바라봐야 하는지에 대한 나만의 기준을 세워나가고 있다.
사실 레벨 1의 마지막 체스 미션을 하면서 한번 크게 위기가 왔었다. 미션을 진행하면서 부정적인 생각들만 떠올랐기 때문이다.
“웹 개발을 할 때 객체지향이 직접적으로 사용되는가?”
“다들 정답은 없다고 하는데, 정답이 없는 문제를 왜 정답에 대해 토론을 하고 머리 아프게 고민해야 하는 것인가?“ 였다.
리뷰어에게 이런 나의 생각을 솔직하게 공유하고 마인드셋에 대해 조언을 구했었는데,
오히려 그분은 “정답은 있다. 상황별로 답이 모두 다르고, 상황이 너무 많기 때문에 없는 것처럼 느껴질 수 있다.”라는 말씀을 남겨주셨다.
이 말을 보고나서 막막했던 것이 해소되는 기분이었다. (태생 이과였을지도) 그때부터 다시 “답을 찾아봐야지”라는 마인드으로 임했던 것 같다.
지금은 정답이 정말 있을지 없을지는 모르지만, 더 이상 그것은 중요하지 않다.
그냥 나는 답이 있다고 생각할 것이다. 답을 찾으려는 것이 스스로 동기부여가 되기 때문이다.
내가 생각하는 정답을 찾아가다보면 언젠가 나도 내가 했던 질문들에 대해 직접 대답할 수 있을 것이라고 생각한다.
2. 설계라는 것을 고민하다.
그동안 나는 설계에 대해 깊은 고민을 한적이 없었다.
요구사항이 자주 변경되는 환경에서 개발을 하지 않았었기 때문이다. 유연한 설계가 중요하다라는 이론은 알고 있지만 몸소 느끼지는 못했었다.
사이드 프로젝트를 할 때에도 “에자일 방식을 경험해보자”, “데일리 스크럼도 해보고 스프린트도 정해볼까?” 라는 에자일 프로세스를 사용은 했지만, 사실상 기획 확정 후 개발이다 보니 워터풀 프로세스였다.
때문에 “일단 현재 요구사항만 충족하도록 구현하면 되지~ 문제가 발생하면 그때가서 고민하면 되지~”라는 마인드로 기능 구현에만 급급했다.
우테코에서 미션은 적어도 2단계로 이루어지는데, 단계를 넘어갈 때 요구사항이 추가된다.
때문에 2단계를 진행할 때 1단계의 설계를 가지고 가면서 새 요구사항을 반영해야 한다. 초반 미션은 간단하여 초기 설계를 가지고 가도 큰 어려움이 없었다.
하지만 점점 난이도가 올라가는 미션을 구현할수록, 초기 설계에 대한 고민의 깊이가 전체 프로그램의 방향을 결정하고 복잡한 요구사항이 변경되더라도 유연하게 변경 가능한지를 결정한다는 것을 드디어 몸소 느꼈다.
복잡해진 미션을 할 때는 초기 설계를 가지고 새로운 요구사항을 반영하는 것이 너무 힘들었기 때문이다.
설상가상 초기 설계를 아예 버리고 2단계의 요구사항을 토대로 다시 완전 재설계를 하는 것이 낫다는 생각도 자주 들었다. 하지만 엎기에는 이미 기존에 했던 설계가 떠올라 새로운 설계를 다시 하기에도 한계가 있었고 결국 맘에 들지 않는 코드로 리뷰를 받았다.
이런 고단함을 겪다보니 비로소 “왜 설계에 대한 충분한 고민이 왜 필요한지”를 깨닫게 되었다.
이를 느끼고 3번째 미션부터 열심히 설계를 고민해보려고 했지만, 경험이 적어서인지 고민을 열심히 해도 결국에 마음이 들지 않았었다.
큰 틀을 잡고 “이정도 설계했으면 됐겠지”, “이정도면 꽤 깊이 고민했는데?” 싶어 구현을 시작했지만 하다보니 설계대로 구현이 불가능하다던가, 요구사항을 놓친 부분들이 생겨 전체 흐름을 변경해야 한다던가 등 딜레마도 있었다.
그렇지만 소득은 있었다. 전에는 다이어그램 보는 것을 낯설어했는데, 이제는 내가 그림을 통해 설명할 수 있을 정도가 되었다.
이렇게 하나하나 성장하다보면 내 마음에 쏙드는 설계도를 그리는 것까지 갈 수 있을 것이라고 생각한다.
3. 자바의 문법에 더 익숙히
자바라는 언어를 대강 2년 넘게 사용했기 때문에 나름 여러 문법들을 익숙하게 사용하고 있다고 생각했다.
레벨1동안 자바로 미션을 하면서 생각보다 내가 자주 사용하는 문법만 사용하고 있었다는 것을 알았다.
익숙한 문법들이 있고 나름 잘 사용하고 있다고 생각하다보니, 기본서를 잘 볼일이 없어 자바에서 제공하는 더 다양한 문법들을 꽤 놓쳤다.
페어 프로그래밍을 하면서 “자바에서 이런 것도 제공하구나. 역시 대자바”싶은 문법들을 학습할 수 있었다.
페어 프로그래밍의 최대 장점 중 하나라고 생각한다👍
페어 프로그래밍이 아니더라도 다양한 코드들을 자주 보다보면 자바에서 기본적으로 제공하는 문법들을 우아하게 사용한 코드들이 많다.
80명이 동일한 미션을 진행하는만큼, 요구사항을 이해하는 비용을 따로 들이지 않고 마음껏 다양한 코드 스타일을 볼 수 있다. 그리고 그중에서도 내가 적용해보고 싶은, 베스트 프렉티스 또한 학습할 수 있다.
앞으로 어떤 자세로 임해야 할까?
1. 페어 프로그래밍 시
페어 프로그래밍 시 종종 페어와 의견이 다르거나 페어의 의견이 이해가 안될 경우가 있었다.
먼저 페어와 의견이 다른 경우, 레벨1 때는 페어의 의견이 어느정도 합당하다고 생각되면 최대한 수용을 했었다.
토론을 하는 것이 리소스 낭비라고 생각했기 때문이다.
하지만 이렇게 작성된 코드에 대해 리뷰를 받을 때, 정말 내 것인 내용으로 답변하는 것이 아니라는 생각이 들었다.
따라서 의견이 다른 부분을 들었을 때, “이것도 맞지. 일단 페어 의견대로 하자”가 아닌 “그렇군. 이게 맞네”까지 생각이 도달할 수 있도록 페어를 설득하거나 내가 설득당하도록 페어의 지식을 빼와야(?)겠다.
최대한 이 자세로 임해야 “함께 작성한 코드”라고 생각한다.
다음으로 페어의 의견이 이해가 되지 않을 경우이다.
레벨1에서 페어의 설계가 “내 설계보다 나은데?”, ”뭔가 더 예쁜 것 같은데?”라는 생각이 들어서 그 설계가 정확하게 이해되지 않았음에도 따랐었던 적이 있다.
지금 생각해보면 멋지고 화려한, 변경에 유연한 설계일수도 있지만, 동시에 당장 페어인 나를 이해시키지 못한 설계로 볼 수 있다.
당시에 페어가 나에게 이 설계를 제안한 것이 미안하다고 했었는데, 그때는 “이게 내가 사과를 받을 문제인가?“, “내가 바보여서 이해를 못한 건데 페어가 왜 사과를 하지?”라고 생각했었다.
지금 생각해보니, 앞서 내가 깨달은 점을 페어가 먼저 고민하고 피드백을 사과의 형태로 줬던 것 같다.
따라서 이런 점을 페어에게 공유하고 더 좋은 설계를 고민해보도록 제안하자.
추가로 우테코 와서 처음에 대단한 사람들이 많다라는 생각에 많이 쫄았었다. (특히 페어할 때)
레벨1 마지막에는 크루들이랑 “여기 사람들은 잘하고 있으면서 서로한테 열등감이 있다”라는 농담을 주고 받았다 ㅋㅋ
요즘은 나 나름 열심히, 잘 하고 있었을지도 라는 오만한 생각도 조금 든다. 더더 열심히 성장하자
2. 정리 미루지 말기
가장 중요한 것!은 남는 것!
벌써 레벨1이 끝났다는 것이 믿기지가 않는다. 정신없이 2달이 지나가버렸다.
우테코 시작 전에도 기록에 대해 다짐을 했었다. 매주 회고,, 학습한 것 정리 잘하기,, 등등
그 결과로 위처럼 그날그날 최소한 키워드라도 기록해놓은 점은 스스로 아주 칭찬하지만
회고라던가, 정작 기록한 키워드들에 대한 정리는 매우매우 미뤘다.
남는 것은 기록이다. 나만의 언어로 기록하자.
눈깜빡할 사이에 2개월이 지났는데, 나는 얼마나 알차게 이 2개월을 보냈을까? 깊은 고민이 필요한 시간이다.
우테코라는 좋은 환경에 온만큼, 다시 돌아보았을 때 스스로에게 정말 후회없는 10개월로 만들고 싶다.
아쉬울 점 만들지 말자 (zz())
앞으로도 파이팅🔥
'우아한테크코스 6기 > 1단계' 카테고리의 다른 글
[블랙잭 미션] 피드백 및 코드 리뷰 (0) | 2024.04.22 |
---|---|
[블랙잭 미션] 감정 회고 (2) | 2024.04.13 |
[블랙잭 미션] 페어프로그래밍 단계 학습 내용 정리 (0) | 2024.04.13 |
[사다리 타기 미션] 학습 내용 정리 (0) | 2024.03.26 |
[자동차 경주 미션] 학습 내용 정리 (1) | 2024.03.25 |