ソフトウェアエンジニアリングについての良いジョークは何ですか?


ベストアンサー

Q:プログラマーがいつもハロウィーンとクリスマスを混同するのはなぜですか?

A: 10月31日== 12月25日だから!

2バイトが出会う。最初のバイトは「あなたは病気ですか?」と尋ねます。 2番目のバイトは、「いいえ、少し気分が悪くなりました」と応答します。

Q:電球を交換するのに何人のプログラマーが必要ですか?

A:なし、それは “saハードウェアの問題

Q:電球を交換するのに何人のマイクロソフトプログラマーが必要ですか?

A:なし、彼らは単に暗闇を標準にし、「この動作は仕様によるものです「

コンピュータサイエンスの学生が木の下で勉強していて、別の学生が派手な新しい自転車に乗っています。最初の学生は「どこでそれを手に入れましたか?」と尋ねます。自転車に乗っている学生は「私が外で勉強していると、美しい女の子が自転車に乗って引き上げ、服をすべて脱いで「好きなものを何でも持っていける」と言いました。最初の学生は、「良い選択です。彼女の服はおそらくあなたに合わないでしょう」と答えます。

ブレーキが効かなくなったとき、物理学者、エンジニア、プログラマーが急な高山の峠を車で運転していました。車はどんどん速くなっていて、角を曲がるのに苦労していて、1、2回は弱い衝突障壁だけが山の側面を衝突するのを防いでいました。突然彼らが見つけたとき、彼らは皆死ぬだろうと確信していました。脱出レーン。彼らは脱出レーンに引き込まれ、無事に停止しました。物理学者は、「ブレーキパッドの摩擦とその結果生じる温度上昇をモデル化して、なぜ失敗したのかを解明できるかどうかを確認する必要があります」と述べました。エンジニアは、「私は」後ろにいくつかのスパナーを持っていると思います。私は「何が間違っているのか」を調べて解決できるかどうかを確認します。プログラマーは、「もう一度やり直して、それが再現可能かどうかを確認しませんか?」と言いました。

Q:「オブジェクト指向で裕福になる方法は何ですか?」

A :継承

彼の友人へのプログラマー(プログラマーも):「昨夜、熱い女の子に会いました。彼女を家に連れて帰り、猛烈にキスを始めました。キーボードに座って…」一斉に友達全員が「あなた」は家にコンピューターを持っていると言いましたか? 「そのRAMは何ですか?」

SQLクエリがバーに入り、最大2つのテーブルまで移動して、「参加できますか?」と尋ねます。

ハンマーがC ++、すべてが親指のように見え始めます。

Q:電球を変更するのに何人のプロローグプログラマーが必要ですか?

A:はい。

Aプログラマーは、寝る前にベッドサイドテーブルにグラスを2つ置きます。喉が渇いた場合は満腹、喉が渇いた場合は空の1つ。

通りの角に立っている男性が次々とタバコを吸っています。通知で歩いている女性彼は「ねえ、あなたはそれらのものがあなたを殺すことができることを知らないのですか?つまり、あなたは箱に巨大な警告を見ませんでしたか?!」「それは大丈夫です」と男はさりげなく「私」を吸って言いますmaコンピュータープログラマー」。 「それは何かと何の関係があるのですか?」女性に尋ねた。彼は「私たちは警告を気にしない」と答えた。エラーだけを気にします。」

世界には10種類の人がいます。バイナリを理解している人と、通常のセックスをしている人です。

したがって、このプログラマーはデートに出かけます。熱いひよこと一緒に

答え

彼らはとても悪いです。

彼らは微調整されたシステムに「明らかな」修正を加えて変更し、絶対に最善の意図を持ってすべてをひどく台無しにするような人々。

アイデアを与えるために、私が知っている別の優秀なエンジニア、Jeffrey Hsuは、ClickArray(現在はArray Networksとして知られています)で働いていましたが、パフォーマンスが非常に重要な作業を行うために別の「ビッグガン」タイプが必要だったため、そこで雇われました。

1.3GHz Pentium 4システム(2001年)で。

1秒間に最大38,700TCP接続を超えるリバースプロキシキャッシュを取得しましたが、これは印象的ではありません。 、実質的に変更しない限り、INADDR\_ANYに使用できるポートは16,384個しかないことに気付くまでBSDまたはLinuxベースのシステムの場合は、TCP / IPスタックを使用します。

スタックは変更していません— BSDスタックでした—したがって、最初のページ読み込み要求にも応答していました。同じ時間枠。

そして次の問題に取り掛かった

次の問題の約半月、明らかに誰かついに、キャッシュ内の残りのコードに加えた変更についてパフォーマンステストを行うための時間を確保しました。

オフィス周辺でパニックが増加しているのを目にしました。数日後、何が問題なのかを何度か尋ねたところ、心配しないで、作業を続けるように言われました。

有限状態マシンを修正していたので、作業を続けました。実際の有限状態マシンであり、その時点でキャッシュコードを再構築します。実際、これが会社に次の資金調達をもたらした理由の1つです。

最後に、彼らのホットショットから、問題を解決できるかどうかを確認するために電話がありました。

毎秒約6,300の接続を取得していました。

パフォーマンスが約6倍低下し、どこにあるのかわかりませんでした。

数時間かかり、最終的に「複数のCPUマシンの最適化を行う」コミットまで追跡しました。

元に戻し、1秒あたり約35,000の接続に戻り、再調整しました。いくつかのホットコードパスがあり、1日の終わりまでに、古い数値に戻りました。

「最適化」を理解するにはホットショットプログラマー」は彼が作っていると思っていました。当時、スレッド化はそれほど重要ではなかったことを理解する必要があります。

それがあったとしても、私たちはまだステートマシンで作業していました。 、これは、グローバル状態を単一の「statite」オブジェクトに移動してスレッドごとに作成し、インスタンスが相互に干渉しないようにする前に実行する必要がありました。

したがって、スケーリングモデルはpとして複数の「やるべきこと」エンジンを持っている次に、プロセスが受信したときにリクエストを処理できるようにする「ゲートキーパー」プロセス。すべてのリクエストを確認してから、「プロセスを終了」します。さらにリクエストがあった場合、ゲートキーパーのkqueueは「別のプロセスを手放す」などのようになります。

「ホットショット」は、1つのプロセスがほとんどすべてのリクエスト処理を実行していることに気づきました。他のプロセスは(ほとんど)アイドル状態でした。

これは、「実行する作業」を待機しているプロセスにFIFOではなくLIFOを意図的に使用したためです。

そこで彼は「修正しました」それをFIFOに変更することによって。

そしてパフォーマンスは地獄に落ちました。

私がLIFOを使用した理由そもそも、コア間で負荷が分散されるとは限らないことはわかっていましたが、「ホットショット」が知らないことをいくつか知っていたからです。

次のことを知っていました。

  • ネットワークアプライアンスとして、空白の削除や広告目的のコンテンツの書き換えなどを行うためにモジュールにロードしない限り、ほとんどの場合、CPUではなくI / Oにバインドされていました。
  • もっと重要なことは、列に並ぶ最後のプロセスがうまくいくことだということを私は知っていましたgすべてのページをコアに配置しますが、最も長くアイドル状態になっているページでは、おそらくすべてのページをコアに配置することはできません。
  • さらに、TLBキャッシュの衝突が発生することを知りました。すべてのユーザーのスペースプロセスが同じアドレス範囲にマッピングされたため、フラッシュが発生しました
  • つまり、キャッシュの再読み込みが必要になります。つまり、少なくともL1、おそらくL2キャッシュに移動する必要があります
  • これを組み合わせると、P4アーキテクチャにL3キャッシュがなかったため、追加の命令パイプラインストールが発生します
  • したがって、追加のCPUサイクルがアイドル状態になる可能性があるとわかっていたものを意図的に交換しましたI / Oバウンドのパフォーマンスが最高になるとわかっていたコア

そこで、意図的にLIFOオーダーを選択し、1994年に最初に使用した手法を使用してパフォーマンスの向上を検証しました。または、いわゆる「ホットエンジンスケジューリング」と呼ばれます(私はこの手法を発明したので)。

したがって、この「ホットショット」はPEを破壊しました。変更によるパフォーマンス。

そして、「最適化」とされた後、パフォーマンステストを実行して、それが実際に最適化されていることを確認できませんでした。

彼が唯一のことはdは、負荷がかかった状態で、プロセスがすべて、時間の経過とともにほぼ同じCPU使用率の合計をマークアップしていることを確認しました。これは、マルチコアの使用率が向上することを意味していました。

絶対に最悪のソフトウェアエンジニアは、危険を冒すには十分ですが、悪い決定を下していることを認識するには十分ではありません。

公平な定規を使用して変更の結果を測定することにより、決定が実際に悪いものであったことを確認しないことで、さらに悪化します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です