プログラミングの第一原則をどう思いますか?


59

私はいつも「これの最初の原則は何ですか?」何かの基本的なこと(プログラミングなど)を学んだ後。IMOという刺激的な質問で、何かの背後にある最も重要な原則、特にプログラミングなどのスキルについて考えるように強制することができます。

それでは、プログラミングの最初の原則は何だと思いますか?少し後で回答します。


ファイトクラブについては語りません。
ジョブ

回答:


97
  1. KISS-シンプルにバカにする
  2. DRY-繰り返してはいけません
  3. ヤグニ-あなたはそれを必要としません

KISSはKeep It Simple Smartでなければなりません。スマートで拡張性のある設計を行っていないため、コードの大部分を初めて書き換える必要がある場合、これに同意します。:)

8
KISSは「シンプルに保ち、愚かだ!」
デニスC

私は実際にこれらの二つがある方法についてのブログ記事に取り組んでいるプログラマーの心に最も近く、貴重2と同時に、彼らはしばしばoxymoronsのビットがある回あなたが他に対していずれかを選択する必要がありますか

10
YAGNIも追加します。

3
@Programmin Tool-「バカ」が不要だとは思わない。私たちは「スマート」になりたいという傾向があり、これは不必要な複雑さとして現れていると思います。私が見ているように、「愚かな」人は、私たちが最初に「スマート」とは思っていなかったことを思い出すのを助けることによって、この傾向を思い出させようとします。
codekaizen 09

37

そのコードを維持する必要があるのは、あなたであるかのようなコードを書きます。


これは非常に実用的なヒューリスティックで、3倍です:)

19
aを扱うサイコパスがそれを維持する必要があるかのようにコードを書きます。FTFY。
忘れられたセミコロン

10
...そしてaを振るうサイコパスはあなたがどこに住んでいるかを知っています。
CADが08年

2
...、と彼はただ...彼の斧を削った
Roalt

1
...そして彼はあなたのそばで働いています。
Broken_Window

29

可能な限り怠けてください。


2
繰り返しますが、あまりにも一般的なIMOです。これは、「怠ppyなのはどれほど怠zyなのか、本当に?」という疑問を投げかけています。

これはperlの「

だから私たちは別の種類の怠inessについて話しているのですか?「怠

2
一般的すぎる。その意味で、すべての変数と関数は1文字になります。意味のあるものを入力するのが「面倒」だったからです。しかし、私もそれを維持しなければならないと仮定すると、おそらくあなたは正しいでしょう。
カイルバラード

3
@カイル:ええ、それがポイントです。「真の怠iness」は、現在だけでなく将来も自分にとって最も簡単なことです。これは、物事を適切に行うことと同じであることがわかります。あなたが今より少ない仕事をし、後でもっと仕事をするなら、あなたは「できるだけ怠け者」ではありません:)

23

Zen、パートI:プログラミングは道であり、方法ではありません。

プログラミングは、コンピューターにすべきことを教えるための唯一の手法です。高速で信頼性の高いソフトウェアの作成に成功するとは、アルゴリズム、ベストプラクティス、およびプログラミング(言語)に必ずしも接続されていないその他すべてのものを知ることを意味します。

禅、パートII:急いでいる場合は、ゆっくりと散歩してください。あなたが本当に急いでいるなら、迂回してください。

馬鹿げているように聞こえますが、(実際に)後で問題になる可能性のある妥協点に身を委ねないでください。私はルールを得ました:あなたがプログラムの中核にいるなら、できるだけ正確で良いことをしてください。ソフトウェアの奥深くにあるコアのメソッドを使用している場合は、コーディングを高速化してください。これら2つを超えてコーディングしている場合は、少しずさんなこともあります。

設計エラーは、発見および/または修正が最も難しく、次のステップは、誰もが依存する部分のプログラミングエラーです。次に、「本当の魅力的なソフトウェア部分」です。プロジェクトの終わりに設計エラーを修正する必要がある場合は、うーん、それは良くありません... ;-)

禅、パートIII:あなたの道を知っている、ネオ。

環境、ツール、依存しているものを日常的に把握し、適切に機能するように整理します。プログラミングの「環境」を非常に自然に使用しているので、考える必要すらない場合に最適です。仕事を終わらせなければならない場合は、「派手な新しいもの」を紹介せずに、仕事をしてください。このようなものは、新しいプロジェクトに導入できます。つまり、準備して使用する時間があるときに導入できます。


えーと、それから再び:プログラミングについて話している間、私は禅の土地に着陸しました:)

@part III-報酬を得ない限り、「派手な新しいもの」を追加しないでください!
ジェイソン

マトリックス参照の場合は+1。私は良いもの(

19

KISS(シンプルに、愚かにしてください)。

それは確かに「シンプルをどのように定義しますか?」という質問を請います。また、「手近なタスクに単純すぎるものがある場合」これが、プログラミングの最初の原則を知っているだけでは優れたプログラマーになれない理由です。


これはあまりにも一般的なルールだと思います。それは、「どうやって「単純」を定義するのか」という疑問を投げかけます。

3
そして、あなたが愚かであるならば、それが単純であったかどうかをどのように知っていますか?
スティーブンA.ロウ

Steven :)

1
「これが、プログラミングの最初の原則を知っているだけでは良いプログラマーになれない理由です」-大好きです。

1
@Dima:そのとおりです。品質と単純さ(この場合は少なくとも)はどちらも定義できませんが、目が訓練されていれば、それを見るとわかります。
アドリアーノヴァロリ広場


16

車輪を再発明しないでください。


車輪を再発明すべきかどうかという質問に対する正しい答えは、常に「依存する」です。そのため、「車輪を再発明しないでください」はこれまでのところだけです。ほとんどの場合、それは良いヒューリスティックとして機能しますが、毎回ではありません。

5
いくつかの「ホイール」を再発明する必要があります。

それをダンロップに教えてください。彼は空気入りタイヤを発明しました。それが彼のためではなく、車輪を再発明したなら、私たちはかなりでこぼこした乗りをするでしょう。
キブビー08年

3
どの程度:便益がコスト価値があるだろう場合にのみ、車輪の再発明
e.James

16

最初に問題を理解してください!


ああ、ついにこれで誰か。あなたはキス、ヤグニ、あなたが望むすべてを乾かす。何のために何かをプログラムするのは無意味です。

@ e-satis:うん、これに最初に答えたときに思ったこと。私はすべての答えをスクロールし、驚くほど以前に誰も投稿していません。
OscarRyz

いい答えだ。プログラマが問題の完全な要件を適切に理解しないと、時間と時間が無駄になります。
スティーブウォーサム

問題は次のとおりです。問題を理解していることをどのように知っていますか?
キャメルキャメルキャメル

13

ヤグニ-あなたはそれを必要としません。YAGNIの背後にある考え方は、将来の潜在的な機能ではなく、要件に合わせてプログラムすることです。前提は、プログラムに必要なものを維持することにより、(特に)コードの肥大化を減らし、複雑さを軽減し、機能のクリープを回避し、実行できること(および実行できる方法)の制限を減らすことです。未来。

モジュール設計と連携して動作すると思います。既存のコードを再設計することなく、将来の機能を拡張できます。


12

いつプログラムしないかを知る。


これは一体どういう意味ですか?

それはいつですか?

ソリューションをコーディングするだけでなく、ユーザーの問題に異なる方法で取り組む必要がある場合があります。

人間の判断と意思決定はすべての一部です。判断を自動化しようとしても意味がない場合があります。
S.Lott 08年

1
彼が言っているのは、市販のアプリケーション、コンポーネント、またはライブラリを購入することで、多くのプログラミング問題をより安くタイムリーに解決できるということです。
ゴードンベル

11

コーヒーイン、コードアウト。


3
私の場合のお茶=)

「コーヒーイン、コード+たくさんのトイレ休憩」のような+1うーん。:)私はコーヒーとお茶の両方が好きで、私は両方向にスイングします
...-ダークナイト

10

テストされていない場合、破損しています。


私はそのことに同意します

7

ソフトウェア設計を構築するには、2つの方法があります。1つは単純に欠陥をなくすことであり、もう1つは明白に欠陥がないように複雑にすることです。最初の方法ははるかに困難です。

-チャールズアントニーリチャードホア


6
  1. 原因と結果の区別(コンピューターでの作業)

  2. 事実と意見を区別する(人々と働く)

  3. できるだけシンプルだが、シンプルではない(デザイン)


5

プログラミングは終わりではなく手段です。または、おそらく「できる」という意味ではありません。


5
  1. プログラムが誰かを幸せにする理由を理解してください(そうでなければ、他のすべての子供たちと外で遊ぶのはなぜですか?)。(この人はあなたかもしれません。)
  2. 必要なすべての複雑さをキャプチャするビジネスドメインの概念モデルを開発します。
  3. 必要なすべての複雑さをキャプチャするソフトウェアアーキテクチャの概念モデルを開発します。
  4. 他のすべての複雑さを容赦なく排除します。

よく言った!もっと同意できません
アントニー

5

私の意見では、最も重要な原則は、優れた抽象化の作成による複雑さの削減です

これも

  • 解決すべき問題を理解し、
  • 適切なソリューションを設計し、
  • それを実装し、
  • できればコードを理解しやすく保守しやすい方法で、

ただし、抽象化の作成を停止し、実装技術(データベースシステム、プログラミング言語など)の基本的な特性に到達して、回避可能な追加の複雑さの作成を防ぐポイントを決定します。


4

視聴者を念頭に置いたプログラム。それによって、あなたが書いたものがあなたや他の誰かによって読まれたり維持されたりしないと思い込まないでください。

その結果:変数、関数、クラスに適切な名前を付けて、解決しようとしている問題を理解していることを証明してください!


4

テストで表示するまで機能しません


6
それは真実ではない、私は動作し、テストされていないコードを大量に書いた!:D

1
「私はそれをテストしていません、それが正しいことを証明しただけです」:)
ダニエルダラナス09年

4

最初に考えて、後でコーディングします。

あなたは、あなたが思っているほど賢くはありません。質問をする。仲間を大切にすることを学ぶ。

デバッグするとき、最初の答えはほとんど常に間違っています。

捨てるつもりで書いたコードは、はるかに大きなプロセスの基礎となる傾向があります。無計画に書かれたものを放置しないでください。


3

問題は、別の間接層で解決できます。


実際、インダイレクションの数が多すぎることは、それ自体が特定され解決されるのを待っている問題です。..だから

解決されました...別の間接層によって!=)
エリックフォーブス

奇妙なことに、本当です。春を見て


3

原則:ソフトウェアはKnowledge Captureです。

結果:知識表現のための多くの手法。すべて抽象化に基づいています。レイヤー、ティア、カプセル化、懸念の分離を提供します。

プロシージャ表現の多くのテクニック。すべてSequenceChoiceRepetitionに基づいています。



3

それを維持する人があなたがどこに住んでいるかを知っている精神病の連続殺人犯であるかのように、常にコードを書く

また、プログラミングについてすべてを知っているとは思わないで、学び続けてください


2

私はデジタルエレクトロニクスを研究することでプログラミングを始めました。そのため、プログラミングの最初の原則は基本的な論理ゲート(not、and、or、xor、inspires)だったと思います。



2

ガベージイン-ガベージアウトデータが悪い場合でも、ユーザーインターフェイスがどれほど優れているかは関係ありません。


2

ドライ、他のほとんどすべてがそこから生まれます。KISSは、ソフトウェアのエレガンスを狂気のレベルまで追求しないようにするためのバランス調整のもう一方の目的です。


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