パスワードを忘れた? アカウント作成
13300 story
プログラミング

おすすめのソースは? 122

ストーリー by GetSet
ブルドックのトンカツ用(マテ 部門より

crypt曰く、"勉強、あるいは趣味として他人のソースコードを読む、ということで盛り上がりたいとおもいます。皆さんおすすめのソースコードを教えてください。わかりやすい良いコード、わかりにくいけど良いコード、こういうコード書いちゃいけませんみたいなコード、など。

楽しみ?な例としては難解Cプログラミングコンテストこんなコードとか。(古い言語仕様なのでgccの場合は

gcc -E -traditional westley.c > westley2.c
gcc westley2.c
みたいにコンパイルしてください)"
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by TakashiWaka (8033) on 2006年09月03日 16時42分 (#1010959)
    半年ぐらい前の自分のソースコードを見るのがお勧めです。
    人によっては一ヶ月ぐらい前でもいけるかも。

    昔書いたソースコードは、今のあなたにとっては既に他人のソースコードです。

    素晴らしい反面教師になってくれることでしょう。

    • by snurf-kim (10835) on 2006年09月03日 17時18分 (#1010974) 日記
      >昔書いたソースコードは、今のあなたにとっては既に他人のソースコードです。

      「すげえ。俺ってこんな高度なコード書けてたんだ・・・・・・・・・orz」

      と衝撃を受け自信を無くす展開に。
      親コメント
      • by Anonymous Coward on 2006年09月03日 20時22分 (#1011039)
        > 高度なコード

        ダジャレのつもりだったら山田君に座布団全部取り上げてもらうからな。
        親コメント
      • 「高度」とゆうよりも、
        過去の自分の地道なコーディングに、
        「面倒くさくて、読めねぇ」と思ってしまうことが
        しばしば、有ったり、無かったり。
        親コメント
      • >「すげえ。俺ってこんな高度なコード書けてたんだ・・・・・・・・・orz」
        >と衝撃を受け自信を無くす展開に。

        (゚Д゚)∩同じ感想です!
        自信無くすとともに、
        「俺にはこんな力が眠っているんだ」
        と前向きに捉えてみます orz

        # こんな力は永眠されました
        親コメント
        • by Anonymous Coward on 2006年09月03日 20時58分 (#1011048)
          3~4年前のコードを参考にしていて、

          「お、いいコードだ。書いたやつは賢いな。」等とのたまっていたら、
          cvsのコミット履歴から自分の名前が出てきて、
          部下に白い目で見られてしまいました。

          # もう書けないよ(ノД`)。:*
          親コメント
    • by Anonymous Coward on 2006年09月03日 16時56分 (#1010965)
      確かに人による、と思います。
      ワタクシ、半年前どころか、3年前とか10年前に書いた
      コード(C89のC)でも、解読に困ったことがありません。

      自分の昔のソースは判らん、とはよく聞く話なんですが、
      皆さん本当にそういう経験が多々あるのでしょうか?
      親コメント
      • by kusanagi (3927) on 2006年09月03日 18時28分 (#1011001)
        >自分の昔のソースは判らん、とはよく聞く話なんですが、
        >皆さん本当にそういう経験が多々あるのでしょうか?

        一番最初のコメントにありますが
        「反面教師」として、ではないでしょうか。
        逆に昔のソースと同じレベルだと自分の進化がないわけで。

        自分が一番参考にするのはライブラリソースかな。
        STLとかboostとか見ていると目から鱗です。
        つーか、よく考えてあるなーと。
        --
        kusanagi shin
        親コメント
      • ここ数日まさに
        > 自分の昔のソースは判らん
        状態でした。
        # というかコーディングからしばらく離れていた療養中のID
        --
        ... from rakehelly programmer.
        親コメント
      • by Anonymous Coward on 2006年09月03日 18時15分 (#1010999)
        判らんというか、人に歴史ありで、
        ハンガリアン記法なものだったり、constractor() って関数が出てきたり ...
        今は郷に入りては で、Linux 風な感じかな。

        若い頃は、どこか自己主張臭のあるスタイルだったが、今は誰が書いたかわからんような感じになったなぁ。

        親コメント
      • 私の場合は、言語が違うので、昔のコードは読めません。(GCCだったり、VBだったり、TurboPascalだったり、 N88 BASICだったり、F-BASICだったり、FORTRAN 77だったり・・・文法も忘れてるし)

        PC9801が修理不能になったということで、一昨年、20年前にTurbo Pascalで書いたコードを、VBに移植する羽目になりましたが、コードの動作が読み切れず、大半は、そのまま移さずに、procedureの動作を記したコメントをもとに新たにコードを起こしました。ところが、それでうまくいかずに、コメントを無視してコードの方をまるうつししたら動きました。そういえば、現地でいわれて仕様を変えたようなかえなかったような・・・
        親コメント
    • 入社したての頃のソースを見たら、

      //DEL YYYY/MM/DD XXXX START
      /*



      */
      //DEL YYYY/MM/DD XXXX END

      で囲まれてて、スイミングアイ・・・

      --
      ---- I don't Know What You Say !!
            (意味わかんねぇ!!)
      親コメント
  • おすすめコード (スコア:5, 参考になる)

    by Sakura Avalon (12557) on 2006年09月03日 17時36分 (#1010984)
    良いというのがメンテ性を意味するかあたりでもかなり違って来るとは思うのですが、読みにくいけど凄く意味のあるコードでしたらPerl 7行でCSS解除 [cmu.edu]」とかがありますね。もちろんオリジナルのDeCSSが存在する事が前提とはいえ、わずか526文字に記号化(集約)された事でDeCSSを「怪しい挙動をするクラッキングソフト」から「単純動作しかやってないユーティリティソフト」へと世間のイメージを変えたように思っています。しかしたったそれだけの事とはいえ、それによって利便性においてはDVD世界を変えたと言っても過言ではないでしょう。自分が買ったDVDがPSPで見られてるのも、たくさんのメディアをHDDにまとめられるようになったのも、そしてどんなプラットフォームでも見られるようになったのもDeCSS(と7行のPerlコード)のおかげ。もちろん違法コピーが起きて商業的に損をした(うまく儲け損ねた)というのは一部にあるでしょうが、ではそれによってDVDは衰退の一途をたどって業者は潰れまくり市場は完全に崩壊したかと言われると…むしろ逆になっている気がしますし。

    #あと、技術的にというかマニアックに「凄っ!」と思ったのはPerl 2行でRSA暗号 [std.com]」あたり。
  • 2chですが (スコア:4, 参考になる)

    by greentea (17971) on 2006年09月03日 19時13分 (#1011012) 日記
    --
    1を聞いて0を知れ!
  • お約束 (スコア:3, おもしろおかしい)

    by Anonymous Coward on 2006年09月03日 16時25分 (#1010949)
    おたふくソース [otafuku.co.jp]
  • by Anonymous Coward on 2006年09月03日 16時47分 (#1010960)
    勉強のために読む。っていうんじゃモチベーションが保てないからね。
  • by j3259 (7093) on 2006年09月03日 17時49分 (#1010990) ホームページ 日記
    > わかりやすい良いコード、わかりにくいけど良いコード、こういうコード書いちゃいけませんみたいなコード、など。

    「こういうコードを書いちゃいけません」ってのを習えるのはリファクタリング* [amazon.co.jp]の第三章「コードの不吉な匂い」を読むのが早いと思います。(Amazonで目次が読めます)
    全てのプログラマが読むべき本だけど、ほとんどの人は読んでないと思うので、読んでしまった人は他人のコードの汚さに耐えながら生きていかなければいけない十字架を背負う事になります。

    「わかりにくいけど良いコード」を書けたり分かったりするのに役立つかもしれないのはデザインパターン入門 [amazon.co.jp]やHead Firstデザインパターン* [amazon.co.jp]です。読むとパターンを使って自称エレガントなコードを書きたくなってしまいます。自分だけのためのコードならそれで結構。だけどカプセル化って言葉は聞いたことがあっても体得してない他人と共有してるコードの場合は「わかりにくいけど」ってのが仇となって意味不明なコードを書いてると嫌がられてしまいます。

    *) 原書しか読んでないので訳の出来は知りません

  • ソースよりデータ読め (スコア:3, すばらしい洞察)

    by junnohta (10945) on 2006年09月04日 1時45分 (#1011169)
    ロジックをどう組むかは多くの人の興味の対象となるところだけど、
    データをどう構成するかはその重要度にくらべて低く見積もられすぎてる
    ような気がします。

    世の中のプログラムのかなりを占めているのが情報を再利用可能な形で
    保存して、あとからそれを効率よく読み出すたぐいのもの。それらを
    どう実現するのが効率よくメンテしやすいかを学ぶのはプログラミング
    技術向上のかなりの早道ではないかと思うのです。

    さまざまなファイルフォーマットに着目して、どうしてそのフォーマットが
    採用されるに至ったかを考え、それをどう扱うのがロジックとして適切かを
    いろいろ考えてみるのは楽しくもあり、勉強にもなります。

    データ構造として人間が読んで理解できることが目的のものならたとえば
    HTML。パーザやレンダラを読み合わせれば、機械が処理しやすいことと
    人間が読みやすいことにどう折り合いをつけるかという妥協点の選択が
    過去どのように行われてきたかを読み取れそうです。計算機言語のパーザ
    なども表現能力と処理効率のせめぎあいを見てとれて楽しめますね。

    読み書き両方の自由度と性能を考えるなら、おすすめなのはデータベース。
    検索と更新の性能バランスをどうとるかで設計が大幅に違ってきますし、
    ワーストケースを救済したいのか平均処理速度を上げたいのかでもまた
    違ってくるわけです。そのバランスをとるために読み書きを行うコードの
    どの部分に負担がかかっているのかをソースコードを見て調べると、自分が
    その手の(もっと単純なものであっても)プログラムを書くときの道しるべに
    なります。

    広い意味では、というかここでの観点からは、たとえばファイルシステムや
    日本語入力プログラムの辞書や学習ファイルなどもデータベースの一種です。
    辞書ソフトの辞書データなどはリードオンリーのデータベースであり、作成の
    コストを度外視して検索とスペース効率を上げることが設計目標となります。
    その意味ではデータ圧縮も重要なファクターのひとつ。

    このようなデータをソースコードなしに解析し、それを処理するコードを
    自分で再構成してみるというのも、パズルのようなもので、プログラミングの
    技量向上というかタフさを身につけるうえで非常に役立ちます。
  • codezine (スコア:2, 参考になる)

    by Anonymous Coward on 2006年09月03日 16時47分 (#1010961)
    これから? http://codezine.jp/ [codezine.jp]
  • by Anonymous Coward on 2006年09月03日 16時50分 (#1010963)
    これ [ioccc.org]とかこれ [ioccc.org]なんかはAAとしてもいけるんじゃないかと。
    # ある意味芸術性があるかも…

    まぁトンカツソース程度の用途しかないわけですが
  • by inu (4662) on 2006年09月03日 17時29分 (#1010982) ホームページ 日記
    そらもう、Cプログラミング診断室 [pro.or.jp]かと。

    良いプログラミングのために、悪い例を読んで損はないかと。
  • FindBugs (スコア:2, 興味深い)

    by gonta (11642) on 2006年09月03日 19時46分 (#1011028) 日記
    Javaなんですが、FindBugsを利用しています。自分自身、今一「しっかりした」プログラムが書けないな(=初心者に毛が生えた程度)と思っていました。FindBugsでは、「ふつうやらんよ」という警告を出してくれるので、警告の意味を理解しながら修正しています。鵜呑みはいけないのかもしれませんが、今は任せています。
    --
    -- gonta --
    "May Macintosh be with you"
  • by Anonymous Coward on 2006年09月03日 21時51分 (#1011070)
    一番見難いコードは間違いなくこれ [dur.ac.uk]なんではないだろうか。

    知らない人は、こちら [wikipedia.org]まで。こっちから見ると面白さが半減します。
  • by Anonymous Coward on 2006年09月04日 0時26分 (#1011141)
    「どんなに改修しても品質が向上しないんだ。助けてくれ!」と、日本中(本州限定だが)から声がかかる。

    そんな仕事を15年以上やってたから、どんなソースでも読める。

    ただこれにはトリックがあって、以下の2点の作業を行う必要がある。
    1.コメント文の削除
    2.インデントツールでK&Rスタイルに整形

    1は、ダメプログラムのコメント文は、往々にして「邪魔なだけ」だから削る。
    2は、自分のコーディングスタイルに近いから読みやすくなるというだけの理由。

    そんな仕事の最盛期は、ソース見ただけでコード書いた人の性格とか判るという特殊能力が身についていた。
    (この「性格判断」が、バグ特定にも役に立っていた)

    最近はC言語だけでなく、VB6やWebアプリ(ASP)でも同じような仕事が来るようになってしまった。
  • by elfsky (19115) on 2006年09月04日 9時06分 (#1011205) 日記
    以前、下請けのソフトハウスが作ったプログラムが不具合を発生させたため、緊急の修正にかり出されたのですが、

    変数名がすべて女性名

    だったのに泣けたorz

    読みにくさ満点だったのですが。

    keiko = kyouko + seiko;
  • by tockri (27596) on 2006年09月04日 9時32分 (#1011216) ホームページ 日記
    Javaを書く人はとりあえずsunのJDKのソース(一般公開されてる部分だけでも)が参考になると思います。
    swingとかawtとかはComposerやDecoratorパターン、java.beansはリフレクションやEventパターン、rmiはfactoryとかbuilderパターンの、それぞれ教科書的かつ実際に役立っている好例だと思います。
    ちゃんとコーディング標準にも則っているし、自分が使う部分の公開ソースはまず読んでみると良いのでは。
  • by miwachan (28319) on 2006年09月04日 13時09分 (#1011320) ホームページ
    BASICの「一行コンテスト」をやっていましたね。
    ゲームから円周率計算まで、とにかくBASICの一行(255文字)に収まるプログラムで、トリッキーなことこの上なくて、読んで楽しめました。「一行の中にニーモニックを埋め込んで、それを実行する」なんてのもアリだったような。
    プログラミングでメシを食う人にとっては、
    「あんまりお手本にしないほうがいいソースコードの展覧会」
    であったかもしれませんけどね。
  • by Ragen (11294) on 2006年09月03日 17時00分 (#1010967) 日記
    Code Reading [amazon.co.jp]
  • by Anonymous Coward on 2006年09月03日 17時44分 (#1010988)

    効率良くソースを読む、効率良く勉強する方法というのは、どこかで研究などされていないのですかね。
    言語習得は、プロのプログラマでない僕にとって、あまりに非効率で、学習コストがかかりすぎるもので。

    とりあえず、知っているもので、
    ひらメソッド [hira.main.jp]

  • とか立場的に言ってみるテスト。
    なんでもそうなんですが、ポイントつかむとサクッと読めますよ。
typodupeerror

身近な人の偉大さは半減する -- あるアレゲ人

読み込み中...