Pragmatic#06 코딩하는 동안 해야 할 일들

우리는 우연에 맡기는 프로그래밍, 곧 행운과 어쩌다 오는 성공에 의존하는 프로그래밍을 하지 말아야 한다. 대신 의도적으로 프로그래밍(programming deliberately)해야 한다.

2022-05-27에 씀

31. 우연에 맡기는 프로그래밍

우리는 우연에 맡기는 프로그래밍, 곧 행운과 어쩌다 오는 성공에 의존하는 프로그래밍을 하지 말아야 한다. 대신 의도적으로 프로그래밍(programming deliberately)해야 한다. p273

왜 코드가 잘 돌아가지 않게 되었는지 모르는 까닭은, 코드가 처음부터 왜 잘 돌아가는지도 몰랐기 때문이다. p274

우연적 구현은 단순히 코드가 지금 작성된 방식이 그렇기 때문에 생기는 일들을 가리킨다. 결국에는 문서화되지 않은 에러나 입력값이 특정한 조건에서만 돌아가는 경우와 마주치게 된다. p274

지금 당장 작동하는 것이 사실은 제대로 동작하는 것이 아니라 우연에 의해 동작하는 것일 수도 있다. 우연을 만들기 위해 여러 가지 시도를 한 후 그 시도의 흔적을 남겨둘 수도 있는데, 이런 시도의 흔적들은 결국 코드를 느리게 만들거나 추후 발생할 버그의 원인이 된다. 당장 잘 돌아가는 것 같아 보이는 코드가 모두 제대로 된 코드는 아니다.

우연에 의존하지 않기 위해서, 모듈화나 문서화를 잘 하는 것이 도움이 된다. 다른 사람이 짠 함수를 호출할 때는 문서화된 동작에만 의존한다. 의존할 수 없는 경우가 생긴다면, 이를 추측한 내용을 문서로 남겨라.

의도적으로 프로그래밍하기

32. 알고리즘의 속도

가장 빠른 알고리즘이 언제나 가장 좋은 알고리즘인 것은 아니다. 입력 데이터의 개수가 몇 개인지에 따라 최적화가 의미없어질 수도 있다. 알고리즘을 개선하기 전에 그 알고리즘이 정말로 병목인지를 생각해 봐야 한다.

33. 리팩터링

코딩은 건물을 짓는 일보다는 정원 일을 하는 것과 더 비슷하다. 처음에 심은 식물이 나중에는 죽어서 치워 줘야 할 수도 있고 나무의 가지를 쳐야 할 수도 있다. 코딩에서 이런 작업을 리팩터링이라고 부른다. 코드를 다시 작성하고, 다시 작업하고, 다시 설계하는 작업이다.

아래 문제를 가진 코드는 리팩터링이 필요하다.

일찍 리팩터링하고, 자주 리팩터링하라. Tip47, p294

리팩터링할 것들의 명단을 만들고, 일정에 리팩터링 기간을 넣어 두어야 한다.

리팩터링은 다시 설계하는 것이다. 따라서 원래의 코드에서 오히려 버그를 만들 수도 있다. 아래를 명심해서 리팩터링을 진행하는 것이 좋다.

  1. 리팩터링을 할 때 새로운 기능을 넣어선 안된다.
  2. 리팩터링 전에 테스트를 작성해 두고, 가능한 자주 테스트를 돌려 본다.
  3. 단계를 작게 나누어 신중히 작업한다. 단계가 끝날 때마다 테스트를 돌린다.

35. 사악한 마법사

자신을 위해 만들어진 코드를 정말로 이해하지 못하는 한, 그는 자기 자신을 속이는 것이다. p314

프로필 사진

조예진

이전 포스트
Pragmatic#05 구부러지거나 부러지거나
다음 포스트
Pragmatic#07 프로젝트 전에