« 2006年2月 | トップページ | 2006年4月 »

2006年3月

2006/03/28

「国家の品格」と「ウェブ進化論」

帰宅途中で本屋に立ち寄った折、たまたま話題の2冊の本を見かけた。
立ち読みの感想をちょこっとだけ。




【1】「国家の品格 」は失望した

立ち読みでパラパラめくっただけですが、落胆しました。
藤原正彦さんも右寄りになったのかなあ。

中高生の頃、藤原正彦さんの「若き数学者のアメリカ」と古本で読んでいたく印象に残ったのに。
研究の厳しさ、研究の本質は何か、とか色々考えさせられた記憶がある。

でも、この本には中身が何もない。
論理よりも情緒、マネーよりも美しい田園が大事、という主張は綺麗だけれど、現実のビジネスとアンマッチ。

ロックの思想を批判している箇所を読んで、受け入れがたいと確信した。
民主主義と資本主義は密接に関係しているというロックの思想は、今の現代社会の基礎なのに。

あちこちのコミュニティに出て気づいたことは、時間が有り余っている学生よりも、平日は仕事や生活で忙しい中年の人の方がはるかにアクティブな現実があること。
自分の能力を元に私有財産を持っているから、自由に行動できる事実がある。

【2】「ウェブ進化論」は確かにすごい

インターネットの特質は、やっぱり情報のやり取りや製品のコストが殆ど0になったこと。
この恩恵を最も受けている層は女性じゃないかと言う気がする。
BlogやMixiを漁ると、男性よりも女性が書いている記事の方が面白い。
男性にはない発想があるから。

もっと自分の言葉で理解したくて、結局、「ウェブ進化論」を購入した。
ゆっくり読みたいと思う。

| | コメント (1) | トラックバック (0)

2006/03/19

Perl関西はハッカーのコミュニティ

 日曜の昼下がりに京都で開かれたPerl関西に行ってきた。
 今日の京都は、雨から小雪交じりになって寒すぎ(m_m)
 にも関わらず、30人も参加者がいて、勉強会も懇親会も盛り上がった。

【1】Perl屋さんはハッカーが多い

 講演者のプレゼンのノートPCを見ると、殆どの人が、MacかLinux上で、Emacsを普通に使いこなしている。
 しかも、Perlを使いこなすだけでなく、RubyやLispを使いこなす人も多い。
 HaskelやMLにも興味を持って話す人もいた。

 彼らの話を聞くと、CよりもJavaの方が1万回のループ処理が速い時もあるんですよ、とか、プログラミング言語のライブラリの中身は、ライブラリを使う人が簡単に使えるようにするために、結局汚い事が多い、等、プログラミング言語の特徴をよく押さえているという印象を持った。

【2】Perlはプログラミング言語として「緩い」特徴がある

 Perlの標語にこんな言葉がある。

 There's More Than One Way to Do It 

 他にもいろんな方法があるよ

 普通に書ける処理を別にこんな風にも書ける、というパターンがPerlには多い。
 いわゆるシンタックス・シュガーを使うと、いくらでも短く書ける。
 なみかわさんの講演では、「頭を柔らかくして、良い刺激を受けて元気になろう(^^)」という話があった。

 でも、この特長には功罪があり、他の人が読めないソースになってしまって保守できないという弱点もある。

 また、Perl関西の他の講演者も話していたが、「プログラミング言語としてPerlは緩い」所がある。
 変数や関数の隠蔽が無頓着だったり、オブジェクト指向の導入が他の言語に比べると....だったり。

 やはりPerlは、正規表現、ファイル操作、CGI、Wikiなど、お手軽に作り上げる所に最大の長所がある。
 すぐに建てて、用が足せば捨ててしまう。

 PerlやRubyなどに触っていると、プログラムは設計そのもの。
 アイデアをすぐにプログラムに起こしてみて、実際にすぐに動かせる所に最大の特徴がある。

【3】開発のスピードとプログラミング言語の関係
 最後に、Webシステムから業務システムへ開発が代わった人と話していた時、業務システムの開発はスピードが遅いんですよ、と聞いたことが気になった。

 PHPやPerlによるWebシステムの開発の場合、3ヶ月ぐらいのスパンでリリースするから、スピードが非常に速い。開発スタイルも、リリース後、お客さんの要望を取り入れながら改善していくことが多い。
 しかし、業務システムの場合、プロジェクトの期間そのものがもっと長いことが多い。
 だから、ずっと忙しい感じで、スピード感がないんですよ、と言っていた。

 とまあ、JavaやC#のようなガチガチの静的型付け言語に慣れている身にとって、刺激になった。

| | コメント (0) | トラックバック (0)

2006/03/14

C#のdelegateをTemplateMethodの代わりに使う

 とある勉強会でC#2.0の新機能を議論する機会があった。
 「匿名メソッド」「イテレータ」について説明を聞いたが、いずれもDelegate、コールバックに関わる。

 イテレータはRubyで言うならば、ブロックそのもの。
例: array.sort{|a, b| b<=>a}

 Perlにも、ハッシュのソートで似たような構文がある。
 Cのクイックソート関数 qsort も比較関数をコールバックに使っている。

 匿名メソッドは、無名Delegateと言ってよい。
 Javaなら、Threadを使ってインナークラスを実装する時とかに似ている。

 C#のDelegateはEventで使うサンプルしか知らないので、自分はまだ理解し切れていないのだが、Delegateの他の例を教えてもらった。
 彼によると、DBコネクションの管理に使ってみる、とのこと。
 つまり、DBコネクションをオープンしてクローズするルーチン処理を行うメソッドの引数に、デレゲートを置き、そのデレゲート内部でSQL発行の処理を行う。
 これってまさにTemplateMethodそのもの。
 こんな使い方があったとは!
 
 C#がJavaと大きく違う所は、Delegateにある。
 Javaならインターフェイスでベタに書かざるを得ない所が、C#ならすっきり書けるが、慣れないと可読性が落ちる。
 コールバックという概念は奥が深い。

| | コメント (0) | トラックバック (0)

2006/03/12

Ruby関西が今熱い!~Ruby is Agile!

昨日、Ruby関西に行ってきた。
50人の部屋が満員御礼になるほど盛況で、今、関西で一番熱いコミュニティではなかろうか?

サブタイトル「Ruby is Agile!」は、XPJUG関西の同僚が紹介した言葉です(^^)

感想は以下の通り。

【1】女子大生が書いたソースをコードレビュー
かずひこさんのレッスンで、女子大生が半年前に書いたソースのコードレビューがあった。
20行ほどのプログラムは、放物線の軌道を数値計算する内容で、ループ処理、コメント、変数名に修正が施された。
しかし、それだけにはとどまらず、会場の質問者からの突込みが熱かった(^^)

Q. 変数名をv1, dtではなく、velocity、nextTimeみたいに分かりやすくして欲しい。
小波先生: コメントと連動させれば問題ないでしょう。

#コメント無しでも読めるようにプログラムを書くために必要では?
#保守のたびに、ソースだけでなくコメントまで修正する2度手間がかかりますよ。

Q. For文を使うのではなく、イテレータやブロックを使うなど、Rubyらしいプログラムを書かないのか?
かずひこさん:この程度のプログラムでやるのは大人気ないと思いまして、やりませんでした。

#会場は思わず爆笑(^^)

懇親会では、小波先生が「(会場から質問があるたびに)まるでわが子(娘)を切り刻まれるようで胸が痛かった」と言っていたが、プログラムはそんなに悪くなかったと思う。

【2】C、Perl、PHP、.NET、Javaをやっている人がRubyに興味のシグナルを送っている

懇親会で自己紹介を聞いたら、C、Perl、PHP、.NET、Javaなど、開発者が多種多様。
Rubyって、Java開発者はRubyOnRailsに衝撃を受けて興味を持つが、他の開発者はオブジェクト指向のスクリプト言語として興味を持つらしい。
Rubyは殆ど知らないけれど、オブジェクト指向でスクリプトをやるならRubyだろう、という動機が多かった。

【3】コミュニティで学生を育てる

懇親会でスタッフに聞いたら、参加者50人のうち20人は学生。どうりで若い人が多いわけだ。

最も印象に残ったのは、40代の部長の肩書きを持っているスタッフが、勉強会で一番楽しい時間は、かずひこさんの初級者レッスンで、TA(Teaching Assistant)として若い人にRubyの質問に答えることだ、と言っていた事。

小波先生、かずひこさん、更には他の講演者やスタッフ皆が中心となり、学生を育てようという雰囲気がある。
こういう発想や雰囲気を持つコミュニティはあまりないので、大事にして欲しいと思う。


| | コメント (0) | トラックバック (1)

2006/03/04

使い捨てのプログラム

 システム開発において、設計・製造・テスト・保守フェーズで一時的なプログラムが必要になる時が多い。

例えば、、

・画面項目から、大まかなDB定義書を作り出す。
・仕様書からプログラムのテンプレートを吐き出す。
・テスト仕様書からJUnitのテンプレートを吐き出す。
・JUnitからテスト仕様書を生成する。
・テストデータ、DB仕様書からSQL文を生成する。
・既存システムにあるソースから、調査時に必要な情報をGrepする。
・既存プログラムからCRUDしているテーブルとソースの対応表を作る

などなど。
結構、力仕事でカバーしていませんか?

【何故、使い捨てのプログラムが必要か?】

システム開発の現場では、結構、頭を使わないルーチンの力仕事は多い。
Javaを使ったWebシステムであろうと、結局、Javaを書いているよりも、PerlやVBAを使う方が多い時もある。

特に、仕様書を作る時や、設計時に既存プログラムを調査して仕様を決める時に、使い捨てのプログラムによって作業を速く正確に行えるかどうかは、設計の品質そのものに響く。
一時的に使うだけだが、作業効率を上げるために大変重要。

これらのプログラムは、使い捨てのプログラム。
プログラムそのものも、インターフェイスをきちんと考えて作る必要はなく、とにかく速く作ることが最優先。
だから、きちんと書く必要はない。

【プログラミング言語は何を選ぶか?】

Excelの仕様書を自由自在にいじるために、結局、VBAが必要になる。
基本は、マクロで基本操作をなぞった後、プログラムをカスタマイズすることが多い。

テキスト処理には、色々あるが、やっぱりPerlが一番簡単。
Windowsなら、ActivePerlかCygwinを入れればいいだけ。
Perlなら、Cライクに書けるし、あんまり深く考える必要がない。

今なら、Rubyを選択する人が多いかな?
WinOLEでExcelも扱えるし、正規表現も使えるし。

でも、Rubyで書いた時、Perlよりも短く書けない。
たかがGrepや一括置換したいだけなのに、たいそうなプログラムを書かざるを得ない。
まだRubyに慣れていないせいもあろうが。。

【プログラミング言語は2種類ある】

言語には、型チェックが厳しい重量級プログラミング言語と型チェックが甘い軽量言語(Light Weight Language)の2種類があるように思う。

前者は今なら、Java、C#、Cとか。
後者は、VBA、Perl、Rubyとか。

型チェックが厳しいプログラミング言語は、品質最優先の業務システムが向いている。
開発スタイルもドキュメント志向で、重量級プロセスになりがち。

型チェックが甘い軽量言語は、速く作ることが最優先のWebサイトが向いている。
更には、テキスト処理などの定型的なルーチン作業で威力を発揮する。

この2つのプログラミングの感覚は大きく異なる。

重量級言語は、プログラムを育てていく感覚。正確さ、丁寧さが大事な感覚がある。
設計では、「疎結合」「コンポーネント志向」を重視するから、リファクタリングなどで品質を保持することが優先される。

軽量言語は、使い捨てのプログラムを早く作る感覚。正確さよりも、早く作る方が大事な感覚がある。
 「3年で陳腐化するWebサイトの構築には軽量言語のほうが向いている」記事では、逆に「密結合」「非コンポーネント志向」が良しとされるようだ。
重量級言語と視線も動機も正反対な所が面白い。

どちらが良いというよりも、向き不向きがあるだけ。

【使い捨てのプログラムを書く能力の重要度は高い】

システム開発の現場にいると、大抵の優れたプログラマはツール作りが上手い。
ルーチン作業を自動化するために、使い捨て感覚でプログラムをすぐに作ってしまう。
後で、そのツールが重要になってきて、後でメンテナンスするようになる時も多い。

使い捨て感覚で作っているからメンテナンスしにくいのかと思ったら、優秀なプログラマだけあって、実は読みやすく再利用しやすい時が多かった。

Javaなどのオブジェクト志向言語をマスターするのも重要だが、使い捨てのプログラムを書けるだけのプログラミング能力も重要ではなかろうか?

【最近の傾向】
RubyOnRails などを見ると、Webシステム開発そのものも使い捨てを念頭に置いて開発する必要性が多くなったのではないか。

知り合いのアジャイラーが、プログラムが使い捨てで良しとされるのは感覚が違う、アジャイルと同様にプログラムを育てていく感覚が大事なのに、と言ったことが気になる。

システムをスクラップ・アンド・ビルドで開発しても良しとされるケースが増えてきているのかもしれない。
特に、Webシステムはスピードが速すぎるから。

| | コメント (0) | トラックバック (0)

2006/03/02

軽量言語とビジネスの関係

 「3年で陳腐化するWebサイトの構築には軽量言語のほうが向いている」記事を読んで、開発スタイルとビジネスには密接な関係があることを改めて感じさせられた。

 くらぬきさんの話「EnterpriseXP」でもあったが、XPが使えるビジネスには、サービスを早くリリースしてビジネスを展開するタイプと、金融系のようにきっちりと業務を決めてシステム開発を進めるタイプの2種類がある。
 前者は、軽量言語が向いていて、後者はJavaのような強い型付け言語が向いているのだろう。
 前者のビジネスモデルは、はてなやMIXI等が思いつく。軽量言語としては、Perl、PHP、Rubyがあるのだろう。

 上記の記事で注目すべき点は、システムの受注のスタイルが異なることだ。
 普通は、「ユーザー企業の情報システム部門がシステムを発注し、大手システム・インテグレータ(SIer)が受注する」という形になる。
 ところが、「ユーザー企業の営業部門や広報部門がシステムを発注し,大手広告会社が受注する」という形が多いという。
 となると、顧客サイドは技術に疎いため、技術面だけでなく、システムを開発するプロセスそのものでも顧客をコントロールできる力がより一層重要になる。
 おそらく顧客は、Webデザインの延長でしか考えていないだろうから。
 だから、普通のSIerよりも敷居が高いかもしれない。

 軽量言語は、言語だけでなく、ビジネスそのもの軽く動きやすい方が特徴が出やすいように思える。

| | コメント (0) | トラックバック (0)

« 2006年2月 | トップページ | 2006年4月 »