本当のKISSソリューションはどのくらい「シンプル」ですか?[閉まっている]


12

私は告白します:読んだ本や聞いたデザインパターンなどに基づいてそれを作ろうとすると、そのような熱意-から来る熱意が私に与えられるので、ほとんどの場合、「シンプルで短く保つ」という問題がありますその感覚は、私がありそうな完璧さへの正しい道にいます。

一方で、はい、それは時々締め切りを提供するという点で私に余分なストレスをかけます...

しかし、私が自分自身に言うときはいつでも、「次回は単純にしてください、あなたは愚かです!」次回になったときに「シンプル」にするのは静かだと思いますが、それは奇妙に感じ始め、ある時点で不快に感じるからです。

それから、私は「シンプル」の私の理解を判断し始めます...

SIMPLEは短すぎて機能しませんが、維持および拡張が難しいということですか?

SIMPLEは、OOPの原則の多くを破ることを意味しますか?

SIMPLEは不正行為を意味しますか?

SIMPLEとは、締め切りなしに期限を守ることを意味しますか?等

実際、それは何ですか?

質問は次のとおりです。KISSの原則に関して、SIMPLEの正確な定義を記述できますか。-もしあれば。

ありがとう!


4
それは「単純に、愚かにしてください!」、短くはありません。それを書いた後、私はあなたが実際にそれを知っているのを見ましたが、モバイルp.seにコメントの削除リンクはありません
...-yannis

4
拡張するのが難しいほど短いものを見つけたことがありません。あるものを変えると他のすべてが壊れてしまうので、ほとんど維持できなかった巨大な怪物であるものをたくさん見つけました。
ベンブロッカ

1
ほとんどの人がKISSを理解しようとする際に犯す間違いは、その解決策はとてもシンプルであるべきだと思うことですそれは自明です。真実は、単純な解決策を見つけることはすべてが単純なことであるということです。それはです本当に難しいです!あなたがそれを見つけたら、誰もが「ああ、それはとても明白だ、なぜ私は前にそれを見なかったのか」と思う。
TREB

2
良いKISSingを正確に説明したり定義したりすることは困難ですが、一度正しく理解すればわかるでしょう。練習を続けてください!
カスカベル

1
申し訳ありませんが、これは完全に閉じられたのではなく、ここに移行されましたが、ここでは陽気にオフトピックです。

回答:


35

フランス語のKISSを学びましょう:

ラ・パーフェクト・エスト・アテンインテ、ノン・パス・ロルスクイル・アンド・プラス・リエン・ア・ジューター、メイン・ロルスクイル・アンド・ア・リエン・ア・リタイア。—アントワーヌドサンテグジュペリ

次のように翻訳されます:

完璧は、追加するものが何もないときではなく、奪うものが何もないときに達成されます。—アントワーヌドサンテグジュペリ


2
「パーフェクトは削除するものがないとき」である必要があります
-normanthesquid

2
これは素晴らしい引用ですが、実際的なアドバイスはありません。
c_maker

2
フランス語の部分を削除すれば、この答えをよりシンプルにすることができます(より完璧になります)。:)
フィル

1
@Phil:オー・コントレイル、モン・アミ。
ギルバートルブラン

14

シナリオ

カットしてつまむ必要があります。

解決策A:KISSではない

ここに画像の説明を入力してください

解決策B:KISS

ここに画像の説明を入力してください ここに画像の説明を入力してください


正確な定義は:それはシンプルさを測定するための絶対的な尺度を定義するのは難しいです。ほとんどの場合、真の単純さが手元の問題の真の理解を妨げるため、それを達成することはめったにありません。しかし、ソリューションAとBがそれぞれ、過度に複雑になりがちなソリューションとシンプルさの違いを示しているとしましょう。


これは私を笑顔にしました。
c_maker

非常に暴力的ではありませんか?
-NoChance

2
そうではない。私の子猫はそれと一緒に寝ます。したがって、それは非暴力です。
トーマスエディング

11

「物事を可能な限りシンプルにするが、シンプルではない」-Einstein

コードをできるだけシンプルに保つが、シンプルではないということは、解決する問題に依存します。解決される問題が変わる傾向がある限り、KISSも変わります。

オーバーエンジニアリング(これは私のデザインパターンスキルを披露するのに最適な場所のようです!)とアンダーエンジニアリング(私が工場を使用した場合のみ、このカップリングを持っていなかったため、20コードの変更...)。目標は保守性です。


1
「循環的複雑さを本来あるべき価値に保ち、他の価値はない」。「合理的な範囲で可能な限り低いローン対価値比率で家を購入しますが、それより低くはありません」。「できるだけ良い朝食を食べるが、それ以上はない」。「できる限り安く​​購入し、できるだけ高く売るが、それより低い/高いものはない」。「できる限り背を高くするが、背は高くしない」。「変数名を可能な限り意味のあるものにしますが、意味のないものにします」。「できる限り高い努力をするが、それ以上はしない」。「「チーム」には「私」はいませんが、「高い」には「私」がいます」。「バラを止めて香りを嗅いでください。ただし、バラがあるときだけです。」「書き込みcommen
PSR

11

シンプルというのは、優れたプログラミングの原則を破るという意味ではありません。実際、それは逆のことを意味します。

SIMPLEは短すぎて機能しませんが、維持および拡張が難しいということですか?

いいえ。維持および拡張が困難であることは、複雑さの大きな症状です。実際、コードを拡張可能にするとコードがシンプルになります。最初からすべてのケースに対処する必要はないため、ベースコードをシンプルに保つことができます。

SIMPLEは、OOPの原則の多くを破ることを意味しますか?

いいえ。ほとんどのOOPの原則は、コードをより簡潔に、より整理された状態に保つように設計されています。

SIMPLEは不正行為を意味しますか?

いいえ。期限を守るという名目で、コードとハッキングを維持するために一生懸命書くことです。

SIMPLEとは、締め切りなしに期限を守ることを意味しますか?等

いいえ。期限とコードのシンプルさは2つの別個の問題です。単純なコードを書くことは、書くのに時間がかかりません(それはよくある誤解ですが)。


たぶん、あなたは、私はその誤解に苦しむと思うが、私は理想的なのシンプルなソリューションが、それは時々 、最初はシンプルなコードを書くために時間がかかるんので、常に私たちに起こる最初にすることはないと思われる-その後、後でもっとにより、あなたはその時間を作ると、複雑さに対処する必要はありません。
カスカベル

6

単純なことは誰にとっても同じことを意味しないため、これは説明するのが非常に難しいです。

例。一部の開発者はそれ?:を単純だと考えていますが、他の開発者はif声明の方が良いと考えています。このレベルまで下がると、皆さんを満足させることはできません。

一般に、単純なのは複雑さのない手段です。単純さを理解するには、複雑さを理解する必要があります。

複雑さには2つのタイプがあります。

本質的な複雑性とは、「単純な」解決策では問題を適切に解決できないため、問題に対するすべての合理的な解決策が複雑になる(そして混乱する可能性がある)状況を指します。-ウィキペディア

偶発的な複雑さは、コンピュータープログラムまたはその開発プロセス(コンピュータープログラミング)で発生する複雑さであり、解決する問題にとって重要ではありません。-ウィキペディア

次の質問で、本質的な複雑さを確認できます。

この解決策は簡単ですか?数分で同僚に説明してもらえますか?問題に対するより簡単な解決策はありますか?はいの場合、複雑なソリューションと単純なソリューションの間にトレードオフがありますか?これらのトレードオフで生きることはできますか?たとえば、多くのプログラマーはすべてを最適化するというミスを犯し、そのソリューション(およびコードも)が過度に複雑になります。

偶然の複雑さを確認する:

コードは簡単ですか?3か月後に戻った場合、必要な変更を行えるように脳内にコンテキストを構築するのにどれくらい時間がかかりますか?私のソースコードのすべてに明確な目的があり、それは私と他の開発者にその目的を効果的に伝えていますか?コードをテストするのはどれくらい難しいですか?通常、コードが複雑になればなるほど、単体テストが難しくなります。そのため、通常はこれを複雑さの尺度として使用します。通常、小さくて、適切な名前の、集中したクラスとメソッドが必要です。通常、設計パターンはこれらを達成するのにも役立ちます。

単に読んだだけでデザインパターンを使用したい場合は、おそらく偶然の複雑さを招くでしょう。「賢い」と思うために何かを入れたいと思ったら、おそらく偶然の複雑さを招くでしょう。

これが役立つことを忘れないでください。シンプルは簡単ではありません


1
+1は、本質的かつ偶発的な複雑さの観点からシンプルさを定義するために。
ザック

2

X11の背後にある原則(http://en.wikipedia.org/wiki/X_Window_System#Principles)に注意する価値があるといつも思っていました。私は常にこの目標に成功するとは限りません。

具体的には、「それを必要とする実際のアプリケーションを知っている場合を除き、新しい機能を追加しないでください」、および「作業の10%で目的の効果の90%を得ることができる場合、よりシンプルなソリューションを使用してください。」


1

質問:KISSの原則に関して、SIMPLEの正確な定義を書くことができますか?-もしあれば。

番号。


3
これが答えであるかどうかはわかりません。そのような定義を与えることができない場合、私見に答えるべきではありません。一般的に正確な定義が不可能であると思われる場合は、その理由について詳しく説明する必要があります。
back2dos

この回答で気に入っているのは、KISSの原則に従っているということです。+1
トレブ

シンプルなものは時々非常に複雑になることがあります。
GSto

@ back2dosはより強力な主張です。「わからない」という回答を投稿することはありません。
ジェレミー

0

シンプル-この特定のコンテキストでは、complexとは正反対です。単純なことは必ずしも必要ではありません:すべての愚かな心の人はそれを理解する必要があります-しかし、あなたがそれを自分で書いていない場合でも、あなたはそれを理解できることを確認しなければなりません。

複雑さは、参照を理解するのが難しいことによって達成される可能性があります-それらを取り除きます!多くのファイル/クラスが互いにリンクされています-方法はありません!そして複雑なコード(意味:連鎖ループ、複数のITEレイヤーなど)-誰もそれを読みたくない。

私の意見では、別の関数を追加するのは非常に簡単です。クラスではプライベート関数を追加することもできるため、インターフェイスを混乱させることはありません。したがって、なぜこの利点を使用せず、関数/手順を50行に制限しないでください。たぶんさらに少ない。意味のある名前を取得します。この方法で、ほとんどのコメントを廃止します。このようにして、関数は読みやすく、変更/拡張が簡単です。

もちろん...最後のいくつかの文は次のように機能します:クラスではプライベート関数を定義する可用性があり、この可能性を使用して関数を50のライナーに分割するだけではるかに読みやすくなります(良い名前を忘れないでください、それほどコメントする必要はありません)。

しかし、次のことを示すフルストップがある場合は、すべてを読むのがはるかに簡単です(!):考えを終えました。次の考えを続けましょう。

それが私がシンプルだと定義するものです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.