짧게

프로그램의 복잡도를 측정하는 방법은 여러가지가 있는데, 같은 언어로 쓰인 같은 동작을 하는 프로그램이라면 코드 길이와 복잡도는 아주 높은 확률로 정비례한다. 처음부터 최소한의 코드만 사용해서 프로그램을 만들 수 있다면 좋겠지만 인생은 실전이라 그렇게 되는 경우는 거의 없다. 프로그래밍은 아주 넓은 탐색 공간에서 길을 찾는 작업이고, 탐색 공간도 아주 제멋대로 생겨서 지역 최적해를 밟으며 쉬엄쉬엄 갈 수밖에 없다. 그래도 전역 최적점에는 아마 절대 도달하지 못할 것이다.

동작을 유지하며 코드의 물리적인 크기를 줄이면 복잡도가 줄어든다. 동작이 변하지 않고 짧은 코드가 나오려면 중복을 제거하고 높은 추상화 수준의 코드를 사용해야 한다.

중복 제거

  • 일단 중복 코드를 작성한다.
  • 비슷한 코드를 여러번 작성했다면 그 중복을 없앨 수 있는 도구를 찾거나 만든다.
  • Profit!

높은 추상화 수준

  • 혹시 중복을 제거했다면 필연적으로 추상화 블럭이 생긴 것

  • 코드의 블럭을 하나의 개념으로 표현할 수 있는가

    • 사용 라이브러리에서나 언어에서 사용하는 추상화 도구/개념을 확인

    • 일반적으로 통용되는 추상화, 디자인 패턴 등을 인지

      ex)

      s = 0
      for i in range(100):
        s = s + i
      

      ->

      s = sum(range(100))
      

2.b.i. 사용 라이브러리 확인 에 약한 사람이 많은데나말이야 나, 라이브러리의 설명서나 레퍼런스를 읽을 때 이런게 있구나 가 아니라 이걸로 어떻게 중복 코드를 잡을까 혹은 이걸로 코드 길이를 줄일 수 있을까 라는데 집중해서 읽으면 도움이 된다. 수능 지문 읽기 전에 문제를 읽으면 더 효과적인 것과 비슷하다.

요새 봐야 할게 많아서 문서를 대충대충 읽고 넘겼더니 라이브러리의 중요한 추상화 도구들을 빠뜨리고 넘어가서 쓸데없는 삽질을 한 경우가 많다. … 따지고 보면 1번, 일단 중복 코드를 작성한다 를 잘 한거라고 볼 수도 …

내가 프로그래밍을 하며 가장 기분 좋았던 순간은 버그가 잡히거나 컴파일이 되거나, 한번에 잘 돌 때가 아니다. 코드가 한번에 대폭 짧아졌을때다. 기술부채를 털어내면 자유인에 조금 가까워진듯한 기분착각이다.


코드 복잡도를 측정하는 프로그램도 있다. 실제로 LOC(Lines Of Code)는 중요한 메트릭이다.


파일을 잘못된 경로에 떨궈놨더니 파이프라인을 안탔었다. ㅠㅜ

Comments