まともなコーディングしなくなって久しいが技術屋さんという自負を保つためにもたまにはコーディングにも触れておきたく、勉強のやり直しと思ってこの本を読んでみた。特定のプログラミング言語を学ぶというわけではなく、どのようにしてプログラミング言語に機能が追加されてきたかを追っていく形でプログラミング言語の本質を勉強できました。様々なプログラミング言語があるが、根幹には生産性をあげるために進化している。どのような「生産性」=コード量、パフォーマンス、再利用性、可読性、メンテナンス性 etc.を目指すかで、多少の違いがでてくるが、一方で解決したい共通の課題も多く、その課題解決パターンは存在し、それを違う名前で採用していたりする。プログラミング言語はまさにソフトウェアアーキテクチャそのもの(その原型)だったんですね。

以下、いくつか引用とメモを。やっぱりクラスとか継承は理解・適切に活用するのが難しく、まだまだ進化途上としり、ちょっと安心しました^^;

Larry Wall, プログラマが持つべき三大資質:無精(laziness)・短気・傲慢、最も生産性の高い方法を選ぶこと、プログラムが遅いことを許せないこと、間違いを放置することを許せないこと
何を楽にしたいか、どんなプログラムを楽に書きたいかで、様々なプログラミング言語が生まれた。
「いくつものモノをいれるためのモノ」がコンテナ。しまい方と取り出し方。スピード、計算量。どの操作を重視するかでしまい方が変わる。コンテナはデータベースそのもの。文字列をコンテナに入れるため文字コード。
競合状態、レースコンディションの三条件。
・二つの処理が変数を共有している
・少なくとも一つの処理がその変数を書き換える
・一方の処理がひと段落つく前にもう一方の処理が割り込む可能性がある
どれか一つでも取り除けば回避できる。
クラスには二つの相反する役割があります。一つ目は「インスタンスを作るためのもの」という役割で、このためには「完結した、必要なものを全部持った、大きなクラス」である必要があります。二つ目は「再利用の単位」という役割で、このためには「機能ごとの、余計なものを持っていない、小さなクラス」である必要があります。それらは相反するものだ、というトレイトの考え方。再利用の単位という役割に特化した、もっと小さい構造、トレイト=メソッドの束を作れば良いのではないか