はじめに
この記事は「プリンシプルオブプログラミング 3年目までに身につけたい一生役立つ101の原理原則」を読んだ際に記した議事録です。
著作権の関係により、詳細には書きません。詳しい詳細を知りたい方はぜひ本書を読んでみてください。
プリンシプルオブプログラミングをPOPと訳します。
What : 良いプログラムへと導く価値観
プログラムを組む際の最大の関心ごとは「最高のコードを作り上げること」です。
ここでの最高のコードは次のように定義します。
「拡張方法が多数存在し、余分な要素が存在せず、読みやすく理解しやすいコード」
そして、最高のコードを作り上げるために、プログラミングには「セオリー」が存在します。そのセオリーは次の三つの価値観が土台になっています。
コードを書く際はこの価値観が意思決定する大事な要素となります。
Why : セオリーの価値観を技術の選択基準にする
プログラミングには問題領域に応じた様々な技術パターンがあります。技術を「知る」「理解する」「覚える」ことは重要ですが、小手先のテクニックに過ぎず本当の意味で「使える」ようにはなっていません。
言語なんかもまさにそうです。JavaScriptを勉強したからといって「使える」ようになってはいません。
プログラミングにおける課題解決は、ケースバイケースです。100個課題があれば100通りの最適解があります。目的に沿った適応理由を見出せないと、適切な技術を選択できません。技術を使い倒すには「なぜ?」を突き詰めて、本当の価値を理解して向き合っていけるようにしなければなりません。
サービス一つを作る際の言語選定においても「なぜこの言語を選定するのか」をしっかり説明できなければなりません。
「目的」と「手段」が逆になってはいけません。
How : コードを書く際は原則、価値観に基づいて書く
しかし、価値が三つしかなければ抽象的で過ぎます。価値とプログラミングをつなげていくには両者をつなげる橋渡しの存在が必要です。両者をつなげる6つの価値観が次です。
- 結果の局所化
- 繰り返しの最小化
- ロジックとデータの一体化
- 対称性
- 宣言型の表現
- 変更頻度
関連
フォース
技術を適用する時に考慮するべき観点のことを「フォース」と言います。これは課題解決のための「視点」です。
フォースによって様々な角度から課題を検討できます。また、課題そのものについても詳細に把握することができます。
それはなぜその形をしている?
「フォーク」を想像してください。なぜ、フォークはあのような三本だけ先が突出した形をしているのでしょうか。それは「その形が最もフォークとしての役割を果たすから」です。
「携帯は機能に従う」という格言があります。「道具の形状は目的によって決まる」という意味です。プログラムも然りです。問題を解決する、理想を実現するために適切な形、姿(アルゴリズムや技術選定)が存在します。
ですので、技術を習得する際は「動作原理や進化の過程」「設計の背景にあるもの」も同時に知るようにします。「知識を覚える」ではなく「自分に溶かす」イメージでしょうか?
良いプログラマは、時間がかかっても全ての事柄において論理的に説明できるように理解してから作業に取り掛かる傾向があります。「よくわからないけど動いたからよし」「なんでか知らんがエラー治ったからよし」は初心者あるあるですが、これはよくありません。後からなんらかの形で品質に障害が発生します。
終わりに
この記事ではプリンシプルオブプログラミング 3年目までに身につけたい一生役立つ101の原理原則の議事録を自分用に記しています。
この記事ではカバーしきれていない部分も多いので、是非本書を手にとって読んでみてください。
次回、「【POP12】プログラミングのセオリー①コミュニケーション」です。ぜひ、次の記事も読んでみてください。