Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
169 changes: 169 additions & 0 deletions 2025/Becoming a Better Programmer/tttghost/Chapter14~23.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
# Part2 02 연습을 통해 완벽해진다.

## 더 나은 프로그래머 되는 법 14~23장

### 14장 소프트웨어 개발이란

`Summary`
- 스포츠, 놀이, 집안일의 예시를 통해 소프트웨어 개발의 본질을 이해할 수 있음
- 영상 시청만으로는 실력이 늘지 않으며, 직접 코딩하며 연습해야 한다
- 끊임없이 학습하고 새로운 것을 배우는 자세를 가져야 한다
- 겸손한 마음가짐으로 개발에 임해야 한다
- 코드를 작성할 때마다 "왜?"라는 질문을 던져 명확한 코드를 만들어야 한다
- 코드 정리와 같은 지루한 작업도 피하지 말고 받아들여야 한다
- 복잡한 코드를 정리하고 개선하는 과정을 즐기는 자세가 필요하다

`Topics`
- 최근들어 배웠던 부분중 인상깊었던 것이 있나요?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코드 작성하기 전에 구조와 설계 파악하기가 인상 깊었습니다.
책에서 설명한 것 처럼, 학습이나 입사 초기에는 카우보이식 코딩을 했는데,
물론 당장은 엄청 어려운 것을 개발하지 않아서 카우보이식 코딩도 편하긴했으나,
갈수록 설계가 복잡하거나 구현 난이도가 올라가면,
바로바로 코드를 작성하면서 무언가를 구현하는게 산으로 갈 때가 많았습니다.
그래서 처음부터 설계와 구조를 잘 잡고 가면, 비록 도중에 수정은 발생하더라도...
중간 중간 이정표가 있어서 덜 헤매게 되었던 것 같아요.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

14장 관련된 내용이 아니면
저는 채용 관련된 쪽이었습니다.

채용 담당 관리자도 교육이 필요하고
채용팀에서 만든 프로세스와 임원 채용시 예외 프로세스를 구분할 필요가 있다 였습니다.


### 15장 규칙 가지고 놀기

`Summary`
- 규칙은 협업을 위해 꼭 필요하다. 신입도 바로 와서 할 수 있을 정도의 규칙
- 세가지 원칙
- 간결하게 하라
- 머리를 쓰라
- 변하지 않는 것은 없다
- 규칙을 정하되 언제든 변할 수 있다고 생각해야하 함, 규칙은 깨지라고 존재하는 것
- 팀 규칙을 만들어라

`Topics`
- 최근 팀 내에서 세운 규칙이 뭐가 있을까요?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

팀 규칙은 아니고 저만의 규칙인데, 생성자는 무조건 private으로 하자입니다.
최근 코틀린 공부하면서 이 규칙의 필요성이 많이 줄어든 것 같지만 자바를 할때는 Record 나 class + @RequiredArgumentsConstructor를 사용할 때면, 생성자가 클래스의 필드 순서에 영향을 받는데 이때, 의도치않게 오류가 발생할 수 있어서 이런 규칙을 정했었습니다.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

명시적인 비동기 코드로의 통일성을 위해 Coroutine 쓰지 말자가 마지막에 만든 규칙이었습니다.

-
### 16장 간결하게 하기

`Summary`
- 코드의 간결함은 두 가지 방향으로 나타날 수 있다
- 잘못된 간결함
- 지나치게 단순화된 코드
- 깊은 고민 없이 작성된 코드
- 복잡한 문제를 과도하게 단순화한 코드
- 좋은 간결함
- 깊은 고민과 설계가 반영된 코드
- 직관적으로 이해할 수 있는 코드
- 별도의 설명 없이도 자연스럽게 사용할 수 있는 인터페이스
- 복잡한 로직을 깔끔한 인터페이스로 추상화한 코드
- 적절한 단위로 모듈화된 설계
- 문제를 지나치게 단순화하면 오히려 복잡한 코드가 만들어질 수 있다
- 정확한 문제 분석과 설계를 통해 진정한 간결함을 달성할 수 있다
- 결론: 좋은 간결함은 초기 설계 단계에서부터 고려되어야 한다

`Topics`
- 설계나 구조 수준에서 최적화 하신 사례가 있으신가요?
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

많이 한 것도 있고, 코드 작성하면 자연스럽게 하는 작업이라
구체적으로 어떤 사례를 얘기하고 싶은지 추가해 주시면 더 깊이 있는 얘기를 해 볼 수 있을 것 같습니다.


### 17장 머리 쓰기

`Summary`
- 단순한 문제는 단순하게, 복잡한 문제는 적절히 해결하기
- KISS 원칙: 불필요한 복잡성 제거, 중복 최소화
- 코드 작성 전 충분한 설계와 고민이 필요
- 실수를 두려워하지 말고 개선의 기회로 삼기
- 기계적인 코딩보다 논리적 사고를 통한 해결
- 더 나은 해결책을 위한 지속적인 학습과 개선

`Topics`
- 가장 멍청한 코드를 작성한 경험이 있나요?

### 18장 변하지 않는 것은 없다

`Summary`
- 모든 코드는 변경 가능하다
- 완벽한 코드는 없다
- 코드 수정에 대한 두려움은 자연스럽다
- 기능이 망가질까 봐
- 추가 작업이 생길까 봐
- 익숙하지 않은 코드를 건드릴까 봐
- 테스트와 리뷰로 두려움 극복하기
- 기술 부채는 기록하고 계획에 반영하기

`Topics`
- 코드 소유권과 전문성 균형에 대해 어떻게 생각하시나요?


### 19장 코드 재사용 사례

`Summary`
- 코드 복사 붙여넣기는 DRY와 KISS 원칙 위반
- 서드파티 라이브러리가 존재한다면 적극 매입


`Topics`
- 현재 진행중인(혹은 진행했던) 프로젝트에서 얼마나 많은 복제코드가 존재하나요?
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

없다고 보는게 맞을 것 같네요.
그런 코드가 있으면 다시 리팩터링을 하게 되니까요.


### 20장 효과적인 버전 관리

`Summary`
- 버전 관리는 지금 당장 시작하라
- 늦었다고 생각할 때가 가장 좋은 시작점이다
- git init 하나로 시작
- 버전 관리 도구를 신중히 선택하라
- 한번 선택한 도구는 끝까지 사용하라
- 잦은 도구 변경은 혼란을 가져온다
- 커밋은 작은 단위로 쪼개 관리하라
- 하나의 변경사항은 하나의 커밋으로
- 명확한 커밋 메시지로 이력 관리
- 브랜치를 적극 활용하라
- 새로운 기능은 새로운 브랜치에서 개발
- 안정적인 메인 브랜치 유지

`Topics`
- 버전관리도구중 GUI와 CLI중 어떤 것을 자주 사용하시나요? 빈도는 어떻게 되시나요?
Comment on lines +109 to +110
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는

GUI: merge conflict resolve 시에

CLI: 그 외 나머지

입니다

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IDE에서 커밋 메시지 자동으로 추천해주는 기능때문에 GUI를 많이 사용하는 것 같습니다.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 배우는 단계라 CLI을 많이 사용하는 것 같습니다.
GUI가 확실히 편하긴한데... 뭔가 FM먼저하고 편한거 쓰자는 주의라서 그런거 같아요.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

git diff 명령으로 스크롤이 길어질 때만 GUI 쓰고
나머지는 CLI 씁니다.


### 21장 골키퍼 있다고 골 안 들어가랴

`Summary`
- QA팀과의 협력 관계
- QA팀은 품질 향상을 위한 파트너
- 테스트 부서가 아닌 품질 보증 전문가 집단
- 상호 존중이 협업의 기본
- 개발자의 책임
- 배포 전 자체 테스트 수행
- 단위테스트 작성
- 통합테스트 실행
- 안정적인 QA 배포 버전 제공
- 명확한 릴리즈 노트 작성
- 피드백 수용 자세
- 오류 보고는 개선의 기회
- 고객 발견 전 수정 기회로 인식
- 건설적인 피드백 환영
- 핵심 원칙
- 품질은 전체 팀의 공동 책임
- 상호 신뢰와 존중이 기본
- 효과적인 커뮤니케이션 필수

`Topics`
- 테스트코드 작성에 대한 자신의 노하우가 있을까요?
Comment on lines +134 to +135
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 기본적으로 아래와 같이 분류해서, QA를 진행 합니다

  • 예상 가능한 행동

    • happy path
    • unhappy path
  • 예상 불가능한 행동

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

기본적으로 테스트하는 메소드 안의 if문의 갯수만큼의 테스트 케이스를 추가해야 한다 정도고
그런 짓을 몇년 하다 보면 메소드 안에 if문을 얼마나 많이 써야 할지 조금 생각하게 됩니다.

이 얘기는 메소드 하나 안에 분기 처리를 4개 이상 처리를 하고 있으면 이상 징후라는 뜻입니다.
그리고 리팩터링을 해야 할 때라는 신호이기도 하죠.


### 22장 프리징된 코드의 신기한 사례

`Summary`
- 코드 프리징
- 완료일과 출시일 사이 코드 수정을 제한하는 기간
- RTM(Release to Manufacturing)은 최종 출시 버전
- 프리징 단계
- 기능 프리징: 버그 수정만 가능
- 코드 프리징: 심각한 이슈만 수정
- 완전 프리징: 모든 변경 금지
- 출시 브랜치는 격리하여 관리
- 프리징 기간 동안 기술 부채 점검

`Topics`
- 코드프리징을 선택할 때 어느정도 확신을 가지고 하시나요?
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코드 프리징이 없어서 모르겠지만,
과거(15년전 쯤) 에는 확신이고 뭐고 일정대로 작업하고 중단하는 방식이 코드 프리징이었지
그게 개발하고 출시하는데 도움이 되기 때문에 하고 있다라는 느낌은 많이 없었습니다.


### 23장 제발 저를 출시해주세요

`Summary`
- 출시는 단순 빌드가 아닌 체계적인 프로세스
- 효과적인 출시 요소
- 규율과 계획
- 단순하고 명확한 과정
- 반복 가능한 자동화
- 신뢰할 수 있는 검증
- 자동화된 빌드/배포
- CI/CD 파이프라인 활용
- 자동화된 테스트
- 체계적인 출시 브랜치 관리


`Topics`
- CI/CD 파이프라인 구축 및 자동화된 테스트 워크플로우 적용 경험과 그로 인한 이점/개선점은 무엇인가요?
Comment on lines +168 to +169
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

가장 큰 이점은 코드에 문제가 없다는 최소한의 방어막으로써, 이를 지속 적으로 체크하는 것일것이고, 배포가 간편 해졌다 정도로 볼 수 있을 것 같습니다

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이점은 코드 로직에 대한 검증이며 개선하기 위해서는 반드시 자동화 스크립트를 통한 적용이 필요하다 입니다.