ちゃんなるぶろぐ

社会人1年生が、日々の学びをアウトプット〜読書・遊び・プログラミング〜

5分でわかる!「プログラマが知るべき97のこと」その③⓪

読み終えるまで約5分

 

 

どうも、ちゃんなるです! 

今日も”デキる”プログラマになるべく勉強していきましょう!

 

今回は、次の書籍の一部を要約します。

プログラマが知るべき97のこと』

 

下の記事の続編です↓↓

chan-naru.hatenablog.com

 

今回選択した3つのテーマ

本書はタイトル通り97のことについて書かれています。

今回は、88~90番目の項目についてまとめます。

  1. コードは生涯サポートするつもりで書く(No. 88)
  2. 関数の「サイズ」を小さくする(No. 89)
  3. コードを見る人のためにテストを書く(No. 90)
①コードは生涯サポートするつもりで書く

このテーマで述べられていたことは、

「書くコード1行1行が今後の自分のキャリアを決める、という意識を持って日々のコーディングに向き合おう。」

ということです。

 

以下、要約です。

本書『プログラマが知るべき97のこと』では、実にさまざまな情報や知識、ベストプラクティスが語られています。

どれも重要で、身になるものですが、なかなか個別で実践するのは難しいかもしれません。

 

そんな時は次のように考えるといいでしょう。

いつも「このコードは生涯、自分がサポートし続けなくてはならない」と思ってコードを書く。

(176ページより)

もし本当に生涯サポートしなければならないなら?

以前勤めてた会社、あるいは今の勤務先から真夜中に電話がかかってきて「なぜこのコードを書いたの?理由を説明して!」と言われても文句を言えないとしたら?

 

「そんな問い合わせを受けないようなコードを書きたい」と思うはずです。

そしてそのために、あらゆる情報・知識・ベストプラクティスを駆使して最高のコードを書こうと努力するはずです。

 

コードを書く度に、ユーザのこと、顧客のこと、そして自分のキャリアのことを考え、「このコードは自分の人生を決めるんだ。」と思ってコーディングに臨みましょう。

②関数の「サイズ」を小さくする

このテーマで述べられていたことは、

「問題領域についての知識を基に関数を作成し、その関数で確認するべきパターンの数をどれだけ減らすことができるかを考えることが重要である。」

ということです。

 

以下、要約です。

自分の書いたコードが正しいという証拠の一つに、(数学関数における)「サイズ」という指標があります。

 

例えば、囲碁における「アタリ」の状態を判定するプログラムを書くとします。

アタリ:相手に石を囲まれ、撮られる一歩手前の状態のこと)

そこで次のような関数を書いたとしましょう。

 

boolean atari(int libertyCount)

    libertyCount < 2

 

数学関数は、引数値intと戻り値booleanがとりうる値の組み合わせの部分集合と捉えることができます。

詳細は省きますが、JavaでのInt×Booleanの集合には、8,589,934,592個の要素があります。

関数が完全に正しいと証明するには、これらの要素全てを調べる必要があります。

 

ここで助けになるのが問題領域についての知識です。

囲碁の場合、石の周りの隙間の数は{1, 2, 3, 4}のいずれかなのです。

つまり、上の関数は下記のように書き換えられます。

 

LibertyCount = {1, 2, 3, 4}

boolean atari(LibertyCount libertyCount)

    libertyCount == 1

 

数学関数は、最大で8つの要素を持つだけの集合になりました。

これだとはるかに扱いやすく、8つの例を調べるだけで関数が完全に正しいという証拠が得られます。

 

問題領域固有の型を使うと、関数の「サイズ」を大幅に小さくできる場合が多いです。

関数を書く際はまず、問題領域についての知識を基に確認すべき例の数をどこまで減らせるかを考え、どの型を使うべきかを決定しましょう。

③コードを見る人のためにテストを書く

このテーマで述べられていたことは、

「まずテストを書くことは素晴らしいことである。そして、そのテストが他者がコードを理解しやすいように書いてあるならば、なお素晴らしいことである。」

ということです。

 

以下、要約です。

「製品版コード一つ一つについて、必ず自動化テストを書くようにしている」

「テストは、いつもコードを書き始める前に書くようにしている」

このような人がいれば素晴らしいです。

 

「テストを書くこと」はいいことですが、そのテストが「いいテストである」ことはどうやって判断すればいいのでしょう?

「自分は誰のためにテストを書いているのか?」と自問するのが1つの方法でしょう。

もしその答えが「自分のため。バグ修正の労力を少しでも減らすため。」なら、いいテストがかけてる可能性は高くないでしょう。

 

ではいったい誰のためにテストを書けばいいのでしょう?

それは、「コードを見る人のため」です。

いいテストはドキュメントとなり、「このコードはどう動くのか」を教えてくれます。

 

いいテストの条件

  • コンテキスト、出発点、満たすべき事前条件がわかる
  • ソフトウェアがどのように起動されたかがわかる
  • 期待される結果と、確認すべき事後条件がわかる

実際にテストを書いたら、そのテストを、テストで対象としているコードについて全く知らない人に見てもらうといいでしょう。

もしその人がコードについてよく理解できてないとしたら、そのテストがわかりやすいものになっていないということになります。

まとめ

コード1行1行を書く経験が、自分のキャリアを形成するのです!(と思って生きていくといいよ)

②ある関数を作成するときは、その関数で確認するべきパターンの数をどれだけ減らすことができるかを考えることが重要です!そのためにはまず、その関数で解決する問題領域を適切に理解することが重要となります!

③テストを書くことは重要であり、また、それがいいテストであるとさらに素晴らしいです。テストは、「他者がそのテスト対象のコードに対して容易に理解できる」ように書きましょう。

 

*より深く知りたい方は、ぜひ本書を手にとってみてください!

書籍情報

プログラマが知るべき97のこと [ ケブリン・ヘニー ]

価格:2,090円
(2021/5/13 11:12時点)
感想(1件)

【中古】 プログラマが知るべき97のこと /ケブリンヘニー【編】,和田卓人【監修】,夏目大【訳】 【中古】afb

価格:825円
(2021/5/13 11:12時点)
感想(0件)

【書籍名】プログラマが知るべき97のこと

【著者名】ケブリン・へニー、夏目大(訳)

【出版社】オーム社

【出版日】2010年12月

【ページ数】243ページ