그동안 코딩을 하면서, 특히나 남이 일부 작성한 코드를 수정하면서 기존에 잘못짠 코드 때문에 내 인생을 소비한 시간이 정말 길다.
코딩을 잘못 하는 사람들에게 내가 화를 내는 이유는 나와 내 주변 사람들의 시간을 갉아 먹기 때문이다.
이 글을 읽고 있는 누군가도 지금 그런 코드를 만들고 있고 나도 그럴수 있다. 유명한 책들은 다루지 않는 너무 수준낮은 이런 유형을 살펴 보면 누구나 그럴 수 있다는걸 알 있다.
- 엑스트라의 심리 묘사가 주인공 보다 장황한 드라마 같은 코드
- 상황을 ‘이해하려고 하지 않고’ 작성한 코드
- 복잡함을 추상화 하지 않은 코드
- 낮은 지식 수준으로 작성한 코드
사실 4번은 코딩의 문제가 아니다. 이 부분이 개발자의 실력을 드려내는 거라고 나는 생각한다.
이번에는 1번 경우를 설명 하려고 한다. 문제가 왜 문제인지 모르는 사람을 위해서 드라마의 사례를 들었다. 이런 드라마는 생각만해도 재미 없다. 그런데 이런 코드는 정말 욕이 절로 나오는게 사실 장애가 생겨서 긴급하게 봐야 하는 경우에 이런 코드가 걸림 돌이 되기 때문이다.
예전에 신승훈이 이문세 콘서트에서 코러스를 하는데 너무 튀어서 짤린일화가 있다. http://news.chosun.com/site/data/html_dir/2008/08/02/2008080200378.html 그런데 그 신성훈은 자기 콘서트에서 메인을 강탈해서 부르는 성시경이 얌체같은가 보다. http://www.starseoultv.com/news/articleView.html?idxno=357171
나의 사례는 이렇다..
사례1) 문자열 자르는 함수 예전에 종종 서버에서 이벤트가 처리 되지 않는 경우가 있는것 같았다. 문제를 확인해야 하는데 문제를 확인 하기 위한 로그를 추가 할 수가 없었다… 문제른 문자열에서 특수문자와 해당 프로젝트에서 사용 할 수 없는 문자들을 특정한 형식으로 변환한 다음에 자르는데, 이 변환 과정에서 문자열의 길이가 다양하게 변해서 복잡한 코드였다. 그런데 진짜로 코드를 더 복잡하게 만드는 부분은 이 부분이 아닌 이 라이브러리에 들어가 있던 자체 문자 이모티콘 기능이었다, (전화) => ☎ , www.naver.com => www.naver.com 이런식이 었고 우리가 필요한 기능은 전체 코드에서 20분의 1도 안되는데, 코드가 거미줄 처럼 엮여 있어서 풀어내기가 감당이 안됐다.
다른 프로젝트에서 만든 코드를 그대로 사용 해서 문제가 된건데, 나를 포함해서 5명의 사람을 힘들게 만들었다.
간략히 도식화 해보면 위와 같다. 왼쪽과 같은 구조가 있을 것이라 예상을 하고 각 단계별로 비슷한 코드량과 복잡도가 있을꺼라 생각했는데, 쓸데 없이 특수 문자 치환 쪽에 엄청난 양의 코드가 들어가 있고 해당 코드에서 조금씩 다른 영역을 건드는거다. 심지어 만든 사람은 없고 장애가 난 상황이라서 각각의 코드가 어떤 역활을 하는지 꼼꼼히 읽고 테스트를 해야 한다.
이렇게 생각 보다 한쪽의 양이 많은 코드는 계속 깊이 파고 내려가면서 전체 플로우를 잊어 버리기 쉽다. 아무리 생각 없이 코드를 보면 개발자도 사람인지라 눈에 보이는 많은 양의 코드가 많은 일을 한다고 쉽게 착각할 수 있다. 하지만 실제로 모두 쓰이는 코드라고 하더라도 해당 시점에 꼭 필요한 코드인지 알수 없고 알기 위해서 매우 깊이 까지 코드를 읽어야 한다.
해법은? 결국 해당 코드를 끝까지 다 분석해서 필요한 표현 불가능 문자를 처리 기능만 하는 코드를 만들었다. 이 작업만 혼자서 약 2주 정도 걸렸던 것 같다.
생각났다. 어느 50부작 인기 시리즈의 새로운 후속편에서는 약 40편까지 새로운 주인공이 성장 과정에서 고뇌 하고 사고만 치다가 결국 중요한 처리는 전작의 주인공이 다 처리하는데, 새 주인공이 인기를 못끌어서인지 엔딩에서 구 주인공이 모든걸 끝내 버리고 다시 주인공을 차지한다…
통신이나 쓰레드관련 코드에서 몇줄 안되는 코드, 왜 해당 위치에 있는지 모르겠는 , 뒷줄로 가도 되는 별로 안 중요 해보이는 코드가 정말 해당 프로젝트의 핵심인 경우가 있다. OS가 정말 어렵고 복잡한 기능을 처리해주고 있어서 그렇다. OS 가 있는 이유가 우리가 정말 중요한 작업에 집중하게 하기 위해서 이다. 이러한 OS 를 알아야 하는 코드를 작성하는 일은 어렵지만 실제 OS가 해주는 일을 다 파악하는 것에 비하면 새발의 피다. C언어 프로그래밍 할때 어렵다고 하는 포인터만 해도 간접 주소 연산이 최신 컴퓨터에서는 얼마나 복잡한지 알면 기겁할 수 있다. 하지만 우리가 작성한 쓰레기들은 그런 가치 없는 엑스트라일 뿐이다.