2012/02/08
書かれなかったもの
プログラムを書かない人がプログラムを読んだときにする良くある間違いは,ああこんなプログラムなら自分にも書けそうだと思うことだ.プログラムは何百万とある可能性からたったひとつ(は言い過ぎにしてもわずかながら)の正しい方法を残したものであり,この捨てる能力こそがプログラマの実力だから.
ああ、以前『引き算の技術』というのを書いたことがあったけど、上に引用した文の方がずっと的確でかつ具体的だなあ。
「たったひとつの可能性を選び取って残りは捨てる」とだけ言うとわりと何にでも適用できる概念のようだけど、ことプログラミングに関しては、「本当に捨てる」ことは珍しくない。つまり、実際にいくつも作ってみて、ベンチマークを取ったりしばらく実際に使ってみたりして、ベストと思えるものだけを残す。捨てられたものはバージョン管理システムのブランチくらいにしか残っておらず、ソースを見ても何が捨てられたのかはわからない。
経験を積めばいちいち書かなくても見当をつけて選択肢を枝刈りできるけれど、経験者が散々議論してもアイディアが3つくらいに絞られた時点で「あとは実装してベンチとらないと何とも言えないね」ってなることはよくある。しかも、大抵一番難しいのは実装すること自体ではなくて、実装間の比較をうまく行えるような環境を作ることの方だ。(逆に、比較のためのフレームワークがちゃんと出来ていると、がんがん実装を試せるので進化がとても速くなる)。で、完成品のソースコードにはそういう実験のための環境ってのはやっぱり含まれてない。
人が作ったものを見て、ぱっと「なんかうまくないなあ、こうすればいいのに」って思うことはよくあるけど、自分も同じものを作って試してみた経験が無い限り、一旦立ち止まって考えるようにしている。こうすればいいのに、っていう他の方法は既に試し尽くして、うまくいかなかったから今の方法になってるのかもしれない。
(もっとも「他の方法は試してみてダメだった」ってことがわかっててもやっぱり今の方法はダメだ、って場合があるからややこしい。つまり、試しかたがダメだった、ということである。)
(追記2012/02/09 06:41:08 UTC): ソフトは一度リリースしたら完成ってもんじゃなく、むしろ生物のように新陳代謝しながら生きながらえてゆくので、一度本体から捨てたものでも将来のために取っておきたい、ということはある。将来の人が同じ轍を踏まないためにも、また将来条件が変わって捨てた選択肢が復活するという可能性のためにも。
自分は、コードそのものは可能ならブランチに取っておいて、ベンチマーク結果や実験の概略などはパブリックなものならWiLiKi等に、仕事上のものはイシュートラッカ等に残すようには心がけている。多分重要なのはレポートの方で、コードはメンテしない限り本体の進歩からすぐに取り残されてしまうので、歴史的な資料価値しかないだろう。レポートの方はちゃんと書いておけば、将来アイディアをまた試したい時に大いに参考になる。ちゃんと書くのは手間がかかって大変なんだけれど。
そんなわけで、「紆余曲折色々試してこうなりました」っていう紆余曲折の部分が書いてある論文は読んでて面白い。プロジェクトのpost mortemリポートとかも。
Tag: Programming
2012/02/06
在宅勤務
HsbtDiary (2012-02-06) 在宅勤務期間の開始 を読んで、そうだよなあと。
日本での在宅勤務の議論ではよく「会って話さないとだめなことがある」ってのが出るけど、「家で一人きりで仕事」と「出勤して顔を合わせる」との中間に「電話 (ネット越しの音声会話、ビデオ会話含む)」ってのがあって、「会って云々」の要素の大部分は電話で済むことが多いんじゃないかと思う。
仕事にもよるけど、今コンサルで入ってるプロジェクトは拠点はベイエリアだけどお客さんは方々に散らばってるので、「お客さんとのやりとり」もカンファレンスコールが基本だ。あとチームミーティングが週3回、電話。メールで議論してて込み入ってくると電話。リリース直前にサブミットしたパッチがコンフリクトしたら電話。そもそもベイエリアに住んでいる社員だって毎日出社してるわけじゃないし。
プロジェクトの開始時には、1週間全員で集まってキックオフミーティングをやった。全員の知識や目標を同期するには対面は手っ取り早い。状況に合わせて素早くピボットしてかないとならないプロジェクトだと、方向転換の度に足並みを揃えたいので、対面の重要性は増すだろう。でもわりと方向性がはっきりしててひたすら改善してゆくってプロジェクトなら、たとえ開発サイクルが速くても、対面の必要性はあまり感じないし、むしろ対面ミーティングのオーバヘッドは足を引っ張るんじゃないかという気もする。
ただ、日本とアメリカで「音声のみによる議論の重さ」っていうのが違うような気もするんだよね。ってことは以前書いた (『オーディオブックとオーラルコミュニケーション』)。この仮説が正しければ、日本の方が在宅勤務導入は難しいかもしれない。
2012/02/05
Punahou Carnival
昨日はPunahou Schoolの ファンドレイジングイベントであるPunahou Carnivalに子供と行ってきた。移動遊園地がやってくる。らむ太は遊園地的なものに触れることが滅多にないので、 Punahou Carnivalはもう半年以上前から楽しみにして、あれに乗ろうこれに乗ろうとプランを立てていた。 ところで今年はキンダーの仲良し友達3人で回ったのだけど、それぞれやりたいものがばらばらで (らむ太はライド系、それもスリルのあるやつを好むんだけど、ライドよりミニゲームが好きだとか、ライドでも好みが違ったりとか)、 この年頃だとまだ自分のやりたいことと一緒に楽しむことの折り合いをうまくつけるのが難しそうだった。
日本やメインランドにある常設の遊園地に比べたらまったく大したことはないのだけれど、 年に数日だけ現れるという移動遊園地の性質は、むしろそれが非日常のハレの場にふさわしいような気もする。 スティーヴン・キングの「Dead Zone」にカウンティ・フェアの場面が出てくるけど、 こんな感じだったのかなあ、などと思ったり。
Tag: 生活
2012/02/03
らむ太とフォニクス
らむ太は最近フォニクスがわかってきたので、いろんなものに書いてある綴りを見ては 発音を試みている。
- ら:とうさん、これなんてよむの? (と、URLの"www" を指差す)
- 私:それは「だぶりゅーだぶりゅーだぶりゅー」だな
- ら:そうじゃなくて。だぶりゅーは「ぅ」でしょ。だから「ぅぅぅ」じゃない?
- 私:ああ、これは特別なんだ。喋るときに使う言葉じゃなくて、コンピューターに打ち込む時だけ使う言葉だから「だぶりゅーだぶりゅーだぶりゅー」でいいんだよ。
…と説明しておいたがどんなもんだろか。
Tag: 生活
2012/02/03
ピアノレッスン34回目
- Bach: Fantasia in C minor。八分音符=88で。37小節目の装飾音が鬼門。
- Kapustin: Op40-7。四分音符=54。符点八分音符+十六分音符と、三連符の2:1、気をつければ確かに弾き分けられる。多分本来の速度 (楽譜指定はM=126) になると厳密に弾くのはほぼ無理だと思うんだけど、両者に微妙なニュアンスの違いがあることは確かで、Kapustin本人の演奏でも厳密には弾いてないけれど微妙に違いがあるようにも聞こえる。全部2:1にしてしまうと平板になっちゃうのかもしれない。
Tag: Piano
Comments (2)