【書籍紹介】「達人プログラマー 第2版」の内容をカテゴリ分けして感想をまとめる

おすすめ技術書
マイケル
マイケル
みなさんこんにちは!
マイケルです!
エレキベア
エレキベア
こんにちクマ〜〜〜
マイケル
マイケル
今回は久しぶりに読んだ書籍についての感想と紹介をしようと思います!
今回紹介する書籍はこちら!!

IMG 1951

達人プログラマー(第2版): 熟達に向けたあなたの旅

マイケル
マイケル
「達人プログラマー」!!
定番オブ定番の名著です!!
エレキベア
エレキベア
で、出た〜〜〜〜〜〜
マイケル
マイケル
よく見かけるので存在自体は知っていたのですが、
読んだことがなかったので、これを機会に読んでみました!
ざっくりとした感想としては、評判通り「エンジニアなら一度目を通しておいて損はない」内容になっていたと思います!
マイケル
マイケル
そして時折ジョークの効いたユニークな表現も盛り込まれているので
単純に読み物としても面白かったです!
エレキベア
エレキベア
爬虫類脳なんかはよく聞くクマね
マイケル
マイケル
とはいえ最初に読み始めた時は少し分かりにくい箇所もあったので、
その辺りも踏まえつつ、感想と内容のまとめをしてみようと思います!
エレキベア
エレキベア
楽しみクマ〜〜〜〜
スポンサーリンク

各章ごとのカテゴリ

マイケル
マイケル
達人プログラマーでは、9章にわたって100個のプログラマーにまつわるTipsが紹介されており、基本的にはどこから読んでも分かるようになっています。
長年続けているプログラマーならあるあるの事項から普段意識していなかった点についても見直すことができると思いますし、始めたばかりの人であればこれから関わる広い範囲の知識をざっくりと得ることができるので、全プログラマーにおすすめの内容になっています。
エレキベア
エレキベア
100個はボリュームがすごいクマね〜〜〜
マイケル
マイケル
しかし、自分が読みながら分かりにくいな・・・と思った点もありまして、それはユニークな表現にしているが故に各章の題目だけで何が言いたいのかが読み取りにくかったことです。
この辺りのイメージをざっと踏まえておくと頭に入りやすいので、これから読み始めようと思っている方の参考になればと思います。
マイケル
マイケル
ざっくりにはなりますが、各章は下記のようなカテゴリに分かれています。
カテゴリ
1. 達人の哲学マインド
2. 達人のアプローチ設計(設計の考え方、進め方)
3. 基本的なツールツールの活用
4. 妄想の達人設計(先を読んだ設計)
5. 棚に雪折れ無し設計(コーディングの設計原則)
6. 並行性設計(並行処理の設計)
7. コーディング段階コーディング手法
8. プロジェクトを始める前にマネジメント
9. 達人のプロジェクトまとめ
エレキベア
エレキベア
確かに「妄想の達人」「棚に雪折れ無し」あたりはパッと見でどんな内容なのかが想像つきにくいクマね・・・
マイケル
マイケル
この辺りのイメージを把握しておくだけでも、かなり理解しやすくなると思います!
また、こうしてみると設計に関しての話が大半を占めていることも分かります。やはり設計も含めて行えるというのが、達人プログラマーになるために必要なことなのが伺えますね。
エレキベア
エレキベア
言われたままにコードを書くだけではとても達人とは言えないクマ〜〜〜

カテゴリごとのまとめ、感想

マイケル
マイケル
それではざっくりとカテゴリ分けが出来たところで、
分けた5つのカテゴリごとにいくつかピックアップして、その感想についてまとめていきます。

  • マインド
  • 設計
  • ツール
  • コーディング
  • マネジメント

エレキベア
エレキベア
Tipsの紹介をしている記事が多そうクマが、
ここでは総まとめでいくクマね

マインド

1.達人の哲学 より
  • 割れた窓を放置しておかない
  • 知識ポートフォリオを充実させる
マイケル
マイケル
マインドとしては2つピックアップさせていただきました!
1つ目は「割れた窓を放置しておかない」ですが、こちらはソフトウェアの負債や腐敗は放置せずに発見と共に修復しましょう、といったTipsです。
放置された負債は増大したり、チームにネガティブな考えが伝染する、といった内容が「エントロピー増大の法則」「割れ窓理論」といった理論を例に解説されています。
エレキベア
エレキベア
見なかったことにしよう・・・は一番まずいクマね
マイケル
マイケル
そして「知識ポートフォリオを充実させる」については、下記のように進めるとよい、と紹介されていました。


・毎年1つは新たな言語を学習する
・月に1冊のペースで技術書を読む
・技術書以外の書籍を読む
・最先端にとどまり続ける

マイケル
マイケル
まあこの辺りはあくまで目安で、個々人で目標は立てて進めれ馬いいのではないかと思います!
ただ、最先端の技術を学ぶことについては「技術には流行り廃りがあるため賞味期限がある」ことや、「安値で買い、高値で売るとよい」とも書かれていて、確かにエンジニアとしてやっていく上でそこは大事だなと思いました。
エレキベア
エレキベア
流行や先を読む力も重要になってくるクマね

設計

マイケル
マイケル
設計については章が分かれているので、それぞれ簡潔に見ていきます!
2. 達人のアプローチ より
  • DRY原則について
  • 曳光弾を意識した進め方
マイケル
マイケル
まず有名な「DRY原則」がここで出てきました。
これは「コードの二重化を避けるべき」といった原則で、コーディングする上では基本となります。
ただ、同じ処理でも表現しているものが異なるのであれば分けたほうがよかったりなど、何もかも共通にすればよいというわけではないので、悩みながら進める難しいところですね!
エレキベア
エレキベア
DRY原則は心に刻んだほうがよさそうクマ
マイケル
マイケル
そして「曳光弾」については比喩的な表現となっていますが、「狙いを定めてから肉付けしていく形で進める」といった内容になります。
プロトタイプと異なるのは、使い捨てではなく最終的なシステムの骨格となるという点です。
エレキベア
エレキベア
向かう先が曖昧だとどこにも行きつかずなものになってしまうクマからね
4. 妄想の達人 より
  • 契約による設計
  • 防衛的なコーディング
マイケル
マイケル
そして次は「妄想の達人」からですが、これは「妄想=予測」ともとらえることができます。
要は先も見据えた設計にしましょう、といった内容になります。
マイケル
マイケル
「契約による設計」は、機能に対して「事前条件」「事後条件」「不変表明」を設定し、それらを満たしていることを担保する手法です。

「防衛的なコーディング」に関しては、例外は早めにクラッシュ(停止)させる起こるはずがない事象に関しては表明を入れておく、といったようにどのような事象に対しても防衛的な考えでコーディングを行いましょう、といった考え方になります。

エレキベア
エレキベア
妄想が激しいことも必要なことなのクマね
5. 棚に雪折れ無し より
  • 継承、委譲、責務、グローバル変数
  • イベント(FSM、Observer、PubSub)
  • 変換(パイプライン)
  • 外部設定
マイケル
マイケル
そして「5. 棚に雪折れ無し」に関しては、コーディング寄りな話になり、主な設計原則やよく使われるコーディング手法について解説されています。
マイケル
マイケル
継承や責務の話に関してはざっくりとした内容が書かれています。
より細かいことを知りたくなった方はクリーンアーキテクチャを読みましょう!
エレキベア
エレキベア
SOLID原則クマね
マイケル
マイケル
イベント処理に関しても、プログラミングを行う上で避けては通れない処理です。
これらも過去記事で実際に実装した記事があるので、よければご覧ください!!
エレキベア
エレキベア
うーむ、懐かしいクマ〜〜〜

ツール

3. 基本的なツール より
  • コマンドシェルを活用する
  • エディターに熟達する
マイケル
マイケル
次はツールに関して!
「コマンドシェルを活用する」に関しては、文字通りシェルを使いましょう、といった内容です。
「GUIだけで作業を進めるのは、使っている環境の持つ能力全てを使いこなしていないこと」とも書かれており、自分専用のシェルを作ることを推奨されています!
マイケル
マイケル
シェルを活用した例だと、下記のようなツールを作ったり等していました。
エレキベア
エレキベア
GUIに使われるのでなく、OSの機能をふんだんに使いたいクマね
マイケル
マイケル
そして「エディターに熟達する」について、「普段使っているエディターでの作業について、マウス無しで全て行えますか?」といった質問に対してウッとなりました。
ショートカットのみで普段の作業を行える程度には覚えておく必要があると感じました!!
エレキベア
エレキベア
エディタを使うなら使いこなせということクマね

コーディング

7. コーディング段階 より
  • 偶発的プログラミングを避ける
  • アルゴリズムのスピードを意識する
  • リファクタリング、テストについて
  • セキュリティ対策について
  • 名前の付け方について
マイケル
マイケル
そしていよいよコーディングになるのですが、基本的なことが詰まっています。
「偶発的プログラミングを避ける」については、「偶然動いたで進めるのはやめましょう」といった内容です。動く理由をしっかり把握する必要がある、ということですね。
エレキベア
エレキベア
確かに最初はやってしまいがちだった気がするクマ
マイケル
マイケル
「アルゴリズムのスピードを意識する」については、どれだけの数の処理を行うのかを考慮しながら使用するアルゴリズムを選定できるようになりましょう、といった内容になっています。
エレキベア
エレキベア
O(1)、O(n)みたいなやつ(※)をちゃんと把握しろということクマね
※O記法といいます
マイケル
マイケル
そしてリファクタリング、テスト、セキュリティ対策についてもしっかり盛り込まれています。
テストを書きながら進めることは本当に大事です!!
エレキベア
エレキベア
クマはTDDを推奨するクマ
マイケル
マイケル
そして「名前の付け方について」は、リーダブルコードを読みましょう!!
エレキベア
エレキベア
これもエンジニア必読書クマ〜〜〜

マネジメント

8. プロジェクトを始める前に より
  • プログラマの仕事は、人々が欲しているものを自らで気づいてもらえるよう支援すること
  • 使う人の手に馴染むツールが正しいツールである
  • ペアプロ、モブプロについて
  • アジリティーについて
マイケル
マイケル
そして最後はマネジメント!
マネジメントといってもチーム管理よりはどちらかというと、要求に近づいていけるようなアジャイル的な考え方についての内容がメインとなっています。
アジャイルやスクラムについて知りたい方は、下記記事にまとめてあるのでこちらもよければご参照ください!
マイケル
マイケル
一つ目の「プログラマの仕事は、人々が欲しているものを自らで気づいてもらえるよう支援すること」に関しては読んで字の如くです!
「最初の要求は本当の要求であることはない」とされており、相談者の現場を見てなりきることや、フィードバックを繰り返して学んでいきましょう、といった内容になっています。
エレキベア
エレキベア
フィードバック、振り返りを通して改善していくのはまさしくアジャイルの考え方クマね
マイケル
マイケル
そして「使う人の手に馴染むツールが正しいツールである」についてもそのままの意味で、ツールを作る上でのゴールは忘れてはいけません。
逆を言えばいくら機能を詰め込んだところで使う人が微妙に感じればツールも微妙ということになります。技術に目を奪われて以外と見失いがいちな点なので、気をつけるようにしましょう!!
マイケル
マイケル
その他、ペアプロ、モブプロといったXPのプラクティスや、アジャイルな考え方についてもしっかり解説されています!
これは第2版で追加された内容のようですね!
エレキベア
エレキベア
現代の進め方を盛り込んでいるのは素晴らしいクマね

ユニークな表現

マイケル
マイケル
まとめと感想は以上になるのですが、それ以外でもユニークな表現が多く読み物としても面白いものだと感じました。
個人的にはこのような表現は大好きなので、いくつか載せておきます!
(意味まで書くと読んだ時の楽しみが薄れそうなのでそこは省いています)

  • 猫がソースコードを食べちゃった
  • 石のスープとゆでガエル
  • 象を食らう
  • 爬虫類脳からの声に耳を向ける
  • ゴムのアヒルちゃん
  • ドードー鳥なコードは記述しない
  • ココナツでは解決できない

マイケル
マイケル
それぞれどんな意味が込められているか想像できますでしょうか?
気になった方は是非本を手に取って読んでみてください!!
エレキベア
エレキベア
シャレが効いて記憶にも残りやすいからこういうのは楽しいクマ〜〜〜

おわりに

マイケル
マイケル
というわけで達人プログラマーの紹介でした!
どうだったかな???
エレキベア
エレキベア
読み終えたことでなんだか達人に近づいた気がするクマ〜〜〜〜
マイケル
マイケル
全部実践できるのは中々難しいだろうけど、せっかくやるなら達人と呼ばれるくらいを目指したいね!!
取り入れることができる点は実践してみよう!!
マイケル
マイケル
それでは今日はこの辺で!!
アデューー!!
エレキベア
エレキベア
クマ〜〜〜〜〜

【書籍紹介】「達人プログラマー 第2版」の内容をカテゴリ分けして感想をまとめる 〜完〜

コメント