What is it, naokirin?

きのこ本 感想 Part1

きのこ本こと

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

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

id:pocketberserkerに (誕生日とかそういうことでもなく) もらいました。
そこでただ読んで「なるほど」程度で終わるのは失礼かと思いまして、読んだ上でエッセイごとの感想などを書いていこうと思います。

…ブログのネタ不足も顕著なので(笑)

01 分別ある行動 (セブ・ローズ, Seb Rose)

まず一つ目のエッセイは「分別ある行動」ということで、これは一つ目から耳が痛いエッセイですね。

最近こそ少なくなったとはいえ昔はテストを書くこともなく、やっつけな「とりあえず」動くコードを書いて、「後で直そう」という先送りは良くありました。私の経験ではこれが大体の場合、後で直されることなくレガシーコードになっていきます。(今でも私のパソコンにはそういうコードがおそらく眠っています。)

確かに、時間がないと急ぎたいという気持ちは誰にでも浮かぶものだと思います。
例えるなら、欲しいものはお金がなくても欲しい、と言ったところでしょうか。

でも、お金がない時はたいていの人は我慢します。お金を貯めるか、諦めるか、です。
たまに借金する人もいますが、これもすぐに返せる当てがなければ、利息がつもって返せなくなっていくのが目に見えています。

コードについてもこれと同じことが言えるということが書いてあります。


「借金してもすぐ返せ」ですね。

…借金はそもそもしない方がいいとは思いますけどね。

02 関数型プログラミングを学ぶことの重要性 (エドワード・ガーソン, Edward Garson)

二つ目のエッセイは、特に手続き的なコードを書く際の問題についての注意が書いてあります。

タイトルと言ってることが違う? いえ、あっています。
タイトルこそ、「関数型プログラミングを学ぶことの重要性」となっていますが、その内容は手続き的な言語 ( C、C++Javaと言った手続き、およびオブジェクト指向言語 ) を使ったコードを書く際の注意点についての話です。

(純粋)関数型には手続き型やオブジェクト指向型の言語と決定的に違う点があります。
それは「状態という概念がない」という点です。

「状態という概念がない」とはどういうことでしょうか。

簡単に言うと、変数がなく、すべては定数であるということです。つまり、変化するような「状態」がないのです。この結果として、「参照透過性が保たれる」わけです。

これは非常に良いことです。良いことという以上に、基本的に (手続き型のコードであれ) 関数はこのようになっているのが普通でなければなりません。

ただし、このエッセイに書いてある通りの参照透過性が全く保たれていない、副作用のあるコードはプログラミングの入門書などでも散見されます。

この部分はテスト駆動開発でもよく注意すべき点としてあげられ、「同じ条件のもとで、呼び出し順序にかかわらず (他の機能に影響を与えず) 、同じ結果を与えるコードを書く」ということが言われています。

関数型プログラミングをすることでこの点に注意出来るようになろう、とこのエッセイでは呼び掛けています。

テスト駆動開発を行ったり、オブジェクト指向言語、そして関数型言語を学んできて、この辺りには注意するようにしているので、最近では実践できるようになっているかなとは思います。ですが、これからもそれを実践することを怠らないよう気を引き締めるべきでしょう。

03 ユーザが何をするかを観察する(あなたはユーザではない) (ジャイルズ・カルバン, Giles Colborne)

このエッセイの重要な点は、自分が作ったプログラムの使用者と自分との間にある感覚の差異をどのように認識すべきか、ということです。

私は常日頃から「一度、相手の立場に立って物事を見てみる」という考えを持つようにしています。
ですが、これだけでは不十分な場合というのは良くあります。

どうしても自分の中の知識や感情というものが邪魔をして、「実際の相手の立場に立った」場合と異なる見え方になってしまうことがあります。

その場合には、やはり相手の話を聞くことは重要です。

しかし、これでも不十分な場合があるのです。そのことがこのエッセイに書かれています。

ユーザはプログラマと違い、 (特にプログラマから比べれば) コンピュータに慣れていないという場合がほとんどです。そのユーザがどのように作られたアプリケーションを使うか、使いたいか、というのはユーザの言葉からでは分からないこともあるということです。

その場合に、「ユーザが何をするかを観察する」ことが一番重要だとここでは説いています。

私もその点はやったことがないので、機会があればこのエッセイを思い出して実践してみたいと思います。

最後に

ここまで感想ということで書いてきましたが、「確かにそうだ」と思うこともあれば、「なるほど、こういう風にしているのか」ということまで様々です。

今後もこのようにエッセイごとの小さな感想文を書いていけるよう、また書いてあるような素晴らしい知恵を知識として得たことを無駄にしないように努力したい次第です。