megamouthの葬列

長い旅路の終わり

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

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

今回は、業界歴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ユーザーが虐殺され途絶した。

貧乏なおじさんへのささやかな贈り物

ネットバブル前夜、ホリエモンの会社がまだオン・ザ・エッジと呼ばれていた頃、パイナップルカンパニーというWeb制作会社が神戸にあって、社長のおじさんは、ナウいホームページを作ることにかけては関西随一と呼ばれていたその会社に見積もりを依頼したらしいんだけど、イキリにイキリきった営業に、当社は1000万円以下の仕事は請けないんですよ、と半笑いで門前払いされたことをずっとずっと根に持っていた。

おじさんと酒を飲むたび、何度もその話を聞かされるから、パイナップルカンパニーが2002年に倒産して、オーナー社長が行方不明になって、今や神田敏晶の出身企業と説明されるまでに忘れられた、というオチを、僕は何も見ずに書けてしまうほどだけど、きっと、おじさんがこの話で伝えたかったことは、貧乏な顧客を無下にして、高飛車な態度をとっていたら、いつかは商売が立ち行かなくなるんやで、ということなのだ。本当のところはわからないけど。

話の中で哀れな貧乏だった社長のおじさんは、今はもっと貧乏だ。そして僕はその下で仕事をしている。ナウいホームページは作れないけど、そこそこナウいWebシステムは作れるつもりだ。でも、おじさんはお金がない。おじさんのお客にもお金がない。だから僕は、vueやLaravelのことは忘れて、景気の良かった頃に作られたPerlのシステムに、機能を付け加えたり、MySQLデータベースのメンテナンスをしたりしている。

おじさんが申し訳なさそうな顔をする時は、たいてい僕の見積もりが通らなかった時だ。お客が首を振ったのだ。
いったい全体、僕以外の誰が、use Jcode;の、前世紀末の栄華を思わせる継ぎ接ぎだらけの廃墟を引き受けられるというのか。とにかく高い、とお客は言う。おじさんは困る。そして僕は憮然とする、というわけだ。
僕にだって本当はわかっている。お客はなみいるベンダーと比較して、値引きを要求しているんじゃない。お客が比べているのは、「やる」と「やらない」。僕の見積もりは、「やらない」と競争して、負けた。僕たちは「無」と戦っている。

見放されたシステムの前で、5人も入ればいっぱいになってしまう小さな事務所に一人。事務のおばさんは今日はお休みだ。僕は逃げそこなったのか、あえて残ったのか、自分でもよくわからない。ただ動かないシステムが嫌いで、使われないシステムが哀れで、綺麗にリプレースされる日が待ち遠しくて、なんだかよくわからない理由で、僕は今日もPerlコードを追いかけている。

# modified at Jul 06 2001
@files = map $_->[0],sort{$a->[1] <=> $b->[1]} map [$_,-M $_],@files;

もうすぐ、2019年の夏が来る。やあLarry。Perl6の調子はどうだい?


昔は僕以外にもPerlプログラマがいて、このシステムも最初はその人が書いたということだ。社長のおじさんの大学の後輩で、村田という人で、僕が入った頃にはとっくに会社を辞めていて、フリーでちょこちょこ手伝いにくる、といった感じで、時々事務所で見かけるぐらいだった。メガネをかけた白髪のおじさんで、いつも多少酔っていて、人と話す時も目を見ない。視線はずっと何もない空間にあって、話し方も目つきもちょっと狂っていた。
村田さんは新しいものが好きで、事務所に来る度に新しいガジェットを持ってきて、社長に自慢していた。飽きたらそのまま事務所に置いていってしまうので、例えば、棚の上で風景に同化しているポケットポストペットの埃を被ったピンク色は村田さんのものだ。


社長のおじさんが珍しく昼過ぎに出社してきて、見ると黒い喪服を着て大きな白い紙袋を持っていた。僕が聞くと、黙って自分の机に座って、村田が死んだんや、息を吐き出しながら言った。

僕が黙っていると、おじさんは紙袋からなにかを取り出して机に並べはじめた。ところどころが分解されたドローンだった。どうしたんですかこれ、と尋ねたら、あいつが最後に家でバラしてたんや、なんて言うから、僕は寂しい気持ちになって、むき出しになったコイルを見つめていた。
社長のおじさんはどこからか電動工具のケースを持ってきて、ドローンの隣に置いた。
「どうするんですか」
「組み立てる」
と黒ネクタイを外しただけの格好で真面目な顔をして言った。
「動きますかね」
僕は控えめに言った。
「どうやろな」
おじさんが、腕まくりをしてドローンに取り掛かったので、僕も席に戻った。
そして、死人が書いたコードをゆっくりと読み解いていった。

しばらくして、キュイーンという電動ドライバーがなる音がして、僕は思わずおじさんのほうを見た。おじさんがそれに気づいて目があうと、「これでも工学部やからな」と少し恥ずかしそうに、言い訳するように言った。

昔の話やけどな――社長のおじさんはすぐに手元に視点を戻して、手を動かしながら話しはじめた。
通産省のプロジェクトがあってな、元請けはFやったか、なんや商店街の。地域振興なんか、地方の商店街のな、ショッピングサイト作ろういう話でな、実証実験やな、そういうのがあって、全体の予算が何億っていう話。俺も知り合いから声かけられて、イベントの手伝いを請け負ったんや。

おじさんは慎重にパチンパチンと銀色の外装をはめこんでいった。
何億もやで、何億もするショッピングサイトが出来てな。まだamazonも日本に来てない頃や、楽天はもうあったかな。システムが出来上がってみたらな。
そこで、おじさんは念を押すように顔を上げて僕を見た。

「カート機能がなかったんや」
「は?」

僕は呆気にとられた。通産省の役人も、元請けの大手ベンダーも、ショッピングサイトにカート機能がいる、ということに思いが至らなかったのだ。

「みんなが呆れてな。さすがにこれはないやろう、て」
「そりゃそうでしょうね」
「でも、元請けのFはやらん、と。そんな予算はない。言うてな」
おじさんは再び目を落とした。遠くの、ずっと昔に焦点があっているような雰囲気があった。ドローンの緑色のLEDが光っている。電装系はやられていないようだ。

「大揉めに揉めるもんやから、俺も知り合いの伝手を探してな」
パチン。なにかのパーツが小気味良くあるべきところに落ち着く音がした。
「そこで、村田よ。あいつに声かけてな。一人でプログラムしよった。カート機能」
いつのまにか傾いていた夕日が、雑然とした事務所に差し込んでいる。
「100万や。一人で100万でな、やりよった」
おじさんが持ち上げたドローンの銀装が光った。



僕たちは夕方の河川敷にいた。Yシャツだけになったおじさんがドローンを片手に草むらの中に入っていく。
「大丈夫ですかね」
と僕はあたりを見回しながら言った。パトカーのサイレンが遠くに聞こえる。
「どうやろな」
おじさんはドローンのプロペラを手でくるくる回しながら言った。しばらくそうして、静かにドローンを地面に下ろした。
川からやってくる風が、夕日で火照った体をゆっくりと冷やしていく。水と、草と、夏の匂い。

おじさんはプロポを手にした。僕は胸ポケットから煙草を取り出して、火をつけた。
芝刈り機のような音が足元でして、それはすぐに胸のあたりに昇ってきた。
けたたましい音をたてて、ドローンが浮いている。
銀色の安っぽい中国製のメッキが、弱くなった太陽と迫ってくる暗がりの間にいて、僕と社長のおじさんに、かわるがわる頭を下げた。

僕は煙草の煙を吐き出した。
紫煙から逃れるように、輝く機体が、オレンジ色に染まった入道雲の鮮やかなグラデーションに、ひたすら向かっていく、あっという間に小さくなる。
鉄橋を渡る電車の音が聞こえた。


「高いなあ」
僕の隣で、社長のおじさんが夢見るような口調で言った。


季節のない街 (新潮文庫)

季節のない街 (新潮文庫)

どう考えたら IT企業の三景

お盆前進行に入り始めた社内。皆忙しそうにしているが、私には仕事がなかったので、開発研究部署に移ってみた。
部内の机は埋まっていたが、ふと見ると、誰も座っていない机に高性能そうなフルタワー筐体が置いてあった。隣に壮年のエンジニアが座っていた。
早速「このマシン空いてますか」と尋ねてみた。すると、そのエンジニアは「今、このPCのRTX2080×2で学習モデルを検証しています」と答えた。私は虚を突かれた思いがした。
改めて社内を見渡すと、多くのExcel仕様書を作っている派遣社員の中、30代のプロパーエンジニアの隣で、新卒の男の子がゆったりとペアプログラミングしている机もある。あれも、大学院を卒業しているのだろう。
仕方なく閉塞した空気でいっぱいのSI事業部に戻ると、ここでも若者が懸命にエクセルを操作して、検証エビデンス用のスクリーンショットをとっていた。凝りもせずに「ここ空いてますか」と尋ねると、彼の上司らしきおじさんが仕方なさそうにやってきて、奥からパイプ椅子をとって、若者の隣に乱暴に置いた。
私は若者の操作を眺め続けて、さっきの操作でセルの罫線が一部消えてしまったことを指摘したが、軽く舌打ちをするばかりで、見向きもしない。居心地の悪さを感じながら、このIT企業の三景をどう考えたらいいのか自問した。