-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[오혜성] 2장: 실용주의 접근법 #5
The head ref may contain hidden characters: "2\uC7A5/\uC624\uD61C\uC131"
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
# 실용주의 접근법 | ||
|
||
소프트웨어 개발의 모든 차원에 적용가능한 팁과 요령이 있고 이에 대한 장 | ||
|
||
## 중복의 해악 | ||
|
||
* 모든 지식은 시스템 내에서 단일하고, 애매하지 않고, 정말로 믿을만한 표현 양식을 가져야 한다. | ||
|
||
* 어떻게 중복이 생기는가? | ||
+ 참을성 없는 중복 (나임) | ||
- 참을성 없는 중복은 발견하기 쉽고 다루기도 쉬운 형태지만, 나중의 고통을 피하기 위해 훈련과 미연에 시간을 투자할 의지가 있어야 한다. | ||
+ 개발자간의 중복 | ||
- 공통 필요 기능이나 데이터는 여러 번 거듭 구현될 가능성이 있다. | ||
- 개발자간에 적극적이고 빈번한 소통을 장려하는 것으로 해결 | ||
- 기존의 것을 찾아내고 또 재사용하기 쉬운 환경을 조성 | ||
|
||
* 나쁜 코드야말로 많은 주석을 필요로 한다 | ||
|
||
* 믿을 수 없는 주석은 주석이 전혀 없는 것보다 더 심각한 문제를 만들어 낸다. | ||
|
||
## 직교성 | ||
|
||
* 직교성이란 컴퓨팅에서 독립성이나 결합도 줄이기를 의미 | ||
+ 하나가 바뀌어도 나머지에 어떤 영향도 주지 않으면 서로 직교한다 할 수 있음 | ||
|
||
* 비직교적인 시스템은 본질적으로 변화와 조정을 하기가 복잡함 | ||
|
||
* 직교적인 접근법은 재사용을 촉진함 | ||
+ 컴포넌트들에 명확하고 잘 정의된 책임이 할당되어 있다면 구현자들이 미처 생각하지 못했던 방식으로 새로운 컴포넌트와 결합할 수 있음 | ||
+ 시스템이 더 느슨하게 결합되어 있을수록 재설정하고 리엔지니어링하기 쉽다 | ||
|
||
> 더 변화에 유연한 것과 사용하기 편한 것의 중용이 중요하다 생각하기도 .. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 요즘 느끼는건데 결국 단순한게 변화에 유연하고 사용하기 편한 것 같더라고요!! |
||
|
||
* 프로젝트 팀 구조가 얼마나 직교성을 갖는지 간단히 측정해 볼 수 있는 방법이 있다. | ||
+ 요청된 개별 변화에 대한 토론에 참여할 필요가 있는 사람의 숫자 | ||
+ 수가 클수록 직교성이 낮음 | ||
+ 직교적인 팀이 더 효율적임이 명백함 | ||
|
||
* 직교적인 설계를 테스트하는 손쉬운 방법 | ||
+ 특정 기능에 대한 요구사항을 극적으로 변경했을 경우, 몇 개의 모듈이 영향을 받는가? | ||
+ 직교적인 시스템에서는 답이 '하나'여야 함 | ||
|
||
> 극적으로 변경했는데 어떻게 하나가 될 수 있지.. | ||
|
||
* 코드의 결합도 | ||
+ shy code를 작성해라 | ||
+ 불필요한 어떤 것도 다른 모듈에 보여주지 않으며, 다른 모듈의 구현에 의존하지 않는 코드 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 꿈의 코드 |
||
|
||
> '구현을 인터페이스에 노출하지 않기'를 선호합니다 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이거 관련해서 개발적인 노하우를 공유하는 자리가 있어도 재밌겠군요 |
||
> 이름도 인터페이스라고 생각해용 | ||
|
||
* 자신이 작성하는 코드를 항상 비판적으로 검토해 보는 습관을 기르기 바란다 | ||
|
||
* 단위 테스트는 직교성을 테스트해 볼 수 있는 흥미로운 작업 | ||
+ 여러 모듈을 모킹한다면 낮다고 볼 수 잇음 | ||
Comment on lines
+54
to
+55
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ???: 테스트 하기 좋은 코드가 좋은 코드다.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Mocking이면 모든게 해결된다고~ |
||
|
||
* 객체지향을 쓰면 더 직교적이냐? | ||
+ 더 직교적이게 만들 수 있으나, 더 기능이 많아 직교적이지 못한 시스템을 만들기도 쉽다 | ||
+ 절차형 언어로 스파게티 코드를 만들 가능성이 존재한다면, 객체지향 언어로 미트볼 스파게티를 만들 수 있는 것 | ||
|
||
## 가역성 | ||
|
||
* 당신이 가진 생각이 딱 하나밖에 없다면, 그것만큼 위험한 것은 없다. | ||
|
||
* 우리가 개발하는 속도는 요구사항, 사용자, 하드웨어의 변화를 앞지를 수 없다 | ||
|
||
* 여러분의 코드는 몇 가지 가능한 미래를 지원하는가? | ||
+ 어떤 미래가 일어날 가능성이 높을까? | ||
+ 그 미래가 닥쳤을 때, 이를 지원하는 것이 얼마나 어려울까? | ||
|
||
## 예광탄 | ||
|
||
* 요구사항으로부터 최종 시스템의 일부 측면에까지 빨리, 눈에 보이게, 반복적으로 도달하게 해줄 무언가를 찾아야 함 | ||
|
||
* 예광탄은 항상 목표를 맞추지 못함. 다시 조준하는 과정이 필요 | ||
|
||
* 프로토타입과 다른 것임. 프로토타입은 어떤 개념을 구현해 보려고 대충 끼워 맞추고 모두 버리고 다시 만듬 | ||
|
||
* 예광탄 코드 접근 방법은 애플리케이션이 전체적으로 어떻게 연결되는지를 알고 싶고, 어떻게 사용자들이 상호작용하는지 보고 싶고, 아키텍처적 골격을 개발자들에게 제시하고 싶을 때의 방법 | ||
|
||
## 프로토타입과 포스트잇 | ||
|
||
* 소프트웨어 프로토타입도 자동차 프로토타입과 같은 이유에서 같은 방식으로 만듬 | ||
+ 위험 요소 분석, 노출 > 바로 잡을 기회 | ||
|
||
* 프로토타입에서 중요한 것은 생성된 코드가 아닌 배우게 되는 교훈 | ||
|
||
## 도메인 언어 | ||
|
||
* 문제 도메인에 가깝게 프로그래밍하라 | ||
+ 더 높은 추상화 수준에서 작업하믕로써 사소한 구현의 세부사항들을 무시하고 도메인의 문제들을 푸는 일에만 정신을 집중할 수 있다. | ||
|
||
## 추정 | ||
|
||
* 누군가 추정치를 묻는다면 중요한 것은 답변이 사용될 상황 | ||
+ 매우 높은 정확도를 원하는가? 큰 그림만을 원하는가? | ||
|
||
* 추정치를 기록하는 용기 | ||
+ 추정치를 기록하고 이후 얼마나 정확했는지 비교하자 | ||
+ 잘못되었다면 왜 달라졌는지 원인을 찾자. 이를 통해 다음 추정은 더 정확해질 것 | ||
|
||
> 회사에서 최근에 추정치를 기록하고 있는데.. 마주볼 시간이 없긴 하네요 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 오... 어떻게 기록하는지 궁금하네요 |
||
|
||
* 누군가 추정에 대해 물으면? | ||
+ 잠시 시간을 내어 더 정확한 추정치를 알려주자 ~ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 아 대충 한달 걸린다니까요~ ㅋㅋㅋㅋㅋㅋㅋㅋ |
||
|
||
> 개인적으로 사용하고 있는 방법은, 많은 분들이 읽으셨을 '함께 자라기'에서 찾은 방법인데요. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 많은 분들 중에 제가 포함이 안 되어 그런데 찾아보니 애자일과 관련된 저자와 책이더군요.. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 굉장히 얇고 후루룩 읽기 좋아서 저는 재밌게 읽었어요! 업무에서의 애자일보다 삶에서의 애자일을 다루는 느낌이랄까나요 .. |
||
> | ||
> 낙관적인 추정과 비관적인 추정을 함께 공유하는 방법입니더 | ||
> 책에서는(미 해군이였나) 이를 어떤 수식으로 계산해서 전달하곤 하는데.. 그건 goozi인 거 같아서.. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
중복을 해결한다라는 관점에서 어떤 방식을 더 선호하시나요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는 닥후입니다
왜냐하면 처음부터 잘만들려고 만들었다가 아무도 안써서 삭제되는 기능이 더럿 있었기 때문이죠 ...
빨리 하는 것도 중요한 가치일 거같고요!