Jul - 12th
翔泳社プラスのしおり
Posted at 8:23 pm | Filed Under Fun
翔泳社の本を買うと「今すぐ使える スワヒリ語講座」と題するしおりがもらえる。
例文がふるっている:
「三日間帰っていないので、銭湯に行ってきます」
「それはバグではなくて、仕様です」
「ああ、そのプログラマなら昨日逃げました」
「予算は使い切りました」
「今日は帰っても良いですか?」
「このプログラムのバグは、致命的ですね」
「わたしは、転職することにしました」
確かにすぐ使える。
Jul - 12th
ホーア式、人事、仕事
Posted at 3:39 pm | Filed Under Work
最近ずっと勉強しているホーア式について考えてみた。
(俺が知ってる)ホーア式:
precondition { execute } post-condition
前提条件(precondition)があって、何か実行(execute)すると結果(post-condition)になる。
ロジックとして考えると、面白いことがいくつかある。例えばexecuteで例外や無限ループが発生すると、ロジックとしてはこの式はTRUEになる。なので、実際の業務とかプログラムのテストで使う場合はタイムアウトや例外発生時についても記述しておかないといけない。あと、preconditionがそもそも成立しない場合も、この式自体がスルーされるのでやっぱり結果はTRUEだ。ちょっとややこしいが、これをプログラムのif文だと思えば、そもそもif(precondition)が成立していなければこのif文の中身が実行されることはないので、式が存在しないに等しくなるからだ。
こういったことを踏まえて、ユニットテストが可能なプログラムの作成とホーア式にあてはめたテストによるプログラムのテストを実行できるようにする、というのが目下の俺自身のテーマでもある。いや、真面目な話。
で。
高校のとき、初めて教室に入ったら、壁に「ホーレンソー」とか書いてあった。報告と連絡と相談の頭を取って繋げてホーレンソー。これが大事なことだ、という。まるで密告でも奨励するかのような標語に非常に違和感を覚えたのだが、プログラミングの仕事をするようになって開発会社で働いているとやたらとこの言葉を耳にする。それから、PlanとDoとCheckの頭文字を並べたPDCという一昔前の携帯電話みたいな用語もあって、これもミーティングなんかでしょっちゅう聞かされる。PDCというのは、計画を立案して、実行して、その結果を計測するという意味のようだが、仕事の進め方はとにかくPDCでやるべきであり、その結果をもってその人の業務の評価が上がったり下がったりするというもの。この手のシステムで人事評価を下している会社はたくさんあるだろう。
でも、プログラミングの世界では、ホーア式のチェックやPDCが人事評価に繋がるというのは明らかにおかしい。
PDCは、ホーア式と基本的によく似ている。preconditionがあって、計画を立案して、そいつを実行して、post-conditionをチェックする。
plan { do } check
全部動詞が入っているのでちょっと違うが、まあ要するに業務の計画と実績はplanがあってdoしてみてcheckによって評価して、それがTRUEであればあんたは頑張ったと給料を払って、FALSEであれば何をやっとんじゃこのボケどこでそんなボンクラ頭を拾ってきた、とどやしつける。これが人事評価と呼ばれる拷問だ。
でも、プログラミングの世界でこれをやるのは明らかにおかしい。だって、プログラムを作ったら、普通はまずテストをするはずだ。そこで結果が間違っていたらどうする?直すでしょ。部下が組んだプログラムがホーア式でFALSEの状態のまま納品されていたらみんな怒るかもしれないけど、ブラックボックステストあるいは単体テストでこの状態であれば、とっとと直してくれというだけだ。
なぜなら、プログラミングの世界では、この時点での目標はprecondition { execute } post-conditionがTRUEになることであって、これを実行して真偽を確認するのは、単純にコードを書いたりテストをしたりするのと同じで、開発の中のひとつのプロセスに過ぎないからだ。その意味では、プログラムはこの時点ではまだ完成していない。テストは完成に至るためのプロセスの一つであり、それ以上でも以下でもない。そして、最終的な目標は、仕様の通りにプログラムが動くようにすることなのであって、これまたそれ以上でも以下でもない。それに、往々にして最初の設計や仕様がプログラムを作っていくにつれて現実にそぐわないものであることが判明するなんて日常茶飯事で、それをどうにかこうにか改良するプロセスは開発につきものだ。だから、最適化したりここを直したりそこを直したりといった作業が発生し、それがプログラミングの日常になっている。
ところが、いわゆる会社の業務というやつは、結局ここで例外だのエラーだのが発生することはすなわち担当者の誤りであって、部門あるいは全社的な最終目標を達成することよりも毎週ミーティングで提出させられるPDCの結果報告で点数を稼いでおくことの方が人事評価的には重視されるケースが多い。いうなれば、単体テストで×がついた項目があればそれだけで上司やら同僚やらに非難されてしまうのだ。プログラマにとっては理解しかねることだが、普通の会社ではこれが当たり前のようになっている。決算前に業績を積み上げるために価格を下げるような売り方がまかり通ってしまうのは、この短期的なPDCサイクルの中で評価を上げるためであり、それが長期的に見れば決算期以外の時期の買い控えを招くことになっても、個々の営業担当にとってみれば知ったこっちゃないというのと同じだ。
これは明らかにおかしい。作ったプログラムの中に単体テストで動かない箇所が見つかった場合にはプログラマにペナルティを課すなんてナンセンスだろう。動かない箇所を見つけるためのプロセスがテストなのだから、ペナルティを課すのでは目的が違う。もしそんなことになったら、プログラマは誰もテストに自分のプログラムを提出しない。工期が切迫していようがなんだろうがとにかくどこまでも自分でテストして、問題がありそうな箇所があればなんとか隠蔽するかもしれない。
ところが、プログラミングの世界を離れると、実際にこの手の隠蔽工作は会社の中では頻繁に行われていて、チェックの不備を突いたマジックであろうがなんだろうがとにかく数字合わせが出来れば問題なし、ということになるケースが非常に多い。なぜなら、それは営業にとってペナルティを逃れる手腕の一つであり、管理職にとって上司に怒鳴りつけられるのを回避するための処世術だからだ。チェックは仕事のプロセスの一部ではなくて、どちらかといえば検閲や取締り、ガサ入れに近い。
0.49999999999 { 四捨五入 } 0
Jul - 11th
DHSのCIOがDiploma millから学位を取得していた
Posted at 5:51 pm | Filed Under News
米国 国土安全保障省(Department of Homeland Security)のCIO、ローラ・キャラハンがDiploma millから学位を取得していたことが発覚。各方面で爆笑を引き起こしている。
ちなみにそのDiploma millはかの有名なイオンド大学ではなく、Hamilton University。Hamilton Collegeの偽物として知られている。
Jul - 11th
コードの管理
Posted at 1:47 am | Filed Under Subversion
Subversionでブランチとトランクのmergeを実行したところ、どうもうまくいかなかったらしい。ブランチの変更がトランクの変更を打ち消してしまっているソースコードがいくつか見つかった。とりあえす手動で直して、原因を突き止めようとしているのだが、まだはっきりとしたところはわからない。
どのツリーへのコミットも全てBTSとメールで記録されているので、毎月のメンテナンスリリース程度ならばSubversionに任せきりではなくこちらでもmergeが確実に実行されているかどうか確認するようにした。運用上のヘマならいいのだが、もっと根深い問題なら困ったものだ。
ソースコードの管理をSubversionに移行してから、CVSよりはるかに簡単な操作で随分と楽をさせてもらっているのだが、やはり複雑に分岐したブランチを取りまとめるのは大変だ。
ふと思ったのだが、Joel on softwareの「ストラテジーレターIV: ブロートウェアと80/20の神話」では触れられていない話があって、市場の拡大による売り上げアップを狙っていわゆる「ライト版」を作るというのは、コードの管理を複雑にしてそのコストを引き上げるので、元のフルバージョンのコストを上げてしまうという弊害もある。開発済みのプログラムから機能を抜くのはときどきかなり面倒くさい作業で、おまけにバージョン毎にちょっとした違いがあったりすると管理コストはさらに跳ね上がる。どうせやるなら、最初から使える機能をコントロールできる機構が組み込まれているようにしないといけない。そうじゃないと、テストのコストだけでも結構なものになるので、ライト版は営業の人たちが思っているほどお安くはならなくなってしまう。おまけに、そんな作業でリリースに失敗したり不具合でも埋め込んでしまっては泣くに泣けない。
Jul - 10th
PEAR2標準策定の動き
Posted at 4:35 pm | Filed Under PHP
php|architectの記事より。次期PEARの標準を議論するためのWikiが立ち上がったとPEAR Blogで発表された。
といいつつ、そもそもPEAR標準についてほとんど知らなかったのだが、読んでみると面白い。require/includeのルールがallfiles.phpで一括して実行されて個々のファイルでは禁止されるとか。ルールを読む限りPEAR2はPHP5以降で利用できるもののようだ。
Jul - 10th
Amazonの書評
Posted at 1:04 pm | Filed Under Books
なんかこう、「All your base are belong to us」な書評です。
Amazon.co.jp: UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI: 本: W.リチャード スティーヴンス,W.Richard Stevens,篠田 陽一:
9 人中、4人の方が、「このレビューが参考になった」と投票しています。usefull sample code, 2004/8/23
Many internal/external UNIX sample code made you very familier to UNIX programing.
そこの4人、ちょっと来なさい。
Jul - 9th
Zend_Search_Lucene
Posted at 3:30 am | Filed Under Apache, PHP
Apache LuceneのPHPへのポート、Zend_Search_Luceneの記事。
基本的にデータベースやPHPの拡張無しでLucene1.4以上のデータとバイナリ互換性のある全文検索インデックスを扱える。だから、Apache Lucene互換のプログラムから作成した検索インデックスがあればそれを検索することが可能で、その反対にZend_Search_Luceneで作成したインデックスを他のプログラムから利用することもでできる。
サンプルプログラムでは検索インデックスを作成して、そこから検索を実行するまでのデモになっている。数字の混ざった語を扱う場合は設定に注意が必要。
ざっと見た限りではUTF-8に対応はしていないみたいだが…
Jul - 8th
伊東美咲
Posted at 10:18 pm | Filed Under Family
朝日新聞の日曜版に伊東美咲の写真が大きく載っていた。相変わらず素晴らしく美しい。
伊東美咲を見ると、いつも運命の悪戯について考えてしまう。どうして、同じ人間なのに、かみさんは伊東美咲じゃないんだろう。
そんなことを思って、もう一度伊東美咲の写真をよく見たら、かみさんが写真に細いペンで鼻毛を描いていたのに気づいた。
Jul - 6th
ナイーブすぎ
Posted at 4:11 pm | Filed Under Work
「優秀な社員」に、自分が「ヒエラルキーの頂点」にいると思わせたまま操るのが優秀な経営者だ、ということなんじゃなかろうか。
FPN-新生Yahoo!に見る「人本主義経済」へ変革の兆し:
社員の能力の発揮をさせる事ができない経営者、優秀な社員の流出をもたらす経営者であれば、どんなにその他の力があったとしても退場していかなければいけない社会なのである。優秀な人材は、今、世界中どこでも引っ張りだこな社会なのだから。彼らのクリエィティビティが「ユニークなヒット商品やサービス」を生み出すのであり、「金やモノ」が生み出すのではなくなってきたのである。ヒエラルギーの頂点が「優秀な社員」が頂上にきた社会になってきたのだ。
ストレートに理解すると、ちょっとナイーブすぎ。社員がそう思っていられるように、それに反する要素をうまく抽象化したりカプセル化して閉じ込めたりして見えないようにしておく、というのが経営者による会社運営フレームワークの役割だと思うよ。何も社員の方が偉いと心の底から信じる必要はない。社員が勝手にそう思っていればいいだけだし、バカじゃないからいくら周辺環境が最適化されていてもそこまで自分だけが偉いと思い込むような単純な思考はしない社員であっても、まあストレスなく能力を発揮するような運用の仕方。
そういうフレームワーク作りと運用が失敗したら人材流出を招くわけだけれども、自分の作った枠組にいつの間にか自分自身がはまり込んで、嘘をついたらその嘘を自分で信じ込んだみたいにヒエラルキーの頂点は社員だと本気で思っていたら経営者としてはまずい。
Jul - 5th
科学の子
Posted at 9:59 am | Filed Under life
食物アレルギーはInterleukin-12の欠如によるものだと判明し、小児喘息と関わる遺伝子が特定された。
うちの子の勝利は近い。
« go back — keep looking »