실용주의 프로그래머 - 2022.03.20 - 2장.실용주의 접근법

moontag·2022년 3월 20일
0

북클럽 TIL

목록 보기
2/12

DAY 2 (p.62-127)

2장.실용주의 접근법

📚 오늘 TIL 3줄 요약

  • 여러분의 코드가 rock-n-roll을 할 수 있게 하라. 락도 롤도 할 수 있게
  • 추정치를 기록하고 오답노트 쓰기
  • etc 원칙(easier to change), DRY 원칙(Don't repeat yourself)



기억하고 싶은 내용

etc 원칙(easier to change : 바꾸기 더 쉽게)

결합도 줄이기 - 분리하여 각각 수정 용이함
단일 책임 원칙 - 모듈하나만 바꾸면 요구사항 반영가능함
이름 짓기 - 코드 가독성

DRY 원칙(Don't repeat yourself : 반복하지 마라)

  • 코드중복
    모든 지식은 시스템 내에서 한 번만, 애매하지 않고 권위있게 표현해라.
    코드의 하나를 바꿀때 코드, 문서, DB 스키마, 스키마담는 구조 등도 바꾸는가? 그건 DRY하지 않다.
    but) 모든 코드 중복이 지식의 중복은 아니다. 코드는 동일하지만 표현하는 지식은 다르다. 우연이지 중복이 아니다.

  • 문서화 중복
    주석으로 코드를 두번 설명하지 마라
    함수명에서 하는 일을 알려줘라

  • 내부 API 중복
    정의할 수 있는 도구 찾기 : MOCK API, 기능테스트 생성, 클라이언트도 다양한 언어도 생성해준다. 이 도구로 API 정의를 중앙저장소에 넣고 여러 팀이 공유하면 된다

  • 외부 API 중복
    API명세를 여러분의 API도구로 불러와서 사용

  • 데이터 저장소와의 중복
    데이터 저장소의 스키마 분석 기능을 사용하기 : 저장소와 코드 중복 제거가능
    ex) 영속성 프레임워크
    코드에서 외부데이터를 고정된 구조(구조체나 클래스의 인스턴스)대신,
    키-값 데이터구조(맵, 해시, dictionary)에 삽입

  • 개발자 간 중복
    적극적으로 빈번한 소통 장려. = 일일 스크럼 스탠드업 미팅 운영, Slack 사용
    팀원 1명은 사서(지식교환).
    코드리뷰로 타인의 코드와 문서읽고 기억하라



직교성 orthogonality

  • 독립성, 결합도줄이기, 관련없는 것들은 서로 영향없게하기, 자족적, 단일적 컴포넌트 간 상호의존도 줄이기

1. 생산성향상 장점

  • 개발, 테스트 시간 줄어든다
  • 재사용 촉진(새로운 컴포넌트와 결합가능)
  • M x N 가지 결과물 도출

2. 리스크감소 장점

  • 감염코드 격리도 문제부분만 도려내면 된다
  • 한 부분만 수정시 시스템이 깨지지 않는다
  • 컴포넌트 테스트 설계와 실행이 쉬워서 테스트 많이 하게 된다
  • 특정 제품, 플랫폼에 덜 종속된다.

3. 설계할때
Q. 특정기능의 요구사항을 대폭 변경했을 시, 몇개 모듈이 영향을 받는가?
A. 하나여야 한다.

  • 다른 모듈 구현에 의존하지 않는 코드를 작성하라
  • 전역데이터를 피하라
  • 유사한 함수를 피하라
  • 직교성 점검해라 : 단위테스트, 버그수정하기
  • 문서화하라 : 마크다운처럼 내용에 집중하고 꾸미는 것은 변환도구에 맡긴다

가역성

유연하고 적응가능한 소프트웨어. 얼마든지 결정이 바뀔수있다.
중요 요구사항에서 위험이 커 보이는 곳을 먼저 작성하도록 우선순위 정하기

예광탄

  • 최종 시스템 골격 중 일부인 적은 기능의 완결코드

프로토타입

  • 폐기될 코드

  • UI 프로토타입
    : 화이트보드에 그림 그려서, 그림판, 인터페이스 빌더 등 기능구현안하고도 만들어 볼 수 있음. 외양과 상호작용에만 집중하여 코드나 마크업에는 신경꺼도 된다
    파이썬, 루비처럼 고수준언어로 프로토타입때만 구현해도 된다. 어차피 버릴거니 언어 바껴도 상관없다

  • 아키텍쳐 프로토타이핑

도메인언어

추정

  • 초기기능구현과 테스트를 마치고 이를 1번째 반복주기로 설정.
    끝나면 리뷰회의시간에 추정치를 기록하기
    정확도도 기록하고 오차 50%이상일때 오답노트쓰기. 원인 분석해라
  • PERT : (낙관적 - 현실적 - 비관적) 상황으로 분리한 시나리오로 추정치를 답하는 것




소감

가역성 부분(p.91)부터 코드예시로 설명하는 부분이 이해가 안가기 시작했다;;;
예광탄은 얼핏 이해했고,,,도메인언어는 진짜 모르겠다...
근데 추정치를 기록하는 습관은 취업했을시 큰 도움이 될 것 같다.




잘 이해되지 않는 내용은?

  • 데이터의 DRY위반, 외부와 연결될때 표현상의 중복

  • 영속성 프레임워크 p.52 (전자책p.77)
    persistence framework 프로그램 종료해도 데이터가 그대로 보존되는 특성
    데이터를 관계형DB 같은 저장소에 쉽게 저장하고 불러오게 구현해준다
    ex) Hibernate, MyBatis

  • 유틸리티 루틴 (=유틸리티 소프트웨어)

  • 데메테르 법칙 p.182

  • GoF의 디자인패턴에서 싱글턴 패턴 : 특정 클래스 객체가 하나의 인스턴스만을 갖도록 보장함

  • 15 추정 p.119




오늘 읽은 다른사람의 TIL

gonan님의 TIL

profile
터벅터벅 나의 개발 일상

0개의 댓글