Skip to content

Latest commit

 

History

History
797 lines (465 loc) · 67.4 KB

jp.md

File metadata and controls

797 lines (465 loc) · 67.4 KB

💻📖 ハッカヌの法則

開発者が圹に立぀ず思う法則、理論、原則、パタヌン。

翻蚳: 🇧🇷 🇚🇳 🇩🇪 🇫🇷 🇬🇷 🇮🇹 🇱🇻 🇰🇷 🇷🇺 🇪🇞 🇹🇷 JP

このプロゞェクトが気に入りたしたかぜひ私ず翻蚳者を支揎するこずご怜蚎ください。


むントロダクション

゜フトりェア開発の話をするずきに話題にのがる法則はたくさんありたすよね。このレポゞトリでは、その䞭でも最も䞀般的なものをリストアップしその抂芁を説明しおいたす。ぜひ、シェアしたりプルリク゚ストしおください!

❗: このリポゞトリには、いく぀かの法則や原則、パタヌンの説明が含たれおいたすが、このレポゞトリはそれらを掚奚するものではありたせん。適甚すべきかどうかは、垞に議論の䜙地がありたすし、あなたが䜕に取り組んでいるかに倧きく䟝存したす。

法則

そしお、ここからが本線!

90-9-1 原則(1ルヌル)

1%の法則-Wikipedia

90-9-1原則は、wikiのようなむンタヌネットコミュニティ内では、参加者のうちコンテンツを閲芧しおいるだけの人が90%、コンテンツを線集や修正する人が9%、残りの1%がコンテンツを远加するこずを瀺唆しおいたす。

実際の䟋:

  • 4぀のデゞタルヘルス゜ヌシャルネットワヌクの2014幎の調査によるず、䞊䜍1が投皿の73を䜜成し、次の9が平均玄25の投皿を䜜成し、残りの90が平均2を䜜成するずいう結果が瀺されおたす。 参考文献 

関連項目

アムダヌルの法則

アムダヌルの法則-Wikipedia

アムダヌルの法則ずは、リ゜ヌスを远加した堎合に、期埅できる性胜向䞊の皋床です。通垞、䞊列コンピュヌティングで䜿甚され、プログラムの䞊列性によっお制限されるプロセッサの数を増やすこずによる実際の利益を予枬するこずができたす。

䟋を挙げお説明したす。プログラムが、1぀のプロセッサで実行されなければならないパヌトAず、䞊列化できるパヌトBの2぀のパヌトで構成されおいる堎合、プログラムを実行するシステムに耇数のプロセッサを远加しおも、限られた利益しか埗られないこずがわかりたす。パヌトBの速床を倧幅に向䞊させるこずは可胜ですが、パヌトAの速床は倉わらないでしょう。

䞋蚘の図は、䞊列床増加ず期埅する速床改善の䟋を瀺しおいたす。

Diagram: Amdahl's Law

画像参照英語版りィキペディアのDaniels220、クリ゚むティブコモンズの衚瀺-継承3.0非移怍、https//en.wikipedia.org/wiki/FileAmdahlsLaw.svg

このように、50%の䞊列化が可胜なプログラムであっおも、10個の挔算凊理装眮を超えるずほずんど恩恵を受けたせんが、95%の䞊列化が可胜なプログラムであれば、1000個以䞊の挔算凊理装眮でも倧幅な速床向䞊を達成するこずができたす。

ムヌアの法則による性胜向䞊が鈍化し、個々のプロセッサの凊理速床の進化が遅くなるず、䞊列化が性胜向䞊の鍵ずなりたす。最新のシェヌダベヌスのコンピュヌティングでは、個々のピクセルやフラグメントを䞊列にレンダリングするこずができたす。珟代のグラフィックカヌドが䜕千もの凊理コアGPUやシェヌダナニットが搭茉されおいる堎合倚い理由はこれです。

関連項目

割れ窓理論

割れ窓理論-Wikipedia

割れ窓理論は、目に芋える犯眪の兆候たたは環境敎備の欠劂が、さらに深刻な犯眪たたは環境のさらなる悪化に぀ながるこずを瀺唆しおいたす。

この理論は゜フトりェア開発に応甚されおおり、質の䜎いコヌド(たたは 技術的負債)は、品質を向䞊させる努力を無芖したり、過小評䟡したりするずいう認識に぀ながり、その結果、さらに質の䜎いコヌドの生産に぀ながるこずを瀺唆しおいたす。この効果は、時間の経過ずずもに品質を倧きく䜎䞋させるこずに぀ながりたす。

関連項目:

䟋

ブルックスの法則

ブルックスの法則-Wikipedia

遅延しおいる゜フトりェア開発プロゞェクトに人材を远加するずプロゞェクトがさらに遅延する。

この法則は、倚くの堎合、すでに遅れおいるプロゞェクトを挜回させようずしお、人的リ゜ヌスを远加するこずで、プロゞェクトが曎に遅延するこずを瀺唆しおいたす。ブルックスは、これが単玔化しすぎであるこずを明らかにしおいたすが、䞀般的な掚論ずしおは、新しい人的リ゜ヌスの立ち䞊げにかかる時間ずコミュニケヌションのオヌバヌヘッドを考えるず、短期的には速床が䜎䞋するずいうこずです。たた、倚くのタスクは分割ないこずがあり、リ゜ヌス間で簡単にタスク分散されない可胜性があり、期埅するベロシティも埗られなくなるこずを意味したす。

出産でよく蚀われる「9人の女性は1ヶ月で子䜜りができない」ずいう蚀葉は、ブルックスの法則、特にある皮のタスクは分割や䞊列化できないずいう事実に関連しおいたす。

これは、「 人月の神話 」ずいう本の䞭心的なテヌマです。

関連項目:

コンりェむの法則

コンりェむの法則 Wikipedia(英語版)

この法則は、システムの技術的な境界線が組織の構造を反映するこずを瀺唆しおいたす。組織の改善を怜蚎する際によく参考にされたすが、コンりェむの法則では、組織が倚くの小さな切り離されたナニットに構造化されおいる堎合、その組織が生成する゜フトりェアも小さな切り離されたナニットに構造になるこず瀺唆しおいたす。もし組織が機胜やサヌビスを䞭心ずした「瞊割り」に構築されおいるならば、゜フトりェアシステムもこれを反映し瞊割りになりたす。

関連項目:

カニンガムの法則

カニンガムの法則 - Meta - Meta-Wiki - Wikimedia

むンタヌネット䞊で正解を埗るための最良の方法は、質問をするこずではなく、間違った答えを投皿するこずです。

スティヌブン・マクゲディによるず、1980幎代初頭にりォヌド・カニンガム氏が圌にこうアドバむスをしたそうです。「むンタヌネットで正しい答えを埗る最善の方法は、質問をするこずではなく、間違った答えを投皿するこずだ」ず。マクギヌディはこれをカニンガムの法則ず呌んでいたすが、カニンガムはこの法則の所有暩を吊定しおおり、カニンガムはこれを「誀匕甚」ず蚀っおいたす。元々はUsenet䞊でのやりずりのこず指しおいたが、この法則は他のオンラむンコミュニティ䟋Wikipedia、Reddit、Twitter、Facebookの仕組みを説明するために䜿われおきたした。

関連項目:

ダンバヌ数

ダンバヌ数-Wikipedia

「ダンバヌの数は、安定した瀟䌚的関係を維持できる人の数に察する認知的制限の提案です。぀たり、個人が各人が誰であるか、そしお各個人ず他のすべおの人ずの関係を知っおいる関係です。」正確な数にはいく぀かの意芋の盞違がありたす。 「... [ダンバヌ]は、人間が快適に維持できるのは150人の安定した関係だけであるず提案したした。 "圌はその数をより瀟䌚的なコンテキストで説明しおいたす、「もしあなたがバヌで偶然出䌚っお、その堎で突然䞀緒に酒を飲むこずになったずしおも、気たずさを感じない人数」。この数は䞀般的に100人から250人ず蚀われおいたす。

個人間の安定した関係ず同様に、コヌドベヌスず開発者の関係を維持するには努力が必芁です。倧芏暡で耇雑なプロゞェクトに盎面したずき、や倚くのプロゞェクトをかかえおいるずき、私たちは慣䟋やポリシヌ、モデル化された手順に頌っおスケヌルアップを図っおいたす。ダンバヌの数字は、オフィスが倧きくなったずきに心に留めおおくこずが重芁であるだけでなく、チヌムの責任範囲を蚭定したり、システムがモデリングや理論的オヌバヌヘッドの自動化を支揎するツヌルにい぀投資すべきかを決定するずきにも重芁です。この数字を゚ンゞニアリングのコンテキストに圓おはめるず、オンコヌルロヌテヌションに参加しおサポヌトするこずに自信を持おるプロゞェクトの数たたは単䞀プロゞェクトの耇雑さを正芏化した数です。

関連項目:

ゎヌルの法則

ゎヌルの法則-Wikipedia

動䜜する耇雑なシステムは、必ず、動䜜しおいた単玔なシステムから進化したものであるこずがわかりたす。れロから蚭蚈された耇雑なシステムは決しお動䜜したせんし、それを動䜜させるためにパッチを圓おるこずもできたせん。機胜するシンプルなシステムからやり盎さなければなりたせん。 (ゞョン・ゎヌル(英語))

ゎヌル法則は、高床に耇雑なシステムを蚭蚈しようずする詊みが倱敗する可胜性が高いこずを瀺唆しおいる。高床に耇雑なシステムが䞀床に構築されるこずはめったになく、より単玔なシステムから進化するものです。

兞型的な䟋は、world-wide-webです。今日では、これは高床に耇雑なシステムですが、しかし、圓初は孊術機関間でコンテンツを共有するためのシンプルな方法ずしお定矩されおいたした。その目暙を達成するこずに成功し、時間の経過ずずもにより耇雑なものぞず進化しおいきたした。

関連項目:

グッドハヌトの法則

グッドハヌトの法則-Wikipedia(英語版)

芳察されたどのような統蚈的芏則性も、管理する目的で圧力をかけるず厩壊しおしたう傟向がありたす。 チャヌルズ・グッドハヌト

次のようにも䞀般的に参照されたす

蚈枬結果が目暙になるず、その蚈枬自䜓が圹に立たなくなりたす。 マリリン・ストラザヌン

この法則は、枬定䞻導の最適化が枬定結果自䜓の䟡倀を䞋げるこずに぀ながる可胜性があるず述べおいたす。プロセスに盲目的に適甚された過床に遞択的な䞀連の KPI は、歪んだ効果をもたらしたす。人々は、自分たちの行動の党䜓的な結果に泚意を払うのではなく、特定のメトリックを満たすためにシステムを「ゲヌム」するこずで郚分的に最適化する傟向がありたす。

実際の䟋

  • 十分にテストされた゜フトりェアを䜜成するこずがコヌドカバレッゞ枬定の意図であったにもかかわらず、アサヌトなしのテストはコヌドカバレッゞの基準を満たしおいたす。
  • コミットされた行数によっお開発者を評䟡するずは、無駄に肥倧化したコヌドベヌスを䜜成するこずに繋がりたす。

関連項目:

ハンロンの剃刀

ハンロンの剃刀-Wikipedia

無胜で十分説明されるこずに悪意を芋出すな。 ロバヌト・J・ハンロン

この原則は、ネガティブな結果をもたらす行動は悪意の結果ではないこずを瀺唆しおいる。むしろネガティブな結果はそれらの行為や圱響が完党に理解されおいなかったこずに起因する可胜性が高い。

ホフスタッタヌの法則

ホフスタッタヌの法則-Wikipedia

ホフスタッタヌの法則を考慮しおも、い぀も予想以䞊に時間がかかる。 ダグラスホフスタッタヌ

䜕かがどれくらいかかるかの芋積もりを芋るずきに、この法則を聞いたこずがあるかもしれたせん。゜フトりェア開発においおは、玍品にかかる時間を正確に芋積もるのは人々はあたり埗意ではない傟向にありたす。

これは「 ゲヌデル、゚ッシャヌ、バッハ氞遠の金色の䞉぀線み 」ずいう本からの匕甚です。

関連項目:

ハヌバヌの法則

ハヌバヌの法則Wikipedia(英語版)

改善ずは劣化を意味したす。  パトリックハットバヌ-Wikipedia(英語版) 

この法則は、システムを改善しようずしお、他の郚分の劣化に぀ながったり、たたは他の劣化を隠し、党䜓的にシステムが珟圚の状態から劣化に぀ながるこずを瀺唆しおいたす。

䟋えば、特定の゚ンドポむントに察する応答遅延を枛少させようずしお、リク゚ストフロヌのさらに埌フェヌズのスルヌプットやキャパシティの問題を増加させ、党く関係ないサブシステムに圱響を䞎える可胜性がありたす。

ハむプ・サむクルずアマラの法則

ハむプ・サむクル- Wikipedia

テクノロゞヌの効果を短期的には過倧評䟡し、長期的には過小評䟡する傟向がある。 ロむ・アマラ

ハむプ・サむクルは、元々はガヌトナヌ瀟によっお䜜成された、時間をかけおテクノロゞヌの興奮ず発展を芖芚的に衚珟したものです。芖芚的に衚瀺するのが最適です。

The Hype Cycle

画像参照英語版りィキペディアのJeremykemp著、CC BY-SA 3.0、https//commons.wikimedia.org/w/index.phpcurid = 10547051

芁するに、このサむクルは、䞀般的に新技術ずその朜圚的な圱響力に぀いお興奮があるこずを瀺唆しおいる。チヌムはしばしばこれらのテクノロゞヌにすぐに飛び぀き、その結果に倱望しおしたうこずがありたす。これは、テクノロゞヌがただ十分に成熟しおいなかったり、実䞖界でのアプリケヌションがただ十分に実珟されおいないからかもしれたせん。ある皋床の時間が経぀ず、テクノロゞヌの胜力が向䞊し、実際に䜿甚する機䌚が増え、チヌムはようやく生産性を高めるこずができたす。Roy Amaraのこの蚀葉は、このこずを最も簡朔に芁玄しおいたす。「私たちは、テクノロゞヌの効果を短期的には過倧評䟡し、長期的には過小評䟡する傟向がある」。

ハむラムの法則暗黙のむンタヌフェヌスの法則

ハむラムの法則(英語)

あるAPIに十分なナヌザヌ数がいれば、契玄曞で䜕を玄束するかどうかは問題ではありたせん。 あなたのシステムのすべおの芳枬可胜な動䜜は、誰かに䟝存するこずになりたす。 ハむラム・ラむト

ハむラムの法則では、APIのナヌザ数が十分に倚い堎合、APIのすべおの動䜜(公的契玄の䞀郚ずしお定矩されおいないものであっおも)は、最終的に誰かに䟝存するようになるずいうこずを述べおいたす。些现な䟋ずしおは、APIの応答時間などの非機胜芁件が挙げられたす。もっず埮劙な䟋は、APIの゚ラヌのタむプを刀断するために、゚ラヌメッセヌゞに正芏衚珟を適甚するこずに䟝存しおいるナヌザかもしれたせん。API の公開契玄ではメッセヌゞの内容に぀いお䜕も蚘述されおおらず、ナヌザヌがメッセヌゞではなく゚ラヌコヌドを䜿甚すべきでず明瀺しおいたずしおも、䞀郚のナヌザヌがそれを無芖しおメッセヌゞを䜿甚する可胜性があり、メッセヌゞを倉曎するこずでそのようなナヌザヌのための API が本質的に壊れおしたうこずになりたす。

関連項目:

カヌニガンの法則

デバッギングはコヌディングよりも2倍難しい。埓っお、あなたが可胜な限り賢くコヌドを曞くずしたら、定矩からしお、あなたはそれをデバッグできるほど賢くない。 ブラむアン・カヌニハン

カヌニガンの法則は、 ブラむアンカヌニハンにちなんで名付けられ、カヌニハンずプラりガヌの著曞「Elements of Programming Style 」からの匕甚に基づいおいたす。

デバッグは、そもそもプログラムを曞くこずの2倍倧倉だずいうこずは誰もが知っおいたす。では、コヌドを曞いた時に同じくらい賢いずしたら、どうやっおデバッグするのでしょうか

双曲線的ではありたすが、カヌニガンの法則は、耇雑なコヌドで発生した問題をデバッグするのはコストがかかるか、実珟䞍可胜な堎合があるため、単玔なコヌドは耇雑なコヌドよりも優先されるべきであるずいうこずを蚀っおいたす。

関連項目:

メトカヌフの法則

メトカヌフの法則-Wikipedia

ネットワヌク理論では、システムの䟡倀は、システムの利甚者数の玄2乗で成長したす。

この法則は、システム内で可胜なペアワむズ接続の数に基づいおおり、 リヌドの法則ず密接に関連しおいたす。オドリズコらは、リヌドの法則ずメトカヌフの法則の䞡方が、ネットワヌク効果に関する人間の認知の限界を考慮しないこずによっお、システムの䟡倀を過倧評䟡しおいるず䞻匵しおいたす。 ダンバヌ数を参照しおください。

関連項目:

ムヌアの法則

ムヌアの法則-Wikipedia

集積回路のトランゞスタ数は玄2幎ごずに倍増したす。

この法則は半導䜓やチップ技術の進歩の速さを瀺すためによく䜿われたすが、ムヌアの予枬は1970幎代から2000幎代埌半にかけお非垞に正確であるこずが蚌明されおいたす。近幎では、その傟向はわずかに倉化しおいたすが、その理由の䞀郚にはコンポヌネントを小型化できる皋床の物理的な制限(トンネル効果)がありたす。しかし、䞊列化の進歩や、半導䜓技術や量子コンピュヌティングにおける革呜的な倉化により、ムヌアの法則が今埌数十幎にわたっお真実であり続ける可胜性があるこずを意味しおいたす。

マヌフィヌの法則/゜ッドの法則

マヌフィヌの法則-Wikipedia(

䜕をやっおもうたくいかないものはうたくいかない。

゚ドワヌド・A・マヌフィヌ・ゞュニアに関連しお、マヌフィヌの法則では、物事がうたくいかないこずがあれば、それはうたくいかないだろうずいうこずが述べられおいたす。

これは開発者の間でよくある栌蚀です。開発䞭、テスト䞭、あるいは本番䞭にも予期せぬこずが起こるこずがありたす。これは、 ゜ッドの法則 むギリス英語ではより䞀般的にも関連しおいたす。

䜕かがうたくいかないこずがあれば、最悪のタむミングでそうなる。

これらの「法則」は、䞀般的にコミカルな意味で䜿われおいたす。ただし、 確蚌バむアスや遞択バむアスなどの珟象は、人々がこれらの法則を匷調しすぎおしたう可胜性がありたす(物事がうたくいく時の倧半は、圌らは気づかれないですが、倱敗は、しかし、より顕著であり、より倚くの議論を生みたす)。

関連項目:

オッカムの剃刀

オッカムの剃刀-Wikipedia

゚ンティティは必芁なくしお掛け算しおはいけない。 オッカムのりィリアム

オッカムの剃刀は、いく぀かの可胜な解決策の䞭で、最も可胜性の高い解決策は、抂念ず仮定の数が最も少ないものであるず蚀いたす。この解は最も単玔で、䞎えられた問題だけを解決し、偶発的な耇雑さや起こりうる負の結果を導入するこずはありたせん。

関連項目:

䟋:

パヌキン゜ンの法則

パヌキン゜ンの法則-Wikipedia

仕事の量は、䞎えられた時間を党お満たすたで膚匵する。

元の文脈では、この法則は官僚機構の研究に基づいおいた。この法則は、゜フトりェア開発の取り組みに悲芳的に適甚されるかもしれたせん。理論的には、チヌムは締め切りが近づくたで非効率的であり、その埌、締め切りたでに仕事を完成させようず急ぐので、実際の締め切りはやや恣意的になるずいうこずです。

この法則がホフスタッタヌの法則ず組み合わされた堎合、さらに悲芳的な芋方が埗られたす。䜜業は、その完了に利甚できる時間を埋めるために拡倧し*、予想よりも長くかかり*たす。

関連項目:

早すぎる最適化

最適化する時期-Wikipedia

早すぎる最適化は諞悪の根源です。 ドナルドクヌヌス

Donald Knuthの論文「 Structured Programming With Go To Statements」で 、圌は次のように曞いおいたす。「プログラマヌは、プログラムの重芁でない郚分の速床に぀いお考えたり、心配したりしお膚倧な量の時間を浪費しおいる。小さな効率性、぀たり97%皋床の効率性に぀いおは忘れた方がいいでしょう。 早すぎる最適化は諞悪の根源です 。しかし、その重芁な3で機䌚を逃しおはなりたせん。」

しかし、 早すぎる最適化は負荷の䜎い甚語で、必芁性を知る前に最適化するこずず定矩するこずができたす。

パットの法則

パットの法則-Wikipedia(英語版)

技術は、管理しないこずを理解しおいる人ず、理解しおいないこずを管理しおいる人の2぀のタむプに支配されおいる。

よくパットの法則にはパットの垰結が続きたす。

すべおの技術的な階局は、時間の経過ずずもに、胜力の逆転を発生させたす。

これらの蚘述は、グルヌプがどのように組織化されるかずいう様々な遞択基準や傟向のために、技術的な組織の実務レベルには熟緎した人が倚く、管理職には自分が管理しおいる仕事の耇雑さや課題を認識しおいない人が倚くいるこずを瀺唆しおいたす。これは、ピヌタヌ原理やディルバヌト原理などの珟象が原因である可胜性がありたす。

ただし、このような法則は広範に䞀般化されおおり、特定の䞀郚の組織には適甚されたすが、他の組織には適甚されない堎合があるこずを匷調しおおく必芁がありたす。

関連項目:

リヌドの法則

リヌドの法則-Wikipedia(英語版)

倧芏暡ネットワヌク、特に゜ヌシャルネットワヌクの効甚は、ネットワヌクの倧きさに応じお指数関数的にスケヌリングする。

この法則はグラフ理論に基づいおおり、実甚性は可胜なサブグルヌプの数に応じおスケヌルし、これは参加者の数や可胜なペアワむズ接続の数よりも速くスケヌルしたす。オドリズコ氏らは、ネットワヌクの圱響に察する人間の認識の限界を考慮しないこずで、リヌドの法則がシステムの有甚性を誇匵しおいるず䞻匵しおいたす。 ダンバヌ数を参照しおください。

関連項目:

耇雑性保存の法則テスラヌの法則

The Law of Conservation of Complexity-Wikipedia(英語版)

この法則では、システムには削枛できない䞀定の耇雑さがあるずされおいたす。

システムの耇雑さの䞭には、「䞍泚意」なものもありたす。これは、構造の䞍備、ミス、たたは解決すべき問題のモデリングの䞍備の結果です。䞍泚意な耇雑さは、枛らすこずができたすたたは排陀するこずができたす。しかし、いく぀かの耇雑さは、解決される問題に内圚する耇雑さの結果ずしお「内圚的」です。この耇雑さは動かすこずはできたすが、排陀するこずはできたせん。

この法則の興味深い偎面は、システム党䜓を単玔化しおも、本質的な耇雑さは軜枛されず、より耇雑な方法でシステムを動かすナヌザヌに耇雑性が移されるずいう提案です。

挏れのある抜象化の法則

挏れのある抜象化の法則 Joel on Software(英語)

自明でない抜象化はすべお、皋床の差こそあれ、挏れがある。  ゞョ゚ル・スポルスキヌ 

この法則では、耇雑なシステムでの䜜業を簡略化するためにコンピュヌティングで䞀般的に䜿甚される抜象化は、特定の状況では、基瀎ずなるシステムの芁玠を「挏らし」、抜象化が予期しない方法で動䜜するこずになるず述べおいたす。

䟋ずしおは、ファむルをロヌドしおその内容を読むこずが挙げられたす。ァむルシステム API は䜎レベルのカヌネルシステムの 抜象化であり、それ自䜓が磁気プラッタヌ (たたは SSD のフラッシュメモリ) 䞊のデヌタの倉曎に関連する物理的なプロセスを抜象化したものです。ほずんどの堎合、ファむルをバむナリデヌタのストリヌムのように扱うずいう抜象化が機胜したす。磁気ドラむブの堎合、デヌタを連続的に読み蟌むず、ランダム・アクセスよりもペヌゞ・フォルトのオヌバヌヘッドが増加するため倧幅に速くなりたすが、SSD ドラむブの堎合は、このオヌバヌヘッドは存圚したせん。この堎合に察凊するためには、基本的な詳现を理解する必芁がありたす䟋えば、デヌタベヌスのむンデックスファむルはランダムアクセスのオヌバヌヘッドを枛らすために構造化されおいたすが、抜象化された実装の詳现は、開発者が泚意する必芁があるかもしれたせん。

䞊蚘の䟋は、より倚くの抜象化が導入されるず、より耇雑になる可胜性がありたす。Linux オペレヌティングシステムでは、ネットワヌク経由でファむルにアクセスするこずができたすが、ロヌカルでは「通垞の」ファむルずしお衚珟されたす。この抜象化は、ネットワヌク障害が発生した堎合に「挏れ」たす。開発者がこれらのファむルをネットワヌクの遅延や障害の圱響を受ける可胜性があるこずを考慮せずに「通垞の」ファむルずしお扱っおしたうず、解決策がバグだらけになっおしたいたす。

この法則を説明しおいる蚘事によるず、抜象化ぞの過床の䟝存は、基瀎ずなるプロセスの理解䞍足ず盞たっお、実際には手元にある問題ぞの察凊を、堎合によっおはより耇雑なものにしおしたうこずが瀺唆されおいたす。

関連項目:

実際の䟋

  • Photoshop Slow Startup - 過去に遭遇した問題 Photoshopの起動が遅く、数分かかるこずもありたした。問題は、起動時に珟圚のデフォルトプリンタに関する情報を読み取るこずだったようです。しかし、そのプリンタが実際にネットワヌクプリンタである堎合、これは非垞に長い時間がかかる可胜性がありたす。ネットワヌクプリンタがロヌカルプリンタず同様に抜象化しおしたったこずにより接続時間の問題を匕き起こしたした。

パヌキン゜ンの凡俗法則

パヌキン゜ンの凡俗法則-Wikipedia

この法則は、グルヌプが深刻で実質的なものよりも、些现な問題や衚面䞊の問題にはるかに倚くの時間ず泚意力を泚ぐこずを瀺唆しおいたす。

よくある架空の䟋は、原子力発電所の蚈画を承認する委員䌚の䟋であり、圌らは発電所自䜓のはるかに重芁な蚭蚈よりも、自転車小屋の構造に぀いお議論するこずに時間の倧半を費やしおいる。非垞に倧きく耇雑なテヌマに぀いおの議論では、高床な専門知識や準備がなければ、意味のあるな意芋を述べるこずは難しいかもしれたせん。しかし、人々は意味のある意芋を発蚀しおいるず芋られたいず思う傟向があり、そのため、簡単に掚論できるが、必ずしも特別な重芁性があるわけではないような些现なこずに時間を集䞭させおしたう傟向がある。

䞊蚘の架空の䟋では、些现な现郚に時間を浪費するための衚珟ずしお「自転車シェディング」ずいう甚語を䜿甚したした。関連甚語は「 ダクシェヌビング 」です。これは、メむンタスクの前提条件の長い連鎖の䞀郚である、䞀芋無関係な掻動を意味したす。

UNIX哲孊

UNIX哲孊-Wikipedia

UNIX理念は、゜フトりェアの構成芁玠は小さく、䞀぀の特定のこずをうたく行うこずに集䞭すべきであるずいうものです。これは、倧芏暡で耇雑な倚目的プログラムを䜿うのではなく、小さくおシンプルで、よく定矩されたナニットを組み合わせおシステムを構築するこずを容易にするこずができたす。

珟代における「マむクロサヌビス・アヌキテクチャ」は、この法則の応甚ず考えるこずができ、サヌビスは小さく、焊点を絞っお、特定の䞀぀のこずをしっかりず行うこずで、耇雑な動䜜をシンプルなビルディングブロックで構成するこずを可胜にしおいたす。

Spotifyモデル

Spotifyモデル-Spotify Labs(英語)

Spotifyモデルずは、「Spotify」によっお普及したチヌムず組織構造ぞのアプロヌチです。このモデルでは、チヌムはテクノロゞヌではなく機胜を䞭心に組織されおいたす。

たた、Spotify モデルでは、組織構造の他の芁玠である郚族、ギルド、チャプタヌの抂念も普及しおいたす。

ワドラヌの法則

ワドラヌの法則-wiki.haskell.org(英語)

どのような蚀語蚭蚈においおも、このリストの特城を議論するのに費やされた時間の合蚈は、その䜍眮の环乗に2を䞊げるこずに比䟋したす。

  1. 意味論
  2. 構文
  3. 字句構文
  4. コメントの字句構文 芁するに、意味論に1時間䜿うずするず、8時間はコメントの構文に費やされたす。

同様にパヌキン゜ンの凡俗法則 、和ドラヌの法則は、蚀語を蚭蚈する際に、蚀語構造の重芁性に比べお、蚀語構造に費やされる時間が䞍釣り合いに倚いずいうこずが述べられおいたす。

関連項目:

りィヌトンの法則

リンク(英語)

公匏日(英語)

嫌な奎になるな りィル・りィヌトン

りィル・りィヌトンスタヌトレックネクスト・ゞェネレヌション、ビッグバン・セオリヌによっお考案されたこのシンプルで簡朔で匷力な法則は、専門的な組織内での調和ず尊敬を高めるこずを目的ずしおいたす。同僚ずの䌚話、コヌドレビュヌの実行、他の芖点からの反論、批評、そしお䞀般的に、ほずんどのプロフェッショナルな人間関係に適甚するこずができたす。

原則

䞀般に、原則は蚭蚈に関するガむドラむンである可胜性が高くなりたす。

ディルバヌトの原理

ディルバヌトの法則-Wikipedia

䌁業は、事業ぞの損害を最小限にずどめるために、系統立おお無胜な者から管理職に昇進させお行く傟向がある スコットアダムス

スコット・アダムス挫画「ディルバヌト」の䜜者が開発した経営抂念で、ディルバヌト原則は、ピヌタヌ原則に觊発されおいたす。ディルバヌトの原則では、有胜でない瀟員を管理職に昇栌させるこずで、事業ぞの損害を最小限にずどめる。 Adamsは、1995幎のりォヌルストリヌトゞャヌナルの蚘事でこの原則を最初に説明し、1996幎のビゞネスブック、 The Dilbert Principleでそれを拡匵したした。

関連項目:

パレヌト原理80/20ルヌル

パレヌトの法則-Wikipedia

人生のほずんどのものが均等に分配されおいたせん。

パレヌトの原理は、いく぀かのケヌスでは、結果の倧郚分は少数の入力から来るこずを瀺唆しおいる。

  • 特定の゜フトりェアの80は、割り圓おられた合蚈時間の20で実装できたす逆に、コヌドの最も難しい20郚分を実装するのに時80の時間がかかりたす
  • 2割の努力は8割の結果を生む
  • 2割の仕事が8割の収益を生み出す
  • 20%のバグが80%のクラッシュを匕き起こす
  • 20%の機胜が80%の䜿甚率を匕き起こす

1940幎代には、品質管理の父ず広く信じられおいるアメリカ・ルヌマニアの゚ンゞニア、ゞョセフ・ゞュラン博士が、パレヌトの原則を品質問題に適甚し始めたした 。

この原則は、次のようにも知られおいたす。80/20ルヌル、バむタル・フュヌの法則、ファクタヌ・スパヌシティの原理。

実際の䟋

  • 2002幎に、Microsoftは、最も報告されたバグの䞊䜍20を修正するこずにより、windowsやofficeの関連する゚ラヌやクラッシュの80%が解消されるず報告しおいたす 参考文献 。

ピヌタヌの原則

ピヌタヌの法則-Wikipedia

階局瀟䌚では、人間は胜力の極限たで出䞖する。 ロヌレンス・J・ピヌタヌ

ロヌレンス・J・ピヌタヌによっお開発された経営抂念で、ピヌタヌの原則は、仕事が埗意な人は、もはや成功しないレベル圌らの「無胜のレベル」に達するたで、昇進するず芳察しおいたす。この時点では、圌らはより熟緎であるため、組織から倖される可胜性は䜎く、圌らを成功に導いた元々のスキルが必ずしも新しい仕事に必芁なスキルであるずは限らないため、圌らが本来持っおいるスキルがほずんどない圹割に留たり続けるこずになりたす。

これは、最初ぱンゞニアずしおキャリアをスタヌトさせ、他の゚ンゞニアの管理に぀ながるキャリアパスを描いおいる゚ンゞニアにずっお、特に興味深いものです。管理職には、根本的に゚ンゞニアずは異なるスキルセットが必芁です。

関連項目:

堅牢性の原則ポステルの法則

堅牢性の原則-Wikipedia(英語版)

自分のやるこずは慎重に、他人から受け入れるずきは自由に。

サヌバヌアプリケヌションの開発によく適甚されるこの原則は、他のシステムに送るものは可胜な限り最小限にしお、適合性のあるものにすべきであるが、凊理できる堎合には、適合性のない入力を蚱容するこずを目指すべきである、ずいうこずを述べおいたす。

この原則の目暙は、ハンドルできる堎合には、䞍適合な入力を凊理できるので、堅牢なシステムを構築するこずです。しかし、特にそのような入力の凊理が十分にテストされおいない堎合には、䞍適合な入力を受け入れるこずにはセキュリティ䞊の問題がある可胜性がありたす。

䞍適合な入力を蚱可するず、実装者が最終的にこの自由に䟝存しお機胜を構築するようになるため、プロトコルが進化する可胜性が損なわれる堎合がありたす。

関連項目:

SOLID

これは以䞋を指す頭字語です。

これらは、 オブゞェクト指向プログラミングの䞻芁な原則です。このような蚭蚈原則は、開発者が保守しやすいシステムを構築するのに圹立぀はずです。

単䞀責任の原則

単䞀責任原則-Wikipedia(英語版)

すべおのモゞュヌルやクラスは、単䞀の責任のみを持぀べきです。

「 SOLID 」第䞀原則。この原則は、モゞュヌルやクラスは䞀぀のこずを䞀぀のこずだけを行うべきだずいうこずを提案しおいたす。より実甚的な甚語では、これはプログラムの機胜ぞの単䞀の小さな倉曎は、1぀のコンポヌネントのみの倉曎を必芁ずするこずを意味したす。䟋えば、パスワヌドの耇雑さを怜蚌する方法を倉曎するには、プログラムの䞀郚分だけを倉曎する必芁がありたす。

理論的には、これによりコヌドがより堅牢になり、倉曎が容易になるはずです。倉曎されるコンポヌネントが単䞀の責任を持っおいるこずを知るこずは、その倉曎のテストがより簡単になるこずを意味したす。先ほどの䟋を䜿うず、パスワヌドの耇雑さのコンポヌネントを倉曎するこずは、パスワヌドの耇雑さに関連する機胜にのみ圱響を䞎えるこずができるはずです。倚くの責任を持぀コンポヌネントぞの倉曎の圱響を掚論するこずは、はるかに難しいでしょう。

関連項目:

開攟/閉鎖原則

開攟/閉鎖原則-Wikipedia

゚ンティティは拡匵のために開かれ、修正のために閉じられるべきです。

「 SOLID 」第二原則。この原則では、゚ンティティヌクラス、モゞュヌル、関数などは動䜜を拡匵るこずができなければならないが、 既存の振る舞いは修正するこずができないべきではないずいうこずを述べおいたす。

仮定ずしおMarkdown文曞をHTMLに倉換するこずができるモゞュヌルを想像しおください。ゞュヌルがモゞュヌル内郚を修正するこずなく、新しく提案されたMarkdown機胜を凊理するために拡匵できた堎合、拡匵のためにオヌプンになりたす。既存のMarkdown機胜が凊理されるように、モゞュヌルが利甚者によっお修正されない堎合、修正のためにクロヌズドになりたす。

この原則は、オブゞェクト指向プログラミングに特に関連しおいたす。簡単に拡匵するオブゞェクトを蚭蚈するかもしれたせんが、予期しない方法で倉曎された既存の動䜜を持぀こずができるオブゞェクトを蚭蚈するこずを避けたす。

関連項目:

リスコフの眮換原則

リスコフの眮換原則-Wikipedia

システムを壊すこずなく、タむプをサブタむプに眮き換えるこずができるはずです。

「 SOLID 」原則の3番目。この原則は、コンポヌネントがタむプに䟝存しおいる堎合、システムに障害が発生したり、そのサブタむプが䜕であるかの詳现を知る必芁なく、そのタむプのサブタむプを䜿甚できるはずであるず述べおいたす。

䟋ずしお、ファむルを衚す構造からXMLドキュメントを読み取るメ゜ッドがあるずしたす。メ゜ッドが基本タむプ「ファむル」を䜿甚する堎合、「ファむル」から掟生するものはすべお関数で䜿甚できるはずです。 「ファむル」が逆方向のシヌクをサポヌトし、XMLパヌサヌがその関数を䜿甚するが、逆型シヌクが詊行されたずきに掟生型「ネットワヌクファむル」が倱敗する堎合、「ネットワヌクファむル」は原則に違反しおいたす。

この原則は、オブゞェクト指向プログラミングに特に関連しおいたす。システムのナヌザヌを混乱させないように、型階局を泚意深くモデル化する必芁がありたす。

関連項目:

むンタヌフェヌス分離の原則

むンタヌフェヌス分離原則-Wikipedia(英語版)

䜿甚しないメ゜ッドに䟝存するこずを匷制されるクラむアントはありたせん。

「 SOLID 」原則の4番目。この原則は、コンポヌネントのコンシュヌマヌが、実際に䜿甚しないコンポヌネントの機胜に䟝存すべきではないず述べおいたす。

䟋ずしお、ファむルを衚す構造䜓からXML文曞を読み蟌むメ゜ッドがあるずしたす。このメ゜ッドが必芁ずするのは、ファむル内のバむトを読み蟌んだり、前に移動したり、埌ろに移動したりするこずだけです。ファむル構造䜓の無関係な機胜が倉曎されたためにこのメ゜ッドを曎新する必芁がある堎合ファむルのセキュリティを衚珟するために䜿甚されるパヌミッションモデルの曎新など、その原則は無効になっおいたす。ファむルは「シヌク可胜なストリヌム」むンタヌフェヌスを実装し、XMLリヌダヌはそれを䜿甚する方が良いでしょう

この原則はオブゞェクト指向プログラミングに特に関連性があり、むンタヌフェむス、階局構造、抜象型が異なるコンポヌネント間の結合を最小限にするために䜿甚されたす。ダックタむピングは、明瀺的なむンタヌフェヌスを排陀するこずでこの原則を匷制する方法論です。

関連項目:

䟝存性逆転の原則

䟝存性逆転の原則-Wikipedia

高レベルのモゞュヌルは、䜎レベルの実装に䟝存すべきではありたせん。

「 SOLID 」原則の5番目。この原則は、より高いレベルのオヌケストレヌションコンポヌネントは、䟝存関係の詳现を知っおいる必芁はないこずを述べおいたす。

䟋ずしお、りェブサむトからメタデヌタを読み取るプログラムがあるずしたす。メむンコンポヌネントは、りェブペヌゞのコンテンツをダりンロヌドするためのコンポヌネントに぀いお知る必芁があり、メタデヌタを読み取るこずができるコンポヌネントであるず想定したす。䟝存関係の逆転を考慮するず、メむンコンポヌネントは、バむトデヌタをフェッチできる抜象コンポヌネントず、バむトストリヌムからメタデヌタを読み取るこずができる抜象コンポヌネントのみに䟝存したす。メむンコンポヌネントは、TCP / IP、HTTP、HTMLなどに぀いおは認識したせん。

この原則は耇雑です。システムの予想される䟝存関係したがっお、名前を「逆転」するように芋える堎合があるためです。実際には、別のオヌケストレヌションコンポヌネントが抜象型の正しい実装が䜿甚されおいるこずを確認する必芁があるこずも意味したすたずえば、前の䟋では、 䜕かがメタデヌタリヌダヌコンポヌネントにHTTPファむルダりンロヌダヌずHTMLメタタグリヌダヌを提䟛する必芁がありたす。次に、 Inversion of ControlやDependency Injectionなどのパタヌンに觊れたす。

関連項目:

DRY原則

Don't repeat yourself-Wikipedia

すべおの知識は、システム内で単䞀の明確で信頌できる衚珟を持぀必芁がありたす。

DRYは、 Do n't Repeat Yourselfの頭字語です。この原則は、開発者がコヌドの繰り返しを枛らしお情報を1か所に保管できるようにするこずを目的ずしおおり、1999幎にAndrew HuntずDave Thomasが 『 The Pragmatic Developer 』で匕甚しおいたす。

DRYの反察はWET すべおを2回曞き蟌むか、タむピングを楜しむです。

実際には、2぀たたはそれ以䞊の異なる堎所に同じ情報がある堎合、DRYを䜿甚しおそれらを1぀の堎所にマヌゞし、必芁な堎所で必芁に応じお再利甚できたす。

関連項目

KISSの原則

KISSの原則-Wikipedia

簡朔に単玔にしおおけ

KISSの原則は、ほずんどのシステムは耇雑にするのではなく、シンプルに保぀こずが最もよく機胜するずいうもので、シンプルさは蚭蚈の重芁な目暙であり、䞍必芁な耇雑さは避けるべきだずいうものです。 1960幎にアメリカ海軍で始たったこのフレヌズは、航空機゚ンゞニアのケリヌ・ゞョン゜ンに関連しおいたす。

この原則は、ゞョン゜ンが蚭蚈゚ンゞニアのチヌムに䞀握りの工具を枡し、蚭蚈しおいるゞェット機は、珟堎の平均的な敎備士がこれらの工具だけで戊闘状況䞋で修理可胜なものでなければならないずいう課題を䞎えたずいう話に最もよく䟋瀺されおいたす。したがっお、「バカ」ずは、技術者自身の胜力ではなく、物の壊れ方ず、それを修理するために利甚できる道具の巧劙さの関係を指しおいたす。

関連項目:

YAGNI

YAGNI-Wikipedia

You Ain't Gonna Need It"瞮めお YAGNI

実際にそれらが必芁なずきに垞に実装し、必芁があるず予枬しただけでは決しお実装しないでください。  Ron Jeffries XPの共同創蚭者であり、「Extreme Programming Installed」ずいう本の著者

この゚クストリヌムプログラミング XPの原則は、開発者は圓面の芁件に必芁な機胜のみを実装し、埌で必芁になる可胜性のある機胜を実装しお将来を予枬しようずする詊みを避けるこずを瀺唆しおいたす。

この原則を順守するこずで、コヌドベヌス内の未䜿甚のコヌドの量を枛らし、䟡倀のない機胜に時間ず劎力が浪費されるのを防ぐこずができたす。

関連項目

分散コンピュヌティングの萜ずし穎

分散コンピュヌティングの萜ずし穎-Wikipedia

「ネットワヌクコンピュヌティングの萜ずし穎」ずしおも知られおいるこの萜ずし穎は、゜フトりェア開発の倱敗に぀ながる可胜性のある、分散コンピュヌティングに関する思い蟌み(たたは信念)のリストです。仮定は以䞋の通りです。

  • ネットワヌクは信頌できる
  • 埅ち時間はれロです
  • 垯域幅は無限です
  • ネットワヌクは安党です
  • トポロゞヌは倉わらない
  • 管理者が䞀人だけいたす
  • トランスポヌトコストはれロ
  • ネットワヌクは均䞀です

最初の4぀の項目は、1991幎頃にBill JoyずTom Lyonによっおリストされ、 James Goslingによっお最初に「ネットワヌクコンピュヌティングの倱墜」ずしお分類されたした。 L.ピヌタヌドむチュは、5、6、7番目の誀りを远加したした。 90幎代埌半、ゎスリングは8番目の誀りを远加したした。

このグルヌプは、 Sun Microsystemsの内郚で圓時䜕が起こっおいたかに觊発されたした。

これらの誀りは、匟力性のあるコヌドを蚭蚈するずきに泚意深く怜蚎する必芁がありたす。これらの誀りのいずれかが、分散システムの珟実ず耇雑さに察凊できない欠陥のあるロゞックに぀ながる可胜性があるず仮定したす。

関連項目:

関連曞籍:

もっず興味を感じたなら、以䞋の本を参照しおください。

翻蚳

倚くの玠晎らしい投皿者のおかげで、ハッカヌの法則は倚くの蚀語で利甚可胜です。モデレヌタヌのスポンサヌもご怜蚎ください。

蚀語 モデレヌタ ステヌタス
🇧🇷 Brasileiro / Brazilian Eugênio Moreira, Leonardo Costa gitlocalized
🇚🇳 äž­æ–‡ / Chinese Steve Xu Partially complete
🇩🇪 Deutsch / German Vikto gitlocalized
🇫🇷 Français / French Kevin Bockelandt gitlocalized
🇬🇷 ελληΜικά / Greek Panagiotis Gourgaris gitlocalized
🇮🇹 Italiano / Italian Claudio Sparpaglione Partially complete
🇰🇷 한국얎 / Korean Doughnut Partially complete
🇱🇻 Latviešu Valoda / Latvian Arturs Jansons gitlocalized
🇷🇺 Русская версОя / Russian Alena Batitskaya Partially complete
🇪🇞 Castellano / Spanish Manuel Rubio (Sponsor) Partially complete
🇹🇷 TÃŒrkçe / Turkish Umut Işık gitlocalized
JP 日本語 / Japanese Fumikazu Fujiwara Partially complete

翻蚳を曎新したい堎合は、 open a pull requestするだけです。新しい蚀語を远加したい堎合は、 GitLocalize にログむンしおアカりントを䜜成し、蚀語の管理を䟝頌するためのissueを開いおください。たた、䞊の衚ずファむルの先頭にあるリンクを曎新するプルリク゚ストを開いおいただけるず、ずおも助かりたす。

関連プロゞェクト

貢献方法

貢献しおください! 远加や倉曎を提案したい堎合は Raise an issue、倉曎を提案したい堎合は Open a pull requestt をご利甚ください。

文章やスタむルなどの芁件に぀いおは、Contributing Guidelines を必ずお読みください。プロゞェクトの議論に参加する際には、Code of Conductを意識しおください。

TODO

こんにちはあなたがここに来たずいうこずは、私がただ曞き䞊げおいないトピックぞのリンクをクリックしたこずにですね。

リク゚ストしたい堎合は Raise an Issue rをクリックするか、トピックの定矩案を提出したい堎合は Open a Pull Request をクリックしおください。