노개북챌린지 Day5 - 실용주의 프로그래머 3장. 기본적인 도구

Hyeonii·2022년 3월 23일
0

📅 2022.03.23
📖 범위: 3장. 기본적인 도구


기억하고 싶은 내용

도구는 재능을 증폭한다

디버깅은 여러 근거들을 수집하여 문제의 지점을 좁혀나가는 과정이다.


오늘의 내용 요약


일반 텍스트의 힘

  • 일반 텍스트란? 사람이 직접 읽고 이해할 수 있는 형태의 인쇄 가능한 텍스트다.

  • 일반 텍스트가 압축된 이진 포멧을 사용하는 것 보다 더 공간을 많이 차지하고 비싼 계산을 한다. 그럼에도 일반 텍스트의 사용을 권장하는 이유는?

    	호환성이 좋다.
    	세월이 흘러 구식 언어가 되어도 다른 이들이 코드를 알아보기 쉽다.
    	그러므로 여러 이질적인 환경을 하나로 이어주는 표준이 된다.

조개놀이

  • 셸의 파워는 강력하다. 제공되는 명령어를 조합하면 원하는 작업을 한 줄로 구현 가능하다.
  • GUI는 가독성은 좋지만 자유도가 떨어진다. WYSIWYG(What you see id what you get.)

파워에디팅

  • 하나의 에디터를 잘 사용하라
  • 하나의 키라도 줄여보려고 노력해라
  • 에디터가 사용하는 언어를 배워보라, 에디터에서 사용 가능한 커스텀 매크로를 만들 수 있다.

소스 코드 관리

  • SCCS (source code control system) 장점 및 기능
    • 소스코드 관리 시스템은 선택이 아닌 필수이다.
    • 코드의 변화 과정을 분석할 수 있다.
    • 작업물을 이전 상태로 되돌릴 수 있다.
    • 릴리스를 구분 가능하게 만들 수 있다.

디버깅

  • 버그를 회피하거나 두려워하지 말자, 버그를 두려워하면 자기 자신을 속이게 된다.
  • 정확한 버그 보고는 중요하다.
  • 버그를 고치는 최선의 첫 단계는 버그 재현하는 것이다.
    • 버그를 재현할 때는 여러 단계를 거쳐야 하는 것 보다 단일 명령으로 바로 재현 할 수 있도록 단순화 하여 떼어놓는 것 이 도움이 된다.
  • 데이터를 시각화하라 (DDD 디버거 참고)
  • 오염된 변수 - 주변에서 오염 근원지를 파악하라
  • 고무오리 - 사람을 세워두고 설명하라, 말로 설명 하다보면 생각이 정리된다.
  • 트레이싱 구문 - 화면 혹은 파일에 출력하는 작은 진단용 구문. 규칙적이고 일관적인 형식으로 작성하는 것이 중요하다.

텍스트 처리

  • 텍스트 처리 언어를 하나 익혀라.
  • 텍스트 처리 언어는 코드 생성기를 간단하게 작성할 수 있게 해준다.

코드 생성기 (내 손목은 소중하니까...)

  • 수동적 코드 생성기
    결과를 내기 위해 한 번만 실행. 코드 생성기는 결과물과 독립적
    타이핑을 줄여준다. 주로 몇개의 입력에서 주어진 출력을 생성한다.
    ex. 새 소스파일 생성, 일회용 변환 수행

  • 능동적 코드 생성기
    DRY 원칙을 따르고 싶다면 필수 요소!
    생성이 필요할 때마다 작동. 일회용이어서 언제든지 코드 생성기가 다시 만들어 낼 수 있다.
    ex.언어 형태 변환, 다회용

  • 필요에 따라서 코드생성기가 꼭 100% 정확할 필요는 없다. 완벽한 코드를 만드는 데에 드는 시간과 수동 작업의 양을 고려하여 선택한다.


떠오르는 생각


  • 만물의 영장인 인간 답게 도구를 사용해야겠다.

  • 쉘을 연마해서 피아노 연주하듯 사용해보자.
    현재 사용하는 z쉘의 명령어를 하루에 한 가지씩 알아가봐야겠다.

  • 만약에 자동완성 기능이 없었더라면? 무슨 맛으로 코딩을 했을까?
    에디터에 익스텐션이 없었더라면?
    git lens가 없었으면 난 내가 낳은 자식도 못 알아봤을 것이다.
    eslint, prettier, 구문 강조 기능이 없었더라면 내 시력은 진작 포기했다.


궁금하거나 더 알고싶은 내용


막판의 텍스트 처리, 코드 생성기에 대한 내용은 느낌은 알겠지만
어떤 식으로 적용해야 좋을지 뚜렷하게 떠오르지 않아서
차분하게 다시 읽어봐야 겠다.

용어

개발 관련 부분으로 들어가니 모르는 용어나 개념의 양이 크게 늘어났다.
모르는 용어들은 여기에 적어두고, 설명이 없는 용어들은 앞으로도 지속적으로 추가할 것이다.

  • IDE - 통합 개발 환경(Integrated Development Environment, IDE)으로 아래의 요소를 사용하기 쉽게 결합한 소프트웨어이다.

    • 소스 코드 편집기
    • 로컬 빌드 자동화
    • 디버거
  • YAML - YAML은 XML, C, 파이썬, 펄, RFC2822에서 정의된 e-mail 양식에서 개념을 얻어 만들어진 '사람이 쉽게 읽을 수 있는' 데이터 직렬화 양식이다.

  • json처럼 key-value의 값으로 되어있고 리스트를 -로 표시하는 등 보기에도 간결하고 깔끔한 형태이다.

    인프런-김태민님의 답변 참고


  • 유닉스 철학

  • 오늘 알게된 셸 명령어

    • diff - 두 개의 파일 간 차이에 대한 정보를 출력하는 파일 비교 유틸리티
    • sum - 더하기
  • 셸의 종류

    • z셸(zsh): 내가 터미널에서 가끔 업데이트 해주는 친구가 바로 너였구나
    • c셸:
    • 배시bash셸:
    • 콘Korn셸:
  • RCS, CVS, ..

  • DDD 디버거


오늘 읽은 다른사람의 TIL


wowyowowyo님의 TIL

책을 그대로 요약하기 보다 이해하기 쉬운 말로 변환하여 적어주셔서 도움이 되었습니다!

profile
까먹기 전에 적어두기

0개의 댓글