[F-Lab 모각코 챌린지] 62일차 - 소통과 확장성

F-Lab 모각코 챌린지 - 62일차 소통과 확장성. 실용주의 프로그래머 책 정리입니다. 소통하는 방법과 확장성을 고민하고 어떻게 풀어나가면 좋을지 설명합니다.

[F-Lab 모각코 챌린지] 62일차 - 소통과 확장성

소통하라

나는 무시당하느니 차라리 샅샅이 훑어보는 시선이 낫다고 봐요
- 메이 웨스트(Mae West, Belle of the Nineties, 1934)

아무리 뛰어난 지식, 철학, 실력이 있다고 해도 소통하지 않으면 의미가 없다

이에 몇가지 방안들을 소개한다

말 하고 싶은 게 무엇인지 알아라

무엇을 말할지 미리 계획하고, 자문하고, 다듬어라

제대로 전달하기 위해 필요한 전략 몇 개를 세워라

청중을 알아라

청중의 관심과 능력을 이해하여 그들의 니즈를 파악하라

WISDOM - 청중 이해하기

  • W : 무엇을 배우길 원하는가?
  • I : 말하려는 것에서 그들이 관심 있어 하는 건 무엇인가?
  • S : 얼마나 소양이 있는가?
  • D : 어느 정도의 구체적인 내용을 원하는가?
  • O : 누가 정보를 소유하길 원하는가?
  • M : 그들이 경청하도록 동기를 주려면 어떻게 해야 할까?

각 업무에 맞는 접근을 통해, 그들이 모두 여러분의 프로젝트에 대해 열광하도록 만들 수 있다

  • 말할 때를 골라라
  • 전달하는 스타일을 골라라
  • 프로젝트가 멋져 보이게 하라
  • 문서 제작 과정에 청중을 참여시켜라
  • 누군가 나에게 경청해주길 바란다면 나 역시 다른이에게 경청하라
    - 질문을 해서 사람들의 이야기를 북돋워라
    - 여러분이 한 말을 그들이 요약하도록 하라
    - 회의를 대화로 바꾸면 생각을 좀 더 효과적으로 전달할 수 있을 것이다
  • 응답을 잘하라

중복의 해악

DRY - 반복하지 마라 (Don't Repeat Yourself) 모든 지식은 시스템 내에서 단일하고, 애매하지 않고, 정말로 믿을만한 표현 양식을 가져야 한다

중복에 관한 부분은 클린 코드 에서 얻은 정보 외에 정리 할 것이 없다

직교성

하나가 바뀌어도 나머지에 어떤 영향도 주지 않으면 서로 직교한다고 할 수 있다

비직교적인 시스템

시스템의 컴포넌트들이 고도로 상호 의존적인 경우

직교적인 시스템

독립적이고 단일하며 잘 정의된 목적을 가진 컴포넌트

관련 없는 것들 간에 서로 영향이 없도록 하라

직교적인 시스템의 장점

생산성 향상

  • 변화가 국소화 돼서 개발 시간과 테스트 시간이 줄어든다
  • 재사용을 촉진한다
  • 직교적인 컴포넌트들을 결합하는 경우 꽤 미묘한 생산성 향상이 있다

리스크 감소

  • 감염된 코드는 격리된다
  • 시스템이 견고해진다
  • 테스트를 세분화 할 수 있다
  • 종속성이 낮아진다

설계

직교적인 설계를 테스트하는 손쉬운 방법이 있다

특정 기능에 대한 요구사항을 극적으로 변경했을 경우, 몇 개의 모듈이 영향을 받는가?

"직교적인 시스템에서는 답이 '하나'여야 한다. GUI 패널의 단추 하나를 옮기는 것 때문에 데이터베이스 스키마가 변경되어서는 안된다"
(이 말로 미루어 볼 때, 모듈의 단위는 클래스 레벨이 아닌듯 싶다.)

툴킷과 라이브러리

서드파티 툴킷이나 라이브러리를 도입할 때, 시스템의 직교성을 보존할 수 있는지 주의 깊게 살펴보기 바란다

기술을 현명하게 선택하라

  • 책에서는 AOP 를 이용한 예제를 보여주고 있다

코딩

코드를 작성하고 있다면 언제나 애플리케이션의 직교성을 떨어뜨릴 수 있는 위험에 노출되어 있다

  • 코드의 결합도를 줄여라
  • 전역 데이터를 피하라
  • 유사한 함수를 피하라

가역성

가역성: <물리> 물질이 어떤 상태로 변하였다가 다시 원래의 상태로 되돌아갈 수 있는 성질
당신이 가진 생각이 딱 하나밖에 없다면, 그것만큼 위험한 것은 없다

여러분이 설계한 데이터 구조, 아키텍처, 인프라 가 변경되지 않을 것이라고, 희망찬 생각은 하지마라

엔지니어 에게 1+1 은 2 이지만, 디자이너에겐 창문일 수 있다. 오늘 2 였던게 내일은 5가 될 수 있다는 말이다

  • 결정을 계속해서 미뤄라 소프트웨어를 하드웨어로 만들지 마라
  • 소프트웨어의 레이어간의 의존도를 낮춰, 보다 확장성 있게 설계하라

CORBA ( Common Object Request Broker Architecture)

  • CORBA 는 네트워크에서 분산 프로그램 객체를 생성, 배포, 관리하기 위한 구조와 규격이며 네트워크 상의 서로 다른 장소에 있고 여러 벤더 들에 의해 개발된 프로그램들이 "인터페이스 브로커" 를 통해 통신하도록 해준다
  • Application 들 끼리 어디에 위치하고 있든, 혹은 누가 만들었건 관계없이 상호간 통신을 보장함으로써 다양한 H/W, S/W 가 함께하는 오늘날의 네트워크 분산 환경을 지원하는 새로운 시스템 통합 기술이다