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

大規模なソースコード、何万行までいじれますか? 165

ストーリー by yoosee
言語やコードの種類にもよりますけどね 部門より

Kachi曰く、"サンのWebページ「Sun&Users」に筑波大学の加藤和彦教授のインタビューが掲載されている。この中で、『数は少ないんですけれど、大規模なソフトウェアを我々の想像を超えていじっちゃう人たちが現れてます。(中略)…昔よりも、ソフトの生産性は上がっているんですね。(中略)…最近の若い人の非常に生産性の高い人は、1万行なんて割と軽々越えるんですね。1万行、3万行は、全然苦にしない。10万行でも苦にしない。』と発言している。

さて、あなたは、どのくらいのソースコードに立ち向かうことができるだろうか。ちなみに投稿者は、アマチュアなので万年Hello worldどまり。"

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 苦行 (スコア:5, おもしろおかしい)

    by virtual (15806) on 2006年07月10日 12時54分 (#975545)
    >1万行、3万行は、全然苦にしない。
    >10万行でも苦にしない。

    苦行に耐える現代の行者ですね。 頑張って徳を積んで下さい。
  • by Kachi (6876) on 2006年07月10日 13時55分 (#975582)

    インタビューを読んでもらうと分かりますが、まずUNIXを自分たちでいじっていた話が出てきます。「UNIXバージョン6のソースコードって1万行だったんです。当時、だいたい人間が理解できるソースコードの限界は1万行だよ、と言われていた訳です。 BSDの場合は、1万行を越えてコアの部分で3万行ぐらいで、周りまで入れると10万行位になりますから、あれはもう、いじる限界を越えちゃってていじれないと取られられていたんですね。」

    もうひとつは、現在取り組んでいる開発プロジェクトのこと。CRESTプロジェクトで、仮想マシンを利用して、障害があっても自力で生き延びるソフトウェア環境を作ろうとしていたり。こちらでも仮想マシンを利用して、Winnyなんかでへこたれないソフトウェア環境をしていたり。

    で、単に時間をかければコーディングできるかということではなく、ソフトウェアの生産性が20年前から10倍になっているかという話なのです。

  • 軽々一万行 (スコア:5, 興味深い)

    by bee (10028) on 2006年07月10日 14時26分 (#975600) ホームページ 日記

    DF [nifty.com]程度のプログラムでもソースは21,229行もありますが把握できないという訳ではありません。全体の行数はあまり関係が無くて、分割統治ができているかどうかが肝で、十万行の塊ひとつだと厳しくても、一万行の塊が十個になっていればたいしたことはないように思えます。

    他人の書いた一万行よりも自分で書いた十万行の方がわかりやすいというのもあるので解らないものを苦労して読解するよりも「自分で書いてしまう」というのも選択肢としてはありですよね。

  • 行だけで言われても (スコア:4, すばらしい洞察)

    by Anonymous Coward on 2006年07月10日 13時02分 (#975547)
    100行程度の関数が1000個とか、1万行の関数が10個とか、その辺も出してもらわないと。

    10万行の関数がひとつなのかしらん。
  • 仕様上 (スコア:4, おもしろおかしい)

    by Anonymous Coward on 2006年07月10日 13時42分 (#975570)
    65536行までです。
  • やっぱり (スコア:3, おもしろおかしい)

    by Anonymous Coward on 2006年07月10日 12時44分 (#975537)
    一画面 25行までですよ

    一応印刷して1ページの66行までは対応可
  • 行数と生産性の関係 (スコア:3, すばらしい洞察)

    by Chiether (20555) <spamhere@chiether.net> on 2006年07月10日 12時45分 (#975538) 日記
    >最近の若い人の非常に生産性の高い人は、
    >1万行なんて割と軽々越えるんですね。
    >1万行、3万行は、全然苦にしない。10万行でも苦にしない

    肝心の時間(工数)が抜けているので何ともいえない。
    生産性 = 作業量(ここでは行数) / 時間

    --
    ==========================================
    投稿処理前プレビュー確認後書込処理検証処理前反映可否確認処理後……
    • Re:行数と生産性の関係 (スコア:3, おもしろおかしい)

      by Anonymous Coward on 2006年07月10日 12時49分 (#975540)
      学生なので時間は →∞ で。

      # はっ、生産性が0にっ
      親コメント
    • by Anonymous Coward on 2006年07月10日 13時13分 (#975557)
      一人で十万行のコードを扱えることを、奴は生産性が高いと言ってるだけ。一万行ずつドキュメントに記録しないと扱えない人より、生産性はそりゃ桁違いに高いでしょう。
      つまり、労働集約的な生産性と知識集約的な生産性の違いで、労働集約の世界の比較じゃありませぬ。

      たしか『ハッカーと画家』に、普通の人が10個程度のことしか記憶しておけないのに、凄腕のハッカーは百くらい記憶できるとかいう話があったけど、それと同じような話かと。
      親コメント
      •  いまのコードは読みやすいけど冗長だよね。だから同じことを記述しても昔よりも行数が増える傾向にあるかも。コメントもたくさん入ってるし。

         昔のコードで何万行っていうと、そりゃあ辟易だ。
        親コメント
        • by imasyu123 (24336) on 2006年07月10日 15時57分 (#975645)
          >いまのコードは読みやすいけど冗長だよね。だから同じことを記述しても昔よりも行数が増える傾向にあるかも。コメントもたくさん入ってるし。
          それは可読性向上のためでしょう。
          明らかに異常に長い関数等であれば問題かもしれませんが、
          可読性が高いのであればそう行数増えても苦にもならないのでは。
          また、最近では最早オブジェクトで組むのがほぼ当然となってきていますし、(勿論適さない場合もありますが)
          そうなると1度に見る部分は極めて限られますから結果的に何十万行でも問題ないと思います。

          最早行数でプログラムを推し量る時代ではないのかもしれないと思います。
          親コメント
        • Re:行数と生産性の関係 (スコア:2, おもしろおかしい)

          by Anonymous Coward on 2006年07月10日 16時49分 (#975670)
          > コメントもたくさん入ってるし。
          コメントをステップ数に数えてはいけません!

          あ、ステップ数じゃなくて行数の話題か。
          失礼しました。

          -----
          しょうもないコメントなのでAC
          親コメント
  • by Anonymous Coward on 2006年07月10日 12時51分 (#975543)
    VisualStdio2005だとクラス名を変更したとき,他のソースコードに反映されます。
    あとクラスビューはクラスの関係を一目でわかるように出来ているし,クラスやソースの管理は楽です。

    こういう環境が出来てきたから大き目のソースでも扱えるようになったかな,と感じています。
  • 行数という計算 (スコア:3, 参考になる)

    by btm (7635) on 2006年07月10日 13時04分 (#975550) ホームページ 日記
    僕が最初のバイトで扱ったコードはVBでたしか1万行以上はありました。VBを勉強しつついじっていったのですが、退職するまでの半年間でだいたいなにがどうなってるのかぐらいは把握できていました。
    ただ、同じような処理が結構あったりしていたので、うまくやれば結構減らせたのかなってのはずいぶんありましたね。
    # VBでXULランタイムもどきを作って突っ込んだりしていて、余計行数は増えてたのはノーカウントでお願いします(謎

    なので、行数がどれだけあるとすごいってよりは、そこからどれだけ無駄を省くかって方がよっぽどすごいなぁと思います。
    自分なんて、一つのクラスで5000行以上なんての書いた事ありますもん...orz

    ちなみに、VBでの1万行とC++での1000行では、前者の方がわかりやすいと思います。そういうのも比べないとあまり意味がないかなぁと思います。
    --
    三日風呂に入らなかったら、あなたはすめるまんです。
    • by Anonymous Coward on 2006年07月10日 13時45分 (#975574)
      行数は複雑さを測る指標としては不十分です。

      1万行以上のコードなら扱ったことは何度かあるけど、
      綺麗なコードなら10万行でも平気。
      スパゲティプログラムなら1千行でも拷問。

      さらにそういうコードだと変数名も関数名も意味
      不明だったり、コメントさえもなかったりする。

      >VBでの1万行とC++での1000行では、前者の方がわかりやすいと思います。
      CのマクロやC++の演算子オーバーロードを乱用したコードは
      最悪ですね。Perlあたりで行数を減らすためにハックした
      コードなら、おそらくそれ以上になります。Javaは分かり
      やすい方だけど、それでもUML屋さんが『設計』すると
      スパゲティ=継承プログラムのために解読不能になって、
      プロジェクトが破綻したことがあります。
      親コメント
      • by QwertyZZZ (8195) on 2006年07月10日 14時59分 (#975612) 日記
        結局、キレイに纏まっているソースだとぱっと見で、

        「ここは関係ない」

        って解るからね。

        そうなっていると、あとは必要部分を負えば良いだけなんで、実質的に見なければいけない行が激減するんですよね。

        #かといって乱雑なソースを一概にそれを非難すると、実は自分のものだったりする事も。

        後は、やっぱ「俺仕様」的に変にこだわりを持ったのも読み辛かったりする事がありますので、自分では気を付けているつもりです・・・が、俺仕様ってのは当然自分では「正しい」と判断されるものですから、ちとむずいかも。

        親コメント
      • by T_KATA (28061) on 2006年07月10日 15時08分 (#975615)
        >> 変数名も関数名も意味不明
        つい最近、他の人の作ったものを改造するために見たVBのソース。
        「どこどこをなになにする。正常終了0異常終了1(引数1,・・・)」
         という漢字かな混じり関数(or変数)で満ちあふれていました。

         最初は「なんか読みにくいコメントだなぁ」と思ったんですが、コメントじゃなかったんですねぇ。

         これぞ本当の日本語BASICだと感心しましたが、ソフト担当の人に「頑張ってね」としか言えませんでした。
         ソフト屋じゃなくてよかった。
        親コメント
  • by Anonymous Coward on 2006年07月10日 13時07分 (#975552)

    最近の若い人の非常に生産性の高い人は、1万行なんて割と軽々越えるんですね。1万行、3万行は、全然苦にしない。10万行でも苦にしない。10万行のソースコードをいじったり、あるいはソフトイーサで有名になった登君いった人になると自分書いてしまいます。

    タレコミの引用している前後はこう。だから「書く人もいるし、数万行のコードを『いじる(編集する)』」って意味。

    #先週書いたソースコード約5500行
    ##うち「}」だけの行約400行
    • 「昔に比べると現代のプログラムはモジュールの独立性が高いため、いじりたい部分を簡単に特定して、ちゃちゃっと変更することが可能になっている」
      って言ってるようにも読めますよね。

      ちなみに私の手元で保守ってるプログラムは、総行数11万行です。
      WEBベースのプログラムで、JSP内の行数は数えないでこれだけになります。
      ちなみに、もともと16万行だったのを、二ヶ月かけて全体的に見直して減らした結果の行数でもあります。
      その対象プログラムで扱っているものの複雑度合いにだいぶよりますけど、一般的なプログラムを「弄る」程度ならば、10万超えててもあまり苦にはならないとおもうのですが、いかがでしょう。

      そりゃ…「よくわからないグローバル変数が多用されている」、10万行を超えるコードは、いじることすら困難でしょうが。
      親コメント
  • 「いじる」と「書く」 (スコア:3, すばらしい洞察)

    by Anonymous Coward on 2006年07月10日 13時08分 (#975553)
    数万行のソースをいじるのと、
    数万行のソースを書くのでは話が違う。

    いじるのに生産性は関係ないんじゃないかなー。

    • by Anonymous Coward on 2006年07月10日 13時20分 (#975562)
      ソースをすべて理解してハックしようとすると、
      かなりの労力を必要とします。
      その労力をどれだけ減らせるか、という意味では、
      生産性は大いに関係あると思います。
      元のソースを書いたのが自分であれ、他人であれ、必ずついて回る話です。
      # 明日の自分は他人とも言う。

      「いじる」が示すものがどの程度のハックなのかは分かりませんが、
      加藤先生が言うくらいですから、
      低いレイヤーまで網羅した高度なものなんでしょう。
      親コメント
  • Lions Commentary (スコア:3, 参考になる)

    by Anonymous Coward on 2006年07月10日 14時10分 (#975593)
    Lions Commentaryには、個人が把握できるのは1万行くらいまでだ、
    という話が載ってますね。インタビュー記事にUnixバージョン6が
    1万行とかの話が出てくるのは、まさしくその話だと思います。
  • by snurf-kim (10835) on 2006年07月10日 16時24分 (#975661) 日記
    「エンバグした時ってorzってなりますよね。トレースの末に出会うのは冗長なソースコード。だからそのコードを宝物(コメントアウト)にしてとっておきたくなるんですよね」
    「恥ずかしいコード禁止」
    「えぇーっ」
  • 千行/日 (スコア:2, 参考になる)

    by Anonymous Coward on 2006年07月10日 12時51分 (#975542)
    10万行を生成するとして、それに100日掛けるとすると1000行/日。
    1日あたり10時間だと1時間あたり100行です。一見、多いように見えてそこそこな数字です。
    あとは自動化ツールが手元にあれば1000行/日というラインはそれなりに楽に越えられることが可能でしょう。

    まあこのインタビューの趣旨は単に作業量を分かりやすい単位で示しただけなので、
    実際の行数換算はあまり意味が無いですけどね。最終的な生成量というよりは、
    作業量としての行数換算として考えた方が望ましいかもしれません。
    • Re:千行/日 (スコア:2, 参考になる)

      by juliey (23952) <reversethis-{moc.liamg} {ta} {amijayt}> on 2006年07月10日 13時58分 (#975584)
      コーディング速度というのは級数的に増大するので、10kくらいまでは2~3日かと。
      10k超えるとサチって、逆に全体の行数が減ったり、ソースを捨てたりする向きになるかと。(このへんはコーディングスタイルの話か
      でも、10k位って普通では?
      #1関数15000行超のアプレットとか、見たことはあるけど、逆に単純なつくり。触る時の間違い確率が大きくなるだけですね。
      親コメント
      • Re:千行/日 (スコア:2, 参考になる)

        by Anonymous Coward on 2006年07月10日 16時21分 (#975659)
        えー?
        1日1000行はなんとか可能なラインですが、それを毎日続けるのは、 ソースコードジェネレータで作ったソースとか、コピペの嵐とかで ない限り無理では?

        コピペの嵐ではなく、共通処理を適宜くくりりだした、それなりの 品質を保ったコードを書こうとすると、1ヶ月で1万行、1ヶ月の労働日を 20日として、1日あたり平均500行ぐらいが限界でしょう。
        3日で1万行はありえないペースだと思います。

        さらに、この1日平均500行というのは、相当に生産性の高い人の値で あって、すべての人で平均をとると、もっとはるかに下になります。
        たとえば東洋大学の野中先生の資料 [toyo.ac.jp] によると、 中央値は 469行/月 とありますから、一日あたりだと 20数行程度にしかなり ません。ただし、コーディングだけはなく、設計やテストなど全フェーズを 平均した値ですが。

        もちろん、コピペの嵐で作れば、1月数万行書くのも簡単ですが、そうすると 保守の段階になって最悪の事態になります。

        親コメント
  • by Anonymous Coward on 2006年07月10日 13時02分 (#975548)
    1000行でギブアップしました。
    正確には1000行のソースコードではなく1000行の関数ですが。

    自分には伝説のネバー・エンディング・ファンクションを見た思いでしたが、
    見る人が見ればまだまだ甘っちょろかったのかな。
  • doxygen (スコア:2, 興味深い)

    by Anonymous Coward on 2006年07月10日 13時10分 (#975555)
    最近は、doxygen とか使っちゃうから規模が多少
    大きくても全然気にならない。

    だけど、超巨大なプロジェクトに限って、doxygen が
    エラーで止まってしまうのが困りものです。
    • by uxi (5376) on 2006年07月10日 19時18分 (#975727)
      このノード以外見当らないんで、、、(- -;;;)

      まぁ、知ってる人も多いとは思うけど、
      GNU GLOBAL [tamacom.com]、gonzui [sourceforge.net] 、koders [koders.com]等
      を挙げておきます。

      ソースコードブラウザあれば、
      マウスでサクサクリンク到ってくだけで、
      簡単に処理の流れ追っ掛けられるので、
      他人のコードの読解が非常に楽になります。
      未体験の人は、是非試してみるべきです。

      とは言え、適切なモジュール化とコメント付けは必要ですが、、、
      条件次第では、
      数万行程度ならばあまり苦痛ではないんじゃないでしょうか?
      --
      uxi
      親コメント
  • 行数自慢されても… (スコア:2, すばらしい洞察)

    by Anonymous Coward on 2006年07月10日 13時54分 (#975578)
    個人的には同じ挙動をするプログラムなら行数が少ない方を書いた人の方が優秀だと思います。
    もちろん程度によるけど。
  • by newotani (22623) on 2006年07月10日 14時06分 (#975591) 日記
    5000行のグローバル変数(コメントほとんど無し)を持つVBのシステムいじった時は、泣きそうになった。
    ってか、本当に泣いた。

    私「いじったときの影響度とかどうやって判断してるんですか?」
    リーダー「テストでカバー」

    その仕事が原因でITから足を洗いました。
    --
    **やっぱりITやるか。しょうがない。**
    • by snurf-kim (10835) on 2006年07月10日 17時21分 (#975679) 日記
      >5000行のグローバル変数(コメントほとんど無し)を持つVBのシステムいじった時は、泣きそうになった。
      >ってか、本当に泣いた。

      そこまで酷くはないけどあったなあ。
      とある用件でC++Builderのプログラムを引き継いだのですが、作った人がVBでしかプログラムを作ったことがなかったらしく、BASICくさいコードにグローバル変数の嵐!嵐!我が名は嵐!変数なんじゃこりゃ嵐!検算!でした。
      しかも未完成でバグだらけ。開発途中でスキルが追いつかなくなってこちらに丸投げしたってのが見え見えでした。
      なんと関数がことごとくグローバル変数を参照していて引数なし。戻り値なし。い、いやな予感・・・い、いた、やっぱりいたよgoto! gotoが1個あったら20個あると思えーっ、なコードでございました。

      思わずSEに「・・・これ、一から作り直していいですか? きっとそっちの方が早いです・・・」って泣き入れましたよ。
      結局画面周りだけ流用してソースはほぼ全書き換えしました・・・。
      親コメント
  •  今、12万行ほどのソースを看取っているところです。
    でも、一日あたり何行書いたとか、何万行なら把握できるとかいう議論はあきました。
     そこで、「あなたは一行にどのくらいの時間をかけたことがありますか。」
    と問いましょう。
    分母の"一行"にそれほど深い意味はありません。10行でも千行でも多分同じ。

    ちなみに私はある一行に、一ヶ月を費やしました。
    それは私の無能の証。でも私の生涯で最良のコード。
typodupeerror

日本発のオープンソースソフトウェアは42件 -- ある官僚

読み込み中...