좋은 코드와 뛰어난 코더의 조건은?

홍원범의 이미지

컴퓨터 소프트웨어나 프로그램, 그리고 코드에 대해 곰곰히 생각하다가
가치의 문제를 떠올리게 되었습니다. 프로그래머와 개발자에게 있어
가치 있는 것이란 결국 코드와 관련된 것일지언데, 그렇다면 그 많고많은
코드들 중에 또 다시 가치를 부여할 수 있을 만한 '가치있는 코드' 혹은
'좋은 코드'가 무엇인지 알고 싶어졌습니다.
어떤 코드를 좋은 코드라고 말씀하시는 건가요?
그리고 뛰어난 코더를 묘사할 때 사용하는 말*에는 무엇이 있나요?

매번 질문만 드려서 죄송합니다^^;;;

*가령 제가 아는 한 미국인 프로그래머는 robust(굳건한)라는 말을 쓰더군요.

ssif의 이미지

책에서 보니 이런 이야기가 있더군요.정확하게 기억 나진 않지만,전반적으로 이런 내용이었습니다.

"응집력은 높이고 결합도는 낮추 코드가 좋은 코드다."

봄들판에서다

봄들판에서다

홍원범의 이미지

응집력은 알겠는데, 결합도는 뭐죠? 결합도가 높아야 하는게 아닌가요?

Open-Source Anthropology

Open-Source Anthropology

giveitaway의 이미지

쉽게 말씀드리자면 의존성이라고 보면 될겁니다.
결합도가 높은 프로그램은 한군데 고치려 들면 여러군데 뜯어야 되겠죠,

creativeidler의 이미지

영어로는 보통 low coupling, high cohesion이라고 하죠. coupling은 두 모듈이 같이 움직이는 것, 즉 모듈 A를 쓸 땐 항상 모듈 B도 같이 쓰더라..이런 거죠. coupling은 두 모듈 간 의존성이 심할 때 일어나기 때문에 low coupling은 윗분 말씀처럼 low dependency와도 의미가 통합니다. 결합도라는 번역어가 약간 오해의 소지가 있긴 하지만 말은 되는 게 두 모듈 사이의 결합이 강하다는 건 결국 두 모듈이 같이 다닌다는, 곧 coupling이 일어난다는 이야기가 되거든요. 모듈끼리 필요할 때 조합해서 쓸 수는 있는 게 당연히 좋지만 언제나 결합되어서 돌아다닌다면 두 모듈을 합치거나 적절한 단위로 모듈이 분리되지 않았다는 것이기 때문에 디자인을 수정할 필요가 있는 거죠.

p.s. 모듈은 프로그래밍에서 사용하는 여러 가지 구분 단위를 대표해서 썼습니다. 메쏘드나 함수, 클래스 등이 될 수 있죠.

홍원범의 이미지

그렇군요! 쉽게 이해가 됩니다. 모든 분들 답변 감사드립니다^^
그럼 좋은 코더란 쉽게 이야기해서 그러한 코드를 작성할 수 있는
능력을 갖추고 있는 프로그래머라고 생각해도 되겠군요?

Open-Source Anthropology

Open-Source Anthropology

ksjall의 이미지

프로그램밍 언어입니다. 그래서 저는 읽기 편리한 코드를 좋아합니다.

creativeidler의 이미지

clean code that works

제대로 동작하는 깔끔한 코드. XP에서 좋은 코드를 정의하는 말이죠.

anfl의 이미지


제 경험에서 비추어 볼때 강건성과 가독성, 성능은 당연한것 같습니다.
이 세가지가 충족 될때에도 안되는게 있을수 있을것 같네요.
system 요구 사항이 급격하게 변경될때에도 소스를 직접짜지 않은 사람이
얼마만큼 빠르고 쉽게 요구 사항을 맞출수 있는가?
결국 "응집력과 결합도"의 이야기이겠지요.


daybreak의 이미지

고객의 요구에 만족하면서 동시에 단순한 코드와 프로그램.

아무리 잘 작성해도 고객이 "이건 아니잖아!" 하면 의미가 없습니다.

홍원범의 이미지

고객이 그런 반대를 내비치는 경우가 종종 있는 모양이네요?

Open-Source Anthropology

Open-Source Anthropology

ssif의 이미지

갈대와 같다지요...
또한 고객 자신도 뭘 원하는지 모른다지요..
봄들판에서다

봄들판에서다

홍원범의 이미지

엇, ssif님!
저 위에 제가 댓글을 달았는데..못 보신 모양이군요?^^;;

Open-Source Anthropology

Open-Source Anthropology

puaxx의 이미지

코딩을 한지 이제 6년이 되어가는데 아직까지도 이쁘고, 군더더기 없는 코드가 나오지 않고 있습니다.