重要なのは「分かっている」ということ

もうずいぶん前から、10年近くはなるんじゃないだろうか。いまに至るまでもずうっと考えていて、文章にはしていなかったこと。「関数プログラミング実践入門」という本にそのまま書いてあった。

…ここでの「分かっている」は「言語機能として処理系の基準で判断できる」ということ…

開発プロセスのノウハウや明らかになった理論をソースコードとの関連を持ったまま作業できる環境とすること。これにより次のことを可能にできる。

…プログラマ自身が人間として限界のある記憶力でいつまで覚えているか、また、手を入れる他のプログラマも同様に分かっているか、は一切保証していません。…プログラマが言語の制約を破ることがそもそもできなければ、誰が処理に手を加えても性質は保証されるのです。

事業継続のために情報が落ちずに引き継がれ、品質が確保しながら作業性を向上する。

…多くの場合、プログラムはメンテナンスなりアップデートしてユーザーに提供しなけれなりません。仕様として正しい動作を定め直し、現実的なコストと時間内で、できればプログラマに過度の負担がかからない範囲で、プログラムに手を入れ続ける…

プロダクトを提供し続けながら、実務者の負担を押さえていくことが可能ということだ。

そう、これがずっと欲しいと思っていたことだ。

問題は明瞭で、ソフトウェアのライフサイクルはある技術者が担当する期間よりも遥かに長く、派生するソフトウェアまで含めてしまえば現役期間よりも長くなる場合が想定されるということ。そのため情報の漏れない伝承と教育が必要。この作業は個人には後ろ向きに捉えられやすく、後回しになりやすいということ。結果、ソフトウェアの品質は徐々に下がっていくということ。

課題は単純で、ソフトウェアが満たすべき性質(仕様)をソフトウェアの本体であるソースコードと一体で扱える環境がないこと。仕様の検証やテストが人力であり、振り返り、現状調査、情報の整合確認が必要となり、綿密な作業計画までも必要とされる場合さえあること。

これをいち早く解決できた事業はソフトウェア開発において大きなアドバンテーを得ることができるはずである。しかし、この分野はあまり注目をされない。バラダイムシフト以上のインパクトがあるし、技術者判断で適用困難な状況があるかもしれない。開発プロセスと密接に関連することであり、現状維持に傾きやすいのかもしれない。

この本が述べている関数プログラミングもパラダイムシフトである。現場への負担は小さくない。けれども課題の解消を実現できることを説明している。関数プログラミングを採用できなくても、なにがウィークポイントなのか、どのようにプロダクト開発へ適用できるのかのヒントにもなるだろう。考えるだけの価値は十分あると思う。

参照:

船の模型の作り方

サントリーのTORYSウィスキーの宣伝にアンクルストリスが出ていた。

平面調でちょっとピカソぽい顔が特徴の「あっ、見たことある」っていうキャラクタだ。

柳原良平氏が描くノスタルジックを感じさせる小気味よい独特の画風。一度見たらその印象は忘れられない。

さて、柳原良平氏は船が好きである。彼のイラストにも船がたくさんでてくるし、船舶模型をたくさん製作され、「船の模型の作り方」という本を出版されているほど。

この本は1973年に出ているがその12年後、私が小学6年の1学期に出会った。

彼のイラストと同じデフォルメをしたタグボートや貨物船、フェリーのペーパクラフトが簡単な型紙と作成途中の写真、完成写真とともに載っている。

船の模型が好きでプラモデルを親にせびっていた私は、学校の図書館で見つけたこの本を借りて、さっそくタグボートを作り始める。

最初は当然うまくいかないし、柳原良平氏のデフォルメを再現することはできなかったが、何艘か作るうちにコツを掴んだ。

そして夏休みにこの本の最大の山である「秩父丸」の製作したのである。

全長1m20cmくらいのぺーパークラフト、画用紙もA1くらいのものを使った記憶がある。本から画用紙へ型紙の写しが難しく、詳細な部分は自分の想像で線引きをした。夏休みの工作のつもりだったけれど、あまりの難しさに半泣きしながら作ったのを覚えている。

完成後、ケースが要るといって細い材木で箱を作り、ウォータラインの模型が海に浮いている様に見せるために青い発砲板をケースの底に張り付け、そして、四方と天井は厚手の透明なビニールを張った。

この工作には自分なりに決意があった。必ず完成させること。誰からも手伝いを受けないこと。特に親。つまり、子供なりに自立の第一歩を託していたのである。

まぁ、その背景には親に頼りっぱなしの自分のふがいなさを感じていたというところなのだが。(笑

かくして「秩父丸」は完成し、学校からの展示物としての提供依頼を快諾し、私が卒業するまでは学校の工作室に展示してあるところまでは確認した。

どんな模型だったか。今はもう学校にもないだろうが、ググってみると柳原良平氏の作品があったこちらのページに私が作成したものよりもずーっと詳細で美しい秩父丸がある。しかし、記憶では私が作った模型も「秩父丸」の豪華さの雰囲気は出せていた気がする

元気のでることば

4月から使い始めている「ほぼ日手帳」。人気があるというだけで購入(天神ロフトで)したのだが、何ということはなく普通だ。

なにが受けているのかまだ実感できていないのだが、ひとつ良い事があった。

日めくりのページに本の引用などちょっとした文章が載せてあるのだが、4月10日(木)のページに載っている「谷川俊太郎質問箱」の一節は自信が揺らいだ時に元気の出る言葉だ。ナイスチョイスである。:-)

他の人をうらやんだり妬んだりするのは、自分という人間を創っていく上で、避けては通れない道筋だと思います。自分を他人と比べることで、人間は自分を発見し、成長していくのではないでしょうか。羨望も嫉妬も生きるエネルギーです。< 『谷川俊太郎質問箱より』>[「ほぼ日手帳」]


明日は、明後日は、どんなチョイスがあるのか楽しみである。早く読みたい気持ちがあるけれど、ここはグッと我慢。それでは日めくりの意味がないからね。(笑

手帳を持っても続かない人にはこういう事も少しの助けになるのかもしれない。

参考リンク

ほぼ日手帳についての書


チームはひとつにする

・チームはひとつにする
・アプリケーションのニーズをもとにワークフレームを構築する
・リファクタリングによってアプリケーションとフレームワークを継続的に改善する

[Joshua Kerievsky – Refactoring to Patterns]

フレームワークが価値あるものとなるための方法だそうだ。実現難しいアイデアだと思う。アプリケーションの規模や種類によってはアプリケーション部分がひとつのチームで構成できない場合があるだろう。そうすると必然的にフレームワークを主体に扱うチームが形成されるだろうから。


作りこみすぎ

コードを必要以上に柔軟にしたり精錬させることは、作り込みすぎ(over-engineerring)である。プログラマがこれを行ってしまう理由の1つは、システムが将来どういう要求を受けるかわかっていると思い込んでいるためである。…これはもっともに思える。ただし、それは予知能力者にとってだけだ。

[Joshua Kerievsky – Refactoring to Patterns]

肝に命じよう。


ジェネリックなるもの – Modern C++ Design

Modern C++ Design―ジェネリック・プログラミングおよびデザイン・パターンを利用するための究極のテンプレート活用術

車を選ぶとき、誰しもが多様なデザインの中から自分にあったものを探す。しかし、多様なデザインを実現するために、それぞれにラインや工場が存在してコストがあがることは望まない。さらに、自動車はどのようなデザインでも、ハンドルや、ブレーキ、アクセルといったインターフェースは共通でなくてはならない。

工場はひとつで製品は多様。それぞれの製品の取り扱いは共通化されている。

C++で多様なクラスを設計する必要があるとき、AbstractEnemyFactoryの例はとても役に立つ。ひとつの工場、多様な製品、共通のインターフェース。Modern C++ Designにその答えがあった。

だが忘れてはならない。抽象は具体例の一般化により生まれる。シナリオ無しの設計からジェネリックなるものは生まれない。


維新の嵐

維新の嵐 幕末志士伝

NEC PC-9801シリーズでやってたゲームのWindows版です。懐かしく思って買ってはみたけれど似て非なるゲームでした。以前のウォーシミュレーションのように6角の升を移動しながら旅をし、出会った刺客に襲われたり、配下の剣客に襲わせたりなんてリアルタイムな感覚がなくなってます。ちょっと残念です。PlayStation版があるようですけれど持ってないなぁ。「維新の嵐 – Wikipedia」に載ってる:-)


経験

経験の無いシステムを担当してそろそろひと月というところか。となりで忙しくしている先輩に恐縮しながらなんとか日々過ごしている感覚。問い合わせの電話があろうものなら繋ぎしかできない。まったく役に立っていない。(笑)
まっ、精進するしかないか。

開発済のシステムを担当するというのは初めてだ。これまでは真っ新から始められたので経験を積むという感覚はなかった。しかし、ポンと出来上がったものを目の前に置かれると「経験」というのがこんなにも差がでるのかと驚きである。

そういえば、トム・デマルコの「ゆとりの法則」でも人に積まれた経験の重要さが述べられていたな。