ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 실용주의 프로그래머 정리 2
    Study/실용주의 프로그래머 2021. 11. 21. 19:10

    실용주의 접근법

    소프트웨어 개발에서 공리와 같은 아이디어와 보편화된 프로세스들을 다룬다. 이 장에 있는 내용들을 잘 숙지하고 활용하면 깔끔하고 변경에 강한 코드를 작성하면서 프로젝트를 성공적으로 완수할 수 있을 것이다.

    7. 중복의 해악

    DRY(Don't Repeat Yourself) 원칙은 프로그래머에게 가장 중요한 원칙 중 하나이다. 중복이 불가피한 상황도 있을 수 있지만 대부분은 중복을 제거할 수 있다. 지금 당장 편하자고 중복을 만들지 말고 중복을 없애자.


    중복은 쌓이다보면 끔찍한 결과를 가져온다. 중복을 피하자!

    8. 직교성

    직교성은 모듈, 컴포넌트 등이 서로 의존성이 없는 것을 의미한다. 프로그램을 구성하는 컴포넌트 중 한 컴포넌트의 코드가 변경됐을 때 다른 컴포넌트는 전혀 변경할 필요가 없으면 직교적인 프로그램이라고 생각할 수있다.


    직교성을 잘 지킨 시스템은 기능 추가나 변경이 쉬워진다. 서로 영향이 없기 떄문에 버그 발생 가능성도 낮다. 또한 각 컴포넌트를 테스트하기 쉬워지므로 더욱 견고한 시스템이 된다. 결과적으로 직교성을 활용하면 생산성을 향상 시킬 수 있고 시스템에 내재돼 있는 리스크도 감소 시킬 수 있다.


    이러한 직교성은 코드나 시스템 뿐만 아니라 프로젝트 팀, 문서화에도 큰 도움을 준다. 직교성을 잘 지킨 조직은 회의 참여 인원이 줄어서 의사결정을 빠르게 할 수 있다. 직교성을 잘 지킨 문서는 스타일을 변경하기 쉬워진다.


    이처럼 직교성은 개발뿐만 아니라 여러 부분에서 중요한 원칙으로 활용할 수 있다. 직교성을 잘 지키자!

    9. 가역성

    엔지니어들은 문제에 대해 단순한 하나의 해결안을 생각하고 좋아한다. 하지만 프로젝트에 대한 결정은 항상 변화하고 쉽게 뒤집히고 해당 방법이 쓸모 없어질 수도있다. 가역성을 잘 지킬수 있도록 고민하자.


    가역성은 초기 상황으로 되돌아 올 수 있는 성질을 의미한다. 프로젝트에 대한 결정이 변화했을 때 이전 상황으로 빠르게 돌아가서 변경 사항을 반영할 수 있도록 유연한 아키텍쳐를 구성하자.


    세부 사항을 잘 격리하고 인터페이스를 정의해서 변경에 대한 영향도를 줄이자. 시스템 배포 방식이 어떻게 될지 확신이 없으면 설정 변경만으로 배포 방식을 바꿀수 있도록 고민하자.

    10. 예광탄

    예광탄은 총을 쏠때 빛의 궤적을 보여주는 탄의 종류다. 이를 통해 총알의 궤적을 눈으로 바로 보고 방향을 수정할 수 있다. 실용주의 프로그래머들은 예광탄 사용을 선호한다.


    새로 진행해야하는 프로젝트에 대해 감이 안오는 상황에서 예광탄을 사용하면 좋다. 프로젝트의 한 기능만 구현을 해서 제대로 동작하는지 증명할 수 있다. 만약 적합하지 않다면 수정할 수 있다. 기능 하나만 구현했기 때문에 수정하기가 수월하다.


    이런 방식은 사용자들도 선호한다. 전체 기능은 아니지만 바로 사용할 수 있는 프로그램을 눈으로 볼 수 있고 자기가 원하던 방식인지 바로 피드백을 줄 수 있다. 또한 프로젝트에 참여하는 개발자들도 선호한다. 기본적인 프로젝트의 구조가 잡혀있어서 개발을 쉽게 시작할 수 있다.

    11. 프로토타입과 포스트잇

    실제 제품을 개발하기 전에 특정 측면이 걱정된다면 프로토타입을 만들어서 확인해보자. 알고리즘의 성능이 괜찮을지, 아키텍처 구성이 괜찮을지, 외부 데이터의 구조를 적용할 수 있을지 등등 다양한 측면에서 활용이 가능하다.


    프로토타입은 코드로 만들 수 도 있고 단순히 포스트잇을 붙여가면서 만들수 도 있다. 증명하고자 하는 특정 측면에 적합한 도구를 사용하자. 프로토타입을 만들때 중요한 점은 증명을 한 후에는 프로토타입을 버려야한다는 것이다. 실제 제품에 사용하는 것이 아니라 테스트 및 증명을 위해 사용해야 한다. 실제 제품에 사용하고 싶으면 예광탄을 사용하자.

    12. 도메인 언어

    언어는 문제에 대해 생각하는 방식과 의사소통에 영향을 미친다. 따라서 해결하고자 하는 문제 도메인에 특정 언어로 접근하게 되면 제한이 생길 수 있다. 이럴때는 도메인 언어를 만들어서 문제 도메인에 적합한 표현 방식을 고민해보자. 의사소통을 원할하게 도와주고 새로운 문제 해결 방법을 제시할 수 도 있다.


    소형 언어를 만들어도 좋고 단순히 라인으로 도메인을 표현해도 좋다. 도메인 언어를 만드는 시간에 대한 보상은 나중에 배로 돼서 돌아올 것이다.

    13. 추정

    추정을 잘하면 무언가의 가능성을 판단하는 능력이 생긴다. 추정 능력을 키우자.


    추정의 단위는 정확도를 의미한다. 상황에 따라 다른 단위를 사용할 수 있다. 예를들어 130일과 6개월은 다른 느낌을 준다. 130일은 좀 더 정확한 수치처럼 느껴진다. 단위를 고려해서 추정하자. 추정을 정확하게 하는 가장 좋은 방법은 이미 비슷한 일을 해본 사람을 찾는 것이다. 좋은 추정치를 내줄 수 있을 것이다. 추정을 원하는 상대가 무엇을 묻는지 이해하자. 그러면 추정의 정확도뿐만 아니라 도메인의 범위까지 감을 잡을 수 있을 것이다.


    시스템 모델을 만들고 컴포넌트로 나누자. 그런 다음 각 매개변수의 값을 주면 추정치를 계산할 수 있을 것이다.


    프로젝트 일정을 추정할 때는 바로 판단하지 말자. 프로젝트의 단계를 일부분 반복하고 그 결과를 가지고 추정하자.

    댓글

Designed by Tistory.