소스코드란 복잡해 질 수 밖에 없는 것인가?

나빌레라의 이미지

제 개발 경력이 짧아서 인지, 아니면 저의 개인적 고집이 세서인지는 모르겠지만,
저는 다른 사람이 작성한 소스코드를 읽다가

"아.. 복잡하다.." 라는 생각이 드는 순간, "왜 이렇게 밖에 작성하질 못한걸까.. 더 간단하고 이해하기 쉽게는 안되는 것일까.."라는 생각을 합니다.

이것은 소스코드의 문법의 복잡도를 말하는 것이 아니라,
자료구조와 자료구조 혹은 객체와 객체간의 연관관계가 복잡하게 느껴지거나,
이 시점에서 왜 이런 함수 혹은 객체를 불러들였는지 바로 이해가 되지 않을 때를 말합니다.

하지만, 다르게 생각해보면 열 명 이상의 사람들이 협업하여 작성하는 소스코드이고,
도메인 스팩이 수천페이지에 이르는 시스템을 동작시키기 위한 프로그램이니,
당연히 복잡할 수 밖에 없다는 생각도 듭니다.

코드를 이렇게 복잡하게 작성한 사람도 나름 뛰어난 기술과 실력을 갖춘 개발자인데,
그 사람이 이렇게 작성할 수 밖에 없었던 것은 그만한 이유가 있기 때문이었을 테지요.

다른 사람이 시간과 노력을 들여 작성한 결과물을 이해하고 받아들이려 노력하지는 못할 망정
"이렇게 밖에 할 수 없었나.."라는 비판적인 시각으로만 바라보려하는 저를 반성해 봅니다.

PS. 하지만... 정말... 리펙토링 혹은 아예 컴포넌트간 관계를 재정리 해서라도 바꾸고 싶긴 하네요! 아오! 빡쳐... (하지만, 머리 나쁜 저를 탓해야지요...ㅠㅠ)

towstock의 이미지

다 아시는 얘기지만, 혼자만 이해할 수 있는 코드를 방지 하기 위해서 여러가지 노력들을 합니다.

우선 해당 코드에 대한 설계 문서화를 하고 코드에 적절한 주석을 달죠.
또 공통된 코딩룰을 준수해야하며, 주기적인 코드 리뷰도 거칩니다.

전체적인 코드에 대한 리뷰는 거의 불가능 하기때문에 적어도 컴포넌트, 모듈 간 인터페이스에
관해서는 리뷰를 통해 이해관계자의 합의와 이해 아래 개발을 진행합니다.

이러한 노력들에도 불구하고 여전히 다른 사람의 코드를 이해하는 건 답답한 일입니다.
실제 개발자의 설명을 듣는 것이 가장 빠른 길이죠^^

한글로 글짓기를 할때도 개인마다 천차만별이듯이,
코딩에도 개인의 스타일이 많이 반영되니 어쩔 수 없는 일이겠죠...

어쨌든 모든 개발자들은 '이걸 누가 보겠어'라는 마음보다는
'신입사원이 볼지도 모르니까...'라는 마음으로 코딩을 해야할 것 같습니다.

madman93의 이미지

이 시점에서 왜 이런 함수 혹은 객체를 불러들였는지 바로 이해가 되지 않을 때를 말합니다.

이런 상황이 실제 코딩을 한 사람도 나중에 다시 보면 같은 생각을 할 것 같습니다.
결론은 주석으로서 왜 그렇게 처리 했나를 명시하는게 맞다 생각이 드는군요

암튼 다른 사람 소스 보는게 더 힘든건 사실 입니다. ^.^

---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------

winner의 이미지

아무도 제지하지 않으니까요. 또한 그 사람의 업무효율을 위해서 다른 사람에게 이해시키는 작업을 안 합니다. 그리고 문제 발생하면 작성자보다 못하다고 생각되는 사람이 덤탱이 쓰는 경우가 있죠.... -_-.
"아니~, 그걸 만든 사람도 있는데, 좀 고치기만 하면 되는데 그걸 못해?~" 라는 분위기가 연출될 때가 있을 때가 가장 문제죠.

empty2fill의 이미지

코드의 일부분만을 본다면 좋은 코드를 판단하는 기준이 프로그래머들 사이에서도 어느 정도 일치하리라 생각합니다.

하지만 코드 수준을 넘어서 아키텍처 관점에서 본다면 여기에는 사람의 혼,정신,스타일,철학,가치,개념 이런것들이 들어간다고 생각해요.

그래서 객체를 선택하고 정의하는 기준이 사람마다 다 다르기 때문이 아닐까요?

이 간극을 좁히기 위해서 패턴 (언어)가 존재하는게 아닐까 생각합니다.

——
———
Life is a tragedy when seen in close-up, but a comedy in long-shot. - Chaplin, Charlie -

semmal의 이미지

전 어떻게 짜야 소스 코드가 보기 쉬운지 대충은 안다고 생각합니다.

하지만 시간에 쫓기고, 잦은 설계 변경을 겪다보면, 어떻게 하더라도 쓰레기 코드로 변하더군요.

대부분의 경우, 시간과 설계 변경은 제가 컨트롤 할 수 없으므로, "일단 이렇게 짜고 다음에 리펙토링을 해야겠구나." 하고 맙니다.

하지만 그 프로젝트가 끝나면, 또다른 프로젝트를 해야하므로 "에이 담에 또 그 프로젝트 다시 하게 되면 그때 리펙토링하지." 합니다.

다시 시간이 지나, 그 프로젝트를 다시하게되더라도, 일정에 쫓기고, 방대한 양의 리펙토링 양에 질려서 "그냥 가능한데까지만 하자." 합니다.

그래서 결국 보면, 어정쩡한 설계에, 어정쩡한 코드에, 어정쩡한 내 수준을 보면서 실망을 금치못하게 되지요.

프로그래머는 자학하는데 최고의 직업이 아닐까하는 생각도 듭니다.

------------------------------
How many legs does a dog have?

gurugio의 이미지

코드가 복잡하다는 것을 저는 2가지로 나눠서 생각합니다.

1. 코드가 꼬여있고 의존성이 많다.
코드가 얽혀서 한군데를 손보거나 기능을 추가하려면 여기저기를 손대야한다.
복잡하다는 표현보다는 꼬여있다나 얽혀있다가 정확한 표현같습니다.

2. 스타일이 낯설고 내가 모르는 기교가 사용되서 복잡해보인다.
예를 들어 코드를 만드는 매크로를 사용해서 기능을 추가햐아할때
매크로를 이해하려고 뜯어보면 무지 복잡해보입니다.
하지만 일단 이해하고나면 아 이래서 그랬구나 이게 이래서 필요했구나하고
그담부턴 쉽습니다. 기존 코드를 수정하거나 기능 추가하는 것도 간편합니다.
패턴을 적용하거나 객체로 관리되는 코드들을 보면 소스를 이해하기는 어렵지만
이해하고나면 관리도 쉽고 문제도 적은데 그런게 2번에 해당합니다.

1번만 피하면 복잡해보이는 코드라도 좋은 코드라고 생각합니다.

나빌레라의 이미지

제가 본문을 쓰게 된 계기가 된 코드는 1번과 2번이 모두 있는 것 같습니다.

1번은.. 작성자가 머리가 나쁜거고..
2번은.. 제가 머리가 나쁜거네요..

아무래도 2번이 조금더 큰것 같습니다...

하아.. 이해가 안되니까 이젠 졸려요...ㅠㅠ
(그냥 다시 짤까..)

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

사랑천사의 이미지

정말, 사람의 스타일이나 먼저 익힌 언어나 라이브러리에 따라... 많은 차이가 있는 거 같더군요.
저는 얼마 전에 C++를 배우고 계속 공부하면서 MFC도 동시에 공부하고 지금 프로그램을 수정하는 중입니다. STL은 거의 모르고 있다고 봐야 되구요.

그런데 제가 지금 맡은 프로젝트를 진행하시던 분이 MFC보다 STL을 많이 쓰시는 분이다 보니(그리고 Win32API를.... 윽.) 왜 이렇게 했을까 하는 생각이 많이 들조. 근데 그 스타일이라던가 늘 사용하시던 STL을 쓰시는 것을 어떻게 할 수는 없겠조. MFC 를 주로 쓰는 것 하고 STL을 주로 쓰고 MFC를 필요에 따라 쓰는 경우 스타일이 많이 달라 지더군요.

이건... 기존 작성자가 어떤 생각을 가지고 어떤 철학으로 어떤 도구를 사용해서 작성했는지를 보려고 노력하지 않으면 그런 생각이 들 수 밖에 없는 거 같습니다. 도대체 왜 이런 거야... 뭐 어쩔 수 없조. 앞으론 프로젝트를 제가 이어서 진행해야 하니 STL을 주로 하고 MFC를 어쩔 수 없을 때만 쓰거나 Win32API로 완성해 버리는 스타일을 이해하려고 노력하는 수 밖에요. 처음엔 그렇게 하고 나중엔 가능하다면 MFC를 주로 쓰는 스타일로 가야 겠조 제가. 동작과 로직에 문제가 없다면요.

뭐.. 그냥 지나가다가 쓰고 갑니다. 출근하려면 이제 자야 겠네요. 여기서 더 시간을 보내다가는... 내일 출근 못할 듯.

사람천사

winner의 이미지

세상에 탄소생성을 줄이고자 powerfull하고 가벼운 programmer용 편집기를 만들어 에너지소모를 줄이기 위해 만들었다는 Notepad++는 그 원칙때문에 Win32 API 와 C++ standard library만 썼다는군요. -_-.
개인적으로는 MFC를 공부하고 싶은 마음이 들지 않는 것이 일단 상용 Visual Studio를 구매해야 해서...

winner의 이미지