落とし穴


昨日は誕生日だったが…。

晩御飯は週末の残り物のカレー。

期待していなかったけど、ちょっとガックリしながら、

誕生日くらい美味しいものにしようかと山手ラーメンに行きたい気持ちを抑えつつ食す。


今日の昼。奥さんから「誕生日おめでとう!」メールが届く。

本当は昨日であると言いたいけど、波風立てぬつもりで「ありがとー」とメールを返す大人な僕。


そこで一つある問題が。

昨夜、奥さんの居る前で、「明日20時から2人で予約をお願いします」と、

行きつけの知人のお店に電話を入れていたのだ。


…いや、僕は誕生日はちゃんと家に帰ったよ!

でも、奥さんの思っている僕の誕生日は今日だ。

なぜ2人で出かける?と思われても仕方がない。

一緒に飲んでいたのが学生時代柔道で名を馳せた、いかつい男の子だとは知るよしもない。

善意で「ありがとー」と言ったけど、もしかしてヤバイ?


…帰宅するとトイレに新婚旅行の時に買ったカエルの絵が飾ってあった。

うーん。

何か言うべきか、言わぬべきか?

プログラマー論 Vol.2 コードのモラル


他人の作ったシステムの移植や、

途中からヘルプで入る案件を経験して「?」と思うことはないだろうか?

  • 環境やある条件に依存するコードが直書き
  • 変数名と違う内容が入っている変数
  • コピペによる二重化
  • 他プロジェクトのファイルのコピーによる無駄な変数

一つずつ考えて行こう。

まず「環境やある条件に依存するコードが直書き」。

そういうコードを最初から書いてあればあきらめるのだけど、

共通変数や環境に依存する処理を取りまとめているクラスファイルなどがあって、

移植する時はここを直せば行けますよーと言われつつ…ダメじゃん、みたいなこと。

事前に聞いていた話から見積もるコスト通りに行かず、

どこが原因なのか調査、修正が必要になって、実際の作業量に大分差が出てくる。


「変数名と違う内容が入っている変数」

これも結構悩む。人のコードに手を入れる時に、

変数名を見ながら直感的にこれは○○だと思っていたら、実は全然違うもの。

name って書いてありながら年齢が入っていたりとか…。

おそらく何かしらのコードのコピーか流用で、変数名をそのまま使ったんだろうけど、

後で読む時には非常に困る!せめて変数名くらいは修正して欲しいなぁと。


「コピペによる二重化」

「ここのファイルにこういう処理書いてあるから、同じようにすれば動くよ。」

と言ってみたところ、その処理をコピーして違うコードに貼ってしまうこと。

でもそこに将来修正が入るだろうと予測できる場合、

共通処理を書き出してどこか一箇所にまとめておいておくべき。

後日修正した際に、「えっ、そっちも直さなくちゃいけないの?」ということを無くしたい。

その場凌ぎで急ぎで対応してしまう気持ちもわからなくはないけど、

将来のミスの可能性を未然に摘み取っておきたい。


「他プロジェクトのファイルのコピーによる無駄な変数」

これも以外に困る。「この変数は何に使っているんだろう?」と悩んでしまう。

定義してあるけど使っている場所がわからないとか。

さらにその変数が重要な意味を持つ名前だともっとことが深刻だ。

全部のファイルをgrepして変数名を探してみて、

使ってないことを確かめた後意味がないものとわかってコメントアウトしてみて、

一通り動作検証した後に削除。

こんな無駄な手順を踏みたくないので、

全くプロジェクトに関係ない変数や処理は、コピーして来た時点で削除しておいて欲しいところ。


いくつか挙げてみたけど、

どれもひと手間かければ簡単に防げること。

そういうところで問題が出るとすごくもったいないな、と思う。注意すれば防げたことだから。


あと、不思議とこういうモラルのないコードは伝染しやすい。

きちんと書かれているコードの案件に他人が入った場合、

それを汚しちゃいけない!という気持ちが働くようなのだけど、

ぐちゃぐちゃなコードの案件に途中から入る人は、

何も気にせずコードを汚し続けることになる。

これは書籍「達人プログラマー」にも書かれていることだけど、

以前ニューヨークの治安が悪かったころ、

犯罪多発地域に車をしばらく放置しても何もなかったそうだが、

その車の窓を割っておくと、またたく間に各種部品が盗まれていったらしい。

そして、その治安を向上させるために採った作戦が、

軽犯罪を徹底的に取り締まることと、地下鉄の落書きを消すことだったそうだ。

その結果、一気に凶悪犯罪の発生率が低下していったらしい。

同じことが、コードにも言えるんだよね。

未然に小さな問題を取り締まっておけば、

大きな問題が発生する可能性を一気に下げられる。


とりたてて特殊な技術があるわけではなくても、

こういうことに気を使って、モラルのあるコードを書く人。

途中から案件に入る際には、それまでの意図を理解してコードを書いてくれる人。

一緒に仕事をすると、この人と組むとやり易いな、と思うわけで、

そういう人って、実は凄い良いプログラマーじゃないかなと思うわけです。

セオリー


開発をする上やサービスを作る上で一般的なセオリーと言われていること。

それは決して「一般的」ではなくて、「ある時点に当てはまる」ことな気がする。

一発で大ヒットするサービスを作れれば良いけど、

大概のサービスには原始時代から中世を経て近代へとの進化がある。


一般論におきかえて考えてみよう。

「夜に口笛を吹いてはいけない!」

という話を聞いたことはないだろうか。

これは暗闇の中で自分の位置を敵に知らせないため、という由来だと考えている。

自分の身を危険にさらさないためだ。

原始時代やまだ暗い箇所が多い中世には当てはまるかもしれないが、

今週の金曜日の夜に六本木交差点で口笛を吹くか吹かないかで、

大きな変化があることはまずないだろう。


何が言いたいかというと、

サービスを開発している上で、色々なアドバイスをいただくことがあるけど、

現在のステージでやらなければならないこと、今は意味が無いけど将来きっと役立つこと、

聞く側もきちんと理解して進めなくてはならないんだ。


例えば、いわゆるサービスの原始時代には、

進化のスピードを上げることが重要になる。

この時点では細かい所まで作り込んでいる時間もリソースも無いから、

まずはどんどん作ったものを公開してTry & Errorを繰り返していくことが必要だ。

そういう意味では、細かな箇所にかかわることに対応している余裕がない。


ただ、サービスを中世、近代へと進化させられるかどうか、

競合サービスとの差別化となるのが、最初の頃に言われていた、

細かな箇所にかかわるアドバイスだったりする。

この時期には初期のTry & Errorというスタンスから、

ある程度きちんとしたコンセプトのあるものを出す方向にシフトすべきだと思う。


初期のスピード重視から、後半はクオリティ重視になるのかな。

サービスの状況に応じて、スピードとクオリティの適切な配分をしていくことが必要だと感じてきた。


そんなことを考えていて、最近サービス開発へのアプローチを少し変えてみている。

もう一段上のレベルに持っていこうかなと。

この週末で作っているプロトタイプはちょっと面白いかも。

iPad発売後の状況


乗らなきゃいけない。このビッグウェーブに!

乗らなきゃいけない。このビッグウェーブに!

iPad発売後の状況ですが、iPad発売前からアプリが1000ダウンロードを超え、

発売前日にはAppBankへ掲載いただいたことや、

Heat On Wed.でプレゼンしたり資料を公開したせいか、

iTunesでの事前ダウンロードが進んだようで1日で500ダウンロードを突破。


発売後には、店頭デモ機にインストールしていただいていたり、

App Storeのスポットライトや注目作品に選出していただいたおかげで、

既に累積9000ダウンロードを突破しています。

iPad

この調子だとAndroid版のダウンロード数を抜くのも時間の問題です。

iPadの方が露出が多いということもありますが、

数字を見ているだけだとiPad > Androidということになりそうで、

販売台数は個人的な予想よりもかなり多いという感じです。


あと、使ってみた感想としては、個人的には大満足で、思っていたよりかなり良いです。

客観的に考えると、ノートPCを持ち歩いている営業マンなどはiPadで充分じゃないか?という感覚と、

でもやっぱり嗜好品で必需品ではないのかな?という感覚の両方が入り混じっています。

今後の展開がどうなるかは予想が難しいですが、

おかげさまで、まずは「30min.ランチマップ」は順調なスタートを切ることができました。


ダウンロードしていただいたり、RTしていただいたり、記事に書いていただいた皆さま。

本当にありがとうございます!

Heat on Wed.(ヒートオンウェンズディ)!でプレゼンして来ました!


いやー。楽しかった!!


秘かにiPad狙ってたけど、今回は久川さんやrtiさんの方が上手でした。

自分は今できる最善のプレゼンができたと思っているので、

MHPの久川さん、それと同じくらいの喝采を浴びたrtiさんには脱帽です。

僕ももっと上手なプレゼンできるように練習しなきゃなー。


今回は自信を持ってできたし、

最近イチ押しのLibronの @jishiha さんや @yumilcy と近いくらいに

拍手をいただいたことはすごく嬉しかったです。

Libronとかなぶんのステッカーもいただきました。

Libron

FirefoxユーザーはLibronのアドオンインストールしてamazon検索してみるべきです!

検索結果に図書館が表示されるのってかなり衝撃ですよ!イチ押しのサービスです!!


コスプレ無しの @yumilcy とのプレゼン勝負は楽しいね。

衣装に頼らずとも聴衆を引きつけるプレゼンをすると思うので、

同じ土俵で勝負をすると、良い目標になるし、なんとかして勝ちたいなーと思います。

また機会があればプレゼン勝負したいですね。


MHPに選ばれた久川さんはさすがです。

アプリ購入させていただいたんですが、さすが!の出来です。

応援したくなる事業ですし、今回の勝者にふさわしかったですね。

自分のアプリのUIにはそれなりの自信はあったけど、

ああいうアプローチを観させられると、自分はまだまだだなーと感じます。

もっと発想広げなきゃね!!


あと、予想以上に面白いプレゼンばかりだった中、

自分のプレゼンをMHPに押していただいた方がいらっしゃったのは大変嬉しく思っております。

これを励みにもっと頑張ります!本当にありがとうございました。


最後に、MHPは久川さんだけど、MVPは樋上さんじゃないかな?

僕はkeynote+iphoneでプレゼンするのが初めてで、開始前に時間かかってしまったのだけど、

その間を上手くつないでいただいて助かりましたし、

一生懸命な姿から、良いイベントにしたい!という気持ちは凄く伝わりました。

「段取りが良くない」とか批判もあったみたいですが、まだ第一回ですよ?

皆で協力して第二回、第三回と良いものにして行く協力をしましょうよ!

6月30日の第二回も必ず協力させていただきます。


とにかく、すげー楽しかったですよ!

良いイベントでした。

プログラマー論 Vol.1 「良いプログラマー」の定義


気がつけばプログラマーとして10年戦士だ。

違う職種の人から見れば、「良いプログラマー」の定義とは、

技術力が高い人のことや、良いものを作る人、開発が早い人のことだと思う。


…でも現場はそんなに単純ではない。


システム管理や受託開発から新規サービス開発まで、

運良く色々なシチュエーションや多数のトラブルに巡り会ったおかげで、

プログラマーから見た「良いプログラマー」とはどんなものか、

自分なりの定義が出来上がってきた。


僕の中の「良いプログラマー」の定義とは、

「トラブルを未然に防げるプログラムを書く人」

だと思っている。

現場で不具合が出た時、チェック体制やテスト不足の話になるが、

それ以前に、不具合の可能性を減らすコードを書くことが大事だと思っている。


今まで10年間の中で感じてきたノウハウを残したいなと思っていたので、

少しずつブログで書いていこうと思う。


あと、僕が今まで読んだ本の中で一番影響を受けている下記の本、

プログラマーなら読んで損はないと思うのと、

この本に書かれている内容と同じテーマの話も多くなるので、

興味があれば是非読んでみて欲しいな。

達人プログラマー

keynote


今朝apple storeに寄ってiworkを買ってきた。

今度のプレゼンをMacでやりたくてkeynoteが欲しかったんだけど、これ凄いね。

なんかこれ使ってるだけでプレゼン上手くなったような気分だよ。

まだあまり使いこなせてないんだけど、iPhoneから操作もできるし、

手元を見ずにプレゼンできそうだ。


数少ないこのブログの読者さんへ(少ないというか居るのか?)。

26日のHeat on Wed.(ヒートオンウェンズディ)!では結構大きな発表をするつもりなんだ。

普段はプレゼンには自信がない方だけど、

今回はプレゼンはともかく内容は面白いと自信を持って言えるよ。

まだ定員に余裕があるようなので、お時間があれば是非観に来て下さい。


損はさせないよ!


あ、あと、@ITの自分戦略室に記事を掲載していただきました。

素敵な記事なので、是非ご覧ください。

エンジニア採用のきっかけはTwitter、30min.の場合

古の手法&登壇予定


携帯からの画像投稿のために、毎回違うワンタイムのメールアドレスを使って、

そのメールアドレス宛に来たものを同じプログラムで処理することをやりたい。


Postfixでqmailの ***-default みたいなことって出来ないかなと調べてみたが、

イマイチ良さそうな方法が見つからない。

そこで久々にqmailをインストールしてセットアップしてみた。


.qmail-****-default ファイルに

|起動したいプログラム名


と書けばそれでOKだ。 -default の部分は環境変数のRECIPIENTから取得すれば良い。


起動させるものもちょっとしたプログラムで済むから、わざわざRails通さずに、

久々にPerlで組んじゃった方が楽かなーと。

昔さんざんやった手法だけど、久々に書くとなんか新しく感じる。

…こうやって歳を取って行くのか?とちょっと寂しくもあるが…。


それはそうと、色々作りこんでいるものが溜まっているんですが、

少しずつリリースして行けそうです。

目立つリリースもあれば、ちょっとした機能追加もあればなので、

どれが「おっ!?」と思って貰えるかわかりませんが、

一つくらいみなさんの心に刺さるものがあればなと願ってます。


あ、あとイベントの登壇が2つ決まりました。

まずは5月26日のHeat on Wed.(ヒートオンウェンズディ)!

優勝賞品はiPadなので気合が入ります。発表内容については…諸事情によりまだ内緒です。

あとは6月18日のベンチャーCTOだらけカンファレンス vol.1

なんか豪華な面々の中に埋もれそうですが、せっかくなので楽しんで来ようと思います。


Macでプレゼンしたいので、iworkが欲しくなって来た。

iPadとも連携できるし、買っちゃおうかなー。

#twitter515

@yumilcyこと大山さん主催の#twitter515に参加してきました。

ライトニングトーク枠をいただいて、5分間話をさせていただいたのだけど…。

自分のプレゼンの出来は酷かったと思う。

思ったより5分って短いね。

最後1分の合図が出てから早口でなんとかまとめたのだけど、

駆け足のプレゼンになってしまって、上手く伝えられなかったなと。

次回プレゼンする時には反省を踏まえて、もうちょっと余裕のあるプレゼンをしたいと思う。


でも、今日は色んな人達と話ができて良かった。

懇親会の中でマイネット・ジャパンの上原さんと話をさせていただいたのだけど、

思いの他興味深い話ができたりして面白かった。

内容にインスピレーションを感じていただいたのか、

カンファレンスのお誘いをいただいているので、もっと突き詰めて話をしてみたいなと思う。


最近メディアに出まくっている津田さんともお話できた。

正直に言うと、メディアに持ち上げられたというか、メディアを利用したというか、

「持ちあげられている」人なのかな?というイメージを持っていたのだけど、
(本人にも正直に申し上げました)

パネルディスカッションの仕切りを見ていて、この人はプロフェッショナルのジャーナリストだなと思った。

二次会、三次会と色々な話をさせていただいたのだけど、

これからもTwitterやリアルタイムウェブを引っ張っていただきたい方だなと強く感じた。

「プロ」ってこういうことなんだなと、津田さんを尊敬するようになった。やっぱり凄いよ。


あと、イベントを主催した大山さん。

司会のやり方にtwitter上で批判もあったみたいだけど、

彼女のあのキャラクターは面白いと思うし、

今回の登壇者のラインナップを見ると、凄いと思わない?

こんな豪華なメンバーを集めることって難しいし、なにより180人集める集客力は凄いね!

イベントの集客をしている過程も知っているので、本当に頭が下がります。

批判をしている人には、イベントを成功させるまでの彼女の努力を知って欲しいね。

これだけの人達の前で話をする機会をいただいたので、

今後も大山さんのイベントには協力したいなと思う。

コスプレを売りにしなくても、充分集客できる力があるんじゃないかなーと感じてます。


最後に、来場して下さったみなさんや、USTで閲覧していただいたみなさんありがとうございます。

夏くらいにまたイベントやろうという話も出ていたので、

もし開催されるなら、今回以上にきちんと準備して、協力させていただきたいなと思う。


ありがとうございました。

オルセー美術館展2010 「ポスト印象派」


30min.サイトで、オルセー美術館展2010 「ポスト印象派」のペアチケットが当たるキャンペーンを実施しています。

◆キャンペーン概要

30min.のPCサイト、iPhoneアプリの投稿機能を使って、あなたの人生で印象に残っている「ひとこと」をつぶやいてください。
つぶやいていただいた方の中から、スタッフの心にズバッと刺さった優秀賞5名様と抽選で10名様にペアチケットをプレゼントします。

例:「永遠に生きるかのように学べ 明日死ぬかのように生きろ」
  「あきらめたらそこで試合終了ですよ」
  「曇り空でも、雷でも嵐でも、その上にいつも太陽がある」
  「人生は退屈すれば長く、充実すれば短い」

是非ふるってご応募ください!


◆応募期間

5/7~5/20まで


◆結果発表

優秀賞は5/21に30min.のキャンペーンページで発表いたします。
抽選結果は賞品の発送を持ってかえさせていただきます


twitterやiPhoneアプリのチェックイン機能を使った新しいキャンペンの試みですので、
告知にご協力いただけると幸いです。