愛車:マツダアテンザ
Webを中心とした、ビジネス&テクノロジーに関する思いつき
by F-shin
[ このサイトについて ] [ F-shinについて ] [ トップ ]
iPhoneアプリ
author:えふしん
photo_20.jpg
藤川真一について


初代モバツイ開発者
想創社再創業 / KMD博士課程
著書〜100万人から教わったウェブサービスの極意―「モバツイ」開発1268日の知恵と視点 [Kindle版]
お求めやすい夏休み特価!
このカテゴリ[会社活動]の最新30件
2013年からのWeb関連ビジネスの方向性と、「100万人から教わったウェブサービスの極意」kindle版 320円キャンペーンのお知らせ 3Dプリンターに対する単純な疑問 会社を辞めるまでの期間、1.5ヶ月以上は会社の甘え エンジニアの評価が4以上にならないワケ 嫌な夢を見た シャープの液晶は成長技術や否や 決断力がある人の弱点 うだうだ書く ブラックという言葉から逃げるな 若い奴が抱く年齢への恐怖なんてどうせわかってないで言ってるから気にするな。 人は見たい現実しか見たくないという問題 プレーヤーとして戦い続けるための意志力 エンジニアの未来サミット 2012 for Studentsで話をしてきました。 Amazonの企業理念「Every day is still Day One」が素晴らしすぎる。 「エンジニアの未来サミット for students 2012」に登壇します。 責任フリーのイノベーション 想創社 version2.0を設立しました。 世界は勝手に変わるのではない、誰かの手で変えているのだ。 Webのベンチャーが目指す先はカンバン オワコンのガイドライン ブラック企業の定義 家入さんのラジオ番組に出演した件と、WebSig1日学校で講師をやる件 技術力、ソフトウエア発想共に最もアップルに近かったシャープ…X1/X68の思い出 Twitter api ver1.1、痛いところ、痛くないところ IMJの上場廃止の文章に思うこと。 フリーエージェント社会の到来は、そのまま企業体の没落を示すわけではない。 ミッション・クリティカルについて考える〜AndroidよりiPhoneの方が好きな理由 社員は本当に経営者視点を持つべきなのか。 三木谷社長のインタビューは終わりの始まりになるのか?! ScanSnap+プリンタを1万円で代替するクラウド対応のインクジェット複合機の話
[このカテゴリをもっと見る]
Powered by
Movable Type

July 22, 2011

スポンサーリンク

フェイスブックでエンジニアをやっていた方の面白い話があった。

「ぼくはこうしてプログラミングを覚えた」

フェイスブックのエンジニアで史上ベスト3に入るといわれるEvan Priestley氏への質問「どうやってプログラミングを覚えましたか」に対する本人からの答えです。

という話

コードの質がフェイスブックの強みであったことはないが、2007年のフェイスブックのコードはグローバル変数とextract関数にまみれたヒドいものだった。
この「質v.s.スピード」という概念は根本的に間違っていると思う。だって素早く開発をしなくては環境、あるいは自分の環境の理解の変化にソフトウェアがついてこれず、ソフトウェアが解決すべき問題が解決できなくなり、必然的に質が落ちてしまう。逆に、質の高いソフトウェアを書かなくては、なにかある度にインフラが崩壊し、素早く開発をすることができなくなってしまう。インフラの崩壊は、やる気を削ぐので特にたちが悪い。フェイスブックでは「質v.s.スピード」ではなく「質=スピード」を念頭にソフトウェアを書いてきた。相当たくさんの仕事をフェイスブックではしたし、書いたもののかなりの部分が今でも使われていることを考えると、ぼくの考え方は間違っていなかったと思う。


この記事を読んで開発者の方はどう思いましたか?

はてなブックマークのコメントだけだと、あまりよくわかってないのですが、なんとなく思ったのは、そりゃ、両立しなくてはいけないことをわかってはいても…、という現実に対して、

「やっぱりスピードを求められても質を大事にしよう!」

と思った人が結構いるのでは?

しかし、この記事は、二つの真実を表しています。

「コードが最悪だったとしてもフェイスブックはどエラいサービスになった」

という事実。

そして、

「後から、彼が頑張って直した」

という事実。

「コードが最悪でも成功した」理由は、初期にコードを書いていた人(ザッカーバーグも含めて?)は、素敵な大工さんじゃなかったかもしれないけど、

「想いを実現したいと思った人が書いているから」

・・・なのかなって思いました。

プログラミング能力と、サービスを作る能力は全く別のもの。

素敵なビジュアルのネットショップ vs 楽天ショップの話ってありますよね。

デザインがイケてないのに売れているという話。

ポイントは、ショップオーナーやスタッフが

「自分達で更新するから」

ではないかと。

ネットの制作のプロじゃないけど、商売のプロ。そのセンスがネットに反映される時に、デザインを両立するのは、そりゃ難しいことです。天は二物を与えず。

だから、お店が軌道にのって、ビジネスノウハウが確立してから、直しても遅くない。

そういうことなのではないかと。


じゃぁ、職業プログラマーにとっての正解は?

彼に大賛成で、

「質とスピードの両立」

に他ならない。

ただし、優先されるべきキー値は、

「絶対的に時間」

です。

(僕ここでも書いてるし→「ネットサービス系企業における、積み上げ型タスク管理の危険性」

プログラマーやデザイナーって、プロ野球選手と同じだと思っています。

「限られたバッターボックスで、如何にヒットを打つか。」

飛んでくるボールの数は有限です。

その中で、如何に打率を上げるか。それが専門職に求められる能力だと思っています。

フェイスブックの例で言うと、

「コードの質にこだわらずに、スピードを優先した」

というのは、

「それでもヒットやホームランを打った」

ので、いろいろ残念だったかもしれないし、後の苦労もあったかもしれないけど正解です。

しかし、その逆は×で、

「コードの質にこだわっていたら、三振した」

というのは最悪です。何も生み出していません。
バッターボックスとは、簡単に言うと、お金のことだと思ってください。

お給料はもちろんのこと、会社全体としては、その時間で得られる売り上げとか、サービス性とか、その先の選択肢とか。先頭バッターが出塁したら選択肢増えるよね、とかに繋がってきます。


つくづく思っていたのは、

「イチローを目指そう」

ということかなって思います。

いついかなる状況下でも、良い感じにヒットを打つ。
そして、後々までメンテするコードだからこそ、そのバッターボックスを大事する。でも、機会は絶対に無駄にしない。

「スピードと質」の両立という言葉をこれほど形容できる人ってなかなかいない。

ぼくのプログラマーとしての成長に一番寄与したのは、「判断力をつける」ということじゃないだろうか。

これはマジで大事。

判断するまでの時間。

判断するための材料の準備。

判断ってのは、「あえて完璧にしない」ということも含めて。

(上記文章にある、as simple as possible but not simpler・・・に近いかな)

これがその先の選択肢に効いてくる。

「とりあえずコード書け」って言葉は、実は判断力の先にある言葉だったりしますね。判断してないとコード書けないし。

コードのスピードが超速いんであれば、間違ってた時に直すのも速いですよね。
そう考えるのもまた判断力。

ただ感覚的には判断力に加えて、決断力、かな。大事なのは。


参考になるかわらないけど、モバツイにメールでつぶやきや写真を送る機能ってのがあって、以前、メールサーバ(postfix)からphpに投げたスクリプトで、twitpicへの送信などを実現していたら、いつしか写真の枚数が増えて、負荷が高くなって、送信遅延が発生しだした。

それを回避するために、「今すぐ解決しなくてはいけないこと」として、メール受信と写真送信を分離するために、確か半日以内でキューシステムを作ったんだけど、オープンソースの素敵なキュー管理システムをいじってる余裕もなかったので、フォルダの移動で管理したんですね。

・写真送信情報の記述したメタデータを、キューフォルダに置く
・別のスクリプトが先頭のメタデータを、となりの実行中フォルダに移動する
・実行中フォルダで、成功したら成功フォルダに移動する。失敗したら失敗フォルダに移動

みたいな感じで。どれぐらい排他処理ができてるのか理解できてないので、多分、本気で負荷かけたらトランザクションのselectの重複みたいな事態が起きてしまうと思うのだけど、こういう仕組みを、以前別業種のシステムで見た事あったこともあって、それなりに大丈夫だと思って作ったんだけど、今のところまだ大丈夫。

ただ、どこかで、ちゃんとしたキュー管理しないとマズイかもね、という状況なので、今後、ちゃんと時間を取って作り直してもらおうと思ってる。

ただ、作り直すって、明らかな問題がある時か、それ以外にやることがない時じゃないとできないので、結局、普通はやる時間が取れないという話になる。

すなわち、やるときは質とスピードが両方ないとできないんです。それをする理由もないのに作り直したら、コードはきれいになったかもしれないけど、バグ出て動かなくなりましただったら、やらない方が良かったじゃんって話になってしまうので。


これも最初の数年で培われた判断力のおかげだ。この「判断力」は、プログラマーにとって非常に重要なのだが、そう簡単に教えられるものでもない。ぼくが知る限り、判断力をつける一番の方法は、自分で設計したシステムを長い間メンテすることだと思う。

Web2.0以降のSNSの流れで、巨大なサービスを作る会社が増えて、優秀なエンジニアはそっちに流れている中で、当社がエンジニアに提供できるものって、どういう風に言葉にしたら良いのかなって思ってたけど、この「判断力」を培う機会なのかなぁ、と思っている。

システムは、そんなに小さくもなく、大きすぎも無く、一人で上から下まで把握できるサイズの中で、それ相応のトラフィックをさばきながら、

「慎重かつ大胆に、質とスピードを実現する機会」

は提供できるのではないかと思った。

スポンサーリンク
■同じカテゴリ[会社活動]のエントリー
<<前の記事 方向性はあっている、という言葉の危険性
>>次の記事 日本をコントロールしているもの
■このblogの書き込み最新3件
本ブログは移転しました インターネットの遊び方を身につけよう トトロが陽なら、『風立ちぬ』は陰?〜『風立ちぬ』の感想