Hatena::ブログ(Diary)

達人プログラマーを目指して このページをアンテナに追加 RSSフィード

2011-01-26

Groovy言語とAspectJの人気が今ひとつな本当の理由

先日DevLOVEの主催するぐるぐるGroovyという勉強会に参加してきました。

1月24日 DevLOVE ぐるぐるGroovy -Easy Going Groovy-(東京都)

Groovy言語については、構文がJava言語に非常に近い上に、Javaの既存ライブラリーとの相互運用性も高く、さらに、Java言語に比べて非常に簡潔にプログラムが書けるという特徴があります。動的言語Rubyのような柔軟性とJavaプログラマーにとっての学習のしやすさをいう面を兼ね備えた軽量言語であり、私としてはSI業界でもきっと流行るはずに違いない思いと数年前から注目していました。

同じJVMを対象にした言語として、最近Scalaに注目が集まっているようですが、

ということがあり、一般のJavaプログラマーが理解して使いこなすには相当敷居が高いところがあります。対してGroovyの場合は、一部の例外を除きJavaの構文のままでも正しいGroovyなのであり、セミコロンをはずすなど段階的にGroovyらしいコードに移行していくことができます。現実問題として多くの職業プログラマースキルが低いといわれているのですから、学習曲線のなだらかさは無視できないポイントであると思います。

もちろん、私はGroovyScalaのような議論はナンセンスだと思いますし、そもそも両者ではターゲットとするものが違うのであると思っています。Scalaは型安全性や関数型による並行プログラミングの容易性などの特徴から、システム寄りのプログラミングフレームワークの構築に適した言語であるのに対して、Groovyは気軽に業務ロジックを書いたり、テストクラスを書いたり、ツールを作ったりするのに向いています。要するに使い分けなのですが、どちらかというとGroovyエンタープライズ開発をメインターゲットにした言語なのであると理解しています。だから、対象となるプログラマーの人数も多いはずなのです。その証拠に現在ではSpringが中心になってGroovyの開発を進めていますし、欧米ではエンタープライズ開発を中心にかなりメジャーな言語として使われているという話も聞きます。一方、対照的に日本ではかなりマイナーな言語*1というか、名前すら聞いたことのないJavaプログラマーも結構いたりするのでしょうか?

同様に、今のところAspectJエンタープライズ開発の現場ではあまり活用されていないようですね。AspectJは一見業務開発とは無縁な特殊な技術のように思われる方もおられるかもしれませんが、Springでも積極的に取り入れられているように実は業務システムの開発とは非常に相性がよいものだと思います。先日書いた、AJDTを使って規約違反のコードを検出する方法のような機能は、SIer脳的発想のSEやマネージャーに対しても受けがよいはずですし、アスペクト指向によって難しい技術的なコーディングを局所化することで、偶発的複雑性を極力排除し、普通のプログラマーは業務ロジックの記述に集中できるようになります。

先日、エンタープライズ開発者が負け組として軽蔑される日本のSI業界ってという記事を書いたのですが、Groovy言語やAspectJといった本来エンタープライズ系でもっと積極的に使われるべき技術の人気がどれも今ひとつなのは、技術面で世界の進歩から相当の遅れをとっている日本のSI業界(特に軽蔑・軽視される下流工程のプログラミング関連技術)を象徴しているからなのだろうかと思えますね。つまり、本来の技術自体がダメなのではなく、新しい技術を積極的に使おうとしない業界の体質によるものではないかと思います。そして、我が国ではたまたま運悪く生産性や品質が軽視される領域とメインターゲットが重なってしまっているということです。*2

私はこのような技術の有用性が日本のSI業界で見直され、もっと活用されるようになれば生産性や品質の向上に確実に寄与すると思います。

(追記)

ちなみに、この記事ではAspectJGroovyについて書きましたが、必ずしも両者の相性が良いということではありませんのでご注意ください。併用する場合は注意が必要だと思います。将来的にはAspectGなるものが出てくるのかもしれませんが。

no title

*1:実案件での適用例はまだまだ少ないですが、日本でもユーザーグループで積極的に活動が行われています。JGGUG

*2:別の意味ではScalaなどバリバリ使いこなすハイスキルプログラマーと一般の職業プログラマーとの間でスキルが極端に二極化しているということであり、中間的なスキルプログラマーがいないということもいえるかもしれません。

2011-01-18

エンタープライズ開発者が負け組として軽蔑される日本のSI業界って

ブログの記事に対して多くの皆さんからいただいた意見を総合すると、技術力のあるトッププログラマーにとって現状の日本のSI業界での仕事というのは、働き甲斐のない、魅力の少ない仕事として認識されているという残念な事実を思い知らされます。

  • オブジェクト指向の基本すらいまだにきちんと使いこなせない開発の現場
  • 技術について勉強した知識をほとんど活用できないし評価もされない
  • 無駄なドキュメント作成などに対する膨大な単純作業を強いられる
  • いわゆる3K職場と言われるような過酷な労働と低い賃金
  • 20年以上も前の仕事の進め方からあまり進歩が見られない
  • 多重下請け構造によりユーザーに直接価値を提案するような仕事が難しい

多くの業務アプリケーション開発現場における体験を通して、以上のようなことが語られているということを考えれば、「業務アプリケーションプログラマー負け組だ」という意見が出てくることも当然のことかもしれません。現在では仕事環境の良し悪しや待遇などの情報はネット上でどんどんうわさとして広まりますから、優秀な開発者から順にソーシャル系のサービスプロバイダーや外資系の企業にどんどんと流出していってしまい、SI業界における技術の空洞化がますます加速される状況となっていることは紛れもない事実としてあるのでしょう。

こういった事情を反映しているのでしょうか、最近日本語で出版される(特に上級者向けの)技術書のタイトルをみると、

  • Scala、F#、HaskellErlangといった関数型言語(SI系では通常めったに利用されない)
  • Hadoopなどの分散処理(大量データ処理は業務系でこそ使うべきですが)
  • RESTサービス

など業務系というより、Webサービスプロバイダー向けの本に極端に偏っているのではないかということが気になります。(オライリーの翻訳書が多数出版されているというも原因の一つとして考えられますが。)最近も、あるルートから一足早く

を入手したのですが、日本語のScalaの本は既にいろいろとたくさん出版されているようですね。日本でScalaHaskellなどプログラミング言語系の本ばかりがたくさん出版されるのは、翻訳者や著者の興味関心と共に、日常の業務で技術力を発揮できない多くの職業プログラマー知的好奇心を満たすために個人的に勉強したり勉強会に参加したりするからということもあるのでしょうか?プログラミング言語の勉強であれば、時間さえあれば個人でできますからね。

ところが、Spring FrameworkやJava EEなど業務アプリケーション開発の現場でもっと役に立ちそうな分野に関する日本語の書籍は、ごく入門的なものや製品の宣伝的なものを除けば驚くべきことに本当に片手で数えるほどしか出版されていません。しかも、先日今のSI業界もリファクタリング可能だと思いますで紹介したDDD*1Enterprise Integration Patternsのような名著は翻訳すらされていません。こうした状況が日本だけでなく世界的な傾向であれば納得がいくのですが、Spring FrameworkやJava EEAmazonの洋書を検索すると、ここ数年内に出版されたものだけでも何十という書籍が検索されるのですね。当然開発者の興味関心があって売れる本が出版されるわけですから、外国ではエンタープライズJavaの開発の人気は衰えるどころか、非常に高い人気を維持していると考えて間違いありません。私も興味のある洋書をできるだけ多く読むようにしているのですが、Springに関する本だけでも読みきれない程多くの本が次から次へと出版されています。さらに、OSS Javaフレームワークはどんどん高度化しているで指摘したようなエンタープライズ向けのOSSの開発も海外では現在も盛んに行われています。同じエンタープライズJava開発と言っても、いつまでも10年前のStruts1を使い続ける日本のSI業界とは違い、海外ではどんどん新しいアイデアが取り入れられて、日々進歩している活気にあふれた魅力的な世界が存在しているように思われます。

SI業界の重鎮の方々はこうした状況をどのように考えておられるのでしょうか?このままSI業界の不人気が続けば、優秀な技術者の流出が続くことでシステムの構築能力や品質がぐんぐん低下し、最終的にITシステムが支えているビジネスそのものの国際競争力も無くなってしまうということは誰が考えても明らかだと思うのですが、いつまで現状のやり方を放置しておくのですか?もちろん、日本の伝統的に形成されてきた業界の構造を一夜で変えることは困難ですが、外国のSIのやり方で学ぶべきところは積極的に取り入れるようにすれば、業界のリファクタリングのヒントが得られると思います。(ここでは、エンタープライズ開発関連書籍の出版傾向にみる海外と日本の温度差について紹介させていただきましたが、日本の業界の常識にとらわれずに海外のやり方にもっと目を向けていただければ、学ぶべきことが多いように思います。海外とまったく同じ状態を目指す必要は必ずしもないと思いますが。)30年前の古き良き時代の考え方にいつまでもしがみついているのではなく、アジャイル開発など改善できるところはどんどん新しい考え方として取り入れていくべきではないでしょうか?

トップレベルのプログラマーから、エンタープライズアプリケーション開発者が負け組として軽蔑される*2日本のSI業界って絶対に変だと思います。まずは、外国のように業務プログラマー専門家として誇りを持って働ける環境を作るべきではないでしょうか。そのためには、まず、労働集約前提でレベルの低いプログラマーに合わせて規約を作るのではなく、レベルの高いプログラマーの仕事の仕方をもっと評価し(報酬ということだけでなくオブジェクト指向などの考え方を尊重する。)、教育も推奨して全体のスキルレベルの底上げを行うということに真面目に取り組むのが最初の一歩としてはよいのではないでしょうか。プログラマーの技術力を正しく評価するかどうか、この点が活気のある海外の業界と日本のSI業界との最大の違いだと私は思います。