index

미니멀리즘 프로그래머

· 6min

서평

인상적이었던 내용

  • 단순함은 단순하지 않다. 신중하게 다듬어졌고 실질적이며 효과적이다.
  • 환경과 싸우지 말고 이해하기.
  • 비유의 각 요소가 상호작용해야한다.
  • 필요 주도 개발. 기능 = 미래의 부채.

느낀 점

  • 시니어 프로그래머가 생각하는 좋은 소프트웨어 개발이란 이런 요소들이 있구나 알 수 있어서 좋았다.
    • 마우스를 쓰지 않는 개발 환경에 대해서는 공감이 되지는 않았다.
    • 코딩에 대한 직접적인 조언도 주어서 좋았다. 예를 들어, 반복된다면 코드에서 데이터를 분리한다.
  • 소프트 스킬에 대해서도 평소에 고민하던 내용들이 있어서 좋았다.
    • 정보 사일로를 제거하고 지식을 퍼뜨린다.
    • DWP의 역할이 나와 얼마나 겹치는지는 모르겠지만 이런 역할도 필요하다고 얘기해서 좋았다.
    • 불필요한 회의를 지양하고, 비유를 잘 활용하는 것이 좋다고 한다.
  • 개인 생산성에 있어서 환경을 최적화하는 것도 공감이 되었다.
  • Exploration and exploitation 딜레마의 아이디어를 하나 더 넣게 되어서 좋았다: 기발함과 실용성을 섞기.

내용

개요

원제: ‘simplicity: sustainable, humane, and effective software development’

4 Simplifications

  1. What You Do and How You Do It
  2. Your Environment
  3. Your Interactions
  4. Your Code

단순함에 관하여

단순함이란 무엇일까?123

  1. S(Simplicity)가 C(Complexity)보다 이해가 쉽다.
  2. S가 C보다 구성 요소가 적다.
  3. S가 C보다 문제의 본질을 더 직접적으로 반영.

단순함은 단순하지 않다. 신중하게 다듬어졌고 실질적이며 효과적이다.4

복잡성 접근 방식≈ 과학적 방법론: 현황파악(복합적 복잡성 인지하기) → 실행(시도하기) → 학습(행동 조정하기).

인생에서도 단순함을 추구하라.

코드

  • 코드 단순화하기.
    • 의존성 - 격리시키기. 외부 라이브러리에서 한 기능만 필요하면 직접 구현하기.
    • 프레임워크 - 최소부터. 그린 필드와 브라운 필드.
    • 기능 - 필요 주도 개발. 기능 = 미래의 부채.
  • 데이터 주도 개발: 데이터는 What, 코드는 How.
    • 반복적인 테스트에는 테이블 활용. 테스트는 데이터 기반.
    • 코드 → 리스트 → 인터프리터 → 상태머신: 코드에서 로직을 분리해 단순하게 만들기.
  • 가독성 높은 코드.
    • 특별한 이유 없이 주석 넣지 않기. 적정선 찾기.
    • TODO를 쓰고 모아보기.
    • 줄 맞춰 정렬하기.
    • 리스트 (1) 마지막 요소에도 쉼표 넣고, (2) 순서대로 정렬하기.
    • 옆으로 긴 코드보다 아래로 긴 코드.
    • 관련된 코드는 한 곳에 모아두기. 어쩌면 초기에는 한 파일로.
      • 글쓰기도 마찬가지.
  • 환경과 싸우지 말고 이해하기.
    • 코드의 디버깅을 실수가 아닌 결과로 인식하기.
    • 이상한 느낌이 들면 무시하지 않기.

소프트스킬

  • 학습, 정보.
    • 가르치면서 배운다. Positive-sum game.
    • 정보 사일로를 제거하고 지식 퍼뜨리기.
  • 팀.
    • 팀의 결합도 낮추기: (1) 디커플링, (2) 비동기적인 삶.
    • 팀의 다양성 지향하기.
    • DWP(Developer Without Portfolio) 역할 만들기.
  • 회의.
    • 필요한 회의만 하기.
    • 회의를 해야한다면 생산적으로 하기.
  • 상호작용.
    • 의견 대립은 제로섬이 아니다.
    • 상대에게 공감해주기.
      • 상대가 안다고 가정하지 않기.
      • 인적자원이 아닌 사람으로 시간 내어주기.
      • 황금률 _ 존 스튜어트 밀.
    • 비유로 설명하기. 비유의 각 요소가 상호작용해야한다.
      • 지금 맥락에서만 비유가 충분한지 체크하면 된다.
내가 아는 것내가 모르는 것
남이 아는 것열린 영역내게 보이지 않는 영역
남이 모르는 것내가 숨긴 영역발견될 영역

환경을 단순화

  • 최적화.
    • 데스크탑 환경 최적화.
    • 터미널 사용 극대화.
    • 나의 에디터 찾기.
  • 자동화.
    • 배포 자동화.
    • 개발 장비 자동화. i.e., 복구 절차.
  • 새로운 시도.
    • 기발함과 실용성을 섞기.
      • (1) ‘꼭 더 알아두어야 할 것들’ 목록과
      • (2) ‘호기심 가는 것들’ 목록 각각 만들고 주제를 3가지씩 적기.
    • 탐색 계획 세우기.

Footnotes

  1. Simplicity is An Advantage but Sadly Complexity Sells Better

  2. Write Simply

  3. Concise explanations accelerate progress — Steph Ango

  4. 장인의 일은 다른 사람들에게 단순해 보인다.