Coding conventions 만들기가 힘들군요.

sangheon의 이미지

많지도 않은 개발팀 인원에 각자 자기 방식대로 코딩하고 - 간단히는 변수 네이밍부터 크게는 패턴까지 - 있는 상황이라
이것을 정리해서 하나로 통일 시키려는데 어렵군요.

이런 비슷한 처지를 하소연 하던 분들이 많았는데, 저는 좀 다른게 일단 팀장이라 이런 것을 주도 할 수 있는 위치이기는
합니다.

하지만 회사 문화가 수평적인 구조를 꽤나 지향하기 때문에 - 저도 그것을 좋아하기도 하고 - 속된 말로 '까라면 까라'는
식으로 밀어붙일 수도 없구요.

어제도 디렉토리 구조 이야기 하다 회의 때 목소리가 좀 커지기도 했네요.

자기 스타일을 고집하려는 개발자들, 그리고 어떤 새로운 방식에 대해서 필요성을 느끼지 못 하는 개발자들에게 어떻게
하면 표준적인 개발 방식에 따르도록 합의를 볼 수 있을런지요.

혹시 이런 쪽에 도움이 될만한 의견이 있으면 듣고 싶습니다.

neogeo의 이미지

여러사람이 의논해서 한사람을 컨벤션 제정자로 담당시킵니다.

그리고 그사람이 컨벤션을 결정하도록 모든 권한을 주고, repository 에 올라오는 모든 소스를 검사하게 하는 모듈제작이라던가 ( SVN 은 되지요? ) , 올라온 소스가 컨벤션에 맞지 않으면 그 소스를 올린 사람에게 경고를 주게 하는 일을 시킵니다.

:) 권한이 생기면 의무와 책임이 생겨야죠...

Neogeo - Future is Now.

Neogeo - Future is Now.

anfl의 이미지


1. coding guideline을 작성합니다.
2. coding guideline을 다 함께 review 합니다.
--- 모든 사람들의 생각을 합치고 암묵적 동의를 얻어냅니다.
3. 흩어져 각자의 일을 시작합니다.
4. 다함께 code review를 합니다.
5. 조금이라도 coding guideline에 어긋난 부분에 대해서 지적합니다.
--- 많이 어긋났으면 아예 review를 중단합니다.
6. review를 coding guideline에 완벽하게 맞을때까지 반복합니다.

누구 한사람이 경고를 주는 방법도 좋지만
보다 효과적인 방법은 암묵적 합의 후 자신이 합의를 깬것에 대해
인식하게 해주는것이 좋을것 같습니다.

안그러면 자신의 잘못을 인식하지 못하고 잘못을 지적하는 사람을 귀찮은 존재로 인식할수 있죠.


stypr의 이미지

전 man 9 style 하라고 옆팀원들에게 말하고 싶습니다.

ymir의 이미지

이 바닥은 불확실한 전망과 처절한 대우로 이직률이 높을 뿐더러..
대부분 최소한의 인력과 비용으로 최대의 퍼포먼스를 내기를 원하기 때문에..
체계적으로 스킬 업을 시키기 위한 장치도 별로 없고...
대부분 인력이 낼 수 있는 한계치 이상으로 일을 시키는 경향이 많습니다.

게다가 사람들은 대부분 자기만의 개발 환경을 갖고 있으며 자기만의 스타일을 가지고 있는데..
뭔가 새로운, 익숙하지 않은 일을 자기 개발 환경으로 끌어오려면...
소위 러닝 커브 (learning curve) 에 의해 초반에는 생산성이 많이 떨어집니다.
즉, 이를 고려해서 일정이라던가, 인력 구성이 우선적으로 변해야 하지 않나 싶습니다.

충분히 시간이 주어졌다고 판단 될 때..
비로소 새로운 도구나, 시스템, 프로세스들을 검토해 볼 만한 여유가 생기는 것이죠..

물론, 결과적으로는 하나의 convention 을 갖고 공동 작업을 하는 것이..
추후 발생할 유지보수에 대해 어느 정도는 플러스 요소가 된다는 걸 알고는 있겠지만...
크런치 모드로 일하고 있는데, 새로운 것들 때문에..
당장 내 퍼포먼스가 떨어지고, 일정이 지연되는 사태가 발생한다면...
결과적으로는 자신이 가장 퍼포먼스를 잘 낼 수 있는 형태로 회귀하게 되어 버립니다.

충분히 여유가 있고, 동료간에 우호도가 높고, 이직률도 낮고, 로열티도 높은 편이라면...
위에 anfl 님께서 말씀하신 것처럼.. 공동으로 guideline 을 작성하고..
peer review (동료 검토) 등을 통해 check-in 하는 프로세스를 도입하는 정도면..
적당하지 않나 싶습니다만..

그렇지 않은 경우라면, neogeo 님 의견처럼.. 차라리 우선적으로 S/W 아키텍터를 별도로 선임하여...
library dependancy 나 module 배치, review, checkin 을 담당하게 하는게 좋지 않을까 합니다.
실제로 repository 를 직접 관리하면서, convention 등을 정리하고...
정리한 내용을 계속해서 announce 한다면, 실제 개발자들은 조금씩 변경된 convention 이 반영된
코드를 checkout 해서 작업을 하게 될 것이고, 시간이 지나면서 점점 익숙해 질 겁니다.

심리적으로 하나의 스타일로 만들어진 파일에, 자기만의 스타일을 끼워 넣는 일은...
쉽게 눈에 띄기 때문에, 그리 쉽지 않은 일이라..

아.. 그리고 가장 중요한 건...
반드시 '합리적'인 근거를 통해 반대자,비협조자들을 '납득'시키고..
사후라도 동의를 얻고.. 공감대를 형성해 가야 한다는 겁니다..

회사에 대한 기대치가 높은 곳이라면.. 어떻게든 따라오겠지만...
그렇지 않다면.. 까짓거 귀찮고 맘에 안 들면 딴 데 가면 그만이라고 생각하는 사람들도..
의외로 있을지도 모르거든요.. ㅎㅎ

그리고, 끝으로 일정이 폭주하지 않도록 절대적으로 관리를 잘 하셔야 할겁니다.
결정적으로 일정이 폭주하면, 코드가 폭주하게 됩니다.
바쁘니까, 급하니까.. 좋은 관행은 생략되고, 절차가 사라지고..
중복 코드라던가, 임시 변수, 매직 키워드가 난무하게 됩니다.

오랫동안 구축해 온 좋은 시스템도, 하루 아침에 무용지물이 될 수 있습니다.

한동안 고민해 오던 주제라, 이런 저런 생각을 늘어놓았습니다만..
현실적으로, 처음 부분에서 언급한 이유 때문에..
이러한 컨벤션을 만드는 것도 어렵고, 유지하는 것도 쉽지 않습니다.
어떻게든 최소한의 관리 비용이 들어가는 좋은 방안을 찾으시길 바랍니다.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

sangheon의 이미지

생산성 저하와 같은 문제를 해결 가능한 상황이라고 생각합니다.

문제는 공통의 가이드라인 잡기가 힘들다는 것입니다.

가령 네이밍으로 헝가리안과 언더바를 놓고 단일안을 만들기 힘든 상황입니다.

어떻게 하면 이런 문제를 해결 할 수 있을까요?

--

B/o/o/k/w/o/r/m/

--

Minimalist Programmer

권순선의 이미지

리더십의 시험대에 오르신 것 같군요. 정답은 없는 듯... 사람들의 마음을 읽으시는 수밖에...

anfl의 이미지

저 같으면 다수결로 반반씩이라면 제 마음대로 하겠습니다.


망치의 이미지

제 경우엔 전 일반사원인 팀원인데 이런걸 좀 도입하고 싶습니다.
팀장도 같이 코딩을 하는데.. 코딩스타일이나 문법이 영 통일이 안돼서....

저도 저런 규칙따라가며 해본적이 없다보니 의견을 내기도 뭐하고...

---------------------------------------
http://www.waitfor.com/
http://www.textmud.com/

M.W.Park의 이미지

공통의 가이드 라인은 꼭 필요합니다.
coding convention의 경우 전체 프로젝트 수준에서 통일되지 않으면, 아마추어들의 작업물같은 느낌이 많이 들더군요.
(그러니깐 다시말해 일견 좀 어설퍼 보여도 공통의 가이드 라인이 있는 것이 훨씬 낫다는 말입니다.)

일단 제일 중요한 부분이 합의 도출입니다.
좀 시간을 두고 토론을 하더라도, 합의를 끌어낸 후에 공동의 실천 노력이 필요할 듯하군요.

그리고 위에 예시하신 헝가리안 표기법은 제가 파악하기로는 죄악에 가까운 naming convention이라고 알고있는데요. 헝가리안 표기법은 불필요하다는 논지의 문건이나 책은 아주 많으니 증거자료로 채택하시면 될듯합니다.

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

sangheon의 이미지

팀에서 헝가리안을 주장하는 사람이 있습니다.

저도 헝가리안으로 개발한 적이 있기 때문에 경험과 다른 분들의 이야기를
정리해서 문제점을 설명 해주어도 이해를 하지 못 하더군요.

어떻게 하면 좋을지 다소 난감합니다.

물론 밀어붙이면 따라는 오겠지만 불만이 쌓일 것이고 왜 헝가리안을 버려야
하는지도 이해하지 못 하겠지요.

--

B/o/o/k/w/o/r/m/

--

Minimalist Programmer

M.W.Park의 이미지

피터지게 논쟁하고,
설득시키든 설득 당하든 하셔야할듯...
나쁜 스타일이라도 공통되지 않은 중구난방 보다는 나을 거같군요.

합리적인 이유를 무시하는 사람들이랑은 일하기 피곤할 듯합니다.
윈도우 프로그래밍 책 몇권보고나서 다른 합리적인 대안은 전혀 고려하지않던 헝가리안 표기법 옹호자가 떠오르네요.

저의 개인적인 경우는 코딩 스타일같은 부분은 대충의 합의를 끌어냈지만, 테스트 코드 작성부분에서 팀원들이랑 많은 마찰이 있었습니다.

test coverage가 거의 0에 가까운 코드를 svn에 커밋하고서 뻔뻔스럽게 테스트 코드는 시간만 잡아먹는 불필요한 것이고, 다른 새로운 기능을 구현할 시간도 모자란다고 변명을 늘어놓는 사람이 두어명 있었는데, 설득하다가 안되서 제가 저주에 가까운 예언을 했습니다.
"몇달만 지나봐라. 급격한 복잡도 증가로 인해 복잡도를 제어하지 못하는 상황이 발생할 것이다."
나중에 시간이 좀 지나서는 여기저기 문제가 생기자 "(나는 잘못없고) 팀장님 모듈이랑 누구누구의 코드가 잘못된 것같다."는 추측성 보고를 사장님께 직접하는 만행을 저지르다 안먹히니깐 퇴사하더군요.

사장님의 진위확인 전화에 딱 한마디만 했습니다.
"그게 정말 제쪽의 문제라면 실패할 테스트 케이스가 100개 정도 될겁니다."

그때 좀더 밀어붙여서 합의를 이끌어냈어야하지 않았나 하는 후회가 많이 듭니다.
이해하지 못한다고, 견해가 다르다고 소통을 포기하고 프로젝트도 난항을 겪고, 퇴사자도 발생하고...
전폭적으로 지지 받을 거라생각했던 것들(테스트를 비롯한 여러 이슈들)이 거의 지지도 못받고 여러 국면에 관한 이해 차이도 생기고 해서, 저도 지금은 퇴사 대기 리스트에 있다는... Orz.

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂