개발자 99% 커뮤니티에서 수다 떨어요!
2장 실용주의 접근법에서는 소프트웨어 개발의 접근법에 대한 아이디어와 프로세스를 다루고 있다.
2장에서 제시하는 기본적인 원리들은 더 좋은, 더 빠른, 더 강력한 코드를 작성할 수 있고 코드가 쉬어 보일게 할 수 있는 힘을 가지고 있다.
이러한 원리들을 100% 내것으로 만들기에는 아직 능력과 공부가 부족하기에 발전의 필요성이 필요하다고 생각한다.
2022.03.20 ~ 21
2장 실용주의 철학
좋은 설계는 나쁜 설계보다 바꾸기 쉽다.
바꾸기 더 쉽게 Easier to Change ETC
'방금 한 일이 전체 시스템을 바꾸기 쉽게 만들었을까, 어렵게 만들었을까?' 스스로 물어보라.
작성하는 코드를 교체하기 쉽게 만들도록 노력하라. 내가 만든 모든 코드는 교체할 수 있게 작성해야 한다.
교체 가능한 코드를 작성하기 위해서는 코드의 결합도를 낮추고 응집도를 높여야 한다.
프로그래머는 늘 유지 보수 모드에 있다. 유지 보수는 별개의 활동이 아니며 전체 개발 과정의 일상적인 부분이다.
모든 지식은 시스템 내에서 단 한 번만, 애매하지 않고, 권위 있게 표현되어야 한다.
DRY: 반복하지 말라 Don't Repeat Yourself
DRY는 지식의 중복, 의도의 중복에 대한 것이다.
재사용하기 쉽게 만들어라.
하나가 바뀌어도 나머지에 어떤 영향도 주지 않으면 서로 직교한다고 할 수 있다.
관련 없는 것들 간에 서로 영향이 없도록 하라.(직교성을 유지하라.)
우리가 설계하고 싶은 것은 자족적인 컴포넌트, 즉 단일하고 잘 정의된 목적을 가진 독립적인 컴포넌트다.
직교적인 시스템을 작성하면 생산성 향상, 리스크 감소의 두 가지 큰 장점이 있다.
직교성을 유지하기 위해서는 코드의 결합도를 줄이고 전역 데이터, 유사한 함수를 피해야 한다.
자신이 작성하는 코드를 항상 비판적으로 바라보는 습관을 길러라.
당신이 가진 생각이 딱 하나밖에 없다면, 그것만큼 위험한 것은 없다.
영원한 것은 없다. 모든 사실은 언젠가는 변한다.
결정이 바뀌지 않을 것이라 가정하고서 발생할지도 모를 우연한 사건에 대비하지 않는 데에서 실수가 나온다.
최종 결정이란 없다.
유행을 좇지 말라.
여러분의 코드는 몇 가지의 가능한 미래를 지원할 수 있는가?
변경 요청과 기능 추가 요청은 언제나 계속 들어오기 마련이다. 예광탄 개발 방법은 점진적인 접근 방법이다.
예광탄 코드 접근 방법의 장점 중 하나는 프로젝트가 진행됨에 따라 사용자가 직접 기여하기 시작할 것이며 관심도 커진다는 것이다.
프로토타입은 제한된 몇 가지 질문에 답하기 위한 것이므로 실제 제품보다 훨씬 적은 비용으로 빠르게 개발할 수 있다.
증명되지 않았거나, 실험적이거나, 의심이 가는 것, 마음이 편하지 않는 것 모두가 프로토타이핑의 대상이 될 수 있다.
프로토타이핑의 가치는 생산한 코드에 있는 것이 아니라 이를 통해 배우는 교훈에 있다.
프로토타입의 코드는 폐기할 것이고, 불완전하며, 완성할 수 없다는 사실을 분명히 주지시켜야 한다.
프로토타입을 적절히 사용하면 많은 시간과 돈, 고통과 고생을 줄일 수 있다.
Topic 14 도메인 언어
언어의 한계가 곧 자기 세계의 한계다.
문제 도메인에 가깝게 프로그래밍하라.
동작하는 코드를 보여 줘라. 직접 사용해 볼 수 있게 하라. 그러면 그들에게 진짜로 필요한 것이 들어날 것이다.
추정치 산출 과정을 통해 여러분의 프로그램이 살고 있는 세계를 좀 더 이해하게 될 것이다.
추정하는 법을 배우고 추정 능력을 계발하여 무언가의 규모를 직관적으로 짚을 정도가 되면, 추정 대상의 가능성을 가늠하는 마법과 같은 능력을 발휘 할 수 있게 될 것이다.
추정으로 놀람을 피하라.
추정에서 한 가지 재미있는 사실은 사용하는 단위가 결과의 해석에 차이를 가져온다는 것이다.
어떤 종류의 추정을 하건 첫 단계는 상대방이 무엇을 묻고 있는지 이해하는 것이다. 이후 기본적인 것만 갖춘 개략적인 모델을 만들어 보라. 모델은 여러분의 조직이 개발하는 동안 사용할 발판이 될 뿐 아니라 시스템을 어떻게 구현해야 할지에 대한 밑그림을 제공해 줄 것이다.
PERT 과업은 낙관적 추정치와 가장 가능성이 높은 추정치, 비관적 추정치를 갖는다.
값을 범위로 추정하는 건 추정 오류를 피할 수 있는 훌륭한 방법이다.
Q: 누군가 추정해 달라고 하면 뭐라고 대답해야 할까?
A: "나중에 연락드릴게요."
2장은 1장보다 이해가 안 되는 부분이 많아 힘들게 읽었다. 하지만 2장에서는 현재 나에게 필요한 실용주의 접근법에 대해 생각을 할 수 있는 기회가 주어져 소중한 시간이었다. 지금 서비스를 하나 개발하고 배포하여 운영중에 있다. 지금도 계속해서 버그를 수정하고 기능을 추가하는 업데이트를 하고 있는데 이때 어떻게 해야 효율적으로 할 수 있는지 배우게 되었다.
현재 적용하고 있는 방법도 있고 적용해 볼만한 방법도 있어 앞으로 더욱 바빠질 것이다. 하지만 바빠진 많은 더욱 배우는 것은 많을거라 생각하니 의욕이 생긴다. 좋지 않는 습관(귀찮아서 코드 중복을 저지른다...)등을 고쳐보자.
마지막으로 이번 장은 분명히 한글로 적혀있고 예시로 주제를 풀어나갔지만 쉽지 않게 다가왔다. 1년 뒤 이 책을 다시 봤을 때는 어떤 기분일까?