스타트업에서 근무하면서 빠르게 아웃풋을 내야하는 환경에 일하다 보면 코드를 작성하는데 생각보다 손이 먼저 나가게 된다. 안된다는 것을 알면서도 습관적으로 손이 자꾸 먼저 나가게 된다. 결국 개발을 마치고 나중에 보게 된다면 나는 "왜 이렇게 짰을까...." 라고 후회를 하고 쌓인 부채로 인해 업보가 돌아오게 된다. 하드코딩으로 인한 생산성 저하는 생산성이 중요시하는 개발자에겐 치명적으로 다가오게 된다. 물론 부채를 포기하고 난 몰라하고 퇴사를 할 수 도 있다.
그렇게 무책임하게 떠나고 계속 전전하고 후퇴하게 된다면 연차는 계속 쌓이지만 실력은 주니어 수준에 머무르게 될 것이다. 결국 기업은 그런 개발자를 채용하지 않을 것이고 개발자로서의 가치는 점점 떨어지는 것이다. 나는 실제로 첫직장을 SI업체를 다니면서 한 파일에 코드가 1000줄이 넘어가는 파일을 보았고 그 코드는 얽히고 얽혀서 하나만 블럭을 빼도 위태 위태한 상태여서 그렇게 두었다는 사수말을 듣고 충격을 받았다. 말그대로 유지보수가 불가능한 형태가 되는 것이다.
클린 코드, TDD, 디자인패턴 등 이러한 이론들은 우리가 겪는 이러한 문제점을 막아주고 소프트웨어의 가치를 더 높여주고 같은 코스트를 투자해도 더 많고 안정적인 아웃풋을 내게 된다. 그렇기에 우리는 이러한 디자인 패턴과 이론에 대해 몸에 익히고 습관처럼 할 수 있도록 연마해야한다.
클린 코드를 하면서 가져야할 태도
이책은 우리의 정곡을 찌르는 말들이 가득하다. 우리는 나쁜 코드를 작성하는 것에 대해 합리화를 한다.
일정이 촉박한데 어떻게 코드까지 신경써요.
고객과 관리자가 계속 보채는데 어떻게 합니까?
쓸모없는 마케팅 부서가 일을 크게 벌려놔서 그렇다.
기술 스택이 너무 노후해서 어쩔 수 없었다.
실제로 책에 있는 내용입니다. 오해 마시길
하지만 이러한 잘못은 전적으로 우리 프로그래머에게 있다. 전문가답지 못한 행동을 했기 때문이다. 우리는 왜 어째서 우리 책임이냐? 라고 되물을 수 있다. 하지만 이구절이 정곡을 찌르다 못해 비수를 꽂았다.
관리자는 일정을 지키고 요구사항을 강력하게 요구하는 것은 그것이 그들의 책임이기 때문이다.
마찬가지로 우리 프로그래머의 책임은 좋은 코드를 작성하고
프로젝트를 성공적으로 마치는 것이 우리의 책임이다.
가슴이 아리다... 반박할 수 없다. 의사가 환자의 말을 듣고 자신의 소견을 철회하고 사고가 생기게 된다면 그것은 누구의 책임인가? 그렇다 의사의 책임이다. 우리는 이처럼 일정에 차질이 생기고 지장을 주더라도 좋은 소프트웨어를 만드는 것이 우리의 사명인 것이다.
클린코드를 작성하는 방법
소프트웨어에 정답이 없다는 것은 항상 듣던 말이다. 그럼 클린코드도 이에 해당하는가?
맞습니다. 클린코드도 정답이 없다. 흔히들 코드를 그림, 서사시에 비교를 한다. 그렇기에 우리는 이러한 코드 감각을 익혀야한다고 한다. 나쁜 코드와 좋은 코드를 구분하는 것을 넘어서 나쁜 코드를 좋은 코드로 바꿀 수 있는 감각을 길러야한다고 한다.
유명 개발자들이 생각하는 클린코드란?
비야네 스트롭스트룹(c++ 창시자)
- 우아하고 효율적인 코드
- 논리가 간단한 코드(간단해야 버그가 숨어들지 못한다.)
- 의존성을 최대한 줄인 코드.
- 오류가 철저히 처리된 코드.
- 유혹에 빠지지 않는 코드(최적화나 성능개선이라는 명목으로 코드를 망치려는 유혹)
- 한가지 역활을 하는 코드
그래디 부치
- 잘 쓴 구절 처럼 읽히는 코드
- 절대 설계자의 의도를 숨기지 않는 코드
- 명쾌한 추상화와 단순한 제어문으로 가득한 코드
빅 데이브 토마스
- 작성자가 아닌 사람도 읽기 쉬운 코드
- 단위 테스트 케이스와 인수 테스트 케이스가 존재하는 코드
- 의미 있는 이름이 붙은 코드
- 하나의 목적을 가진 코드
- 의존성을 최소로 하고 명확하게
마이클 페더스
- 클린 코드는 누군가 주의 깊게 짰다는 느낌을 준다.
- 고치려고 해봐도 고칠게 없다.
- 고칠게 없어서 제자리로 오게되는 코드
론제프리스
- 모든 테스트를 통과한다.
- 중복이 없다.
- 시스템 내 모든 설계 아이디어가 표현되어 있다.
- 클래스, 메서드, 함수 등을 최대한 줄인다.
워드 커닝햄
- 코드를 읽으면서 짐작했던 기능을 루틴대로 수행하는 코드
- 코드가 문제를 풀기 위한 언어 처럼 작성되어 있다면 그코드는 아름다운 코드라고 해도 무방하다.
'도서' 카테고리의 다른 글
클린코드 (함수) (0) | 2022.07.04 |
---|---|
클린 코드 (의미 있는 이름) (0) | 2022.06.26 |
테스트 주도 개발 패턴 (2) (0) | 2022.05.29 |
테스트 주도 개발 패턴 (0) | 2022.05.15 |
TDD 테스트 주도 개발 1부 후기 (0) | 2022.04.17 |