같은 실수를 반복한다. 하지만 그로써 점점 나아질 것이니... (의외의 낙관론적 발언)

7장. 똥통에서 뒹굴기

잘못되었음을 알기에 그 누구도 건드리려 하지 않았을 것이다.

나아지게 할 방법을 찾아야한다. 고치지 않으면 그 코드를 작성한 실력 없다고 생각하는 개발자와 당신은 똑같은 사람이다. 다만, 진짜로 끔찍한지 다시 한 번 보자. 구렁텅이로 끌고 들어가는 코드와 익숙하지 않은 코드 는 다르다.

어떤 코드를 건드리든 이전보다 나아지도록 하라.

일전에 '보이스카우트 규칙'에 대해서 적었다. (링크) 예를 들어보겠다. 자연수 숫자를 입력했을 때, 1부터 해당 숫자까지 제곱의 합을 구현해보자.

def sum_of_squares(num):
    result = 0
    for i in range(num):
       result += (i + 1) ** 2
    return result

이런 코드는 대학교 1학년 때나 짜는 것이다. 존나 멋지게 람다식으로 짜보자.

def sum_of_squares(num):
    return sum(map(lambda x: (x + 1) ** 2, range(num)))

완벽한 코드인 것 같다! 하지만 아직 모자르다. num 변수만 보고 타입을 추론할 수는 사람도 있지만, 아닌 사람들도 있다. 확실히 컴파일러는 못한다.(파이썬의 타입은 명시는 정말 사람 읽기 용인거 다들 알거라 믿는다.) 친절하게 타입도 적어주자.

def sum_of_squares(num: int) -> int:
    return sum(map(lambda x: (x + 1) ** 2, range(num)))

좋다. 완벽하다. 너무 멋지다! 이제 다 끝났다!

아니다. 사실 처음의 for loop와 멋져보이는 람다식은 굉장히 비효율적이다. 우린 사실 이에 대한 가장 빠르고 쉬운 방법을 고등학교 2학년 수학시간에(제가 배울 때는...) 배웠다. 시그마 공식이라고....

def sum_of_squares(num: int) -> int:
    return int(num * (num + 1) * (num * 2 + 1) / 6)

지금까지 작성한 코드들 중에 가장 효율적이고 이해하기 쉽다! 람다식도 몰라도 할수 있다!!!... 좌절스러울 수 있지만, 낙담하지 않아도 된다. 처음부터 완벽하게 효율적으로 고칠수 없다. 하지만 보이스카우트 규칙을 따라 차근히 고치다보면 계속 더 나아질 것이다. 주의깊게, 천천히 하자. 급하면 체한다. 처음부터 완벽하면 신이다. 사람이 아니다.

똥 덩어리에 적절한 구조와 청결함을 불어넣는 작업은 꽤 보람이 있다.

개인적으로 남들이 알아주지 않더라도 가장 보람찬 작업이다. 개발자에게 결벽증은 꽤나 괜찮은 컴플렉스이다. 하다가 망해도 괜찮다. 우리에겐 git이 있지 않은가! 싸그리 다 복구할 수 있다. 쫄지말자.

8장. 오류 무시하지 않기

'더 늦기 전에' 오류 처리를 미루지 말라.

작년 중순부터 발생하던 에러가 있었다. 올해 초에 고칠까 말까하다가 신규 프로젝트 적용하면 없어진다 해서 수정하지 않았다. 그러고 자세히 파보지도 않았다. 그 신규 프로젝트가 적용되었는지 안되었는지는 노코멘트 하겠다. (저는 아무말도 하지 않았습니다... 읍읍!!!!)

실수만 반복하는 것은 꽤나 우울한 일이다. 미루지 말자.

사용자는 사용 중에 발생하는 오류에 대해 알아야 한다.

안그러면 개발자는 디버깅하느라 더 힘들것이다. 버그가 아닌척 가리지 말자.

profile
집사없는 개발 고양이

0개의 댓글