ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 유연한 소프트웨어를 만드는 설계원칙
    2022. 4. 24. comments

    크리스 핸슨, 제럴드 제이 서스먼 지음, 류광 옮김

    소프트웨어 엔지니어에게 어떤 상황에서도 유연하게 확장 가능한 설계는 판타지에 나오는 마법지팡이와 같은 이야기이다. 코드에 대한 섣부른 일반화가 미래 요구사항에 맞지 않아 다시 많은 부분을 손봐야한다던가 너무 특정 문제에 초점에 맞춰 구현된 개발은 향후 기만한 변화에 발목을 잡게 될 수 있다. 이 책은 기존 코드를 수정하지 않고 어떻게 새로운 코드를 추가할 수 있을 것인지 그리고 시스템을 어떻게 진화시킬 수 있는지를 이야기하는 가산적 프로그래밍(additive programming)을 설명하는 책이다.

    • 1장 자연과 설계의 유연성
    • 2장 DSL
    • 3장 산술 주제의 변형
    • 4장 패턴부합
    • 5장 평가
    • 6장 계층화
    • 7장 전파

    1장에서는 가산적 프로그래밍에 대한 주요 개념이 나오게 되는데 너무나도 잘 알려진 유닉스 철학과도 매우 흡사하다. 

    여러 프로그램을 결합해서, 각 프로그램이 지원하는 행동들의 합집합을 얻는 것은 언제라도 가능하다. 그러나 우리는 전체가 부분의 합보다 크길 원한다. 즉, 시스템의 부품들이 연동함으로써 그 어떤 부품도 혼자서는 하지 못 하는 일을 시스템이 할 수 있게 만들고자 한다. 그러나 여기는 절충(trade-off)이 존재한다. 시스템 구축을 위해 결합하는 부품들은 반드시 관심사들을 명확하게 분리해야 한다. 한가지 일을 극도로 잘해내는 부품은 서로 무관한 여러가지 기능을 결합한 부품보다 재사용하기 쉽고 디버깅 하기도 쉽다. 시스템을 가산적으로 구축하려면 의도치 않은 상호 작용을 최소화하면서 부품들을 조합할 수 있어야 한다
    p27
     

    유닉스 철학 - 위키백과, 우리 모두의 백과사전

    유닉스 철학(Unix philosophy)는 켄 톰프슨이 고안한 것으로, 최소주의적인 모듈 방식의 소프트웨어 개발에 대한 문화적 규범이자 철학적 접근이다. 유닉스 운영 체제의 선두 개발자들의 경험에 근

    ko.wikipedia.org

     

    2장 이후부터는 다양한 상황과 그에 따른 전략들이 소개된다. 디스패치, 계층화, 축중성, 상등 판정의 일반화등.

    예시 코드
    wrapper 사용 예시
    피보나치 수의 개선

     

    미국 MIT 대학에서 학부생 또는 대학원생에게 가르치던 내용이 일부 포함되어 있다고 한다. 책을 이해하는 과정이 MIT 수업을 듣는 것과 어느정도는 비슷하다고 볼수 있다. 첫 장을 펴고 1시간 정도 읽어보면 친절하게 이야기를 풀어가는 책들과 결이 다르다는 것을 알 수 있다. 단순히 읽어가는 것만으로는 충분히 이해할 수 없다. 여러번 읽고 예시를 타이핑하고 실행해보고 곰곰히 생각 정리를 해야 내용을 이해해가고 판단할 수 있다.

    그러다보니 혼자서 이 책을 다 소화하기에는 상당히 많은 시간과 노력이 들어갈 것이다. schem 개발 언어를 사용하여 설명하는데 이 부분 또한 책을 이해하는데 발목을 잡을 것이다. 혼자서 책을 읽어나가기 보다는 이 주제에 관심이 많은 시니어 개발자들이 각자 책을 사서 스터디를 진행하면 더 효과적으로 책을 읽어나가고 토론하기 좋은 책이라고 생각한다. 한편으론 일부 예시에 대해 다른 언어로도 해설하는 내용들이 영상(youtube)로 제공하면 어떨까 하는 생각이 들었다. 그런 정보들 또한 토론하기 좋을테니 말이다.

    프로그래밍이란 주제에 대해 철학적으로 시작하여 진지하게 다시 한번 정리하고 학습하고 싶은 개발자들에게 추천한다. 

    "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

    반응형

    댓글

Designed by Tistory.