8

私たちの開発者が協力しなければならない継承されたプロジェクトについて、何年にもわたって多くの不満を聞いてきました。WTFサイトには、「WTF?」という息を呑むようなコードの例がたくさんあります。

しかし、実際に、「これはよく考えられていた」というコードが提示されたことがありますか。または「うわー、私はそれを考えたことはありません!」

どのような継承されたコードを使用して作業しなければならなかったので、笑顔になりましたか。その理由は何ですか。

4

11 に答える 11

8

昔、私は Turbo C/C++ ランタイム ライブラリを担当していました。Tanj Bennett は、オリジナルの 80x87 浮動小数点エミュレーターを 16 ビット アセンブラーで作成しました。Tanj のコードはうまく機能し、注意を払う必要がなかったため、詳しく調べていませんでした。しかし、私たちは 32 ビットへの移行を進めていたので、エミュレーターを拡張するというタスクは私に降りかかりました。

プログラミングが芸術と何か共通点があると言えるとしたら、それはそれでした。

Tanj のコア数学関数は、80 ビット浮動小数点の一時的な結果を 5 つの 16 ビット レジスタに保持し、それらをメモリから保存および復元する必要がありませんでした。X86 アセンブリ プログラマーは、これがどれほどの成果であったかを理解するでしょう。レジスターのスペースが不足していて、5 つのレジスターを一時的に保持しながら同時に複雑な計算を行うのは、目を見張るほど美しいサイトでした。

巧妙なコーディングの問題だけであれば、それを芸術と見なすのに十分だったでしょうが、それ以上のものでした. Tanj は、一時をレジスターに保持するのに最も適した基礎となる数学アルゴリズムを慎重に選択しました。その結果、非常に高速な浮動小数点エミュレーターが完成し、多くのお客様にとって重要なセールス ポイントとなりました。

386 が登場するまでに、浮動小数点のパフォーマンスを気にするほとんどの人はエミュレーターを使用していませんでしたが、Intel の 386SX をサポートする必要があったため、エミュレーターをオーバーホールする必要がありました。命令デコード ロジックと例外処理を書き直しましたが、コアの数学関数はまったく手を加えていません。

于 2009-01-26T22:45:11.347 に答える
3

私が最も感銘を受け、エミュレートしようとしているコードは、単純すぎて理解しやすいと思われるコードです。

そのようなコードを書くのは非常に困難です。:-)

于 2009-01-26T22:51:10.273 に答える
3

私の最初の仕事で、コードベース (c++) で「安全な ID」クラスを発見して驚きました。これは、空のタグ クラスでテンプレート化されたクラスに数値 ID をラップしていました。 UserId を比較するか、OrderId に割り当てます。

使用する後続のすべてのコードベースに同等の Id クラスがあることを確認しただけでなく、コンパイラが正確性を保証し、より強力なコードを作成するために何ができるかについて実際に目を向けました。

于 2009-01-26T23:24:00.257 に答える
2

ここで面白い話があります。

私はこの Javaish アプリケーションに取り組んでいました。getter と setter でいっぱいで、get または set とインターフェイス、およびコードを読み取れないようにするために発明されたすべてのものしか実行しませんでした。ある日、私は非常に巧妙に作成されたように見えるいくつかのコードに出くわしました-それは基本的に非常にエレガントに見えるアルゴリズムの実装でした=プロジェクトが遵守しなければならないすべての可能なルールを尊重しているにもかかわらず、数行の読み取り可能なコードでした(自動的にチェックスタイルされました) .

チームの誰がそのようなコードを書くことができたのか、私にはわかりませんでした。私は彼と話し合い、考えを共有したくてたまりませんでした。ありがたいことに、数か月前に (cvs から) サブバージョンに切り替えていたので、すぐに am 'svn flame' を実行しました。実装の横に私の名前が表示されているのを見て、私はいたるところで大笑いしました。

6 か月前に書いたコードを覚えていないという話を聞いたことがあります。こんなことが起こるとは信じられませんでした。自分が書いたコードをどうやって忘れられるのでしょうか? まあ、今はそれが起こり得ると確信しています。ありがたいことに、コードは問題なく、簡単に拡張できたので、ストーリーの半分しか経験していません。

于 2009-01-26T23:23:17.853 に答える
1

私が出くわした私の会社の別のプログラマーによるいくつかのVB6コードは、エラー状態を非常にうまく処理しました(それらを直接処理するかログに記録するかにかかわらず)。

よくコメントされたいくつかのかなり複雑なコードと一緒に。

于 2009-01-26T22:36:57.637 に答える
1

私はこれが次のような多くの答えをもたらすことを知っています、

「ステップインする前に良いコードを見つけたことがない」とバリエーション。

そこに良いコーダーや優れたプロジェクトがないということではなく、 NIH症候群が過剰にあり、他の人のコードを好む人がいないという事実が本当の問題だと思います。後者は、あなたがそれを理解するために知的努力をしなければならないという理由だけで、あなたがそれを嫌うようにあなた自身のコードを理解する必要があるよりもはるかに大きな努力です(それはあなたに考えさせて働かせます)。

個人的には(私が推測するように)本当に悪いコードのいくつかのケースを覚えていますが、かなりよく文書化されたエレガントなコードも覚えています。

現在、私が最も感銘を受けたプロジェクトは、単純さだけでなく、コーディング方法においても、非常に強力な動的ワークフローエンジンでした。あちこちで非常に巧妙なスニペットと、私の友人( Aspl.es)によって開発された完全なIDLに基づく美しいメタプログラミングライブラリを思い出すことができます。

于 2009-01-26T22:37:00.070 に答える
1

I inherited a large bunch of code that was SO well written I actually spent the $40 online to find the guy, I went to his house and thanked him.

于 2009-01-26T23:29:58.293 に答える
0

Rocky Lhotkaがクレジットを取得する必要があると思いますが、最近{私的な練習で} CSLA.NETアプリケーションに触れる必要があり、コードの秩序に非常に感銘を受けました。アプリは非常にうまく機能しましたが、クライアントにはいくつかの拡張機能が必要でした。元の作者は悲劇的に亡くなり、新しい男は洗練されていませんでした。彼はCSLA.NETのビジネスオブジェクトベースのアプローチを理解していなかったので、凝ったフレームワークを使用せずに、カットアンドドライのVB.NETでもう一度やり直したいと考えていました。

だから私は電話を受けた。WinFormバインディングとCSLA.NETの実用的な例を見ると、多くのことについてかなり有益でした。

于 2009-01-26T22:31:58.160 に答える
0

Symbian OS-とにかくその古いコアビット、Psionの時代にさかのぼるビット、または今日でもその精神を生かしている人々。

そして、そのすぐそばに座っていると、大手電話会社に雇われた最低入札者によって作成されたすべての新しいがらくたです。それは驚くべきことでした。コードベースの一部が古いか新しいかを実際に感じることができました。

于 2009-01-26T22:37:49.520 に答える
0

型推論に関する学士論文を書いたときのことを覚えています。Pascal-to-Pascal 'コンパイラ' は、スーパーバイザーが (Java で) プログラムしたパーサーの拡張機能でした。私が覚えている限り、それは非常に優れた構造であり、本格的なオブジェクト指向プログラミングを行ったことのない私にとっては、かなりの啓示でした。

于 2009-01-26T23:06:12.163 に答える
0

I've been doing a lot of Eclipse plug-in development and often had to debug into the actual Eclipse source code. While I haven't "inherited" it in the sense that I'm not continuing work on it, I've always been impressed with the design and quality of the early core.

于 2009-01-26T23:32:10.927 に答える