プリンシプルプログラミング プログラミング

【POP22】アーキテクチャ根底技法①抽象について

はじめに

この記事は「プリンシプルオブプログラミング 3年目までに身につけたい一生役立つ101の原理原則」を読んだ際に記した議事録です。

著作権の関係により、詳細には書きません。詳しい詳細を知りたい方はぜひ本書を読んでみてください。

プリンシプルオブプログラミングをPOPと訳します。

What : 概念的な線引き

抽象すなわち概念的に明確な線引きを行うこと。線引きに基づいてモジュールを、それ以外のモジュールから明確に区別します。

抽象は「捨象」「一般化」の二つの観点からまとめられます。

捨象・・・複雑な対象のいくつかの性質を捨て去り、特定の性質に目を向けること。

一般化・・・具体的な対象から共通の性質を抽出し、より汎用的な概念に定式化すること。

 

Why : 複雑さへの対抗手段

Rubyなどでは「すべてのデータがオブジェクト」と言ったりもします。コードを書く際はデータや処理などが膨大に存在しており、とりあえず「複雑そのもの」です。複雑なものに取り組む際の基本的な対抗策が抽象化です。

「捨象」は枝葉を取り除き、対象物の本質を剥き出しにします。無駄がなく使いやすく、広く応用がききます。

「一般化」は複数のものを共通の特徴によってグルーピングし、「同じもの」と見なすことです。一つの事象における学びを他の場面でも適用することを可能にします。「一を聞いて十を知る」です。

プログラミングには本当の意味での「チート」は存在しません。しかし、あらゆる課題を解決する際に「目的に応じた抽象化」という思考法は、「より良く」「より効率的」な解法を導き出すための強力な武器になります。

How : 抽象化の「捨象」と「一般化」を使い倒せ

より良い抽象化技術は、優れた設計を構築するためのプログラマの基礎技術です。

複雑な対象には「捨象」しましょう。余計なものを削ぎ落とし、本質だけに目を向けるのです。取り組んでいる問題に対して「今、着目している側面からの本質」をバチっと捉えましょう。

異なる複数の対象に取り組む際は「一般化」します。共通の性質を見つけ出し、共通点を組み合わせて汎用的な概念を構成します。プリンシプルこそ好例でしょう。

一般化は「複数の事象の間にある共通のプリンシプルを見つけるパターン認識技術」です。身の回りのものにパターンを見つけては名前をつけて、あらゆる場面に活用します。

Googleが最近打ち出した広告ターゲティング手段「FLoC」などまさにそうです。すべてのものを具体的にしていては、複雑だし量は多いし無限に時間がかかります。二つの抽象化の技術を身につけましょう。

終わりに

この記事ではプリンシプルオブプログラミング 3年目までに身につけたい一生役立つ101の原理原則の議事録を自分用に記しています。

この記事ではカバーしきれていない部分も多いので、是非本書を手にとって読んでみてください。

次回、「【POP24】アーキテクチャ根底技法②カプセル化について」です。ぜひ、次の記事も読んでみてください。

  • この記事を書いた人
  • 最新記事

ミッチー

小中高と野球漬けの毎日 ▶︎ 大学時に自分が何もできないことに気づき、プログラミング学習開始 ▶︎ PCは疎かったがめげずに継続 ▶︎ 受託で案件を頂きながら、オーダースーツ事業に、通販事業にも参戦 ▶︎ 東証一部Web系自社開発企業にエンジニアとして内定。

-プリンシプルプログラミング, プログラミング

© 2022 オミチャンネル Powered by AFFINGER5