14 분 소요

TIL (Today I Learned)

2022.02.19(토)


오늘 읽은 범위

  • 추천사 ~ 1장. 깨끗한 코드 (p.20)


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

  1. 장인정신
    • 장인정신은 이론+실전이다.
    • 이론 : 원칙, 패턴, 기법, 경험이라는 지식 습득
    • 실전 : 일과 연습을 통해 체득


  1. 코드가 존재하리라
    • 프로그래밍이란 기계가 실행할 정도로 상세하게 요구사항을 명시하는 작업이고, 명시한 결과는 코드 이다.
    • 프로그래밍 언어에서 추상화 수준이 높아짐에 따라 특정 응용 분야에 대한 적합한 프로그래밍 언어(domain-specific language)도 많아 진다. 언젠가 코드가 사라질 것이라고 생각하지만 프로그램의 요구사항을 정밀하게 표현하기 위해선 코드는 없어질 수 없다.


  1. 나쁜 코드와 나쁜 코드로 치르는 대가
    • *회사에서 개발을 하면서 마감기한에 쫓겨 일단 구현부터하고 나중에 다시보자라고 생각한 기능이 있었다. 하지만 시간이 지나도 다시 볼 시간이 없었고, 오류가 발생했을 내가 작성한 코드지만 내가 알기어려웠던 경험이 있다. 처음 작성할 때 구조를 잘 짜놓았더라면 후에 고칠때 더 적은 시간을 사용했을 것이다…
    • 나쁜 코드 : 개발 속도 ↓, 생산성 ↓
    • 나쁜 코드의 잘못은 전적으로 프로그래머에게 있다. 프로그래머가 전문가답지 못했기 때문이다. 좋은 코드를 사수하는 것이 프로그래머의 책임이다.
    • 언제나 코드를 최대한 깨끗하게 유지하는 습관


  1. 깨끗한 코드
    • 깨끗한 코드를 작성하기 위해선 ‘청결’이라는 감각을 활용해 자잘한 기법들을 적용하는 절제와 규율이 필요하다.
    • 코드 감각 : 좋은 코드와 나쁜 코드를 구분, 절제와 규율을 적용하여 나쁜 코드를 좋은 코드로 바꾸는 전략 파악


    1. 비야네 스트롭스트룹 (Bjarne Stroustrup)
      • 세세한 사항까지 꼼꼼하게 처리하는 코드
      • 한가지에 '집중'
    2. 그래디 부치 (Grady Booch)
      • 가독성 : 코드가 잘 쓴 문장처럼 읽혀야 한다.
      • 해결할 문제의 긴장을 명확히 드러내야 함
    3. 큰 데이브 토마스 (Big Dave Thomas)
      • 코드가 다른 사람이 고치지 쉬움
      • 테스트 주도 개발 (TDD:Test Driven Development)
    4. 마이클 페더스 (Michael Feathers)
      • 주의 깊게 작성한 코드
    5. 론 제프리스 (Ron Jeffries)
      • 중복을 피하라
      • 한 기능만 수행하라
      • 제대로 표현하라
      • 작게 추상화하라
    6. 워드 커닝햄 (Ward Cunningham)
      • 읽으면서 짐작한 대로 돌아가는 코드
      • 명백, 단순해 마음이 끌리는 코드
    7. 로버트 C. 마틴 (Robert C. Martin)
      • 읽기 쉬운 코드 : 새 코드를 짜면서 기존 코드를 끊임없이 읽기 때문에
      • 시간이 지나도 언제나 깨끗하게 유지 : 체크아웃할 때보다 좀 더 깨끗한 코드를 체크인

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

한 동작을 하는 기능을 구현하는 방법은 수도 없이 많다. 마음이 가는대로 두서없이 구현하는 것과 어떻게 하면 깨끗하고 아름다운 코드를 작성할지 고민하면서 코딩을 하는 것은 천지차이이다. 빨리빨리 구현하기 위해서 계획없이 작성하는 것 보다는 시간과 노력이 더 들어도 아름답게 코드를 작성하는 것이 좋다는 것을 다시 한번 느낄 수 있었다.
또한, 옛날부터 깨끗한 코드를 작성하기 위해서 많은 노력과 시행착오가 있었다는 것을 느낄 수 있는 내용이었다. 앞으로 프로그래밍 할 때 항상 생각하면서 코드를 작성하도록 노력해야겠다.


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

  • 르블랑의 법칙(leblanc's Law) : 나중은 결코 오지 않는다.
  • 테스트 주도 개발 (TDD:Test Driven Development) : 매우 짧은 개발 사이클을 반복하며 요구사항을 검증하는 테스트 케이스를 작성하여 테스트를 통과하는 최소한의 코드를 생성한 후 코드를 표준에 맞도록 리팩토링하는 개발방법

댓글남기기