실제 KISS 솔루션은 얼마나 간단합니까? [닫은]


12

나는 고백 : 나는 읽은 책, 내가 들어 본 디자인 패턴 등에 따라 그것을 만들려고 노력하기 때문에 대부분의 시간을 "간단하고 짧게 유지"하는 데 문제가 있습니다. 그 의미는 내가 완벽한 완벽을 향한 올바른 길에 있다는 것입니다.

반면에, 마감 시한을 전달한다는 측면에서 나에게 추가적인 스트레스를줍니다.

그러나 내가 스스로에게 말할 때마다 "다음 번에는 간단하게해라, 멍청 아!" 나는 다음에 올 때 "간단하게"만드는 것이 조용하다고 생각합니다.

그런 다음 '간단한'에 대한 나의 이해를 판단하기 시작합니다 ...

SIMPLE은 작동하기에는 너무 짧지 만 유지 관리 및 확장이 어렵다는 의미입니까?

SIMPLE은 많은 OOP 원칙을 어기는 것을 의미합니까?

단순함이 부정 행위를 의미합니까?

SIMPLE은 별다른 마감일없이 마감일을 지키는 것을 의미합니까? 기타

실제로는 무엇입니까?

질문은 : KISS 원리로 SIMPLE의 정확한 정의를 작성할 수 있습니까? -있다면.

감사!


4
짧지 않고 "간단하고 바보처럼 유지하십시오!"입니다. 그리고 그것을 작성한 후, 나는 당신이 실제로 그것을 알고 있지만 모바일 p.se에 대한 삭제 댓글 링크가 없다는 것을 알았습니다 ...
yannis

4
너무 짧아서 확장하기 어려운 것을 찾지 못했습니다. 나는 한 가지를 바꾸는 것이 다른 모든 것을 깨뜨 렸기 때문에 거의 유지할 수 없었던 거대한 괴물 같은 것들을 많이 발견했습니다.
Ben Brocka

1
대부분의 사람들이 KISS를 이해하려고 시도하는 실수는 솔루션이 그렇게 간단 해야한다고 생각하는 것 입니다. 그것은 자명 합니다. 진실은 간단한 해결책을 찾는 것이 간단하다는 것입니다. 그건 정말 열심히! 일단 당신이 그것을 발견하면, 모두는 "오, 너무 분명하다 . 왜 내가 전에 그것을 보지 못 했는가?"라고 생각한다.
Treb

2
좋은 키스는 정확하게 설명하거나 정의하기 어렵지만 일단 제대로 이해하면 알게 될 것입니다. 계속 연습하세요!
Cascabel

1
죄송합니다. 여기를 완전히 닫는 대신 여기로 마이그레이션 한 것이 유감 스럽지만 여기서는 유감스럽게도 주제가 아닙니다.

답변:


35

프랑스 키스를 배우자 :

라 완벽 완벽, 비 파스로 n'y a 플러스 rien à ajouter, 마이스 lorsqu'n n'y a 플러스 rien à retirer. — 앙투안 드 생 텍쥐페리

다음으로 번역됩니다 :

더 이상 추가 할 것이 아니라 빼앗을 것이 없을 때 완벽이 이루어집니다. — 앙투안 드 생 텍쥐페리


2
"완벽한 제거 할 것이 없을 때"입니다
normanthesquid

2
이것은 좋은 인용이지만 실용적인 조언이 부족합니다.
c_maker

2
프랑스어 부분을 제거하면이 답변을보다 간단하게 (더 완벽하게) 만들 수 있습니다. :)
Phil

1
@ 필 : Au contraire, mon ami.
길버트 르 블랑

14

대본

자르고 꼬집어 야합니다.

솔루션 A : KISS 아님

여기에 이미지 설명을 입력하십시오

솔루션 B : 키스

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오


에 관해서는 정확한 정의 : 그것은 단순 측정 절대 규모를 정의하기 어렵다. 진실한 단순성 때문에 당면한 문제에 대한 진정한 이해가 불가능하기 때문에 거의 달성 할 수 없습니다. 그러나 솔루션 A와 B는 각각 지나치게 복잡한 문제와 단순성을 추구하는 솔루션의 차이점을 보여줍니다.


이것은 나를 미소 짓게했다.
c_maker

매우 폭력적입니다!
NoChance

2
그렇지 않습니다. 내 고양이는 그것과 함께 잔다. 따라서 비폭력 적입니다.
Thomas Eding

11

"가급적 단순하지만 단순하지는 않다"-아인슈타인

코드를 가능한 단순하게 유지하지만 단순하지는 않지만 해결중인 문제에 따라 다릅니다. 해결중인 문제가 변경되는 한 KISS도 변경됩니다.

오버 엔지니어링 (오, 이건 내 디자인 패턴 기술을 과시하기에 좋은 곳인 것 같습니다!)과 언더 엔지니어링 사이에 균형이 있습니다. 코드 변경 ...). 목표는 유지 보수성입니다.


1
"순환 적 복잡성을 원하는 가치로 유지하고 다른 가치는 유지하지 마십시오." "합리적으로 가능한 한 낮은 비율로 대출 대 가치 비율을 가진 집을 사십시오." "당신이 할 수있는만큼 좋은 아침을 먹지만 더 나쁘지는 않습니다." "낮게 구매하고 가능한 많이 팔지 만 더 낮거나 더 높은 가격은 없습니다." "할 수있는만큼 키가 크지 만 키는 없습니다." "변수 이름을 가능한 한 의미있게 만들지 만 의미가 더 충실하지는 마십시오." "가능한 한 많은 노력을 기울이지 만 더 높은 노력은하지 마십시오". "팀에는 'I'가 없지만 '더 높은'에는 하나가 있습니다." "장미를 멈추고 냄새 맡지 만 장미가있을 때만" "Commen commen
psr

11

단순하다고해서 좋은 프로그래밍 원칙을 어기는 것은 아닙니다. 사실, 그것은 더 반대를 의미합니다.

SIMPLE은 작동하기에는 너무 짧지 만 유지 관리 및 확장이 어렵다는 의미입니까?

아닙니다. 유지 관리 및 확장이 어려운 것은 복잡성의 큰 증상입니다. 사실, 확장 가능한 코드를 만들면 코드가 단순 해집니다. 모든 경우를 처음부터 다루지는 않기 때문에 기본 코드를 더 단순하게 유지할 수 있습니다.

SIMPLE은 많은 OOP 원칙을 어기는 것을 의미합니까?

아니요. 대부분의 OOP 원칙은 코드를보다 깨끗하고 체계적으로 유지하도록 설계되었으며 결국 더 간단합니다.

단순함이 부정 행위를 의미합니까?

아니요. 마감일을 지키기 위해 코드 및 해킹을 유지하기 위해 열심히 쓰는 것은 아닙니다.

SIMPLE은 별다른 마감일없이 마감일을 지키는 것을 의미합니까? 기타

아니요. 마감일과 코드의 단순성은 두 가지 별개의 문제입니다. 간단한 코드를 작성하는 데 시간이 오래 걸리지 않습니다 (일반적인 오해 임에도 불구하고).


어쩌면 당신은 내가 그 오해에서 고통을 생각하지만, 나는 이상적인의 간단한 솔루션은 때때로 처음에 간단한 코드를 작성하는 데 시간이 더 걸릴 않도록, 항상 우리에게 발생하는 첫 번째 일은 아니라고 생각 - 다음 나중에 더에 의해 그 시간을 확인하고 복잡성을 처리하지 않아도됩니다.
Cascabel

6

단순한 것이 모든 사람에게 같은 것을 의미하지 않기 때문에 설명하기가 매우 까다 롭습니다.

예. 일부 개발자는 이것이 ?:간단하다고 생각하지만 다른 개발자 는 if진술이 더 낫다고 생각합니다 . 이 수준까지 내려 가면 모든 사람을 기쁘게 할 수는 없습니다.

일반적으로 복잡하지 않은 간단한 방법 입니다. 단순성을 이해하려면 복잡성을 이해해야합니다.

복잡성에는 두 가지 유형이 있습니다.

본질적인 복잡성 은 "단순한"솔루션이 문제를 적절하게 해결하지 못하기 때문에 문제에 대한 모든 합리적인 솔루션이 복잡하고 혼동 될 수있는 상황을 말합니다. -위키 백과

우연한 복잡성 은 해결해야 할 문제에 필수적이지 않은 컴퓨터 프로그램 또는 개발 프로세스 (컴퓨터 프로그래밍)에서 발생하는 복잡성입니다. -위키 백과

다음 질문으로 본질적인 복잡성을 확인할 수 있습니다.

이 솔루션은 간단합니까? 몇 분 안에 동료에게 설명 할 수 있습니까? 문제에 대한 더 간단한 해결책이 있습니까? 그렇다면 복잡한 솔루션과 간단한 솔루션간에 상충 관계가 있습니까? 우리는 그 절충과 함께 살 수 있습니까? 예를 들어, 많은 프로그래머들은 모든 것을 마이크로 최적화하는 실수를 저지르고 솔루션 (및 코드)이 지나치게 복잡해집니다.

우발적 인 복잡성 확인 :

코드가 간단합니까? 3 개월 후에 다시 돌아 오면, 뇌에 맥락을 구축하는 데 시간이 얼마나 걸리므로 변경해야합니까? 내 소스 코드의 모든 것이 명확한 목적을 가지고 있으며 그 목적을 저와 다른 개발자에게 효과적으로 전달 합니까? 코드를 테스트하는 것이 얼마나 어렵습니까? 일반적으로 코드가 복잡할수록 단위 테스트가 어려워 지므로 일반적으로 복잡성을 측정하는 데 사용합니다. 당신은 일반적으로 작고 잘 명명되고 집중된 클래스와 메소드를 원합니다. 일반적으로 디자인 패턴은 이러한 패턴을 달성하는 데 도움이됩니다.

방금 읽은 디자인 패턴을 사용하려는 경우 우연히 복잡해질 수 있습니다. '똑똑하다'고 생각하기 때문에 무언가를 넣기를 원한다면 우연히 복잡해질 수 있습니다.

이것이 도움이 되길 바랍니다 . 단순함은 EASY를 의미하지 않습니다 .


1
필수 및 우발적 인 복잡성 측면에서 단순성을 정의하면 +1입니다.
Zach

2

나는 항상 X11의 기본 원칙 ( http://en.wikipedia.org/wiki/X_Window_System#Principles )에주의를 기울여야 한다고 느꼈습니다 . 나는 항상이 목표에 성공하지는 않습니다.

특히, "필요한 실제 응용 프로그램을 모른다면 새로운 기능을 추가하지 마십시오."및 "작업의 10 %에 대해 원하는 효과의 90 %를 얻을 수 있다면, 더 간단한 해결책을 사용하십시오. "


1

질문은 KISS 원칙으로 SIMPLE의 정확한 정의를 작성할 수 있습니까? -있다면.

아니.


3
이것이 대답인지 확실하지 않습니다. 경우 당신이 이러한 정의를 줄 수 없다, 당신은 이럴 대답 안된다. 일반적으로 정확한 정의가 불가능하다고 생각되면 그 이유를 자세히 설명해야합니다.
back2dos

이 답변에 대해 내가 좋아하는 것은 그것이 편지에 KISS 원칙을 따르는 것입니다! +1
Treb

간혹 복잡 할 수 있습니다.
GSto

@ back2는 더 강력한 주장을한다; 나는 "모르겠습니다"라는 답변을 게시하지 않습니다.
Jeremy

0

단순-이 특정 상황에서 복잡한 것과 정반대입니다. 단순한 것이 필요하지는 않습니다. 모든 바보 같은 생각을 가진 사람은 그것을 이해해야합니다.

복잡성은 참조를 이해하기가 어렵 기 때문에 달성 될 수 있습니다. 많은 파일 / 클래스가 서로 연결되어 있습니다. 복잡한 코드 (의미 : 체인 루프, 다중 ITE 레이어 등)-아무도 그것을 읽고 싶지 않습니다.

내 의견으로는 : 다른 함수를 추가하는 것은 매우 쉽습니다. 클래스에서는 개인 함수를 추가 할 수 있으므로 인터페이스를 망칠 필요가 없습니다. 따라서이 이점을 사용하지 말고 기능 / 절차를 50 줄로 제한하십시오. 아마도 더 적을 수도 있습니다. 의미있는 이름을 얻으십시오. 이러한 방식으로 대부분의 주석을 더 이상 사용하지 않습니다. 이러한 방식으로 함수를 쉽게 읽고 수정하고 확장 할 수 있습니다.

물론 ... 마지막 몇 문장은 다음과 같이 작동했을 것입니다 : 클래스에서 개인 함수를 정의 할 수 있습니다.이 가능성을 사용하여 함수를 50 개의 라이너로 나누면 훨씬 더 읽기 쉽습니다 (좋은 이름을 잊지 말고, 그렇게 많이 언급 할 필요가 없습니다).

그러나 풀 스톱이 있으면 모든 것을 읽는 것이 훨씬 간단합니다 (!). 나는 생각을 끝내고 다음 생각으로 넘어 갑시다.

그것이 내가 간단하다고 정의하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.