(旧)平凡エンジニアからの出発

https://atuyan39.hatenablog.com/ に移動しました。

【技術書】『プリンシプルオブプログラミング』を読んで No.1

目次

作業時間

2020/6/3

  • 18:15-19:15 読書(1H)
  • 19:15-19:45 ブログまとめ(0.5H)

作業報告

プリンシパルオブプログラミング(P.62まで)

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

1.1 プログラミングに銀の銃弾はない

No Silver Bullet in programming.

  • プログラミングには、魔法のような解決策はないもの
  • プログラミングの成果物である「ソフトウェア」は、本質的に困難である
  • ソフトウェア開発の歴史を学び「複雑さ」と戦う
1.2 コードは設計書である

Code as design.

  • 設計行為の成果物はコードでしかありえない
  • プログラミングは設計であり、創造的な行為である
  • 設計というのは、、創造的な、かつ技芸の必要な行為である
1.3 コードは必ず変更される

Code will bechanged.

  • どのようなフェーズでも、様々な理由で、コードには必ず変更が入る
  • だからこそ、「変更に強いコード書く」ことを心がける
  • そのためには「コードが読みやすい」ということが最も大切

第2章 原則~プログラミングのガイドライン

2.1 KISS

Keep It Simple, Stupid

  • コードはシンプルに保つこと
  • コードに余計なことはしないこと
  • 「less is more」は「より少ないことは、より豊かなこと」
2.2 DRY

Don't Repeat Yourself.

  • 同じコードを重複して書いてはいけない
  • リファクタリングの時間やデグレのリスクを取ってでも、重複を排除すること
  • プログラミング技術の多くは、コードの重複を排除する目的がある
2.3 YAGNI

You Aren't Going to Need it.

  • コードは必要最低限に、今必要なコードだけ書くこと
  • コードの予想は外れて、結局利用されないことが多い
  • 汎用性よりも、単純性を考えること
2.4 PIE

Program Interntly and Expressively.

  • ソフトウェアの動作を把握するには、コードを読むしかない
  • コードは「書かれること」よりも「読まれること」の方がずっと多い
  • コードは「書く効率」よりも「読む効率」が優先することで価値が累積的に膨れ上がる
2.5 SLAP

Single Level of Abstraction Principle.

  • コードの抽象レベルを揃えることで書籍の目次のようになる
  • 名前で意図を伝えるために処理が1行であっても関数にしてかまわない
  • 「具体的な処理を書く作業」と「抽象化レベルを揃える作業」は別の作業と心得る
2.6 OCP

Open-Closed Principle

  • 拡張に対して開いているとは、「コードの振る舞いを拡張できる」ということ
  • 修正に対して閉じているとは、「コードの振る舞いを拡張してもその他のコードはまったく影響を受けない」ということ
  • OCPの代表的な技術は、オブジェクト指向の「ポリモーフィズム」が当たる
2.7 名前重要

Naming is important.

  • 命名」を最重要課題として認識し、慎重に取り組むようにする
  • 適切な名前を付けることができたら、その設計の大部分が完成したと考えてよい
  • コードを読み書きしているとき、プログラマは、常に脳への過負荷と戦っている!

所感

ほんとコード読むのは頭使う。
読みやすいコード、わかりやすいコードは本当にありがたい。
先人の知恵の詰まった技術書の勉強は毎日すべきだと思った。

一転語

人間はハングリー精神を失ったときに”若者”ではなくなります。その人が若者であるかどうかを分けるものは、このハングリー精神の有無なのです。「まだ十分ではない。まだ満腹していないぞ」という気持ちがあるかどうかです。
【勇気の法 p.118】