パスワードを忘れた? アカウント作成
160779 story

OpenSSLのコードの汚さに「サルが書いたコードだ」との批判 185

ストーリー by makeplex
逆に“キレイなコード”といったら何だろう 部門より

あるAnonymous Coward 曰く、

yebo blog経由で知ったのだが、オープンソース開発者のMarco Peereboom氏が、「OpenSSL is written by monkeys!」(OpenSSLはサルによって書かれている)とOpenSSLのソースコードの汚さを批判している。

ここでは実際にOpenSSL内で使われている「酷いコードの例」を挙げつつ、「コードの汚さにキレる」Peereboom氏の姿が書かれている。そしてPeereboom氏は最終的にAgglomerated SSL(ASSL)という代替APIを作成するまでに至ったとのこと。

開発者なら一度は「他人の書いた汚いコード」にキレた経験はあると思うのだが、それを燃料に代替コードを書いてしまうとはさすがである。

# ということで、コメントでは/.J読者の方々が読んだことのある「他人の書いた汚いコード」をぜひお披露目下さいwww

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2009年11月05日 17時31分 (#1666209)

    #define ZERO 1

     一発の破壊力でこれに勝るコードを見たことが無い。

  • 残念ながら (スコア:3, おもしろおかしい)

    by Anonymous Coward on 2009年11月05日 18時05分 (#1666243)
    自分の書くコードより汚いコードなんて見た事無いな。
  • by flutist (16098) on 2009年11月05日 17時12分 (#1666197)

    ag·glom·er·ate [əglάmərèit]
      -n. [-rət, -rèit] 塊り, 《まとまりのない》 集団, 群
    (研究社リーダーズプラス)

    …きれいなコードになってるのかな?

  • むしろ (スコア:2, すばらしい洞察)

    by Anonymous Coward on 2009年11月05日 17時36分 (#1666214)
    他人が書いたコードにキレる前に
    昨晩自分が書いたコードにキレることも
    スパゲティな上にコメントも無いコードを見て誰だよコレと思ったら昨日の自分だったとか···
  • by user003 (37747) on 2009年11月05日 17時43分 (#1666224)
    Biggerstaffの再利用に関する3つの法則
    - 再利用可能なソフトウェアを開発するには、3回は作り直す必要がある
    - 再利用の恩恵を与えるには、少なくとも3回は再利用する必要がある

    成果物をパパッと作っちゃう人は再利用のことなんか考えません。
    後で作り直せば良いだけなんだから。
    それでサルが書いたみたいに汚いコードだとか愚痴ってる奴が3倍の労力をかけてきれいなコードに書き直せば良いだけのことですよ。
    • by firewheel (31280) on 2009年11月05日 18時52分 (#1666288)

      まず第一に、綺麗なコードと再利用できるコードを混同している。
      再利用できるコードを作るのは再利用できないコードの3倍苦労するけど、
      汚いコードを再利用するのは30倍以上苦労します。

      >成果物をパパッと作っちゃう人は再利用のことなんか考えません。
      >後で作り直せば良いだけなんだから。
      いやいや。そういうことを言い訳にして汚いコードを書く人は、あとの事なんて
      考えてない。自分で書き直せない奴ほど、そういうことを言い訳に使うんですよね。
      #綺麗なコードを書く時間 ー 汚いコードを書く時間 << 汚いコードを解読して綺麗なコードに書き直す時間

      どうせ書き直す必要が出る頃までその会社にいるかどうか分からないんだし、そも
      そも次の仕事を同じ会社が受ける保証もなければ、その会社が次の仕事を受ける時
      まで存続している保証もない。万が一書き直す必要が発生しても、汚いコードを
      書く人はさっさと逃げ出しちゃえばいいんですよね。

      それにしても再利用可能なコードを創るのが大変なのは事実だけど、「自分の書いた
      コードを書き直すのは嫌いだ」とか言って保守不可能なコードを書いて技術的負債を
      増やし続けるような奴を雇っちゃいけないな。

      親コメント
    • by imaic (31975) on 2009年11月05日 17時46分 (#1666229) 日記

      なるほど。
      3つの法則といいながら、2つしかないとは素晴らしい。

      親コメント
      • 世の中には3種類の人間が居る。
        数を数えられる人間と、数えられない人間だ。

        親コメント
    • きれいなコードは時間がかかるというけど本当なの?

      大昔ならいざしらず、現在は綺麗な設計/コードを作るためのノウハウがたくさん発表されていますよ。
      頭をひねって時間をかけて考え出す必要はもうほとんどないです。要はテクニックです。
      それらのノウハウを知っていて適切に適用できれば今までと同じ時間で今までより綺麗なコードが書けますよ。

      親コメント
  • 猿コードは追わず、ただ作り直すのみ。

  • by tmf3jr (38872) on 2009年11月06日 15時10分 (#1666944)
    簡単なWebアプリの修正を依頼された時の話です。
    当初開発を行った担当者が残した仕様書に目を通したところ、HTTP送受信、複数のタスクの協調動作、状態遷移等全てのものがタイミングチャートで書かれていました。

    またソースコードには0or1の値しか代入されないフラグが数十個定義され、これで状態遷移が全て管理されていました。
    新しい機能に対応するため、コードを書き足してフラグの値を変更すると予想もしない動作ばかり...

    恐らく開発した人はクロックとフラグで全て解決できる環境でこれまで仕事されてきたのでしょうね。
    この時ばかりは「老害」という言葉の必要性を痛感しました。

    結局その後、仕様書とソース両方全部作り直して納品しましたとさ。
  • by shuichi (572) on 2009年11月05日 17時20分 (#1666201) 日記

    main()が8000行
    switch文が6階層...

  • 全てのPerlのコード (スコア:1, すばらしい洞察)

    by Anonymous Coward on 2009年11月05日 18時05分 (#1666245)

    T/O

    # 夜道で撃たれたくないので、AC

  • strutsのlogicタグ使いすぎによる最長不倒関数 [kojima-cci.or.jp]を見たことがあります。
    簡略化して書くと

    <logic:equal name="Form1" property="item1" scope="request" value="value1">
        // 色々と処理
        .......
        <logic:equal name="Form1" property="item1" scope="request" value="value2">
            (...色々と処理)
            <logic:equal name="Form1" property="item2" scope="request" value="value2">
                <logic:equal name="Form1" property="item3" scope="request" value="value3">
                    <logic:equal name="Form1" property="item4" scope="request" value="value4">
                        <logic:iterate id="content1" property="item5" name="Form1" scope="request">
                        (...色々と処理)    <br>
                        </logic:iterate>
                    </logic:equal>
                </logic:equal>
            </logic:equal>
        </logic:equal>
        <logic:equal name="Form1" property="item6" scope="request" value="value6">
            (...色々と処理)
            <logic:notEmpty name="Form1" property="item1" scope="request">
                (...色々と処理)
            </logic:notEmpty>
        </logic:equal>
         (...この後同じような調子でlogicタグによる条件文が数百行続く)
    </logic:equal>

    という具合に、logicタグを大量に使ってifとループが延々と続くようなものでした。
    5層くらいのifが入り乱れてるところにループがちりばめられているのです。

    C/Javaのエディターだとifやループの括弧に対する対応位置を自動的に検知してくれたりするので
    ある程度長くても調べやすかったけれど、JSPにはまだそういうのが無くて
    このファイルの修正作業にはブチ切れそうになりました。

    昔、Cで最長不倒関数作ってたような人が、今はWeb開発に回されてるんでしょうねえ..。

  • C++ で見たものといえばこんな辺りでしょうか。

    if (以下 1700 カラム)
        v = 1;
    else if (以下 1300 カラム)
        v = 2;
    else if (以下 600 カラム)
        v = 3;

    ……なんてのは、見たことがありますね。switch にできる単一変数評価で。
    switch でもブチキレそうですが。

    後はこんなのとかも。

    class Foo {
    public:
        char* p;
        void set_str(char* s) { strcpy(p, s); }
    ...

    いずれも自称 C++ マスターさんの書かれたコードでしたが、何をどんな風にマスターしたのやら……。

typodupeerror

アレゲはアレゲ以上のなにものでもなさげ -- アレゲ研究家

読み込み中...