우아한테크코스 1주차 기록을 위한 포스트입니다
개인적으로 기록하고 싶거나 새롭게 배운 내용 위주로 작성하였습니다.
1. TDD 자동차 경주, 그런데 페어 프로그래밍을 곁들인 🙌
저장소, PR, 피드백 등이 모두 공개되어 있습니다.
추가 정보가 필요하신 분은 아래 저장소로 접속하시면 됩니다 :)
https://github.com/woowacourse/java-racingcar
- 자동차 경주는 4기 프리코스 2주차 과제였기 때문에, 이미 모두들 구현한 적이 있는 과제였습니다.
- 그러나 페어 프로그래밍으로 1차 구현을 완료해야 하는 것이 달랐습니다.
- 1시간 정도 페어끼리 직접 진행해보고, 두 코치분들의 페어프로그래밍 실제 사례를 라이브로 볼 수 있었습니다.
- 코치분들의 시범을 본 후 다시 페어 프로그래밍을 시작했습니다.
2. 페어 프로그래밍은 언제 해야 할까? 🤔
페어 프로그래밍은 개발 방법론 중 한 가지 입니다.
아래 링크는 3분 짜리 영상인데, 이해하기 쉽게 설명하고 있어서 추가해두었습니다.
https://youtu.be/ET3Q6zNK3Io
- 페어 프로그래밍은, 지겨운 작업, 또는 어려운 작업일 때 효과적이라고 합니다.
- 또한 즉각적인 피드백을 통해, 빠른 코드 품질 향상을 기대할 수 있습니다.
- Driver 와 Navigator 역할을 번갈아 수행합니다. 코드의 책임을 개인이 아닌 팀이 지게 됩니다.
- 갈등을 드러나게 합니다. 갈등을 피하는 것 보다는 빠르게 드러내는 게 더 긍정적인 경우가 많다고 합니다.
- 나중에 커질 문제를 미리 겪는 것이기 때문입니다.
- 향로님의 글에서 배민에서 배운 것 중 하나가 회피하지 않고 끝까지 협의하는 것이라고 읽은 기억이 나요 :)
3. 첫 페어 프로그래밍 후기 💻
함께, 즐겁게!
소통할 수 있는 개발자!
- 코치님들은 2분 주기로 역할을 교체하며 시범을 보여주셨습니다.
- 저희 페어는 처음엔 2분으로 진행을 했고, 1시간 정도 경과할 때마다 1분씩 늘려갔습니다.
- 짧은 교체 주기가, 누구도 방관자가 되지 않게 한다고 느꼈습니다.
- 진짜 재밌었습니다.
- 시간이 정말 빨리 갑니다.
- 오랜 시간, 깊게 몰입해서 코딩할 수 있었습니다.
- 서로의 코드를 통해 배울 수 있었습니다.
- 가령, 이 부분은 왜 이렇게 작성했는지, 이런 설계는 어떤지 이런 대화가 많이 오갔습니다.
- 서로 몰랐던 API의 활용, 단축키의 활용 등에 대해서도 알아갈 수 있었습니다.
4. 다음 페어 프로그래밍에선 이렇게 개선을 ! 👍
비교적 단순한 로직을 구현할 때에는 빠르게 진행됐지만,
복잡한 로직을 구현할 때에는 클래스 분리, 역할과 책임, 구현 방법 등에서
협의하는 커뮤니케이션에서 시간이 많이 소요되었습니다.
다음 페어 프로그래밍에선 어떻게 더 효과적으로 커뮤니케이션할 수 있을지 고민해봤어요 :)
- 코딩을 시작하기 전에
- 상대방이 이전에 작성한 코드를 살펴봄으로써 상대의 설계나 스타일에 미리 익숙해지기
- 구글 미트의 화이트보드 등 기능을 이용해, 도메인 관련 클래스의 역할과 책임, 데이터 흐름에 대해 미리 협의하기
- 페어 프로그래밍으로 완료하고자 하는 지점과 일정에 대해 미리 협의하기
위와 같은 내용으로 다음 페어 프로그래밍을 개선해보고 싶습니다.
코딩 중간이나 이후에는 서로 충분히 배려하고 소통하며 진행해서 무리가 없었지만,
핵심 로직에 대한 설계에 대해 조금 더 구체적으로 협의한 후에 코딩을 시작했다면 더 시간을 아낄 수 있었을 것 같아요.
또한, 12시간 동안 실제 코딩 시간만 8시간이 나와서 함께 했던 크루와 저 모두 체력적인 소모가 꽤 컸어요 ^^;
모든 내용을 완전히 협의하며 진행할 순 없고, 1차 구현을 완료한 뒤에는 페어와 헤어진 뒤,
협의하지 못했던 내용을 마저 구현한 뒤 PR을 진행하는 방식이기 때문에,
서로 지나치게 무리되지 않는 선에 대해 미리 협의한다면 더 좋을 것 같아요!
5. 공부할 소스가 엄청나다.. 😇
크루들의 PR과 이에 대한 리뷰어분들의 피드백까지 모두 볼 수 있어서 엄청 좋은 것 같습니다!
- 다른 크루들의 PR에 대한 피드백도 모두 살펴보고 있습니다.
- 제가 직접 피드백 받지 않았던 부분이더라도 제가 반영하고 싶은, 반영해야하는 부분에 대해 반영하고 기록하고 있습니다.
- 그런데 모든 피드백들이 단순 수정 요청이 아니라, 생각할 거리와 공부해야할 내용을 함께 전해주고 계십니다.
- 무엇이 정답이다! 보다는, 어떤 생각으로 이런 코드를 작성했는지 물어봐주시고,
- 이런 부분에 대해서도 한 번 고민해보라는 코멘트와 함께 참고 링크나 키워드를 함께 주시는 식입니다.
모든 PR과 피드백들을 읽다보니, 크루들이 공통적으로 고민하는 부분이 무엇인지,
그에 대한 피드백들이 어떠한지 알 수 있다는 점이 정말 좋았습니다.
유효성 검증 로직은 어디에서 담당해야 하는지,
랜덤 테스트는 어떻게 수행해야 하는지,
메소드 선언 순서는 어떻게 해야 하는지,
private 메소드에 대한 테스트를 수행해야 하는지, 한다면 어떻게 해야하는지 등입니다.
그리고 이러한 질문들에 대한 피드백이 이것이 정답이다 이렇게 주어지지 않고,
크루의 생각을 물어봐주고, 트레이드 오프에 대해 소개하고, 자신의 취향 을 이야기해주는 식으로 진행됩니다.
그러다보니 각각의 질문에 대해 깊이 이해할 수 있게 되고,
저만의 스타일, 주관이 형성될 수 있었습니다.
이에 대한 내용은 자동차 경주 게임 PR이 최종 승인되면, 그때 정리하여 자세히 포스팅하겠습니다.
6. 잊지 말자, 면담 기회 🕺
소중한 면담 기회를 기억하고자 기록합니다 :)
- 면담 방법
- 면담은 레벨 당 최대 두 번까지 신청 가능
- 1회에 30분 진행
- 질문 작성하여 메일 발송으로 신청
- 이번 면담을 통해 논의하고 싶은 내용
- 최근에 자신이 긍정적으로 보는 시도와 변화
- 이번 면담을 통해 어떤 변화가 생기기를 원하는가
그리고... 보이는 라디오... 어 ... 음... 어...
저는 위트가 부족한 사람인데..
괜찮으시겠어요??? 😰
'우아한테크코스 4기' 카테고리의 다른 글
Comparable vs Comparator (2) | 2022.02.17 |
---|---|
동일성(Identity) vs 동등성(Equality) - feat. equals() hashCode() (6) | 2022.02.14 |
우아한테크코스 4기 오리엔테이션 (3) | 2022.02.09 |
우아한테크코스 웹 백엔드 4기, 화음을 좋아하는 리차드 (0) | 2022.01.20 |
우아한테크코스 4기 프리코스 후기 (4) - README.md 작성 (markdown) (0) | 2021.12.17 |