POSTD PRODUCED BY NIJIBOX

POSTD PRODUCED BY NIJIBOX

ニジボックスが運営する
エンジニアに向けた
キュレーションメディア

POSTD PRODUCED BY NIJIBOX

POSTD PRODUCED BY NIJIBOX

ニジボックスが運営する
エンジニアに向けた
キュレーションメディア

FeedlyRSSTwitterFacebook
Ferd T-H

本記事は、原著者の許諾のもとに翻訳・掲載しております。

この文章は、2015年10月9日にシカゴで開かれたカンファレンス、 CityCode でのプレゼンテーションを書き起こしたものです。同じ内容を ビデオ と印刷向け PDF文書 でも公開しています。

printf

Chapter 1

私は、コンピューターやテレビゲームが身近になる前に生まれてラッキーでした。友達や兄弟と外に出て遊び、自分自身で遊びを発明するという機会に恵まれたのですから。

小枝を即座に弓や銃や剣や望遠鏡に見立てたりして、自分たちがヒーローになったりもできました。小枝は何にでもなりましたが、ブーメランにはなりませんでした。一度投げた小枝は自分で取りに行かなければならないのでね。

boomerang

成長する過程のどこかで、やがてそういう風に遊ぶことが恥ずかしくなってきます。他の子供たちが「大人らしく振舞うことが格好いい」と考えているのに、自分だけが松ぼっくりを手榴弾に見立てたり、魔法の力を持っているかのようなごっこ遊びをしたりはできないのです。そんなことをしていては仲間外れになってしまいます。結局は大人になることを強いられてしまうのです。しかし、それでも、これはラッキーな子供時代でした。

また、成長の過程で、テレビゲームをしたり、コンピュータを使う機会を得るようになります。 そこ には、今までずっと欲しいと思っていた空想上の世界が、目の前に実現していました。その世界に引き込まれ、その間は別の人になれるのです。

しかし、ほとんどのビデオゲームには特有の共通点があります。それは、「創作するのではなく、反応したり消費したりするものである」ということです。私は10代の時に即興劇をしました。そしてそれは、繰り返しになりますが、自分で何もないものから何かを作って、違う人のように振る舞えるというものでした。

improv

もちろん、ケベック州の即興劇はそれとは違います。ケベックにはアイスリンクがあるため、何もかもがホッケーになってしまうので。

私は2005年から2008年にマルチメディアの勉強をしに専修学校に行った時、最終的にプログラミングの世界に踏み込んでいました。私は「プログラミングは素晴らしい!」と思いました。創造性を再び得ることができ、しかもお金になるのです!そして私は、自分の一番最初のゲームのメカニズムをデザインして、とても感動しました。

game
(「危ない!武装した男が建物の中に」)

“「これは本物のビデオゲームじゃないね。」” と私は言われました。 “「これじゃただのHTMLフォームだ。テキストとオプションは配列化したほうがいいね。コードはもっと整理したほうがいい。」”

私は落胆しました。ゲームは11ページのテキストで「きみならどうする?」(訳注:ゲームブックの先駆け的作品)の内容について書いたものでした。しかし、もっと多くの人たちが良いと思うものを作りたいならば、私はたくさん勉強をしなければいけないと思いました。

私は“本物のプログラミング”を勉強する必要がありました。GUIツールキットのJscriptからより良いものへ―例えばPHPなどへ。そして、私はそれらをJavaScriptとともに学びました。最終的に、再度“本物のプログラミング”の方法を勉強するように言われました。また、PHPはひどいものである、とも言われました。そこで初めてPythonを試してみた方が良いかもしれないと言われ、学ぶことにしました。

しかし、本物のプログラマたちはもっとおしゃれなものを知っていましたし、Pythonのラムダ式は期待に沿うものではなく、オブジェクト指向のプログラミングも望んでいたものではありませんでした。「次の良いステップとしては、コンピューターサイエンスの聖書とも言えるSICPを読むこと」と私は言われました。

Book cover of Structure and Interpretation of Computer Programs

そうしてSchemeと出会いました。現実世界の本物のプログラマはC言語をやっているため、私はK&Rの本を手に取りました。ある程度までいくと、本物のプログラマはデータ構造と数学について知っていると学んだため、仕事をやりくりしながら、地元の大学で定時制の授業に登録しました。本物のプログラマは常に最新で珍しいアルゴリズムを知っているため、私は論文や本を読み始めました。

その過程で、私はErlangを習得し、それを使ってキャリアを形成するようになりました。そして本を書きました。不思議なくらい、誰も私が本物の著者なのか、本物の作家なのか、あるいは本物のイラストレーターなのか質問をしてきませんでした。本番システムにおいてErlangを使ったことなんてないのに、Erlangを教える仕事を得ていました。

Chapter 2

そして、私は世界中を旅する生活を送りました。世界中で、自分がしたこともないことの方法を伝えて回りました。人々は、私が始めにしていたことがプログラミングとは全く関係がなかったため、本物のプログラマだと思って急に信用し始めました。

ある日、私は講演会の帰りの空港で足止めをくらっていました。イライラしながらターミナルでタイピングをしていると、急に変に優しい声で声をかけられました。

“「僕のためにシステムをデザインしてくれませんか?」”

“「なに?」”

“「システムをデザインしてほしいんです!」”

私はそのリクエストに驚き、画面から顔をあげました。周りを見渡したところ、ある男の子を見つけました。彼は開発者になることを熱望していて、”printf”と呼んでほしいと言いました。私はすごいバカで目立ちたがりだなと思いました。彼はこんな見た目でした。

printf-nocover

“「僕はパソコンのことをまだよく知らないけど、あなたは知ってそう。僕はプログラムやブログを書いて、人々に使ってもらったり、読んでもらいたいんです。お願いします、システムをデザインしてください!」”

驚くようなリクエストだったことと、その時私は20時間も起きていたことから、私は彼の言うことを完全に理解できているのか、理解できた気分になっていたのかわかりませんでした。私は彼に、システムは難しい、と伝えました。彼が何をしたいのか、障害をどの程度に抑えたいのか、何人の読者をサポートするべきなのか、どこにホストしたいのかわからなかったため、数少ない情報を元に正確なシステムをデザインすることはできませんでした。

“そんなの関係ないから、システムをデザインしてください。”

そのため、私は以下のような構成図を作成しました。

arch1

彼はそれをみてこう言います。 “「いいえ、このシステムは十分じゃありません。違うのを作ってください。」”

そして、私は以下のような構成図を作り直しました。

arch2

私は彼にどのように動くのかの概要を教えました。

小さな新しい友達は礼儀良く微笑みました。 “「僕が欲しいのはこれじゃありません。いらないものがたくさんあって複雑すぎます。」”

冗長性、モニタリング、バックアップ、キャッシュ、その他ロードを削減するためのメカニズム、法的保護のための外部の入金処理装置、フェイルオーバー、デプロイの容易さ、その他……これら全てを考慮したのに、と少し侮辱された気分になりました。このコンサルの料金として相当な金額を取ってもいいところだっていうのに!愛想をつかして、ただこれを描きました:

blackbox

そして付け足しました。 “「これが君のデザインだ。君がほしいシステムはこの黒いボックスの中にあるんだよ。」” こんな下らない答えで、もうどっかに行ってくれたらいいのにと思っていました。すると、驚いたことに彼はこう言いました。

“「僕が欲しかったのはまさにこれです!」”

こうして私はlittle printfと知り合いました。

Chapter 3

私はすぐにこの小さな男の子のポートフォリオを知りました。彼のリポジトリには小さなプログラム、フォームのある簡単なウェブサイト、トリビアルなコマンドラインユーティリティーらしかありませんでした。それらは華々しいものではなく、作られてはすぐに消えるようなものばかりでした。

そしてある時、彼は複数のモジュールを使う大きなプログラムにとりかかり始めました。ソケットが必要で、ディスクへアクセスし、実際のデータベースと連携しました。ひとまず完成して正しく稼働した時、little printfは驚きました。しかし、プログラムはまだ不十分でした。

リファクタリングが必要で、より良いテスト、ドキュメンテーション、リンティングと分析が必要でした。そのプログラムはしばらく稼働しますが、ある朝突然壊れます。

何度も何度もそのプログラムは壊れました。

コンフィギュレーションが間違っていました。ログはうまくとれず、ディスクは予測不可能なスピードで、ネットワークは中断を起こし、バグが発生し、エンコーディングが混在し、データベースはバキューミングが必要でした、トランザクションはハングされ、認証は失効し、CVEが発生し続け、メトリックは動作しないままでした。

spaghetti

それはスパゲティになっていてばかりでした。

彼は私に言いました。 “「実のところ、僕は何も知らなかったんです!僕が必要なものから判断するべきでした。僕はおしゃれなシステムを書こうと思い上がっていましたが、その修繕のためにはすごく時間がかかって、今まで短縮してきた時間が相殺されたような気分でした。それでも、それがどれだけ素晴らしいものかを知っておくべきでした。」”

ある朝、彼はオフィスを出る決意をしました。 “「さようなら」” と彼は燃え尽きたように点滅するライトに向かって言いました。彼は、彼の小さくてぐちゃぐちゃなサーバーをよそに、ソフトウェアの世界が何をもたらしてくれるのかを見るために、オフィスを出たのです。

ハードドライブが一杯になるまで、ログはずっと蓄積されていくのでした。

Chapter 4

building

彼は経験のある開発者にヒントや助けを求めるべく、あるオフィスに行きました。

最初に出会ったのはとても誇らしげなシニアのエンジニアで、やや優越感に浸っている人でした。

pro

“「おお初心者さん、ようこそいらっしゃいました。我々の領域へようこそ。私はこの領域のエキスパートです。」”

“「エキスパート?」” Little printf は聞きました。 “「つまり、なんでもプログラミングできるっていうこと?」”

“「そうです!」” 彼は言いました。 “「と言っても、”ほとんど”だね。プログラムする価値のあるものしかプログラムしないんだよ、私はつまらないことのために自分の時間を無駄にしないんだ。書こうと思えば苦も無く書けるけど書かなかったプログラム、そういうのはたくさんある。」”

“「なるほど、それなら僕のシステムを書くのを手伝ってくれませんか?」” Little printfがビジネスを説明し始めると、その領域のエキスパートはさえぎってこう言いました。

“「申し訳ない、しかし、その趣旨がわからないのだが……」”

“「どうして?」”

“「経験だよ。私は、自分がふだんプログラムするようなプログラムを作るのは得意だし、私がふだんプログラムするのは得意なものだ。そして、比較的限定されていて、私がすでに上手いことについてより上手くなっていった方が、より価値があると自分で確信してるんだよ。雇用の安定とか適者生存と呼んでもいいけど、それが私のやり方なんだ。」”

“「それで、なんで手伝ってくれないんですか?」”

“「何故かって言うとね、君を助けるために自分の時間を使うってことは、大切な自己投資の時間を他の人の進歩のために使うということで、それでは自分が負けてしまうんだ。君の学習のためには、私がしたように、たくさん苦労して自分で解決していくこと。そうすることで自分を強くしていくんだ。」”

“「でも、それだとあまり効率がよくないよね……」”

“「まあ学校にいって学習してもいいし、自分で勉強してもいい。そうすると、適当に済ませたいと思ってる怠け者の人たちはふるいにかけられて、残った人たちを本当に価値ある人たちにする。ねだる者を招き入れると、その瞬間から私が生み出せる価値が下がっていくんだ。」”

“「あなたは協力とか、同僚からの助けのことは考えないんですか?」”

“「そんなに考えないね。私は一人で邪魔されずに仕事している時が一番働ける。いつも誰かと一緒に働かないといけない時は、一緒に仕事するということがまず不可能なんだ。イライラしながら、私は彼らの成果物を取り上げて、ほとんど全てを書き直して、それでやっと正しく作動するんだ。」”

Little printfは、他の人たちを助けることにこんなにも無関心で、スキルがない人たちに対してこんなにもイライラするエキスパートに出会い、驚きました。自分の知っている一つのエリアだけへと視野を狭めるあまり、改善すべき問題を彼自身がただ作り続けているだけになってしまった……ということが、少し哀れでした。

“「なるほど……あなたが僕を手伝ってくれなくてよかったです。」” 私の小さな友達は言いました。

“「どういうことだい?」” 能力主義者の彼は聞きました。まるで彼の価値が急落してしまったようでした。 “「私のする仕事がすごいことだと思わないのかい?」”

“「ああ、それはそう思います。ただ、僕からみて、あなたは僕のことをただの邪魔者で厄介者としか見ていないように見えました。僕が求めているのは、苦悩ではなくて、助けです。」”

そしてlittle printfは速やかに去っていきました。このエキスパートに、仕事を守ることしかできず、誰も相手にしてくれない人であることを意識させて。

Chapter 5

books

道中、little printfは魔法使いやドラゴンの絵、フラクタルや数学的なパターンが書かれているハードカバーの本に囲まれている男性がいるオフィスのドアの前にいきました。

“「素敵な本ですね。」” printfは言いました。

“「ありがとう。私はこれらがプログラマにとって必須の資料だと思うんだ。これを持っていないと、本当のプロではないんだよ。」”

“「じゃあ僕はプロじゃないですね。」” printfは言いました。 “「どれが一番好きなんですか?」”

“「あ、でもほとんど読んでいないんだ。」”

“「じゃあ、あなたは良いプログラマではないんですね?」”

“「うん、違うんだ。」” 開発者は誇らしげに言い足しました。 “「実際はひどいプログラマだ。」”

“「それは残念。」” Little printfはそう言って、続けました。 “「僕は自分で成長しているよ。」”

“「”Dunning – Kruger効果”を聞いたことがあるかい?」” 男は聞きました。

“「ううん、それは何ですか?」”

“「ひとつの認識バイアスだよ。能力がない人たちほど、自身の能力を過大に評価する傾向があって、能力がある人はその能力をシステム的に過小評価すると言われている。」”

“「つまり、僕は『自分は成長している』と思っているけど、それはおそらくそんなに成長していないということですね。」”

“「そう、その通り。おそらく君はよいプログラマではない。その一方で、 はひどいプログラマだとオープンに言えるんだ。しかし、Dunning-Krugerによれば、私は自分のことを過小評価しているということだ。そして、そうすることによって私は良い開発者になるんだ。わかるかい?」”

“「まぁ……。」”

“「これは何故かというと、自己非難は開発者のためにはきわめて重大なツールだからさ。『自分はよい開発者だ』と思った瞬間、リラックスしてしまって進歩することを止めてしまうんだ。」”

“「つまり、『自分自身の事を良いと思った瞬間、失敗へと向かってしまう。だから、自分自身の事を良くないと思うべき』ということですか?」”

“「そうだね。でも、それをするやり方は、『全てが最悪だ』と言う、それだけなんだ。たとえ提案できる解決策を持ち合わせていなくてもね。そうすることで、大した貢献する必要がないまま、頭は良く見えるんだ。」”

“「どういう意味?」”

“「たとえば、私がオンラインで好きじゃないプロジェクトを見たとしよう。大事なのは、間違っている点全てを指摘したうえで、それ以上の情報を与えないことさ。『そのプロジェクトをやっている人がバカなんだ』とかすかに指摘するだけ指摘して逃げる、これぐらいのことはできるだろう?」”

“「そうすると、誰が得をするの?」”

“「彼らは『間違った道を進んでいることを知る』という点では得をするし、私は『それを知らせた』ということで気が楽になる、と思いたいね。ちょっと誤魔化すようだけど。誰も何をしているかわからないが、 は知っているように見える。」”

“「そうしたら、もし誰かに助けを求められて、何も出来なかったらどうするんですか?」”

“「そんな時はもとに戻って、『何もかもがひどい』と言えばいいんだ。『たくさん削るべきところがあって、他にも改善すべきところがある』なんて言って、大げさに悲観的になること。あとは勝手にやってくれるさ。」”

“「じゃあ、全部がただのフリなの?ただゲームでやっているの?彼らが知っていることを知らない無能な人のフリをしていて、そこにいる本当に何も知らない人を悪い気持ちにさせたり、知らないことを知っている有能な人のフリをして、改善しようとしている本当に知っている人も悪い気持ちにさせているの?」”

“「どんな場合でも、有能か無能かはそんなに関係ないんだ。評判はまあまあ大切だけど。人々は友達を雇って、あまり好きじゃない人や重要じゃない人は真っ先に解雇される。システムを変えようとして、嫌われたりする。全ては社会のゲームなんだ。産業はそういう風に動いていて、きっと学問の世界でもそうだろう。でもそれは今の私にはわからない、だってわかるわけないだろう?これは全て君が誰を知っているかなんだ。自分を売りこむこと。自分の個人ブランドを売るということだよ、わかる?それがビジネスでどうやって仕事をもらうかということだよ。」”

“「もしこれが本当で、あなたが悪い気持ちをもって、他の人たちをも悪い気持ちにさせているなら、僕はビジネスで仕事なんてほしくないです。」” Little printfはそう言って歩き出しました。

Chapter 6

realprog

ランチ休憩であるはずであろう時間に、Printfはある人を呼び止めました。彼はランチを食べ忘れているかのように見えました。デスクに座ってパソコンの画面を見ている間にも、サンドイッチはどんどん冷たくなっていきます。

彼は自分で何をしているのかを分かっていてとても忙しい人である、そんな風に見えました。Printfは彼にこう尋ねました。

“「主要データベースが落ちると、ほかのデータベースも落ちるんですか?」”

“「動いているものは」” その人が言いました。 “「遅かれ早かれ落ちるものさ。」”

“「じゃあ、『システムのどこかが落ちた』ということを通知してくれるシステムそのものでさえ落ちることがあるの?」”

“「うん、それさえもね。全ての巨大なシステムは、どんな時でも部分的に落ちる状況にある。」”

“「そうしたら、より信頼性の高いシステムを作れば……何のために?」”

彼にその答えはわかりませんでした。その時二人が考えていたことは、まるで、雲が割れて空が頭に落ちてくることに対する1ページ分にもなる答えのようでした。彼もprintfと同じことについて自問していました。

“「より信頼性の高いシステムを作るのは、何のため?」” printfは再度念を押しました。

自分はプロダクション環境での問題に取り掛かっているのに、この子供がどこにも行かず、サンドイッチが冷たくなって無駄になっていくので、彼は怒りだし、イライラしながら答えました。

“「何のためでもないよ。プログラミングなんてどうせ全部クソじゃないか。」”

“「おっと!」” 彼ははっと息を飲みました。

そしてその後、その場は完全に静まり返りました。

trashcan

少し怒りを見せながら、小さな男の子は返答しました。

“「僕はそうは思わないです。プログラムは壊れやすいけど、でもプログラマは素晴らしい結果をだして、物事をより良く、使いやすくしてくれる。」”

それに対する答えは返ってきませんでした。そして、新しいクラスタ全体を0から立ち上げる方法に関するドキュメントを彼は開き始めました。状況はどんどん悪くなっていきます。

“「あなたは本当は良い信頼性のあるプログラミングを信じて…」”

“「ああ、もう!」” その人が言いました。 “「だめだめだめ!良いプログラムだとか信頼性のあるプログラムだとか、私はそんなもの信じないんだ!金輪際信じない!そんなもの全部最悪だ!私はただ頭に浮かんだ最初のことを君に言っただけだ、なぜなら私がそういうクソみたいなシステムに関わっているからだ。私がこれらを動かそうとしているのが見えないのか? この クソも本当に重要な物なんだ。」”

Printfは驚きの表情で、じっと見つめ返しました。

“「”本当に重要”?まるで“本物のプログラマ”みたいなことを言うじゃないですか。」”

printfは言い足します。

“「あなたは全て混ぜこぜにしてしまって、全てを混乱させているんです。何百万ものプログラムがあって、何年にも渡って同じように動いたり、落ちたりしています。そして人々はそれを使ってきたし、必要としてきました。それに、僕は『他のどこにも動いていないけど、一つのパソコンだけにあるプログラム』をいくつも知っています。あるいは、一つの間違いがコミュニティー全体を知らない間に破壊することも知っています。それをあなたは重要じゃないと思っているんですか?」”

その人は黙ったままでした。

Chapter 7

frameworks

4つ目の職場で、小さな彼は、どのブランドのものかわからない程ステッカーを貼っている男の人に出会いました。

“「Motor-mvc, quadrangular JS, GoQuery, Cometeor, 日本のイケてる何か…。」”

“「こんにちは。」” Printfは話しかけました。 “「何しているんですか?」”

“「alchemist、bongodb, mochascript, walktime js, portasql……」” 彼は続けました。

“「何しているんですか?」” 今度は少し大きな声で、もう一度尋ねました。

“「ああ、僕は新しいフレームワーク、ツール、データベース、言語を試しているんだよ。」”

“「わあ、すごい速いんですね、10人のプログラマを集めたぐらいの速さですね!」”

“「そう!まあ業界の移り変わりが速いからね!」” 彼は携帯を見ながら、 “「ほら!cardboard.io フレームワークはversion3.5が出て、3.4との互換性がなくなったから、コミュニティーに4つのforkが発生したんだ!全部試してみて、どれを選ぶか決めないと!」” と言いました。

“「これだけ全部学習して何をするの?」”

“「私はアーリーアダプターなんだ。もし最新情報を逃してしまうと、COBOLとかMUMPSを生活のために書き続けることになるよ。次に来る大きな波を見つけて、その頂上に乗りたいからね。」”

“「それって今まで上手くいったの?」”

“「そりゃそうさ!Railsが大きくなる前に私が見つけたし、node.jsだって有名になる前に理解したよ。それに私は一番最初のredis, mongodb, riakのベータコピーを持っていたんだ!vagrantを初めて使ったのも私だし、dockerへの移行を導いたのも私だし、まあもちろん今では全部unikernelだけど…。」”

“「すごい、それじゃああなたは全てのパイオニアだったんですね、その後どう成功していったんですか。」”

“「してないよ。Railsが大きくなった時には、乗り遅れないように私は次の大物にいっていた。他も同様さ。Unikernelはまだ可能性があるけど。」”

“「なるほど。」” Little printfは付け加えました。 “「これら全部のフレームワークを使って何の問題を解決するの?」”

“「ああ、ビッグになりそうにないものを自分たちが使うことがないようにしているんだ。そうすることで、会社が未来のないテクノロジーに賭けることがないようにしているのさ。これはすごい大切な仕事で、これをしないと時代遅れの白髪のあるおじいさんぐらいしか雇えなくなるから。自分でモチベーションを高められて、向上心と適応力がある人を雇いたいからね。」” 彼は言いました。

“「それは面白いですね。」” printfは言いました。

“「これはすごく大変なんだよ!スタートアップの世界でAクラスの人財が欲しければ、良いテクノロジーがないと入社してくれない。そうしない限り、融通の利かないのろまになる。誰もそんな奴にはなりたくない。」”

“「いいえ、そういう意味じゃなくて、」” Little printfは言葉をさしはさみ、こう続けました。 “「僕たちにとってツールは問題を解決するためのものなのに、あなたからしたらツール自体が問題になっているのが面白いと思ったんです。」”

その男は無言で(新しくてかっこいい仕事机に)立ちつくし、その間にlittle printfは部屋からひょいと飛び出ました。

Chapter 8

ops

隣のオフィスでは、疲れている社員が座っていました。たくさんの空になったコーヒーのコップがあり、前のめりになって怒りながらタイピングをしています。

“「こんにちは。」” little printfは言いました。

彼女は動作を止めず、引き続き怒りながらタイピングをしています。

“「こんにちは?」” 彼はもう一度尋ねました。

彼女は一度動作を止め、デスクの引きだしから携帯用瓶を取り出し、それをがぶっと飲みました。

“「私は最低な仕事をしているの、」” 彼女は言いました。 “「DevOpsをしているの。最初の方は、だいたい開発をしていて、たまにデバッグしていたからそれは良かったんだけど、時間がたつにつれどんどんひどくなっていったの。スタックの火消しをするようになって、次から次へと障害が出てきたの。ほとんどをどうにか収めたけど、あちこちで小さな奇跡をおこして、開発でしないといけないことの締切に間に合わせたの。」”

“「会社は、他にだれか雇って助けてくれたの?」”

“「いいえ、それが問題なの。あちこちで小さな障害がでてきて、その始末のために時間を取られて、前ほど注意深く開発ができなくなった。そのせいで私は常にたくさんの障害を生んでしまって、今は朝も夜もそれと戦わないといけなくて、この仕事大嫌い」” 。

“「なんであなたの雇い主は何もしないの?」”

“「私は仕事をするのが上手くて、しっかり管理できるマネージメント能力があるから、皆それに見慣れてしまったの。小さい奇跡を起こす習慣をつけると、人はそれが当たり前だと思うの。そして、ずっと奇跡を起こさないといけなかったり、逆に起こしていないと仕事をしていないように思われる。」”

“「それってすごい悲しいことだね。」”

“「そうなの。その障害について私が一番詳しいから、その仕事だけする機会が増えるけど、その間に違う人が雇われて、昔していた大好きな仕事を取られてしまうことがあるの。他の人たちが嫌がる仕事を一生懸命するようになっていると、もっともっと自分が嫌いな仕事をすることで感謝されていって、最終的にはそれが自分の仕事になるの。そうなると、何も楽しいことがなくなるの。」”

“「じゃああなたはアンラッキーだね。」” Little printfは言いました。

そして彼女のポケベルがまた鳴りました。

“「彼女は…」” little printfは旅を進めていきながら、独り言を言いました。 “「彼女は他の人たち―シニアエキスパートやロックスター開発者、アーリーアダプター―に軽蔑されているんだ。彼女はその中でも一番使える人に見えたけど、その理由はおそらく、彼女が自分以外のことを考えているからだろう。」”

Chapter9

architect

ビルの角で、printfは周辺を見下ろす大きな窓のある大きなオフィスを見つけました。そこでは年老いた紳士が大量のドキュメントをデスクに広げていました。

“「ああ、開発者が来た、」” 彼は声をあげました。printfがドアのところに立っていたからです。 “「中へ入って!」”

窓を見て、little printfはその窓が書き物でいっぱいなことに気づきました。外への眺めは、ホワイトボード用マーカーで書かれたすごい量の丸、矢印、シリンダーや雲で覆われていました。外に同じ雲が見えるのに彼が雲を書く必要があるのか関心を抱いていると、そのアンサンブルがなんだか面白く見えてきました。

“「これはなに?」” 窓を指差してprintfは聞きました。

“「ああ、これかい?これは私たちの本番システムだよ!」” 彼は外へ眺めに関する質問だとは一切思わずに言いました。 “「私はソフトウェアアーキテクトなんだ。」”

“「ソフトウェアアーキテクトってなに?」”

“「だいたいの場合、大きなシステムについて、全てがぴったりになるようなベストな構成を知っていたり、コンポーネントを構築したりすることを1番よく知っている人のことだよ。それをするためには、データベース、言語、フレームワーク、エディタ、シリアライズのフォーマット、プロトコル、それからカプセル化や関心の分離みたいな概念について知っていないといけないんだ。」”

“「それってすごい面白そう!」” little printf は言いました。 “「ここに全部の質問に答えてくれる人がいた!」” 彼はアーキテクチャのダイアグラムを眺めました。 “「あなたのシステムって素晴らしいね、これってすごく速く動くの?」”

“「教えられないけど、」” アーキテクトは言いました。 “「そのはずだよ。」”

“「コードはどうなの?いいの?」”

“「教えられないんだ。」”

“「ユーザーは満足してるの?」”

“「残念だけど教えられないんだよ。わからない」”

“「でもあなたはソフトウェアアーキテクトでしょ!」”

“「そうだよ!でも私は開発者ではないんだ。アーキテクトはモジュールやクラスを書いたり、ライブラリを統合したりはしないんだ。アーキテクトは重要すぎてコードをいじることはないんだ。でもプログラマや開発者と話し合って、質問をしたり、ガイダンスをしたりする。そしてもし問題が面白そうだったら、プランニングをアーキテクトがすることもある。」”

“「なんでそうするの?」”

“「なぜなら私たちは経験があるからだよ。もっとシステムのことについて知っているし、どれが動いて動かないかがわかるんだよ。開発者は私たちの知識の延長線上にいて、素晴らしいシステムを作り上げることができるんだ!」”

“「でもコードに関わってないで、どうやって上手くいってるかわかるの?」”

“「私たちは開発者を信頼しているんだ。」”

“「ということは、彼らのことは『あなたのアイディアを正確に実行してくれる』とは信頼しているけど、『アイディアが出せる』ということは信頼していないの?」”

この質問を受けて、ソフトウェアアーキテクトは目に見えて動揺していました。 “「私もちょっと非社交的だったかもしれないが、」” 彼はやっと認めました。 “「問題は、たくさんのアイディアで働くように言われ続けていると、テストしたり検証したりする良い方法がないんだ……」” 彼は悲しげに下を向きました。 “「ソフトウェアアーキテクトが、ソフトウェアもアーキテクチャもやらないことだってあるみたいなんだ。」”

Little printf は部屋を出て、訪問を終え、ビルをでました。

Chapter 10

charity

Little printfが外に出ると、募金活動でお金を集めている男性に出会いました。

“「こんにちは。」” 彼は言いました。 “「今日は誰かを助ける気分ではない?」”

“「そうすれば気分が良くなりそう。」” Little printf は言いました。 “「僕は今日一日中このオフィスにいて、今までにないくらい混乱しているんです。」”

“「ああ、なるほど。彼らはみんな開発者だね。あんまり助けてくれないでしょ?彼らは『世界を変えている』って言いたがるし、事実として本当に成功しているけどね。」”

“「じゃあなんで変な感じがするの?」” little printfは聞きました。

“「ああ、彼らが最善を尽くした結果が、誰かの仕事をプログラムに置き換えたり、誰かの休暇をより休暇らしくしたりもしている。ソフトウェアが世界を飲み込んで、確かに表面上は世界を変えている。でも、深くまで見ていくと、結局は変わらず同じ世界があって、その表面もずたずたになっているんだ。変な感じがする理由についてだけど、それはつまり、この変化が別に物事を良くしているわけではないからだ。私たちはいつもと同じ欠陥と問題を持っていて、それは奥底にあるぽっかりあいた穴と同じものなんだ。」”

“「じゃあどうすれば良い気分になれるの?」” little printfは見るからに心配になっていました。

その男は少しの間考えて、一緒に人助けを手伝うように誘いました。この方法がこの男にとっての、気分が良くなるための方法なのです。午後の間、printfはこの男に彼の悩みとそれまでの冒険について話しました。長い沈黙の後、男は言いました。

“「人々が参加するゲーム、彼らが追いかけて楽しむ肩書きと評価、難解な問題を解いた後に得られるはかない喜び……これらは全て、しばらくの間は楽しめるんだ。でも、最終的に、何か価値のある物事を解決したりもせず、それに関わっている人びとのことを忘れてしまうと、それは本当に充実していることにはならない。」”

“「君が大きくなったとき、その部分がうまくいったりいかなかったりするかもしれないし、職場とは違うところでそういった充実を得られたり、得られなかったりするかもしれない。『仕事は仕事で、お金のためのもの』となるかもしれないし、仕事が楽しみのためになるかもしれない。それでも良いんだ。君の人生のどこかでその充実感を得られるように、どうにかやっていけるなら。」”

“「でも最終的に充実感が得られるのは、君が問題を解決して、君が自分で心から正しいと思える『人間の顔』をしていられたときだけだ。本当に重要なことはコンピュータでは見えないんだ。」”

“「君がシステムに費やした時間が、システムをより大切なものにしていくんだ。」” 彼は付け足しました。 “「そして、君が時間を費やす価値を見失ってしまって、プライドのゲームになってしまうと、安心よりも悲しみをもたらすんだよ。」”

“「物の見方を見失うと、システムに取り組むこと自体が問題になってしまう。そうなったとき、一番有効な解決策は、システムが問題だといって排除してしまうことだ。開発者はよくこの真実を忘れているんだ。」”

“「問題を解決して、自分で心から正しいと思える『人間の顔』をしていられたとき……」” 、printfは忘れないよう、繰り返しました。

Chapter 11

printf-end

帰り道の半ばのPrintfは、今は私の目の前に座っています。私がしていることが、私の好きなことやプログラミングを始めたきっかけといかに対立しているか―printfと話していると、私はそのことに気付かされました。Printfが出会ってきた人々は、私が日々、幾度となくやってきた役割でした。私は今までそういった人々にそうさせられ、私自身も周りの人々にそうさせていたのです。

私は真のプログラマになるためのゲームに引きずりこまれましたが、printfはそうではありませんでした。彼は真のプログラマにはならなくて良いと言って、『人間の顔』のままのプログラマでいることを好みました。

今日、私は過去を振り返って、私がしていることはただの仕事なのか、どうにかして『人間の顔』のままのプログラマになれないかを考える状況に行き詰っています。その狭間にいてもあまり意味はなさそうですが。

いずれにせよ、printfが感じたように、私も今は「”真のプログラマ”にならなくて良い」と感じるのです。

監修者
監修者_古川陽介
古川陽介
株式会社リクルート プロダクト統括本部 プロダクト開発統括室 グループマネジャー 株式会社ニジボックス デベロップメント室 室長 Node.js 日本ユーザーグループ代表
複合機メーカー、ゲーム会社を経て、2016年に株式会社リクルートテクノロジーズ(現リクルート)入社。 現在はAPソリューショングループのマネジャーとしてアプリ基盤の改善や運用、各種開発支援ツールの開発、またテックリードとしてエンジニアチームの支援や育成までを担う。 2019年より株式会社ニジボックスを兼務し、室長としてエンジニア育成基盤の設計、技術指南も遂行。 Node.js 日本ユーザーグループの代表を務め、Node学園祭などを主宰。