쳐맞기 전까지는.

하지만 이를 딛고 일어나야 한다. 4개월 만에 글을 작성하는 것처럼... 😂

14장. 소프트웨어 개발이란

일부 프로그램은 우아하고, 어떤 것은 절묘하며, 어떤 것은 빛이 난다. 나는 웅장한 프로그램, 고귀한 프로그램, 정말 멋진 프로그램을 작성하는 것이 가능하다고 주장한다!

The Art of Computer Programming의 저자 도널드 커누스의 말이다. 예술의 경지를 목표로 삼아 좋은 프로그램을 만드려 노력하여야 한다. 물론 그 과정에서 수도 없이 쳐맞겠지만... 쳐맞음이 바로 좋은 기술에 대한 시선과 균형을 만들어줄 것이다.

지적인 바보는 일을 더 크고 복잡하며 폭력적으로 만들 수 있다. 그 반대 방향으로 일을 진행하기 위해서는 천재의 손길이 필요하다. 더불어 많은 용기도 필요하다.

아인슈타인의 말이다. 힘든 일이지만 용기를 가져야한다. 잘못된 길을 가고 있는 프로그램에 대해서 비전을 제시하고 그 길로 이끌어 나가야한다. 설득하기 위해선 바보도 알아 들을 수 있을 때까지 증명해야하며, 검증되어야 한다. 체계적인 구조를 설계한 뒤에 문제를 해결해야한다. 작동하는 것처럼 보일 때까지 if else 를 쳐바르는 것이 아니다.

좋은 프로그래머는 겸손한 자세로 일한다.

지금까지 봐왔던 좋은 개발자 중에 공부를 멈춘 개발자는 단 한명도 보지 못했다. 항상 새로운 것을 먼저 알고 장점을 프로그램에 적용하고 팀에 전파하려 했다. 반대편의 사람들은 양상이 다양한데, 별로 이야기하고 싶지 않다. 배움을 멈추지 않아야하며, 모르는 것에 대해 받아들여야 한다. 일을 하고 있다해서 다 안다고 착각하지 말자. 다 안다고 생각하는 것은 모르는 것을 인지조차 못하고 있는 상태다.

소프트웨어 개발은 집안일이다.

멋지게 끝내주는 것을 만들고 있는 것처럼 보여도, 실제론 80% 이상이 집안일처럼 단조롭고 고된 일이라고 생각한다. 하지만 안할 수는 없는 일이다. 아무리 집이 좋아도 청소하지 않으면 더러운 것은 똑같다. 장도 봐야하고 요리도 해야하고 설거지도 해야한다. 코드도 똑같다. 요리를 하면 설거지를 해야하는 것처럼, 코드도 늘어나면 계속 데드코드는 삭제하고 리팩토링을 해야한다. 어느정도는 희생정신이 필요한 일이지만, 반드시 해야하는 일이다. 개인적으로 이 일을 멈추지 않고 하는 사람들을 존중한다.

15장. 규칙 가지고 놀기

못난 프로그래머들에게는 더 많은 규칙이 필요하다.

(슬라이드는 안뜨네요.... 링크를 타고 들어가주세요.) 넷플릭스의 문화 : 자유와 책임 (한국어 번역본) from Doran Hwang

위의 슬라이드 75페이지에 아주 인상적인 이야기가 있는데, "넷플릭스에는 복장에 관한 규칙이 없지만 아무도 발가벗고 출근하지 않는다." 라는 이야기가 나온다. 왜 상반되는 이야기를 적고있는지는 스스로 생각해보면 좋을 것 같다.

16장. 간결하게 하기

카펫 아래로 더러운 것들을 집어넣고 알아서 없어지길 바라는

겉보기에는 그럴듯 해보이지만 실제론 시궁창인 코드들을 많이 보았을 것이다. 이 비유가 딱이다. 이렇게 만들지 말자. 쓰레기가 가야할 곳은 쓰레기통이지 카펫 아래가 아니다.

간결하게 만든다는 것은 엄청나게 어려운 작업이다.

지나치게 단순하다는 건 모든 기능을 구현하지 않았을 가능성이 높다. 인풋 데이터에 대한 정제가 누락되었다거나, 예외처리가 안되어있을 가능성이 높다. 우리가 이야기하는 간결함은 모든 요구사항을 충족하며 정확하게 돌아가는 것이다. 그를 위해선 명확하게 설계해야하고 오용과 남용을 방지해야한다. 이를 위해선 객체지향 5원칙은 SOLID에 대해 공부하는 것을 추천한다.

코드를 작성하는 것은 고용 보장을 위해서가 아니다.

이를 원하시는 분들에게는 이 책을 추천드린다.

불필요한 가설을 세우지 않는다.

잘못된 가설은 잘못된 방향으로 코드를 작성하게 한다. 의도대로만 쓰일 거라 생각하지말고 제약조건을 명확하게 해야한다.

지나치게 조급한 최적화는 프로그래밍에서 모든 악의 근원이다.

코드 최적화 행위는 확실하고 읽기 쉬운 알고리즘 구현을 찾아낸 뒤에 잘게 썰어버리는 행위라고 책에서 말하고 있다. 복잡도를 높이는 것은 성능이 나오지 않는 경우 같이 필요할 때만 해야한다. 많은 프로그래머들이 자신이 느릴거라 생각하는 부분에서 성능 최적화를 하지만, 실제로 느린 이유는 다른 곳에 있는 경우가 많다고 한다. 그래서 우리는 New Relic 같은 APM을 잘 사용해야 한다.

profile
집사없는 개발 고양이

0개의 댓글