megamouthの葬列

長い旅路の終わり

キレる中年プログラマ

id:cildさんが久しぶりにブログを更新して、それが実に良かった。
だって

鉄の棒でそこらじゅうを狂ったように叩きまくって、大声で罵倒した。そして最大ボリュウムで「二度とオレに指図するな!」と10回くらい怒鳴った。

だぜ?

人がキレているのを見るとふつう不快な気分になる。見苦しいなあと思ってしまう。しかし、本当はキレた本人が一番傷ついているのである。キレた後もしばらくドキドキして、自分は一時の感情のピークで何をしてしまったのだろうか、友情とか信頼とかそういう取り返しのつかないものを失ってしまったんじゃないだろうか、と不安になるのである。で、しばらくクヨクヨ考えているうちに、考えているのも面倒になってきて、キレちゃったものは仕方ない。もはやどうでもいい。と自暴自棄気味になって、まるで何もなかったように日常を過ごし始めるのだけど、その後も返す返す、ああキレちゃったなあ。と思い出して、もう自分は誰にも冷静な人間だとは思ってもらえないのだと、夜のふとした瞬間に、全身が真っ赤になるぐらい恥ずかしくなって、叫びながら走り出したくなるのである。

中年特有の、あまり正当性のない、赤ちゃん返りみたいなキレ方には身に覚えがあるから、こういう心理がよく理解できる。鉄の棒を持ち出したりはしていないが(どこから出てきたんだろう?鉄の棒)感情的なメールを書いて、やっぱりやめて、もう一度ゴミ箱から下書きに戻して、感情的な部分をイヤミ程度に見えるように書き直しているうちに2時間ぐらいたってました、とかそういうのはよくある。

なんでこんなに腹がたつことがあるのか、本当にわからない。このエントリを書くために幾つか仮説をたててみたが、どれも嘘くさくて論考を進める気にもならない。ものすごく経験を積んできたのに、若者と同じ扱いしかされないのが気にくわない説とか、仕事の完成度が上がれば上がるほど上流の変化に対応するための精神的な余裕は逓減して怒りに変わる説とか、なかなか勃起しないから、体がエネルギーを求めて怒り出す説とか、そういうのを思いつくし、4千字ぐらいは書けそうだけど、全部疑わしくて、アホみたいだから、面倒になって、それはね、十分な金をもらっていないからです、というほうがよっぽど説得力のある説に感じてしまう。少なくとも貰うもん貰っときゃ腹が立たないのは直感的にわかるから、年功序列って良かったよなあ、と失われた世界を思う。


だいたい、これぐらいの歳になれば、出世の道は閉ざされても、月一回ぐらいは若い社員と連れ立って、今日はみんなに寿司を奢ってやろうう、おいおい、もちろん回らないやつだよ、大将、この子たちにコハダを一つ。とか言えるのではなかったのか?どうして、ペアを組まされた新人のプログラマと、見慣れない街をさまよい歩いた先のフレッシュネスバーガーに入って、ハンバーガー1個で500円以上もすんのかよマジかよと思いながらも平静を装って、一番安いクラシックバーガーでフライドポテトセットにして、え、奢ってくれないのみたいな視線をわかってて無視するハメになるのかわからない。大学生みたいな自分の金銭感覚と可処分所得が信じられない。そんなに悪いことしてきたんだろうか。

だから、ルサンチマンとか、成功している人間に対する嫉妬がすごいわけで、今日は実は違うエントリ考えてたんだけども、武蔵小杉の排水が壊れたタワーマンションで、住人である一流企業のITエンジニアたちが対策を考えるという話で、普通に不謹慎で不快極まりないから、一行も書かずに捨てたんだけど、もうなんか、下水管はネットワークトポロジ的にはトークンパッシングに近似するから、上流にいけばいくほど細くなるように帯域制限すべきだ、とか汚水槽をオートスケールするために駐車場に垂れ流すとか、そういう何一つおもしろくなくて、単に金持ちをバカにするだけのエントリを嬉々として考えているわけだから、地獄はここにある。確実に。


こういうエントリ書くと「中年になったら仕組みを作る側にならないと厳しいよね」というなんちゃって六本木勝ち組サラリーマンのうんこみたいなコメントがつくに決まっているんだけど、実はそういうのを知りたくて上流工程の中程ぐらいをしばらく体験してみたんだけれど、とりあえず結論としては「どやんすー ©源さくら」と言い続ける仕事という印象しかない。

とりあえず顧客の前ではもっともらしいことを言っておいて、実際の問題解決のフェーズになったら「どやんすーどやんすー(どうしようどうしよう)」とほうぼうに電話とメールをかけまくって、Googleのキーワード広告踏みまくって、「どやんかしましょう」と言ってくれる人を探す仕事だった、ということで、最初にその光景を見た時はなんか唖然とした。ああ、こういう連中の「どやんすー」に律儀に答えてたんだな、自分。って思った。それでプロパーは年収1000万近くあるから。こっちは手取り23万なのに。びっくり資本主義。

アホらしくなったし、仕事しなくてもいっこうにバレる気配もないので、上流が捕まえてきたベンダーがどやんかしてくれるのをただ観察することにしたら、工程がどんどん後ろにズレはじめて、明らかにどうにもならなくなってて、それに気づいているの自分しかいなくて、それとなく報告しても無反応というか、「で、どやんす?」しか言わないから、毎日find -mtime -1やってお前ら全然ステージング更新してねえじゃねえか、サボってんじゃねえぞ、とか言っても良かったんだけど、自分が下流にいる時にそんな事されたら自害してるから、言わないことにして、優しく見守ることにしたら、ベンダーが明らかに嘘つきはじめて、んなわけねえじゃん、と思いながら真に受けたフリして「なかなか難しいみたいっすね」って上に放り投げて、どうすんのかな、って見てたら、また上流が「どやんすー」言い始めて。

上流工程は人日3万のSESの高卒でもシステム構築出来るようにアレンジするのが仕事なんです、とかそういうの全部ウソなんだよね。もしそれが出来ているとしたら、薄給でどやんかしてくれるベンダーを捕まえてるか、誰でも出来る仕事を高く売りつけてるか、のどっちか。で、君たちは後者のほうがビジネス・インテリジェンスに長けているとか言うわけでしょ?虚しくない?それ?


まあそんな感じでやいやい言うておりますけども、このエントリ書いたらわりとすっきりしたので、しばらくはキレないと思う。読んでくれてありがとう。みんなありがとう。


ずっと夜で

入った会社はWebサービスをやっていた。アクセスカウンターとかレンタル掲示板みたいな、そういうプリミティブな感じのウェッブ。今でも化石みたいに残っているとこがあるよね。teacupとか。もうないか。
当時はそういうことをしている会社をASP(Application Service Provider)と呼んでいて、「うちはASP事業やってるんです」と言うと通りが良かった。
名刺代わりっていうのかな、何が出来るのか、うちはこんなに技術力あります、ってのをさ、運営しているWebサービスで表現するわけ。同業者が集まったらさ、世間話している風で、自分とこのサービス自慢しまくるんだよね。なんかこう、いやあ負荷高くて、この前もサーバー落ちてぇとか、うちのユーザーは中学生が多いんでぇとか、今で言うマウントの取り合いだよね。どこも流行ってないからさ、意味のわからないとこで競ってるんだよ。

プログラマ的にはAjaxとか無かったから何やってもページ遷移しちゃうわけで、セッション使える、ってのがまずステータスだよね。ブラウザのページ遷移でアプリみたいな使い心地をどう実現するかっていうところでしのぎを削ってた。結局、決定ボタン押すたびに画面真っ白になってローディングするんだけどね。全然近づいてなくてヤバいんだけどさ。夏休みの工作で画用紙入れ替えてテレビ作ろうとするみたいな感じ、でも、なんかそういうのが偉かったんだよ。


儲からなかったよね。うちみたいな零細でも4000万PVはあって、アクティブユーザーも1万ぐらいかな。ブロガーだったら豪華客船に乗るぐらいの収入にはなるんじゃない?知らないけど。でも昔だからいい商材ってなかったし、サービスと広告って相性悪いからさ。
普通に考えてフッターのバナーとかクリックしないじゃん。ブログ書いてて、気になったからっていきなりフェロモン香水買わないじゃん。CTRとかクソのように低いし、成果報酬なんて嘘みたいにもらえなかったよね。収入が3万ちょっとの月とかあったよ。サーバー代で消えるわっていう。

そういや、サーバーもひどかったね。さくらの専用サーバー1台きりでさ。そこに3万ユーザーぐらい押し込むわけ。100M共有回線。8Mぐらい出たら調子いいなって感じだったかな。シングルコア、メモリ2GでApachePostgreSQL同居とかでさ。今だったら頭おかしいんか、って構成だよな。はてながラックに自作サーバー詰め込んでるの羨ましかったな。社員の車でデータセンターの引っ越ししてたよね。2シーターのインプレッサに物理サーバー積み込んで。それ京都の峠攻める車じゃん、他に車ねえのかよっていう。どうでもいいか。

ASPって楽しいんだよ。Webのダイナミクスっていうのかな、リリースするじゃん、すぐ誰か見るじゃん、そんでポコポコってアカウントが増えてくわけ。tail -f で流れるログがさ、みんなIPが違っててさ、色んな人が自分の書いたあのコード動かしてるんだ、っていうのがみんな見えるんだよ。うわあってなる。じんわりなる。今の人も味わうべき。でも2chに使えねーサービスとか書かれてムカついたりするんだけど。一切言及されないのもそれはそれで落ち込むんだけどさ。

あの当時、ASPって見栄だったよね。零細企業がWebサービスなんてまともに運用できるわけないんだよ。そもそも。今と違ってサーバーもバッタバタ落ちるわけよ。それを24時間365日監視するわけ。無理に決まってるじゃん。nagiosで異常レスポンス出たら、個人の携帯にメール飛ばすようにしてさ、*CRITICAL*とか見てゾッとしてさ。GWも夏休みも正月休みも、みんなつっても3人しかいないんだけど、調整して必ず一人は連絡取れるようにしてね。それでも実家にいる時に電話かかってくんだけどさ。なんとか帰ろうとしてね。なんであんな一生懸命だったんだろうね?

ロードアベレージが跳ね上がって、まさかの100超えとかね。スワップが遅すぎてプロセスが動かないわけ。FreeBSDってそれでもログインできるんだよ。入っても何もできんけど。
ガン上がりしたテンションで復旧作業したね。深夜にタクシー飛ばしてさ。手当とか一切出ないんだけど、ユーザーが困ってると思ったら胸がキュッとするし、義務感にかられてたね。作業中にオフィスの電話が鳴って、思わず出たらユーザーだったとかそういう時代だから。電話口で「困ってるんです」って延々言われて、うーん。気持ちはわかるんだけど、あなたの話を聞いてる限りずっと復旧しないんだよね、っていう。

カーネルチューニングとか、MySQLのパラメーター調整とかさ、StackOverflow無し縛りだからね?ねえんだよ情報。技術記事書いてるの、オフコン育ちの自宅サーバーおじさんとかだからさ、インストール記事で終わりなんだよ。そういうシステムを余裕のないサーバーで超ハードに使ってるの、零細でWebサービスやってる馬鹿しかいねえからさ。
ノウハウがないわけ。今まさにサーバーが止まってるのに、試行錯誤するしかないわけよ。色々やったな。誰かがCで書き直してApacheモジュールにしましょう!とか言い出した時はさすがに止めたけどさ。そういや、はてなMySQLのデータファイル全部RAMディスクに突っ込んで「すっげえ速くなった」とか言っててさ、そら速えだろうよっていう。しかも何かのイベントの時にそれを得意げに海外のコミッタに言ったらしくて、普通に"insane"って返されてたよね。あれめっちゃ笑ったわ。


一つだと全然儲からねえから、次々サービス作って、リリースしたよ。今思うと普通に受託やりまくったほうが明らかに効率いいんだけどさ、あれやってると心がすさむからさ、日銭稼いでいる間に、サービス作って一発当てるぞみたいなね。そういう希望にすがりつくアホみたいな戦略。みんなよく付き合ったよね。

なんかFlickrが日本で話題になった頃だったかな、なんかうちも写真関連で一つ、ってなってさ。Flash得意な子が、いい感じのスライドショー作れたからさ、これコアにしてやろうかってなって。なんか半年ぐらいやってたんじゃないかな。受託の合間に作ってるんだけど、全然完成しないの。ユーザーフォーラムまで自作してたから。アホかっていう。

そうこうしてるうちにライブドアFlickrのUI丸パクりしたサービスリリースして、丸パクリはさすがに炎上したんだけど、なんかそのサービスもイマイチ流行らなくてさ、あれ?って思ってたけど、いい加減リリースしないといけないから発表してさ。

バイラルとかないからさ、なんかよくわからないプレスリリース代行みたいなとこに頼むわけ、1万でいろんなとこにリリース打ってくれるみたいな。まあFAXしまくるだけだね。
なんの反響もなくてさ、2ch見ても一切載ってなくてさ、かかってくる電話、全部「FAX拝見しました。それはそうと、うちに広告出しません?」みたいな営業だけでさ。あれれ?ってなって、しばらくたっても、ほとんどユーザー増えなくてさ。

なんかその時に、終わったのかな、って思った。みんなそう思ってたんじゃないかな。もうこのメンバーでサービス作っても、リリースは遅いし、クオリティも低くて、戦えないんだな、って。

朝、会社出たらみんな気落ちしてるわけ。なんとか慰めようと思ってさ、Human LeagueのOctopusってアルバムがあるんだけどさ、って話してさ。ボーカルのフィルが言ってるわけよ。「確かにこのアルバムは売れてない。でもこれは、落ち目のバンドが何かを見出して作ったアルバムなんだ。僕はこのアルバムが大好きだよ」って、何の話なんだよ。でも実際、気に入ってたよ。管理画面の一生懸命な感じとかさ、アップロードが快適にできるようにした工夫とかさ。まあでもユーザーはつかなかったよね。最終的には100人ぐらいだったんじゃないかな。


そうやって、けっこうなサービスをリリースしてきたけど、なーんもないよ。エキサイティングな仕事も来なかったし、お金にもならなかった。最後には体壊して会社辞めちゃったし、いつのまにかサービスも全部無くなったらしいし。あのへんのサービス、今でも覚えてるユーザーが何人いるんだろうね。こっちは古すぎて職務経歴書にも書けねえよ。

たまに思い出すんだよね。夜中の3時に汚い雑居ビルの一部屋だけ蛍光灯がついててさ、タクシー降りて駆け足で階段昇っていってさ、先に着いた同僚がブラウン管ディスプレイ睨みつけててさ、TIMEWAITという文字が並んでてさ、すっげえ焦ってるんだけど、どっか冷静でさ、ガラス窓から自動車のヘッドライトが入ってきてさ、すぐに静かになってさ、音のしない街があって、動き続ける時計があって、点滅するIntel NICがあってさ。

だから、ああいう夜は良かったよね。目が冴えて、変な笑いがあって、全然疲れない体があって、今思うとさ、それはずっと夜だった気がするんだよ。


Octopus

Octopus

プログラマのためのビジネス・マナー講座

最近、若手のプログラマと仕事をしていると、フレームワークやライブラリの知識はあるのですが、常識が欠けているのではないか、と思う事があります。
業界経験の長い私たちから見ると、ほぼあり得ないようなことを、論理的な正しさだけを基準に決めつけてしまい、結果として営業が苦しむことになったり、クレームに発展するようなケースも見聞きします。
私たちにとって「当たり前」に判断できることを経験不足で判断できずに、同僚から疎まれたり、会社にマイナスの影響をおよぼしているのだとすれば、非常にもったいないことです。

今回は、業界歴20年におよぶ私が、若手プログラマの成長の一助になることを期待して、この業界のごく一般的なマナーをケース別に紹介、解説したいと思います。

商談編

Q.お客様が「Instagramに投稿された写真のうち当社の製品が写っているものを自動的に当社のHPに掲載したい」と仰ったので、「それは出来ません」とお答えしたところ、お客様が渋い顔で黙りこんでしまいました。

A.ご要望を聞いて、「出来ない」と言うのは失礼なことです。

お客様がアイデアを思いついたのに、ろくに検討もせずに不可能だと断言してしまったのですね。
お客様のご要望が仕様的、論理的にほぼ不可能であったとしても、それを口に出すべきではありません。
恥をかかされた、とお客様がお感じになるかもしれませんし、どのようなご要望にもお応えできます、と明言していた営業の面子も潰してしまいます。

プログラマの知恵の集大成であるBSDしぐさ*1にも「無理は持ち帰れ」という言葉があります。このような場合は、にこやかに「ぜひ前向きに検討させていただきます」とお答えしましょう。

そして、営業が帰った後の深夜のオフィスでじっくりと、常識を捨てて、お客様のご要望に向き合うのです。
この事例でいえば、publicスコープのInstagramAPI使用が許可されないケースである、と考えるのは一見合理的ですが、よくよく考えれば、出来ない理由にはならないことに気づくはずです。
例えば、偽装したボットを作ってInstgramサイトをスクレイピングしてはどうでしょう?BANされる?その度に、ボットを起動しているVMインスタンスを捨てて、IPアドレスを変えることにしてしまえばいいのです。自社製品が写り込んでいる写真かどうかの判別は、外注してAIを作ってもらうか、賃金の安い国の労働者に人力で判別させることにします。最後に残った著作権の問題については、弁護士にアウトソースすればいいでしょう。

こうして組み立てたソリューションをお見積書として提出して、出来る、出来ないをお客様に判断していただきましょう。
「出来ない」と判断するのはあくまでお客様なのです。

お客様の素敵な思いつきを、自分よがりの常識で安易に切り捨てないように心がけましょう。

仕様編

Q.仕様書がなく、このままでは実装できない為、お客様に仕様を問い合わせたところ返事がありませんでした。納期が迫っているので自分の判断で実装しましたが、アップ後、思っていたのと違う、とクレームになりました。

A.仕様がわからない時、本当にお客様のことを考えましたか?

お問い合わせをしたのに、返事がなかったとのことですが、なぜ返事がなかったのか、ちゃんと自分で考えましたか?
忙しかった?仕様を考えることができなかった?質問が理解できなかった?まさかとは思いますが、そのように考えてはいないでしょうか?一部のプログラマは簡単にそのような考えをSNSに書き込んでいると聞いたことがありますが、本当に恐ろしい事で、私の時代では考えられなかった話です。

一流大学を卒業したお客様はあなたと違ってシステムの最終的な形を完璧にイメージしています。(そうでなければ、どうして「思ったのと違う」というセリフが出てくるのでしょう?)ただ、それを言葉に出す必要はない、プログラマがちゃんとやってくれる、と私たちを信頼して、任せていただいているのです。

確かに経験のないプログラマにとって、お客様の思い描いたシステムを実装することは困難なことだと思います。しかし、真にお客様のことを思って、おもてなしの心をもってすれば、SEの書いたExcel紙芝居を元にシステムを実装することは容易です。

BSDしぐさにも「勧進帳」という話があります。突然の監査に皆が慌てふためく中、弁慶が、白紙のExcelを開いたSurface Proを手に、さも詳細仕様書が存在するがごとく、朗々と仕様を読み上げて、窮地を脱するシーンが有名です。
その後、どこからともなく飛んできた無数の矢が突き刺さって、弁慶は死んでしまうのですが、プログラマたるもの、このぐらいの覚悟を持って仕事をしたいものです。

スケジュール編

Q.受注の時点で、絶対に間に合わないスケジュールです。どうすれば良いでしょうか?

A.間に合わせましょう。

お客様が希望した納期に納品しないのはマナー違反です。
弱音を吐きたくなる気持ちはわかりますが、無理なスケジュールにも、初期に意味のない会議をしすぎたとか、仕様を決めるのに時間がかかって、結局決まらなかったけど、期末から逆算してスケジュールを決めたなど、やむを得ない理由であることがほとんどです。
工数を削減してスケジュールを短縮するという方法もあります。通常3人日かかる作業を1人日で出来ることにしてしまうのです。これなら最終的な価格も下がってお客様、営業ともにメリットがあります。難点としては、実際の作業は1人日にはならないことですが、そこはプログラマの根性の見せ所です。頑張りましょう。
また、BSDしぐさにも「一日三人日」という言葉があります。一日は24時間ですが、1人日は通常8時間の稼働を指します。よって、1日で3人日進捗することは論理的にも可能といえます。

それでも難しい場合は、最終手段として外注する、という方法もあります。動きの鈍い制作会社ではなく、フリーランスがいいでしょう。在宅ワーク可能でそこそこ高い単価を示せば、外注先はすぐに見つかります。
その際、部分的に任せるのではなく、必ず全面委託にして、丸投げをしてください。フリーランスは少し怯むかもしれませんが、総額をちらつかせて、スケジュールはできるだけぼんやりと伝えるのがポイントです。とはいえ、フリーランスはすぐ怠けたり他の案件をしようとしますので、進捗管理は細かく、とにかく急がせて、一日の全時間を案件に割かせるようにしましょう。
このような進行をしていると、プロジェクトの途中でフリーランスからの連絡が途絶えてしまい、個人携帯に電話してもまったく出なくなってしまうことがあります。この場合でも、納品遅延はあくまで逃げたフリーランスの責任になりますので、少なくとも非礼には当たらないということになります。

実装編

Q.Reactを使ったところ、先輩プログラマに注意されました。仕様上の動作条件は満たしています。何故でしょうか?

A.先輩の知らないフレームワークやツールを使うのは失礼にあたります。

かっこいいから、モダンだから、という浅はかな理由でReactを選んだのなら論外ですが、技術的優位性や保守性の向上を意図して導入した場合でも、先輩がjQueryとBackboneしか使ったことがないのであればNGです。
最近のプログラマはここで、合理的な理由を説明して、先輩や社内を説得しようとしますが、そのような行為はロジハラと見なされる場合もあります。
どうしてもgitなどのツールを導入したいのであれば、先輩が興味を持ってmasterブランチだけで開発し始めるまで待つか、先輩が辞めるなどして、現場を離れるまで待ちましょう。自分が先輩になれば、何を使っても大丈夫です。
その時になると、後輩が自分の知らない目新しい技術を勧めてくるかもしれませんが、その時は優しく無視して上下関係を叩きこみましょう。


Q.なんか嫌になってきました。退職したいのですが。

A.退職は大変失礼な行為です。絶対にしてはいけません。




自分のアタマで考えよう

自分のアタマで考えよう

*1:20世紀にカリフォルニア大学バークレー校を中心に繁栄したプログラマの理想的な振る舞いのこと。代々口伝で受け継がれていたが、その勢力を恐れた明治政府とLinuxユーザーによって全てのBSDユーザーが虐殺され途絶した。