Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
TIL 2장. 실용주의 접근법
#pragmatic
2 years ago
2,215
3

오늘 TIL 3줄 요약

  • ETC! 항상 바꾸기 더 쉽도록 코드를 작성하자.

  • 바꾸기 쉽도록 하기 위해 중복을 피하고, 직교적인 시스템을 작성하도록 하자.

  • 예광탄 코드, 프로토타이핑을 적극적으로 활용하고 (예광탄 코드는 최종 시스템의 골격이 되고, 프로토타이핑은 특정 기능을 테스트한 이후 폐기된다.) 정확한 추정치를 얻기 위해 경험을 계속 쌓자.

TIL (Today I Learned) 날짜

2022.03.21

오늘 읽은 범위

2장. 실용주의 접근법

책에서 기억하고 싶은 내용을 써보세요.

  • 어떤 게 잘 설계되었다는 건 그 물건이 사용하는 사람에게 적응하여 맞춰진다는 것이다. 이 말을 코드에 적용해 보면, 잘 설계된 코드는 바뀜으로써 사용하는 사람에게 맞춰져야 한다. ...(중략)... 바꾸기 더 쉽게. ETC. 이게 전부다. - 39p

  • 사실 여러분은 모든 코드를 교체할 수 있게 작성해야 한다. 교체 가능하게 작성하라는 말은 코드의 결합도를 낮추고 응집도를 높이라는 이야기일 뿐이다. - 40p

  • DRY를 따르지 않으면 똑같은 것이 두 군데 이상에 표현될 것이다. 하나를 바꾸면 나머지도 바꿔야 함을 기억해야 한다. - 43p

  • 모든 코드의 중복이 지식의 중복은 아니다. - 47p

  • 여러분은 뭔가를 직접 만드는 것보다 기존의 것을 찾아내고 재사용하기 쉬운 환경을 조성해야 한다. - 54p

  • 그래프의 축과 같이 두 직선이 직각으로 만나는 경우 직교한다고 말한다. 벡터 용어로 표현해 보면 두 개의 선은 독립적이다. ...(중략)... 컴퓨터 과학에서 이 용어는 일종의 독립성이나, 결합도 줄이기를 의미한다. 하나가 바뀌어도 나머지에 어떤 영향도 주지 않으면 서로 직교한다고 할 수 있다. 잘 설계된 시스템에서는 데이터베이스 코드가 사용자 인터페이스와 서로 직교할 것이다. - 55p

  • 직교적인 시스템을 작성하면 두 가지 큰 장점이 있다. 바로 생산성 향상과 리스크 감소다. - 57p

  • 계층 구조는 직교적 시스템을 설계하는 강력한 방법이다. 각 계층은 자기 바로 밑에 있는 계층이 제공하는 추상화만을 사용하기 때문에, 다른 코드에 영향을 끼치지 않으면서 기반 구현들을 변경할 수 있게 되어 유연성이 높아진다. 계층 구조는 또한 모듈 간에 의존성이 폭증할 위험을 줄인다. - 59p

  • 자신이 작성하는 코드를 항상 비판적으로 바라보는 습관을 길러라. 기회가 있을 때마다 코드의 구조와 직교성을 개선하기 위해 노력하라. - 62p

  • 결정이 바뀌지 않을 것이라 가정하고서 발생할지도 모를 우연한 사건에 대비하지 않는 데에서 실수가 나온다. 결정이 돌에 새겨진 것이 아니라 바닷가의 모래 위에 쓰인 글씨라 생각하라. 언제든지 큰 파도가 글씨를 지워버릴 수 있다. - 68p

  • 예광탄 코드도 다른 제품 코드와 마찬가지로 오류 검사, 올바른 구조, 문서화, 자체 검사를 갖추어야 한다. 예광탄 코드에는 아직 모든 기능이 들어 있지 않을 뿐이다. 하지만 시스템을 구성하는 요소를 모두 연결해 놓은 후라면 목표물에 얼마나 근접했는지 확인할 수 있으며, 필요하다면 조정도 할 수 있다. 일단 정확하게 조준하고 나면 기능을 추가하는 일은 쉽다. - 75p

  • 프로토타입은 나중에 버리는 코드를 만든다. 예광탄 코드는 기능은 별로 없지만 완결된 코드이며, 최종 시스템 골격 중 일부가 된다. - 79p

  • 프로토타이핑은 학습 경험이다. 프로토타이핑의 가치는 생산한 코드에 있는 것이 아니라 이를 통해 배우는 교훈에 있다. - 81p

  • 프로토타이핑의 목적은 전체적으로 시스템이 어떻게 동작할지에 대해 감을 잡는 것이다. 다시 말하지만, 세부 사항은 무시한다. - 83p

  • 이미 그 일을 해본 사람에게 물어보라. 모델 작성에 너무 시간을 많이 쏟기 전에 과거에 비슷한 상황에 처했던 사람이 없는지 주변 사람들 에게 문의해 보고, 그들이 어떻게 문제를 해결했는지 알아보자. 똑같은 일을 해 본 사람을 찾기는 어렵겠지만, 놀라울 정도로 자주 다른 사람의 경험을 바탕으로 성공적인 추정치를 낼 수 있을 것이다. - 96p

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

  • 클린코드에서도 계속 강조했듯, 바꾸기 쉬운 코드를 작성하기 위해 노력해야 한다. 애자일 시대에 고객의 요구에 발빠르게 대응하는 것만큼 중요한 것이 있을까. 그리고 기술의 트렌드도 빠르게 변하고 있다. 구축한 프로젝트가 도태되는 것을 막고 싶다면, 항상 바꾸기 쉬운 코드를 작성하는 습관을 가지자.

  • 일전에 팀과 함께 스타트업 대회에 참여했던 적이 있었다. 아이디어가 현실이 되려면, 그것을 넘어서 돈이 되려면 그렇게 될 수 있음을 투자해줄 수 있는 사람들에게 설명하는 것이 매우 중요하다. 처음 그들의 관심을 끌기 위해, 가능성이 있지도 모를 제품을 완벽하게 만들기 보단, 완성된 제품을 내놓는 것이 중요하다. 우선, MVP(Minimum Viable Product)를 만들기 위해 노력해야 한다. 예광탄 코드와 프로토타이핑은 그 과정을 도울 것이다.

  • 학교에서 HCI 수업을 들은 적이 있었다. 팀원들과 함께 웹사이트를 만드는 것이 최종 프로젝트였는데, 실제로 구현하기 전에 포스트잇, 종이 등을 이용해 많은 프로토타입을 만들고, 잠재고객들을 만나보며 웹사이트와 사용자 간의 interaction을 강화시키기 위해 디자인을 끊임없이 바꿨던 기억이 있다. 웹사이트를 만들 때 가장 중요한 것 중 하나가 사용자의 기대에 맞게 웹사이트가 구동하는 것이라 생각하는데, 이를 위해 프로토타이핑도 중요한 역할을 수행할 수 있을 거라 생각하며, 기능을 구현하기 전에 프레임만 구현해놓거나, 종이나 포스트잇과 같은 간단한 도구들을 이용하는 것이 더 비용절약적이라 생각한다.

  • IT 업계는 예전과 비교할 수 없는 변화의 압박을 지금 받고 있을 것이다. First mover advantage가 가장 강력하게 작용하는 곳이 IT 산업이라 생각하는데, 경쟁자들보다 새로운 것을 빨리 내놓고, 빨리 고객의 요구에 발맞추고, 해자를 갖추기 위해 올바른 청사진을 그리는 것이 매우 중요하다 생각한다. 계획을 잘 세우기 위해, 가장 중요한 능력은 직관이며, 책에서도 언급했듯, 직관을 기르는 가장 좋은 양분은 경험이다. 좋은 직관을 가지기 위해 다양한 경험을 쌓고, 다양한 경험을 가진 인적 네트워크를 구축하기 위해 노력해야겠다.

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

오늘 읽은 다른사람의 TIL

3 comments