Coding

최완식·2023년 6월 13일
0

Clean Coder

목록 보기
4/14
post-thumbnail

코딩은 어렵다.

코딩

  • 오류를 느끼는 감각은 중요하다.
  • 이는 곧 빠른 피드백 루프를 통해 배움이 빨라짐을 의미한다.
  • 잘못된 것을 알아야 고칠 것 아닌가?
  • 이 장에서는 코드를 짤 때 행동과 기분, 태도에 대한 규칙과 원칙을 소개한다.
  • 저자는 이것들이 곧 본인의 자신감과 오류 감각의 토대를 이룬다고 말한다.

준비된 자세

코딩은 어려운 데다 사람을 지치게 하는 지적 활동이다. 여러 대립 요소를 한꺼번에 양립시켜 다뤄야 한다.

  1. 코드는 반드시 동작해야 한다.
    • 어떤 문제인가? 어떻게 풀어야 하는가? 확실히 이해해야 한다.
    • 해결 방법의 언어, 플랫폼, 아키텍쳐, 결점 등을 지속적으로 관리해야 한다.
  2. 코드는 "고객"이 제시한 문제를 반드시 풀어야 한다.
    • 고객과 협상하여 "진정한" 필요를 충족시킬 수 있도록 노력해야 한다.
  3. 코드는 기존 시스템에 잘 녹아들어야 한다.
    • 기존 시스템의 경직성, 취약함, 불투명도를 높이면 안된다.
    • SOLID를 지켜야 한다.
  4. 코드는 다른 프로그래머가 읽기 쉬워야 한다.
    • 주석을 잘 쓰라는게 아니다.
    • 의도가 드러나도록 잘 다듬어야 한다.
    • 가장 어렵다.
  • 주의력을 흐트러 트리는 일들이 세상에는 너무 많다.
  • 그리고 충분히 강하게 집중하지 못하면 잘못된 코드를 만들게 된다.
  • 지치거나 주의력이 흩어졌다면 코드를 만들지 마라.
  • 나의 해석
    • 주의력이 흩어지지 않는 환경자체를 계속해서 만들어야 한다.
    • 이건 다분 개발자에게만 적용되는 사항이 아니다.
    • 일상에서 다뤄야 하는 것들을 최대한 단순화하여 관리하고, (재정, 인간관계, 생활환경, 생활방식 등)
    • 불필요한 것들을 제거하고, 주의력을 흩어트리는 것들을 제거해야 한다.

새벽 3시에 짠 코드

  • 새벽 3시에 짠 코드가 점점 자라나 엄청난 부작용을 일으키는 짐 덩이가 된 사례를 소개한다.
  • 헌신과 프로다운 모습은 무턱대로 많이 일하는데가 아니라 원칙을 지키는 모습에서 나온다.
  • 충분히 자고 건강을 챙기고 건전한 생활습관으로 충실히 8시간을 일해라.

근심이 담긴 코드

  • 싸운뒤에 코드를 짠적이 있는가?
  • 이렇게 되면 백그라운드 스레드에서 이를 해결할 방법을 찾고 있다.
  • 즉, 근심이 있는 상태에서는 집중이 흐트러진다. 이부터 해결해야 한다.
  • 하지만 보통 그렇게 빨리 해결되지는 않는다. 회사도 기다려주지 않는다.
  • 결국 이 백그라운드 스레드를 끄는 법, 혹은 우선순위를 낮추는 방법을 익혀야 한다.
  • 저자는 아예 시간을 나눠, 해당 근심을 해결하는 시간을 따로 마련했다고 한다.
    • 나와 비슷하다.
  • 이상적으로는 개인 문제에 힘쓰는 일을 개인 시간에 해야 한다.
  • 하지만 그 근심이 잡아먹을 바에 해결하고 처리하는 것이 낫다.

몰입 영역

  • 몰입에 빠지는 동안 생산성이 높아진다고 생각하는가?
  • 하지만 아니다. 몰입에 빠지지 마라.
  • 오히려 이성적 판단이 흐려진 상태에 가깝다.
  • 차라리 저런 시점이 올경우 산책을 가던, 잠깐 쉬어라. 혹은 짝 프로그래밍을 해라.

음악

  • 음악을 들으면서 코딩하지 마라.
  • 음악은 정신이 필요로하는 자원을 소비한다.
  • 오히려 "몰입"에 빠지는데 도움을 주는 것이지 않을까 한다.
    • 나의 생각: 필요할 때가 있고 아닐 때가 있다.

외부 방해

  • 다른 사람이 질문하면 어떻게 반응하는가?
  • 자신이 곤란할 때 다른 이들이 해줬으면 하는 대로 곤란한 사람을 대하는가?
  • 무례한 반응은 "몰입"영역에 빠져있는 때 나온다.
  • 짝 프로그래밍으로 해결해라. 짝이 그 몰입을 유지하고 있을 것이다.
  • TDD를 해라. 실패한 테스트는 그 흐름을 유지해준다.
  • 하지만 그것보다 프로답게 예의 바르게 도와주어라.
  • 당신도 그러한 상황에 처할 수 있기에.

진퇴양난에 빠진 글쟁이 (Writer's Block)

  • 왜 갑자기 코드가 안나올까?
  • 주요 원인은 수면이었다고 한다.
  • 또는 걱정, 불안, 우울이 될 수 있겠다.
  • 해결책은 짝 프로그래밍이다.
    • 동의한다. 함께했을 때는 일이 아니고 놀이로 여겨지는 경우가 있다.
    • 인간다움을 느낄 수 있다는 측면에서도 좋았다.
  • 반대도 필요하다. 어쩔 때는 혼자만의 시간을 가져야하는 경우도 있다.

창의적인 입력

창의적인 출력은 창의적인 입력에 의존한다.

  • 책을 읽어라.
  • 소프트웨어, 정치, 생물, 천문, 물리, 화학, 수학
  • 그 중 가장 좋았던 것은 공상과학 소설이었다.
  • 일상의 문제에서 벗어나 도전적이고 창의적인 아이디어에 작극을 받으면 나 역시 창조해야겠다는 마음이 생긴다.

디버깅

  • 디버깅 시간도 역시 코딩시간이다.
  • 이는 곧 디버깅 시간을 줄이거나 피할 수 있다면 매우 좋음을 의미한다.
  • TDD가 이를 줄일 수 있다.
  • 디버깅 시간을 0에 가깝게 줄이도록 노력해라.

속도 조절

  • 소프트웨어 개발은 마라톤이다.
  • 처음부터 달린다고 이기는게 아니다.

언제 걸어나가야 할지 알기

  • 풀고 있는 문제를 다 풀기 전에는 집에 안간다?
  • 아니다. 가도 된다. 오히려 가야한다.
  • 창의력과 총명함은 지속되지 않고 스쳐지나가는 정신의 상태다.
  • 곤경에 빠리저가 피곤하면 오히려 잠깐 자리를 떠나라.
  • 잠재의식이 이 문제를 깨도록 두자.
    • 차안에서 많은 문제가 해결된다.
    • 혹은 샤워할 때도 많은 문제를 해결했다.

일정을 못 지키다.

  • 언젠가는 마감을 못 지키는 날이 온다.
  • 이를 관리하는 요령은 이른 감지투명성이다.
    • 즉, 못할 것 같으면 자존심부리지 말고 못할 것 같다고 솔직하게 말하자.
    • 솔직함이 가장 큰 미덕이다.

희망

  • 희망은 프로젝트 살해자다.
  • 일정을 파괴하고 자신의 평판을 망가뜨린다.

질주

  • "무슨 일이든 해보라"
  • 그럼에도 추정을 고수해야 한다.
  • 이걸 받아들인다면 정확성이 떨어지는 추정을 받아들이는것이 된다.
  • 최선의 선택은 범위를 줄이는 것이다.
  • 마감일을 지키려 노력해보겠다고 동의하는 개발자는 형편없다. 두려워해야할 존재다.
  • 정직하게 대답하여 희망을 갖지 못하게 해라.

초과 근무

  • "하루에 두시간씩 초과 근무하자. / 주말 근무는 어때? 힘내자"
  • 20% 더 일한다고 20% 작업이 더 완료되지 않는다.
  • 3주 이상으로 가면 확실히 실패한다.
  • 특히 초과근무를 했는데도 실패했을 때 대응 계획이 없는 경우 무턱대로 받아들이면 안된다.
  • 순진하게 살지말자.

가짜 출시

  • "끝내지 못할 것 같다. 그래도 출시하자."
  • 차라리 이건 낫다. "완료"라는 단어를 재정의해서 완료했다라고 말하는 경우도 있다.
    • 저장소에 코드를 넣는 것이 "완료"? (컴파일도 안되는데)

완료 정의

  • 인수 테스트를 만들고 이를 테스트하기

도움

  • 프로그래밍은 어렵다.
  • 젊으면 이를 이해하기 어려울 것이다. if문으로 점철되어 있을 것이니.
  • 하지만 경험을 쌓다보면, 그 if문 덩어리들을 어떻게 결합하는게 중요하다는 사실을 깨닫는다.
  • 더 작고 알기 쉬운 단위로 쪼개야 한다.
  • 그리고 그 쪼갠 단위는 가능한 한 간섭이 적도록 만들어야 한다. 이게 어렵다.

다른 사람 돕기

  • 그렇게 어렵기 때문에, 서로를 도울 준비를 하는 것은 의무다.
  • 틀어박히거나, 질문을 거부하는 일을 프로가 갖출 윤리 위반이다.
  • 명예를 걸고 어떤 때든 도와줘야 한다.
  • 당연히 혼자만의 시간도 필요하다. 다만, 시간을 정해두고 이 시간에는 방해받고 싶지 않다고 말하는 것이 좋다.
  • 별것 아니지만, 자신의 도움이 남에게 큰 영향을 끼친다는 것을 이해하자.
  • 내 도움이 직접적인 것이 아니고, 나의 시선이, 시각의 신선함이 그의 생각의 기폭제로 작용하는 것이다.
  • 그리고 그 과정에서 나 역시 준 것보다 더 많은 것을 배우게 될 것이다.

도움 받기

  • 나를 누군가가 도와준다면 감사해야 한다.
  • 기꺼이 도움을 받아라.
  • 영역을 지키는 것과 같은 원시적 행동은 하지 말자.
  • 도움을 받을 수 있음에도 계속 막힌 상태를 유지하는 것은 프로답지 않다.

멘토링

  • 경험이 적은 프로그래머를 훈련시키는 것은 선배의 의무다.
  • 멘토링이 가장 빠르게 제대로 일할 수 있게 만드는 방법이다.
  • 반대로 짬이 없다면 멘토링을 구하는게 의무다.

Reference

profile
Goal, Plan, Execute.

0개의 댓글