「プログラマが知るべき97のこと」で絶対に知っておくべき3のこと

#はじめに
よく名前を聞く著書**『プログラマが知るべき97のこと』**がWebで無料公開していたため、読んでみました。
その中で自分が特に「これは知っておくべきだ！」と思った下記３章をピックアップして紹介したいと思います。

↓絶対に知っておくべきこと
- [64.プロのプログラマとは？](https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/%E3%83%97%E3%83%AD%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%A8%E3%81%AF/)
- [69.車輪の再発明の効用](https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/%E8%BB%8A%E8%BC%AA%E3%81%AE%E5%86%8D%E7%99%BA%E6%98%8E%E3%81%AE%E5%8A%B9%E7%94%A8/)
- [91.良いプログラマになるには](https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/%E8%89%AF%E3%81%84%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%AB%E3%81%AF/)

↓から読めます。
[プログラマが知るべき97のこと](https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/)

#著書の概要
世界中で活躍しているプログラマの人たちが、自身の大切にしている考え方などを１章あたりA4用紙1, 2枚分くらいの文字数でまとめてくれています。それが97 + 10個も載っています。
1つ1つは短いのでスラスラ読めちゃいます。

# 64.プロのプログラマとは？
プロのプログラマは、**自身が行ったこと全て対して、責任を持ちます。**

- **自身のキャリアに責任を持つ**
**「キャリアに責任を持つというのは、自分の力で自分の価値を高め、成長していくということです。」**  
**自分の意志**で新たな知識と技術を習得し、常に最先端にいられる努力をします。
プログラマに教育を受けさせるのは雇っている会社の責任だと考えている人も多いようですが、それは間違いです。
プロのプログラマなら、仕事後や休日に自費を使い自らの意志で勉強し、自力で最新の知識を得る必要があります。  
プログラマと会社との間の関係は雇用契約書に明記されているはずです。
それを見れば、なぜ自分が会社から給料をもらえるのかがわかるでしょう。
プログラマは**良い仕事をする**と約束をしたから、その見返りに給料の支払いが約束されているのです。

- **自身が書いたコードに責任を持つ**
プロのプログラマは、**間違いなく正しく動く**と確認できるまではリリースをしません。
正しく動くかどうか確信のないコードをリリースしてしまう人をプロとは呼べません。  
プロのプログラマは品質保証(QA)チームに問題を見つけてもらおうとは考えません。
徹底的に自身でテストをし、「絶対にもう問題など見つかるはずはない」と思えるまで、コードを渡さないのです。
もちろん人間のすることなので、それでもQAでは何か問題が見つかることになりますが、それは仕方のないことです。  
重要なのは、**何も問題が見つからないよう努力する姿勢**です。まさにそれがプロの姿勢なのです。

- **自身の所属するチーム全体のアウトプットに責任を持つ**
プロのプログラマは**チームプレイヤー**です。
一人一人が自分の仕事だけでなく、**チーム全体のアウトプット**に責任を持ちます。  
互いに助け合い、互いに学び合い、足りないところは補い合います。
チームメイトが何か失敗したときには、誰かがカバーします。
いつか必ず**自分が逆にカバーしてもらうことになる**と知っているからです。

- **自身の仕事に責任を持つ**
プロのプログラマは、絶対に、**間に合わせのいい加減な仕事**はしません。
自分の誇りにかけて、無駄のない・構造化された・読みやすいコードを書くよう常にこころがけます。  
決してあわてて仕事に取り組むようなことはありません。
納期に追われていても、**「とにかく時間内に終わればよい」**というようないい加減な仕事をしません。
時間の無い中でも平常心を保ち、決して手を抜かず、その時にでき得る最善の処置をします。  
間に合わせの仕事ではなく、**最善の努力を尽くしてプロの仕事**をします。

# 69.車輪の再発明の効用
**「車輪の再発明」**をする行為は世間一般的には嫌われています。
再発明するより、既存のモノを流用する方が安全でコストが少なくて済むからです。
また、モノを作るのには**時間と労力**が必要です。
既にあるモノを作るために時間と労力をかけるのは、無駄だと思われがちです。

世の中には、ソフトウェア開発のパターンや、設計について書かれた本がたくさん出回っています。
ただ、**そういう本を読んだからといって自分もできるようにはなりません。**

「車輪の再発明」をしようと思えば、**車輪の中の構造まで**理解しなければなりません。
部品から自分の手で作ろうとすれば、さらに大変です。
その部品の中でどんな処理をさせるのか、また他の部品はどんな処理をしているのか、嫌でも詳しく知ることになります。

メモリ管理、たとえば仮想ページングなどはどうなっているでしょうか。果たして自分の手でそれを実装できるでしょうか。
双方向リスト、動的配列クラス、ODBCクライアントのコードなどを自分で書けるでしょうか。
ファイルベースのデータベースとメモリベースのデータベースのどちらを使うか、自分で判断することなどはできるでしょうか。

こういう**ソフトウェアの核**になる部分を自ら実装する機会を持てるプログラマはごくわずかです。
このため普通の開発者は、これらの部分が現実にどのように機能しているのかを**詳しく知ることができません。**
どう動いているか自分ではわからないために、「ブラックボックス」とみなし、機能した結果を利用するしかないのです。
中身を理解しないで結果だけを見ているだけでは有効活用できません。

車輪の再発明をしようとした結果、失敗をすることもあるでしょう。
しかし、それは**一度で車輪の再実装がうまくいくよりも貴重な体験**になるはずです。
自分の手でゼロからコードを書き、試行錯誤をすることは、ただ技術者を読んで学ぶのとは大きく違います。

本を読むなどして知識を頭に入れることも大切です。
しかし優れたプログラマになるためには、**経験を積むこと**がどうしても必要です。
**車輪の再発明は、プログラマが学び、技術を高める上で非常に重要なことです。**

# 91.良いプログラマになるには
「64.プロのプログラマとは？」と被る部分が多いですが、良いプログラマの姿勢は、**プロフェッショナル**という言葉にふさわしいものです。常に、**最大限の力を尽くして**良いコードを書こうとします。リソースの制約のある中、早く作業を終わらせろと会社が圧力をかけてくる中、それでも**できる限り良いコード**を書こうと努力をするのです。

良いプログラマになりたいのなら、常に次のことを心がける必要があるでしょう。

- **どんな場合でも、「とりあえず動きそう」というだけのコードは決して書かない。**
誰が見ても間違いなく正しいとわかる、美しいコードを書くよう常に心がける。

- **わかりやすいコード、保守しやすいコード、正しいコードを書く。**
本当に正しいと言えるかどうかはあらゆる手段を使って確認する。

- **他のプログラマと協調する。**
プログラマは孤立した存在ではなし、1人だけで仕事をするプログラマはほとんどいない。
常に他のプログラマの存在を意識し、**他人が読みやすいコードを書くよう心がける。**
自分の優秀きを見せつけることでなく、**チーム全体の成果を最良にすること**を考える。

- **自分が扱ったコードは、必ず、自分が最初に見た時よりも少しでも良いコードにする。**
絶えず積極的に新しい言語、イディオム、テクニックを学ぶ。
ただし、学んだことをむやみには使わず、適切と判断した場合にのみ使う。

**是非これからもプログラミングを楽しんで、難しい問題を見事解決でき、自ら誇りに思えるプログラムを書きましょう。**

#おわりに
ほとんどコピペですが、以上が**「プログラマが知るべき97のこと」で絶対に知っておくべき3のこと**です。
「プログラマが知るべき97のこと」の中には他にも、ためになる話はたくさんありましたが、上の3つが個人的には特に心に響きました。
まだ読んでいない方は是非読んでみてください！