ブログトップ 記事一覧 ログイン 無料ブログ開設

Strategic Choice

2016-03-02

[]書籍「プリンシプル オブ プログラミング」を執筆しました


「プリンシプル オブ プログラミング」という本を執筆しました。少し先ですが、2016/03 下旬 発売予定となっています。

書籍紹介・目次

どのような本?

ソフトウェア業界で高名な、よいコードを書くための「プリンシプル」を紹介します。

プリンシプルとは、プログラミングの指針となる「前提」「原則」「思想」「習慣」「視点」「手法」「法則」のことです。これらは、歴史の審査を受けて生き残った、よいプログラミングのためのエッセンス(「普遍的」「定説的」「本質的」な知識)です。

構成は?

プリンシプルを、7つのカテゴリに分けて説明しています。

  • 第1章 前提 〜 プログラミングの変わらぬ真実 〜
  • 第2章 原則 〜 プログラミングのガイドライン 〜
  • 第3章 思想 〜 プログラミングのイデオロギー 〜
  • 第4章 視点 〜 プログラマの観る角度 〜
  • 第5章 習慣 〜 プログラマのルーティーン 〜
  • 第6章 手法 〜 プログラマの道具箱 〜
  • 第7章 法則 〜 プログラミングのアンチパターン 〜

以下で、カテゴリごとに内容を説明し、そのカテゴリで紹介するプリンシプルを列挙します。

<第1章 前提 〜 プログラミングの変わらぬ真実 〜>

プログラミングの「普遍的な事実」に関するプリンシプルを紹介しています。これらは、プログラミングをする上では重要な、いつまでも変わらない「事実」です。そして、全プリンシプルの前提知識となるものです。

「プログラミングに銀の弾丸はない」「コードは設計書である」「コードは必ず変更される」

<第2章 原則 〜 プログラミングのガイドライン 〜>

プログラミングの「原則」に関するプリンシプルを紹介しています。これらの原則は、多くの場合に共通に適用されるべき、プログラミングにおける基本的な「きまりごと」です。

「KISS」「DRY」「YAGNI」「PIE」「SLAP」「OCP」「名前重要」

<第3章 思想 〜 プログラミングのイデオロギー 〜>

プログラミングの「思想」に関するプリンシプルを紹介しています。成功したソフトウェアには、その成功を陰で支えた「文化」「哲学」「価値観」といった思想があります。ただ、因果は逆で、そうした思想的下支えがあったからこそ、「ぶれ」が生じることなく、成功できたのです。(この章のプリンシプルは、サブプリンシプルがあります。カッコ内はその数です。)

「プログラミングセオリー(9)」「アーキテクチャ根底技法(10)」「アーキテクチャ非機能要件(6)」「7つの設計原理(7)」「UNIX思想(17)」「UNIX哲学(9)」

<第4章 視点 〜 プログラマの観る角度 〜>

プログラミングの「視点」「見方」に関するプリンシプルを紹介しています。プログラミングのうまい人は、意識・無意識に関わらず、将来に亘って改善しやすいコードを書いています。そこには、「こういう視点で考えて、こういう要素を考えておくと、後々よい」という、息の長いコードにするための「視点」「見方」が存在します。

「凝集度」「結合度」「可逆性」「直交性」「コードの臭い」「技術的負債」

<第5章 習慣 〜 プログラマのルーティーン 〜>

プログラミングの「習慣」に関するプリンシプルを紹介しています。よいコードを書くプログラマは、結果的によいコードになる「習慣」「行動指針」を持っています。

「プログラマーの三大美徳」「ボーイスカウトの規則」「パフォーマンスチューニングの箴言」「エゴレスプログラミング」「一歩ずつ少しずつ」「TMTOWTDI」

<第6章 手法 〜 プログラマの道具箱 〜>

プログラミングの「手法」「技法」に関するプリンシプルを紹介しています。コードを書くことは、脳に過度の負担をかける思考の作業です。何も策を講じないと、すぐにオーバーフロー、オーバーヒートしてしまいます。すると、「ケース漏れ」が発生して、品質が悪くなります。「要件ズレ」も発生して、ユーザーの思いとは乖離した、役に立たないソフトウェアができてしまいます。そうした事態を防ぐため、達人と呼ばれる人たちは、手法を駆使します。

「曳光弾」「契約による設計」「防御的プログラミング」「ドッグフーディング」「ラバーダッキング」「コンテキスト」

<第7章 法則 〜 プログラミングのアンチパターン 〜>

ソフトウェア開発において陥りやすい「罠」に関するプリンシプルを紹介しています。これらは、ソフトウェア開発の歴史の中で、帰納的に導き出された、否定的な結果を生む「経験則」です。「アンチパターン」とも呼ばれます。そこには、失敗に至る必然的な道筋があります。

「ブルックスの法則」「コンウェイの法則」「割れた窓の法則」「エントロピーの法則」「80-10-10の法則」「ジョシュアツリーの法則」「セカンドシステム症候群」「車輪の再発明」「ヤクの毛刈り」

どうして必要?

プリンシプルは、プログラマの成長の「正道」「近道」です。

プリンシプルは、特定の技術に特化したものではない、抽象度の高い情報です。しかし、今ある具体的な技術というのは、実はプリンシプルの目的を具現化したものです。

プリンシプルの目的は、プログラミングの持つ本質的な問題を解決していくことです。技術は、そのプリンシプルの目的を、プログラマに達成してもらうために発明されます。様々な技術が生まれては消えていきましたが、本当に目的を果たした技術こそが、今も残っています。

ゆえに、プリンシプルを理解していれば、具体的な技術を学んだ時、その「存在理由」、つまり、「なぜその技術が必要なのか」を理解することができます。すると、ただ単に技術を学んでいくより、習得が早く、深くなります。知識が素通りしないような「知識の土台」「知識の取り網」が構築されるからです。

さらに、技術の使い方も格段にうまくなります。技術を、目的に沿った形で、正しく適用できるようになるからです。プリンシプルは、特定の技術に特化したものではありませんが、具体的な技術の習得・使用にも貢献します。

しかも、プリンシプルは普遍的な情報なので、陳腐化することはありません。技術の種類によらず、「どのようなコードを書けばよいか」「どのように行動すればよいのか」を判断できるようになります。一度身に付ければ、今後ずっと使える知識・知恵となります。

つまり、プリンシプルは、プログラマの成長の土台を築き、プログラマを成長させ、その成長を加速させてくれるものです。

どうやって説明?

個々のプリンシプルについて、「それはどういうことなのか(=What)」「それはなぜなのか、なぜ必要なのか(=Why)」「ではどうすればよいのか(=How)」を解説します。とくに「なぜ」を理解できると、プリンシプルの適用判断がうまくなるので、「Why」に力を入れています。

プリンシプルの説明は、シンプルを心がけました。まず、コアだけを上述書式で説明して、コア以外の情報については、「発展」「関連」として、別に説明するようにしてあります。

紹介しているプリンシプルの数は、合計 ちょうど100個 101個になります。「発展」「関連」情報も合わせると、約200個の情報数になります。

プリンシプルの説明は、ブログでエントリしたものでも、内容についてはすべて見直して、全面的に書き直しています。ブログにエントリする機会はなかったのですが、大事なプリンシプルも新たに紹介しています。

読んでほしい人は?

技術に依存しない情報ですので、プログラマ全員に役に立てる内容になっています。

ただ、なかでも特に役に立ちそうなのは、「中級者」を目指す「初級者」プログラマです。つまり、なんらかの言語を覚えて、コードは書けるようになっていて、よいコードを書くことを目指しているのですが、なぜかよいコードにならない、よいコードの指針が欲しい、というステージの人には、効果が覿面(てきめん)だと思います。

感覚的な表現になりますが、「コード書けるけど、なんか、ダメ」という状態の時はあると思います。できる人が持っている、漠然とした「ナニカ」をつかんでいない感、このモヤモヤを取り払うのに、役に立つ情報だと考えています。

もちろん、中上級者が読んでも、単純に「面白い」と思いますし、情報数が多いので、知識の確認・補完になると思います。また、「これぐらいわかっておいてネ」と、経験の浅い後輩に渡す本としても最適です。相当手間が省けますし、その後の会話が楽になります。

書いた人は?

id:asakichy」と申します(ブログのプロフィール)。

ソフトウェア・エンジニアをやっています。ここ数年は、Web系のパッケージソフトウェアを開発しています。立場的にはアーキテクトが一番近いのですが、上長、PM、PLの理解のもと、メンバの協力もあり、極力プログラミングをやらせてもらっています。

技術書読書ブログ(本ブログ:Strategic Choice)を書いています。なんだかんだ800冊以上の技術書を読んでおり、頭に入れておきたい情報をブログにまとめています(まとめ対象の書籍は、エントリ「まとめ本」で一覧可能です)。その中で、プリンシプル的なものを収集していたのがきっかけで、本書の執筆に至りました。

また、技術書に限らず、読書が大好きです。作ることも、知ることも楽しいです。

最後に

やっぱり、「こうしておいたほうがいいよ」という、成功法則だったり、原理原則だったり、コツだったり、習慣はあるのだと思います。本書は、この点に関して、「古今東西、達人たちの智慧」「歴史の教訓」がたくさん(と、私の知恵も少々)詰まっています。

ぜひ、読んでみてください!

tacohachitacohachi 2016/03/12 17:57 いつもはてなブログを読ませていただいているご縁ですので、Amazonで予約させていただきました。楽しみにしています。

asakichyasakichy 2016/03/12 19:43 id:tacohachiさん

id:asakichyです。
予約ありがとうございます!
実物を見る前なのに、感謝です。

ところで、
本書のネタ元は「プログラミング原則一覧」というエントリです。
http://d.hatena.ne.jp/asakichy/20100203/1265158263
そこでは、id:tacohachiさんにコメントいただいているのですが、
そのコメント内容が、本の構成を考えるきっかけになっています。
結果、本書では、「原則」という一様な括りにしないで、
それぞれの特性をとらえて、7つのカテゴリに分けて、章にしています。
このおかげで、情報が整理されて、読みやすくなっていると考えています。

tacohachitacohachi 2016/03/13 11:18 コメントしたことさえ覚えていませんでした。6年前なのですね。
改めて考えると「原則」とは先人のベストプラクティスの推奨なのですね。コンテキストによっては例外があるが、ほとんどの場合には役に立つ。その判断がわからない人は、とりあえず、その原則に従ってみなさいというもの。しかし、多くの書籍に登場する雑多な原則やパターンを眺めていると、どういった体系のものだったか、どういったコンテキストでのものだったかを見失ってしまいます。
asakichyさんは、7つの観点で捉えて整理し、101個を選りすぐられた。私は、800の書籍を読むことはできませんが、この1冊で読んだ気になりたいと思います。

JHashimotoJHashimoto 2016/05/04 16:49 いつもブログを参考にさせてもらっています。書籍化おめでとうございます。ネットで早速注文しました。

asakichyasakichy 2016/05/04 17:46 id:JHashimoto さん

コメントありがとうございます。
id:asakichy です。

ブログを見てもらっているうえに、
書籍購入までしていただき、本当に感謝です。
特に書籍については、なにかid:JHashimotoさんに
役に立つ情報が入っていることを願っています。

ブログ&書籍ともども、
今後ともよろしくお願いします。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証