T-H本記事は、原著者の許諾のもとに翻訳・掲載しております。この文章は、2015年10月9日にシカゴで開かれたカンファレンス、CityCodeでのプレゼンテーションを書き起こしたものです。同じ内容をビデオと印刷向けPDF文書でも公開しています。1私は、コンピューターやテレビゲームが身近になる前に生まれてラッキーでした。友達や兄弟と外に出て遊び、自分自身で遊びを発明するという機会に恵まれたのですから。小枝を即座に弓や銃や剣や望遠鏡に見立てたりして、自分たちがヒーローになったりもできました。小枝は何にでもなりましたが、ブーメランにはなりませんでした。一度投げた小枝は自分で取りに行かなければならないのでね。成長する過程のどこかで、やがてそういう風に遊ぶことが恥ずかしくなってきます。他の子供たちが「大人らしく振舞うことが格好いい」と考えているのに、自分だけが松ぼっくりを手榴弾に見立てたり、魔法の力を持っているかのようなごっこ遊びをしたりはできないのです。そんなことをしていては仲間外れになってしまいます。結局は大人になることを強いられてしまうのです。それでも、これはラッキーな子供時代でした。成長の過程で、テレビゲームをしたり、コンピュータを使う機会を得るようになります。そこには、今までずっと欲しいと思っていた空想上の世界が、目の前に実現していました。その世界に引き込まれ、その間は別の人になれるのです。ほとんどのビデオゲームには特有の共通点があります。それは、「創作するのではなく、反応したり消費したりするものである」ということです。私は10代の時に即興劇をしました。それは、繰り返しになりますが、自分で何もないものから何かを作って、違う人のように振る舞えるというものでした。ケベック州の即興劇はそれとは違います。ケベックにはアイスリンクがあるため、何もかもがホッケーになってしまうので。私は2005年から2008年にマルチメディアの勉強をしに専修学校に行った時、最終的にプログラミングの世界に踏み込んでいました。私は「プログラミングは素晴らしい!」と思いました。創造性を再び得ることができ、しかもお金になるのです!そして私は、自分の一番最初のゲームのメカニズムをデザインして、とても感動しました。(「危ない!武装した男が建物の中に」)「これは本物のビデオゲームじゃないね。「これじゃただのHTMLフォームだ。テキストとオプションは配列化したほうがいいね。コードはもっと整理したほうがいい。ゲームは11ページのテキストで「きみならどうする?」(訳注:ゲームブックの先駆け的作品)の内容について書いたものでした。多くの人たちが良いと思うものを作りたいならば、私はたくさん勉強をしなければいけないと思いました。私は“本物のプログラミング”を勉強する必要がありました。GUIツールキットのJscriptからより良いものへ―例えばPHPなどへ。私はそれらをJavaScriptとともに学びました。最終的に、再度“本物のプログラミング”の方法を勉強するように言われました。PHPはひどいものである、とも言われました。そこで初めてPythonを試してみた方が良いかもしれないと言われ、学ぶことにしました。本物のプログラマたちはもっとおしゃれなものを知っていましたし、Pythonのラムダ式は期待に沿うものではなく、オブジェクト指向のプログラミングも望んでいたものではありませんでした。「次の良いステップとしては、コンピューターサイエンスの聖書とも言えるSICPを読むこと」と私は言われました。してSchemeと出会いました。現実世界の本物のプログラマはC言語をやっているため、私はK&Rの本を手に取りました。ある程度までいくと、本物のプログラマはデータ構造と数学について知っていると学んだため、仕事をやりくりしながら、地元の大学で定時制の授業に登録しました。本物のプログラマは常に最新で珍しいアルゴリズムを知っているため、私は論文や本を読み始めました。その過程で、私はErlangを習得し、それを使ってキャリアを形成するようになりました。不思議なくらい、誰も私が本物の著者なのか、本物の作家なのか、あるいは本物のイラストレーターなのか質問をしてきませんでした。本番システムにおいてErlangを使ったことなんてないのに、Erlangを教える仕事を得ていました。2そして、私は世界中を旅する生活を送りました。世界中で、自分がしたこともないことの方法を伝えて回りました。人々は、私が始めにしていたことがプログラミングとは全く関係がなかったため、本物のプログラマだと思って急に信用し始めました。ある日、私は講演会の帰りの空港で足止めをくらっていました。イライラしながらターミナルでタイピングをしていると、急に変に優しい声で声をかけられました。私はそのリクエストに驚き、画面から顔をあげました。周りを見渡したところ、ある男の子を見つけました。彼は開発者になることを熱望していて、”printf”と呼んでほしいと言いました。私はすごいバカで目立ちたがりだなと思いました。彼はこんな見た目でした。「僕はパソコンのことをまだよく知らないけど、あなたは知ってそう。僕はプログラムやブログを書いて、人々に使ってもらったり、読んでもらいたいんです。驚くようなリクエストだったことと、その時私は20時間も起きていたことから、私は彼の言うことを完全に理解できているのか、理解できた気分になっていたのかわかりませんでした。私は彼に、システムは難しい、と伝えました。彼が何をしたいのか、障害をどの程度に抑えたいのか、何人の読者をサポートするべきなのか、どこにホストしたいのかわからなかったため、数少ない情報を元に正確なシステムをデザインすることはできませんでした。そんなの関係ないから、システムをデザインしてください。そのため、私は以下のような構成図を作成しました。彼はそれをみてこう言います。「いいえ、このシステムは十分じゃありません。違うのを作ってください。」そして、私は以下のような構成図を作り直しました。私は彼にどのように動くのかの概要を教えました。小さな新しい友達は礼儀良く微笑みました。「僕が欲しいのはこれじゃありません。いらないものがたくさんあって複雑すぎます。冗長性、モニタリング、バックアップ、キャッシュ、その他ロードを削減するためのメカニズム、法的保護のための外部の入金処理装置、フェイルオーバー、デプロイの容易さ、その他......これら全てを考慮したのに、と少し侮辱された気分になりました。このコンサルの料金として相当な金額を取ってもいいところだっていうのに!愛想をつかして、ただこれを描きました:そして付け足しました。「これが君のデザインだ。君がほしいシステムはこの黒いボックスの中にあるんだよ。こんな下らない答えで、もうどっかに行ってくれたらいいのにと思っていました。すると、驚いたことに彼はこう言いました。printfと知り合いました。3私はすぐにこの小さな男の子のポートフォリオを知りました。彼のリポジトリには小さなプログラム、フォームのある簡単なウェブサイト、トリビアルなコマンドラインユーティリティーらしかありませんでした。それらは華々しいものではなく、作られてはすぐに消えるようなものばかりでした。ある時、彼は複数のモジュールを使う大きなプログラムにとりかかり始めました。ソケットが必要で、ディスクへアクセスし、実際のデータベースと連携しました。printfは驚きました。プログラムはまだ不十分でした。リファクタリングが必要で、より良いテスト、ドキュメンテーション、リンティングと分析が必要でした。そのプログラムはしばらく稼働しますが、ある朝突然壊れます。何度も何度もそのプログラムは壊れました。コンフィギュレーションが間違っていました。ログはうまくとれず、ディスクは予測不可能なスピードで、ネットワークは中断を起こし、バグが発生し、エンコーディングが混在し、データベースはバキューミングが必要でした、トランザクションはハングされ、認証は失効し、CVEが発生し続け、メトリックは動作しないままでした。それはスパゲティになっていてばかりでした。「実のところ、僕は何も知らなかったんです!僕が必要なものから判断するべきでした。僕はおしゃれなシステムを書こうと思い上がっていましたが、その修繕のためにはすごく時間がかかって、今まで短縮してきた時間が相殺されたような気分でした。それでも、それがどれだけ素晴らしいものかを知っておくべきでした。」ある朝、彼はオフィスを出る決意をしました。と彼は燃え尽きたように点滅するライトに向かって言いました。彼は、彼の小さくてぐちゃぐちゃなサーバーをよそに、ソフトウェアの世界が何をもたらしてくれるのかを見るために、オフィスを出たのです。ハードドライブが一杯になるまで、ログはずっと蓄積されていくのでした。4彼は経験のある開発者にヒントや助けを求めるべく、あるオフィスに行きました。最初に出会ったのはとても誇らしげなシニアのエンジニアで、やや優越感に浸っている人でした。「おお初心者さん、ようこそいらっしゃいました。我々の領域へようこそ。私はこの領域のエキスパートです。