プログラミングはひどい [2014]
(stilldrinking.org)- ソフトウェア開発の混沌を橋の建設の比喩で解き明かしたエッセイ。あらゆるプログラミングチームは狂人の集まりで、その成果物の上で銀行ソフトウェアとインターネットが動いているという自嘲的な告白
- 完璧なコードは、ひとりでひとつのことだけを行うファイルの中にしか存在せず、現実では金曜に火曜までに600個作れと命じられ、溶けかけた雪の結晶の山にもたれかけさせられたピカソのような運用になる
- Web開発者は毎週ひとつずつ新技術を学びながら、数百もの既存ツールが壊れていないか確認しなければならず、専門家でも原因究明に6時間かかるならまだマシという世界
- インターネットは、何兆ドルもの価値が非公式な合意と "TODO: FIX THIS" と書かれた10年前のコードの上に依存しており、システム管理者全員が同時に昼食に行けば文明は崩壊する
- プログラマーは1日10〜15時間、脳が本来そうするよう設計されていない仕事をこなしながら少しずつ狂っていく。それが50ポンドを持ち上げる代わりに選んだ職業の代償
あらゆるプログラミングチームは狂人の集まりでできている
- 肉体労働をしている友人たちはいつも「お前は楽でいいよな、こっちはモルドールの下でドライバーでトンネルを掘ってたんだぞ」みたいな話から会話を始める
- ストレスや精神的苦痛が悪いものだという点に同意するなら、
プログラミングの世界へようこそ - 橋の建設の比喩: 大都市の橋梁プロジェクトに参加したら、状況はこうだ
- Maryはプロジェクトリーダー、Fredは木材しか扱えないのに、激流の200フィート上にかかる橋の歩道部分を担当している
- Daveはセーターを盗まれたあと、15段階のセキュリティチェックを設置した
- Philはエンジニアでもないのに手すり禁止ルールを実施している。誰もPhilが何をしているのかわからないが、経営陣にコネがあるので放置されている
- Saraは最先端どころか「出血多量レベル」の舗装技術をいくつも全部設計に盛り込んだ
- TomとHarryはメートル法 vs ヤード・ポンド法の争いを何年も続けていて、先に作業した人の単位系が採用される
- 吊り橋として設計したが、誰も吊り橋の作り方を知らないので途中で支柱を追加し、吊りケーブルは何かを支えていそうなのでそのまま残してある
- 新人には新しいアイデアを出せと言うが、実際には推進工学エンジニアなので橋については何も知らない
- この橋を渡るかと聞かれたら誰も渡らないだろうが、こんな構造が銀行ソフトウェアもWebサイトもインターネットのセキュリティソフトも全部作ってきた
すべてのコードはひどい
- どのプログラマーにも、家に誰もいないときに取り出して読んでは涙するGood Codeファイルがある
- 関数名や変数名は一貫していて簡潔で、明らかにバカなことはしておらず、実運用環境や営業チームの要求にさらされたこともない
- たったひとりの人間が書き、他の誰にも触られておらず、30歳以上の人が書いた詩のように読める
- 現実: 金曜に火曜までに600個の雪の結晶を作れと命じられたら、あちこちで裏技を使い、同僚がそれを溶かし、全部がぐちゃぐちゃに混ざった塊にピカソを立てかけ、翌週にはピカソが倒れないようにさらに雪をかき集める
- 標準に従えば解決するという理論はあるが、標準の数はコンピュータが実際にできることより多く、しかも個人の好みで変形されるので、現実のコードベースでは同じ作業を何十通りものやり方で行っている
- 新しい職場での最初の数週間は、あらゆる言語・フレームワーク・標準を知っていても、プログラムがどう動くのかを把握するだけで終わる。標準はユニコーンだからだ
いつも闇がある
- 子どもの頃の押し入れの比喩: 中に入ると壁が後ろに下がって棚になり、もう一度見上げると光の届かないクロールスペースの絶対的な虚無があり、毎晩懐中電灯と人形で封じていた怪物がそこに住んでいると直感する
- プログラミング学習も同じだ。有用なツールを学び、周囲を見回すとまた新しいツールがあり、そのツールが、ベッドのすぐ脇にずっとあった底なしの恐怖を見せつけてくる
- 平均的なWeb開発者の現実
- 12のプログラミング言語と、無数のライブラリ・標準・プロトコルに慣れていても、毎週ひとつずつ新しく学ばなければならない
- 数百の既存ツールが更新されたり壊れたりしていないか確認し、酔った週末にうまく利用したバグが修正されていないかもチェックする必要がある
- すべてが最新だと思っていたのに、突然全部壊れる
- 故障原因の例: 誰かが1/0をInfinityとして扱うことに決め、別の誰かがそれをコンパイラではエラーにしておきながら誰にも知らせない。その結果、専門家でも原因特定に6時間かかる
- 自分の専門分野の知識でさえ、コンピュータサイエンス全体から見ればごく一部にすぎず、5年前のMacBookがどう動いているのかを知っている人はひとりもいない
- 「一度電源を切って入れ直してみてください」と言う理由は、何が悪いのかまったくわからないので、コンピュータを昏睡状態にして内蔵の自動医師チームに任せるからだ
インターネットはそれ自体が特別な地獄だ
- 動的ページが3つあるだけのショッピングカート級のWebサイトですら、24時間体制のチームが保守している。なぜなら、あらゆるものが常にあらゆる場所であらゆる人に対して壊れ続けているからだ
- 今この瞬間にもFacebookの社員が何万件ものエラーメッセージに対処しており、Googleのオフィスのあるチームは3日間眠っておらず、どこかのデータベースプログラマーは空のMountain Dewボトルに囲まれ、配偶者には死んだと思われている
- システム管理者全員が同時に昼食に出たら、デリに着く前に缶詰をめぐって突然変異の群れと戦う羽目になるだろう
- 何兆ドルもの価値が、非公式な合意と、10年前に書かれた**"TODO: FIX THIS IT'S A REALLY DANGEROUS HACK"**というコメント付きのコードの上に依存している
- 諜報、利益、暇つぶしのためにインターネットのあちこちを攻撃している集団がいて、4chanは午後の半日機嫌が悪いだけで誰かの人生と事業を破壊できるが、核の冬に核がもう1発落ちるようなものなので誰も気にしない
- インターネットでは「これ、たまに動く気がする」と言えばそれがインターネットの一部になり、数百ドルとコンピュータさえあれば誰でもひどいハッキングコードを公開して全体を少しずつ悪くできる
- インターネットの秘密のルール: ブラウザを初めて開いて5分後にはロシアの子どもが個人番号を持っていて、登録すればNSAが位置追跡を始め、メールを送ればナイジェリアの看板にアドレスが載る
- これは無関心のせいではなく、すべてが壊れていて良いコードが存在しないので、みんながただ動かし続けようと必死になっているからだ
私たちが狂っているのではなく、狂いつつあるのだ
ERROR: Attempted to parse HTML with regular expression; system returned Cthulhu— これが面白いと思えるならまだ大丈夫だが、「arrayReverseか?」という問いにs/camel/_/で答えるのが自然になっていたら、すでにコードで会話する段階に入っている- 人間の脳は基本的な論理が特別得意なわけではないのに、1日中極度に複雑な論理をこなす職業が存在する
- 抽象的な条件と要求の巨大な鎖をたどって、抜けたカンマのようなものを一日中探していると、人の顔を見ながらでも相手の話が終わったのかどうかわからなくなる。セミコロンがないからだ
- 難解プログラミング言語(esolang)の例で、脳への破壊的な影響を実演
- C++の "Hello World" と同じ出力をするプログラムが、Brainfuck、Ook!、マヤ数字を90度回転させたASCIIアートで表現するPerlコードなどで存在する
- そのマヤ数字プログラムはコンテストで優勝しており、こんな世界では1日にタバコを1箱吸っていても誰も疑問に思わない
- すべてのプログラマーは、脳が本来するように設計されていないことを1日10〜15時間、週5〜7日強いられており、みんな少しずつ狂っていっている
- 結論: 50ポンドの物を持ち上げる代わりに、サタンの体毛を整え、開いた頭蓋骨の上で食事するサタンに仕える機会を得て、その代償としてインターネットの一部があと数日動き続ける
まだコメントはありません。