기억하고 싶은 내용
- 프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다. 코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다.
- 코드 형식은 의사소통의 일환이다. 의사소통은 전문 개발자의 일차적인 의무다.
- 오늘 구현한 기능이 다음 버전에서 바뀔 확률은 아주 높다. 그런데 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다. 오랜 시간이 지나 원래 코드의 흔적을 더 이상 찾아보기 어려울 정도로 코드가 바뀌어도 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다.
- 소스 파일도 신문기사와 비슷하게 작성한다. 이름은 간단하면서도 설명이 가능하게 짓는다. ... 소스 파일 첫부분은 코차원 개념과 알고리즘을 설명한다. 아래로 내려갈수록 의도를 세세하게 묘사한다. 마지막에는 가장 저차원 함수와 세부 내역이 나온다.
- 일련의 행 묶음은 완결된 생각 하나를 표현한다. 생각 사이에는 빈 행을 넣어 분리해야 마땅한다. ... 빈 행은 새로운 개념을 시작한다는 시각적 단서다.
- 줄바꿈이 개념을 분리한다면 세로 밀집도는 연관성을 의미한다. 즉, 서로 밀접한 코드 행은 세로로 가까이 놓여야 한다는 뜻이다.
- 서로 밀접한 개념은 세로로 가까이 둬야 한다. ... 같은 파일에 속할 정도로 밀접한 두 개념은 세로 거리로 연관성을 표현한다. 여기서 연관성이란 한 개념을 이해하는 데 다른 개념이 중요한 정도다.
- 변수는 사용하는 위치에 최대한 가까이 선언한다. 우리가 만든 함수는 매우 짧으므로 지역 변수는 각 함수 맨 처음에 선언한다.
- 한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치한다. 또한 가능하다면 호출하는 함수를 호출되는 함수보다 먼저 배치한다. 그러면 프로그램이 자연스럽게 읽힌다.
- 일반적으로 함수 호출 종속성을 아래 방향으로 유지한다. 다시 말해, 호출되는 함수를 호출하는 함수보다 나중에 배치한다. 그러면 소스 코드 모듈이 고차원에서 저차원으로 자연스럽게 내려간다.
- 가로로는 공백을 사용해 밀접한 개념과 느슨한 개념을 표현한다.
- 범위(scope)로 이뤄진 계층을 표현하기 위해 우리는 코드를 들여쓴다. ... 왼쪽으로 코드를 맞춰 코드가 속하는 범위를 시각적으로 표현한다.
- 세미콜론(;)은 새 행에다 제대로 들여써서 넣어준다. 그렇게 하지 않으면 눈에 띄지 않는다.
- 팀은 한 가지 규칙에 합의해야 한다. 그리고 모든 팀원은 그 규칙을 따라야 한다. ... 좋은 소프트웨어 시스템은 읽기 쉬운 문서로 이뤄진다는 사실을 기억하기 발나다. 스타일은 일관적이고 매끄러워야 한다. 한 소스 파일에서 봤던 형식이 다른 소스 파일에도 쓰이리라는 신뢰감을 독자에게 줘야 한다.
소감
- 코드 리뷰를 받을 때마다, 아직 linter warning이 남아있으니 고치라는 잔소리를 많이 들었었다. 그래서, merge request에 대한 리뷰를 요청하기 전에 항상 linter fix 명령어를 돌리는 습관이 생겼다. 잘 들여놓은 습관인 것 같다.
- 일관된 룰을 통하여 형태가 각잡힌 코드는 그렇게 이뻐보일 수가 없다. 세로 밀집도, 줄바꿈과 공백, 들여쓰기 등 평소에도 중요하다고 생각했고 잘 지키려고 노력하던 부분을 이 분야의 권위자가 일목요연하게 정리해놓은 글을 읽으니 아주 좋았다. 머릿속으로만 샤이하게 되뇌이던 내 주장에 든든한 지지자가 생긴 느낌이다.
궁금한 점
- 여러가지 정형화된 linting 스타일이 많이 있을 텐데, 많은 회사에서 사용되는 스타일은 어떤 것들이 있을까?