ひがやすを技術ブログ

電通国際情報サービスのプログラマ

ソフトウェア技術者をやめるのは構わないがどの仕事でも認めてもらいにくいのは同じだと思うよ

私の職業プログラマのとしての最大の欠点は、ソースコードに対して強い美意識を持たずにいられなかったところだろう。生来の生真面目な性格が災いし、私の基準で美しいとはいえないソースコードを敵視しすぎた。
ソフトウェア業界(特に受託開発業界)は、基本的に正直者が馬鹿を見る世界である。顧客(あるいは経営者)が、保守性というソフトウェアの最も重要な品質を正しく評価できないという、情報の非対称性が存在するからだ。


経営者やお客様は、ソフトウェアの品質を正しく評価できない。なぜなら、その人達は、訓練を受けたプロではないから。


言ってることは、かなりの部分、そのとおりだと思います。しかし、これは、ソフトウェアに限らず、普遍的な真実なんですよ。


あんなだめな仕事をしている人に比べて、自分は、ちゃんとした仕事をしている。でも、上司も経営陣もお客様もそれを認めてくれない。
これは、どんな仕事をしていてもあり得る話です。ソフトウェア業界に限った話ではない。だって、評価している人たちはプロじゃないんだから。


自分が言いたいのは、elm200さんが、どう思うのかは個人の判断なんで私は何も言いませんが、あのエントリを見てソフトウェア技術者がいまいちな職業だと、いろいろな人(特に若い人)に思ってほしくないということです。
自分も、ソフトウェア技術者(プログラマ)だし、この業界にいて得られたものも多い。この職業が好きなら、続けて欲しいと思うから。
この辺は、弾さんが書いていますね。
404 Blog Not Found:私がソフトウェア技術者でもありつづける理由


どんな仕事をしていても、認められるには時間がかかります。いい仕事をしていたとしてもです。いい仕事をしていたから、世間に認めてもらえるほど、世の中甘くない。でも、認めてもらうためには、良い仕事を地道にし続けるしかない。


「いい仕事をしていたから、世間に認めてもらえるほど、世の中甘くない。でも、認めてもらうためには、良い仕事を地道にし続けるしかない。」
大事なことなので二度言いました。


後、blogのタイトルは変えたほうがいいと思うなぁ。もちろん、個人の自由ですが、elm200さんは、世の中の人をひきつけるエントリをかかれることが多いので、検索エンジンの上位に来ることも多いはずです。そのときに、Railsの技術情報を検索したい人の邪魔しないように。

ある程度の年齢を迎えたプログラマが生き残るには

ある程度の年齢を迎えたプログラマが抱える悩みに、「若手のプログラマと比べて、どうやって価値を出していくか」という問題があります。これは言い換えれば「同じような生産性であれば、相対的に給料の低い若手のプログラマに置き換えられてしまうのではないか」という悩みです。


35才(2004年)でプログラマとしてオープンソースを始め、今年で42才になる俺が通りますよ。
35才までは、SIerの中でSEをやってたので、そんなにプログラムは書いたことがないです。


上記のエントリには、いろんな戦略が書いていますが、ぶっちゃけ戦略は一番重要なことではなく、一番重要なのは、常に自分の価値を高めるために努力し続けることです。
努力や挑戦をやめたら、自分の価値はどんどん陳腐化して下がっていくのは当たり前なのです。


自分がどんなことに挑戦してきたのかちょっと書いてみますね。


2004年1月、プログラマとして何か新しいことに挑戦したかった自分は、DI(Depencency Injection)とAOP(Aspect Oriented Programming)いう技術を選択し、オープンソースプロジェクトとしてSeasar2をスタートさせます。当時、DIやAOPは何が嬉しいのかあまり理解されていなかった頃です。でも直感的に良い気がしたんだよねー。特に理由はなく勘。そして、3月末にSeasar2をリリースすることになります。


DIやAOPは良いプログラミングスタイルをもたらすもので、生産性を向上させるものではないと当時思われていましたが、普及させるためには、生産性を向上させることも示さなければいけないと考え、インターフェースにAOPを仕掛け、SQLを自動生成するというS2Daoというデータベースフレームワークを思いつきます。
リリースは2004年、夏くらいかな。
この後のSeasar2の普及には、S2Daoが欠かせなかったと思います。S2Daoを使いたいために、Seasar2を(仕方なく)使うという人も多かったはずです。
インターフェースにAOPを仕掛けコードを自動生成するというスタイルを思いついたのは私が初めてだったはず。


データベースだけでなく、Webの部分も生産性を向上させなければいけないと考えた私は、HTMLテンプレートを使ったWebフレームワークであるS2JSFをリリースします。HTMLテンプレートを使ったフレームワークは、当時Tapestryなどいくつかありましたが、JSFという標準技術でHTMLテンプレートを採用したのは、私が初めてだったはず。その後、Faceletとか出てくるんだけどね。
リリースは2005年、頭くらいかな。


2005年、Railsが徐々に人気が出てきて、設定ファイルは悪みたいな流れが出てきます。この流れに沿って、設定ファイルなしでアノテーションで設定を行うSeasar2.3をリリースしました。
2005年、末くらいかな。
今では、クラスパスを捜査してクラスに設定されているアノテーションを読み取る手法は、非常にポピュラーですが、Javaでこのスタイルを導入したのは、Seasar2が初めてだったはず。


設定ファイルをなくすだけでは、生産性は余り向上しないと気づいた私は、Javaの生産性を飛躍的に向上させるために、スクリプト言語のようにソースコードを修正したら、その変更が即座に反映されるHOT reloading(当時はHOT deployと呼んでました)という技術を思いつきます。Javaでこのスタイルを導入したのは、Seasar2が初めてだったはず。
Seasar2.4のリリースは2006年末です。


当時、Webフレームワークの代表であるStrutsは時代遅れだと考えられていて、次々新しいフレームワークが発表されていましたが、いまいち普及していませんでした。この状況を見た私は、全く別のフレームワークを作るのではなく、Strutsをベースにbetter Strutsを作るのが世のニーズにあっているのではと考え、SAStrutsを作成します。
SAStrutsのリリースは2008年のはじめのほうです。
SAStrutsは、かなりの成功を収めました。今でも人気があります。


2009年4月、Google App Engine for Javaが発表になりました。これをみて、これまでの自分のテリトリーだったEnterprise Javaを捨て、Cloudに行こうと決心します。Slim3の開発が始まります。
Slim3のリリースは、2010年3月くらいです。


2010年、これからの時代は、ソーシャルアプリだと思っていましたが、携帯でFlash Liteを使ったソーシャルアプリは、2010年でピークを迎える気がしていて、どうやってビジネスをやっていこうか悩んでいました。
そこで発表されたのが、JobsのFlash外し(これは、後にまたひっくり返されるんですが)です。
よし、これからはHTML5でソーシャルアプリだと考え、技術調査 + 新規事業を計画し、金を出してくれる人の説得を始めることになります。


で、今に至る感じ。他にも紹介していない話はありますが、だいたいはこんな感じです。


ずっと、挑戦し続けているでしょ。挑戦したから必ずしも成功するとは限らないけど、挑戦しなければ、自分が陳腐化してだめになることは間違いないです。


これは、実はプログラマに限った話ではなくて、どんなことにでも言えることだと思います。常に自分の価値を高めるために挑戦し努力し続けることが重要だということです。


9/28のGoogle Developer Day 2010では、ソーシャルアプリを作るのにGoogle App Engineがどんなに向いているかの話をします。お楽しみに。

新しいサービスを作るのになぜ今が絶好のチャンスなのか

おとといのエントリで新しいサービスを作る側に回ろうよという話をしました。
受託開発に未来はない? - yvsu pron. yas


新しいサービスを作るというのも難しい話ですが、今は、絶好のチャンスなんですよ。


ガラケーがピークを過ぎ、徐々に衰退し始めている。iPhone/AndroidのようなSmart Phone、iPadのようなSmart Bookも広まりつつある。Goole TVのようなSmart TVも出てきます。
広まりつつあるのがポイント、広まってから新しいビジネスを始めても既に手遅れ。
常識的な人は、国内のSmart Phoneのマーケットは1000万台くらい年間売れてからだよねと思っていることでしょう。2010年は300、400万台程度と予想されているので、まだまだマーケットが小さいと思っているわけです。
国内だと確かにそうですが、グローバルなマーケットで考えると国内の10倍以上なので1000万台を楽に超えています。
グローバルなサービスを提供するなら、今でも早過ぎることはないのです。


iPhoneのマーケット、Androidのマーケットというようにマーケットを分けて考える必要もありません。ネイティブアプリでサービスを提供するとそれぞれのマーケット向けにアプリを作る必要がありますが、HTML5でアプリを提供すれば、1つのアプリでどちらのマーケットにも対応できます。
実は、Smart Phone,Smart Book,Smart TVのブラウザはWindows Phone 7を除いては、みんなWebkitベースのブラウザ(そうじゃないやつももしかしたらあるかも)なので、1つのアプリですべてのマーケットに対応できます。
実際は、プラットフォーム毎にWebkitのバージョンが違うので、そんなに簡単な話でもないのですが、そこもノウハウ/付加価値になります。
HTML5というと、ブラウザの互換性だとかいう人がかならず出てきますが、Webkitベースのブラウザに限って言えばそれほどひどい互換性の無さはありません(ある機能がまるまる実装されていないとかはあるけど)。
Webkitベースのブラウザという視点を加えることで、HTML5もまた、今でも早過ぎることはないのです。しかも、みんなまだ始めたばかりなので、先行者メリットを十分に狙えます。


クラウドを利用することで、資本の少ない人でも勝負できます。インフラに莫大な費用がかかることもない。コストが安く、自動的にいくらでもスケールアウトするという点で、コンシューマ向けのサービスを提供するならGoogle App Engineがおすすめです。
なぜかというと長文日記にあるようにコンシューマ向けのサービスを提供するとRDBMSがたいていボトルネックになります。コンシューマ向けのサービスにはRDBMSよりNoSQLのほうが向いてます。
Google App EngineにはBigtableというNoSQLが搭載されていて、それを使いこなすためのノウハウも既に蓄積されています。Bigtableの使い方を学ぶなら、この本がおすすめです。一見Slim3の本のように見えますが、この本は、Bigtableをいかに使いこなすかについて書いた本です。本当は、「Bigtableを使いこなせ」ってタイトルにしたかったんだけど、出版社がどうしてもSlim3って入れたいというからそのタイトルになってるんだけどね。
NoSQLは他にもいろいろあるけど、いろいろノウハウが溜まっている点では、Google App EngineBigtableを使うのが一番確実でしょう。


twitterで#appengineでsearchしていれば、有用な情報が豊富に入ってきます。


ほらね。今は、新しいサービスを作るには、絶好のチャンスなんですよ。わたしもトライするし、いろんな人にトライしてもらいたいなぁと思います。


こんなこと書いて、お前になんの得があるんだと思われる方、あるいは、どうしてそんなに必死なんだと思われる方もいるかと思いますが、理由は簡単。私が新たなサービスを立ち上げて仮に成功したとしても、その効果はたかがしれています(自分の周りだけ)。
行動力なある人がどんどん、次の成長分野に挑戦して成功するとで、日本も成長路線に戻れるかもしれません。ほっとくと日本は衰退するからね。
グローバルな社会なんだから、日本が貧乏になろうが、金のあるところから取ればいいだろうと思う方もいると思いますが、日本人である以上そこまでドライには考えられないのが、実際のところ。
だからこそ、次の成長分野に一緒に挑戦しようよということです。

受託開発に未来はない?

私は1年以上、エンタープライズの世界(企業向けSIとか)から離れ、ずっとGoogle App Engineをやっています。今は、Google App Engine + Webkitベースのブラウザで動くHTML5を使ったグローバルな新サービスを提供しようとしていて、新規事業立ち上げのために日々奮闘しているので、エンタープライズな世界に戻ってくることは、基本無いでしょう。


私は、受託開発に未来はないと思っているので、自分でサービスを提供する側に回ろうとしているわけです。受託開発に未来はないといっても、文字通り未来はないという意味で、すぐになくなるわけではないし、生きてくために必要な部分も多々あると思います(うちの会社もSIerだし)が、今後は撤退すべきだろうという判断です。


受託開発になぜ未来がないかというと、世の中の動きがかなり速くなっているので、その中で素早くチャンスを捕まえたものが生き残ると思うからです。受動的に待ってるだけじゃ、じり貧なだけ。受託開発は、受動的なビジネスなので、生き残っていけないだろうということです。
生き残るためには、素早く動いたほうがいい。過去の延長で、なんとなく生きているのが、今は、最もリスクが高いと思う。
これは、個人にも企業にも言えます。


後、サービスは最初からグローバルな市場を狙ったほうがいい(これは受託には直接関係ないけど)。Smart Phoneがメインなので余計そう感じるんだろうけど、国内だけじゃマーケットが小さい。最初は国内からからはじめ、成功したら海外と考えがち(自分もそう)だけど、多くの場合、甘えであることが多いので、最初から覚悟を決めてグローバルな市場を狙うべき。


もちろん、これは私の個人的な感覚で、押し付ける気持ちはありません。


エンタープライズな世界にかかわらないといっても、Seasar2は別。既存ユーザーが安心して使っていただけるように今後もメンテナンスし続けます。
Seasar3の開発が中止になり、Seasar2.5の企画もSeasar-dev MLでの話し合いによりなくなったので、Seasar2.4は最終版として安心してお使いください。


慣れって生産性を向上させるのには、かなり重要です。Seasar2に慣れている開発者の方は、慣れをさらに重ねることで生産性を向上させることができます。


はっきりいって、エンタープライズJavaの世界で、Seasar2(+それを取り巻くフレームワーク群)以外の部分は、多少進化しているでしょうが、Seasar2と比べて生産性が著しく高いというものは殆ど無いでしょう。
新たな機能/仕様というのは、きちんと使いこなせるようになるまで時間がかかるし、慣れてないので、一時的に生産性が落ちるリスクもあります。


エンタープライズJavaの世界は、ほとんど動きのない世界なので、果敢にチャレンジしてもメリットよりリスクが大きく、慣れを重視したほうがいいということです。


今後どうしても受託をやるならforce.comのような少数精鋭で付加価値をつけられるようなやり方がいいと思います。仕様を決める人がその場でプログラミングをして組み立てていく感じ。
大量に人を投入し、上流下流にわけて分業するようなSIは不幸を増やすだけ。下請けは不幸になりがちだし、大手SIerは一時的に儲かるかもしれないけど、技術力もなく、あいまいな仕様しか決められず、人に作業を振るだけのだめ社員だけになって会社が先細ってしまいます。

Seasar3開発中止

Seasar3の開発を担当する予定だった小林さんが、Seasar3開発のモチベーションが萎えちゃったようなので、開発を一旦中止します。
http://d.hatena.ne.jp/koichik/20100806#1281070800


お前がやればいいじゃないかと言われそうですが、今、丸山先生が、Spring/Rooをとても熱心に追っかけているんです。
http://maruyama.cloud-market.com/cloud-doc/Roo.pdf
http://www.ustream.tv/recorded/8600913
丸山先生が熱心に追っかける技術は流行らないというジンクス(先生ごめんなさい)を私は真面目に信じているので、小林さんがヤル気をなくしたのもあり、Seasar3の開発は中止したいと思います。


ちなみに、去年PDCというマイクロソフトの大きなイベントに行って、Azure素晴らしいと思ったのにもかかわらず、スルーしたのも同様の理由です。
Xperia(Android)を売って、iPhone4を買ったのも同じ理由です。


丸山先生、本当に本当にごめんなさいm(_ _)m
最近、北米ではAndroidが好調なので、ジンクスが崩れることを願っています。しかし、今は、ジンクスを信じます。


今後は、Java6に対応したSeasar2.5を出す方向で動きます。Seasar2.5がどのようなものになるのかは、Java6対応以外はまだ決めていないので、Seasar-dev MLで話し合われることになるはずです。

Slim3本予約開始

Slim3本の予約が開始されました。本屋で実際に買えるようになるのは、7/28(水)からです。
http://www.amazon.co.jp/%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E5%BE%B9%E5%BA%95%E6%B4%BB%E7%94%A8-Slim3-Google-Engine-Java/dp/4798026999/ref=sr_1_2?ie=UTF8&s=books&qid=1280117730&sr=8-2


この本は最初、私一人で書いていたのですが、執筆が進まず、出版は暗礁に乗り上げていました。そこに救いの手を述べてくれたのが、@shin1ogawaです。@shin1ogawaが執筆を担当し、私が監修するというスタイルに変えることによって、無事出版にこぎつけることができました。本当にありがとう @shin1ogawa


この本の狙いは、Google App Engineのデータストア(Bigtable)を理解し使いこなすこと。これだけに特化しています。なぜなら、データストアを制するものがGoogle App Engineを制すると言われるくらい、データストアを使いこなすことは重要だからです。


Slim3もまた、データストアを使いこなすために存在すると言っても過言ではありません。仕事で使いこなすためには、理解しているだけではダメで、使いこなすためのノウハウを身につける必要があります。Slim3はそのために存在しているのです。


この本は、初心者向けの入門本ではありません。データストアに関する、私や@shin1ogawaが持っているありったけの知識と経験がこの本には詰められています。世界中で売られているappengineの本の中で本書以上にデータストアについて述べたものはないし、今後も登場することはないでしょう。
ただ、初心者お断りではなく、初心者でも理解できるように文章を工夫したつもりなので、楽しみにしていてください。

Google App Engine for Pythonをお使いの方もぜひお読みください。Bigtable、データストアに関する部分は、言語による違いがありません。特にデータストアの部分は、力入っているのでおすすめです。

髪を赤く染めました

ヨシオリとドラ娘の結婚を体を使っておめでとうと表現したくて、髪を赤く染めました。ちっちゃいよしおりみたいな感じかもw
そういえば、結婚式でid:yuripopにお腹出てるって言われた。俺の体重44kg(体重は実は関係ない気もするけど)だぞ。どれだけ男に対する基準が厳しいんだよ。俺がお腹出てるなら、岡村靖幸はどぉなっちゃってんだよ。比べてくれ。
http://www.flickr.com/photos/koichiroo/4760767000/in/set-72157624294415109/
yoshiori x higayasuo