What is it, naokirin?

きのこ本 感想 Part8

最近、院に入って忙しくなっていたゼミも少しは慣れてきたので、そろそろプログラミングのほうもちゃんとやっていきたいかなと思ってます。物理とプログラミングを両立するのは大変ですが、頑張っていきたいところですね。

さて、今回も

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

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

こと、きのこ本の感想を書いていきます。

22 1万時間の訓練 (ジョン・ジャガー, Jon Jagger)

日々の努力こそ、エキスパートへの道。

分かっていても、これが大変ですよね。ここでは、集中的訓練を1万時間という時間をかけて、はじめて専門家 ( エキスパート ) になれる、ということが書いてあります。

1万時間は毎日5時間やったとしても、5年以上かかる計算になりますね。普通の人は毎日5時間も自分を向上するための訓練を重ねられることは様々な理由で難しいと思いますから、5年と言わずかかることになりますね。

また、訓練は今の自分の能力より訓練後の自分の能力が上がっているようなものでないといけないので、常に今の自分にとって困難な問題であることが求められます。

私は今、物理とプログラミングの両方をしているので、どうしてもまとまった時間をプログラミングに費やせない現状がありますが、それでも少しずつ頑張っていきたいところです。

23 ドメイン特化言語 (マイケル・フンガー, Michael Hunger)

ドメイン特化言語 ( DSL ) というのは最近、良く聞きますね。

昔はかなり高レベルな技術という感じがしましたが、最近学んだRubyなどで随分身近な存在になった気がします。

ただこのエッセイで書かれているように、私が昔、見聞きしたDSLと、RubyでのDSLは少し様相が違う気がします。おそらく昔聞いていたのは外部DSLというもので、私が最近知ったのは内部DSLのほうだと思います。

DSL特定の領域の問題に特化した言語で上手に扱うととても便利なものなので、特に簡単に作成できる内部DSLはすぐにでも活用したいところです。

外部DSLはどうしてもパーサやジェネレータを作るといった作業が必要になるため、完全に独自のものをつくるのは難しい気がします。ある程度ライブラリなどが存在するような外部DSLも少なくないので、外部DSLはその辺りを効果的に扱えるようになりたいですね。

24 変更を恐れない (マイク・ルイス, Mike Lewis)

プログラムは確かに悪くなれば、そのまま悪くなり続けることが多いですね。最初にちゃんとした処方で進めているとそれほどひどくはならないのでしょうが、そうはいっても企業などにいると元々ひどい状態で存在するプログラムが回ってくることも少なくないと思います。

こういうときには、改良、改善と言ったことが重要ですね。

企業やプロジェクトに残る“遺産”コード、すなわちレガシーコードはしっかりと改良して行くべきだと思います。

その改良にも注意が必要で、まずテストがなければ話にならないですね。修正が動作を変えていないかチェックしないというのはあり得ません。

次にテストを書いた上で、小さな改良を繰り返すことで改良して行くことが必要です。小さな改良ごとにテストを動かすのはもちろんですね。

この辺りをもっと詳しく説明してある本が

レガシーコード改善ガイド (Object Oriented SELECTION)

レガシーコード改善ガイド (Object Oriented SELECTION)

でしょうね。読んでいて面白いと思います。もちろん実践で面白いと思える人は少ないと思いますが…

最後に

1万時間の訓練、というのは私にはまだまだ足りないと言わざる負えませんね。

残り2つのエッセイで出てきた、DSLやTDD、レガシーコードの改善と言ったことは訓練としてもよいかもしれません。まだまだ修行が足りない私ですが、少しでも上を目指して頑張っていきたいです。