ページ内ジャンプ:

アレゲなニュースと雑談サイト

makeplexによる 2009年09月17日 3時36分の掲載
自己研鑽は欠かさずに部門より。

あるAnonymous Coward 曰く、

奈良先端科学技術大学院大学の森崎助教らによると、ソースコードの読解力は個人差が大きく、実験では同じソースコードを理解するための時間に6倍もの差があることが確認できているそうだ(「2,000行のJavaソースコードを読むのに何分かかりますか?」)。

といっても、自分の「ソースコード読解速度」が速いのかそれとも遅いのか、なかなか立ち位置を知るのは難しい。そこで森崎助教らは、研究の一環としてオンラインでのソースコード読解ハンズオンを公開した。これにより自分のソースコード読解能力が他人と比べてどの程度なのかをチェックできるとのこと。また、集計されたデータは個人情報を除去した上で公開されるほか、ソースコードの差分(パッチ)とその理解に必要な時間(コスト)との関係を明らかにする研究の題材にもなるそうだ。

表示オプション しきい値:
  • コード読解力 (スコア:5, おもしろおかしい)

    Anonymous Coward : 2009年09月17日 10時45分 (#1640899)

    職場に異様にコード読解力の高い人がいます。

    どんなに絡みあった電源コードやLANコードもあっという間に解いてしまいます。

    #えっ違う?

  • 1げっと (スコア:3, 興味深い)

    Anonymous Coward : 2009年09月17日 5時05分 (#1640842)
    コードを読むのが速い人を見ていると、流し読みですませるところを見切るのが上手い
    逆に同じところを何度も何度も見ていることもあるが、大事な箇所だったんだろう

    あと目をひいたのは、ファイルを先頭から最後まで(読まないなりも)目を通していたところかな
    • Anonymous Coward : 2009年09月17日 10時15分 (#1640891)
      このお話、演奏者が楽譜を読むときの所作とそっくりですね。
      定型的なパッセージは詳しく読まなくても弾けますが、個性的な部分や技術的に難しい部分には、自然に目がとまります。
      そのような読み方ができるかどうかも、演奏技量に依るところが大きいということも。
  • たとえば自然言語だと…

    先日読んだの『若き魔道士』by 菊池秀行 の場合、読み終わるのに3時間でした。
    しかし、ほぼ同じ分量のはずの『思考の整理学』by 外山滋比古 の場合、3日かかっています。

    もちろん、菊池秀行の文章の方が、内容は少なく、読みやすさ最優先で書かれている、というのもありますが、それでも8倍強の違いが、同じ人が違う内容を読んだ場合でも発生するわけです。

    .

    プログラミング言語だって同様ではないでしょう。

    • 書かれている内容そのものの難易度
    • 書き方のスムーズさとスマートさ (スムーズな書かれ方は読みやすいが量が増えがちである。スマートな書き方は分量は少なくなるが、そのコードを実行すると何が起こるのか想像がつくまでに時間がかかる
    • インデントやコメントなど、付随情報の正しさ・詳細さ

    という3つがそろってなお、読む人の読解力が問われる。読解力も、

    • コードを追う速度(パースする速度。Cが得意な人でも lisp は苦手だろう、とかね)
    • コードを解読する速度
    • コードが使っているライブラリ等に対する知識

    などが互いに絡んで速度を決めるはずで、一朝一夕には定まらないでしょうし、本当の差は6倍ではすまないのではないか、と。

    .

    さらに、周囲のコードから何をしているのか判った場合、汚いので、もう読む気がしない。書き直したほうが速い と、そこまでで受け取りを拒否する確率も、速く・正しくコードを書ける人ほど高そうです。そういう人の読解速度は鍛えられることなく、遅いままじゃないか…という気もします。

    --
    fjの教祖様
  • あるべき論 (スコア:2, 興味深い)

    Anonymous Coward : 2009年09月17日 5時01分 (#1640841)
    そもそも読解力が議論されるという時点でその言語は問題が無いか?という疑問が一つ。
    平易なものであるなら利用者の問題に帰結するのは仕方ないが、言語自身の難解さが
    読解力に多大な影響を及ぼしている場合は、言語もしくは開発環境自身の改善が必要。
    難しくしている代物をわざわざ人間が解きながら読み進めるのは本末転倒と言えるだろうし。

    と、言いたくなる程、プログラミング言語自身の難解度は上がってると思うんだ。
    パターンが複雑になっているにも関わらず、相変わらず1次元的に上から下に書いていく
    エディタを使ってソースを書いていかなきゃならないのはもう止めにしたいものじゃないか?

    GUIエディタはパーツを置いていく二次元化が進んでいるけど、ソースの二次元化は
    まだまだ未熟だと思うし。

    #ここで言う「次元」はあくまで記述の流れと空間の使い方を主眼に置いた時のもの。
    #ソースコードって上から下に流れる様に書くけど、GUIエディタみたいに行を意識しない
    #書き方ってしないじゃない、という意味で。

    つまり、そういう書き方ってオブジェクト指向の言語にはたしてマッチしているのだろうか?とね。
    根本的な記述方法が難解さを増しているならそれは人間の読解力に起因するものじゃなく、
    言語やその記述方法の問題だと思うんだ。

    #ま、今はそれを使わなきゃならないから、しょうがないけどさ。
    #と書いてみる。
    • Re:あるべき論 (スコア:4, おもしろおかしい)

      iwakuralain (33086) : 2009年09月17日 9時06分 (#1640868)

      > 上から下へ書いて

      そんなときこそgoto文ですよ
      えっ?違うって・・・

    • TarZ (28055) : 2009年09月17日 11時12分 (#1640906) 日記

      えー。こんなのがいいんですかあ。>ソースの二次元化

      Rail : Hello, world! [voxelperfect.net]

      # よーし、パパこれでほんとのスパゲッティコード書いちゃうぞう。

    • Re:あるべき論 (スコア:2, すばらしい洞察)

      FragileMoon (16188) : 2009年09月17日 8時36分 (#1640861) 日記

      2次元的に扱うようになったのがそもそも読解の難解度を上げた原因じゃないのかな。

      いろいろな方の読み方を横から見ていると、エントリポイントを最初に探す方が多いです。
      そこから、どこで枝分かれしながら処理が行われているのか調べながら、時間軸に沿って、本を最初のページから読んでいくように、1次元的に理解を進めようとします。
      その線で考えると、コードの2次元化は、書くのを容易にし読むのを難解にしている、と思うのです。

    • Re:あるべき論 (スコア:2, すばらしい洞察)

      greentea (17971) : 2009年09月17日 9時37分 (#1640876) 日記

      私には2次元でものを考える習慣ってものがないです。
      どのように考えるのかすら想像がつきません。
      これまで私が読んだ説明書も数学の教科書も全て、上から下の1次元構造だったのです。

      木構造やグラフ、図形などを2次元の図として表すのは有用かもしれません。
      しかし、図だけに詳細な説明や方法を盛り込んでしまうのは難しいように思えます。

      --
      1を聞いて0を知れ!
    • firewheel (31280) : 2009年09月21日 10時45分 (#1642641)

      >CPUにフェッチされる順序を記述しているんじゃないかなぁ。

      そういう意味ではマルチCPUの並列マシンは二次元的と言えるなあ。
      難易度は古典的な一次元的プログラムの比ではないけどね。

      >プログラミング言語自身の難解度は上がってると思うんだ。

      むしろ下がってます。
      きっとこの人は本物のプログラミングをやったことがない人なんだろうな。
      #「ツールを使っている人」ではなく「ツールに使われている人」。

    • 2個のコメント が現在のしきい値以下です。
  • greentea (17971) : 2009年09月17日 9時44分 (#1640878) 日記

    ソース読む人に何か書いてもらって、それを別の人たちに読んでもらって……

    読むのがうまい人は、読みやすいコードを書ける人が多いのか?
    読みやすいコードを書く人は、読みにくいコードを読めるのか?
    といったことも調べてみてほしいです。

    # 読みやすいコードを読めない人は、読みにくいコードを書く人だろうなぁ。

    --
    1を聞いて0を知れ!
  • 研究の果てにあるものは (スコア:2, おもしろおかしい)

    RizaSTAR (32227) : 2009年09月17日 12時15分 (#1640940) 日記

    コード読解力が数値化されて

    「コード読解力、たったの5か…ゴミめ」

    といわれて首を切られる(or不採用にされる)世界。

    --
    RizaSTAR ( =ω=) is here.
  • 以下の手順でソースコードを読解いただきます。

    1. バージョンn(ベースプログラム)を理解いただき、所用時間を報告いただく。
    2. バージョン(n+1)との差分(差分情報1~15)を適用して問題ないか、個々にお答えいただく。また、その所要時間を報告いただく。

    テストを書いてないから(n+1)を適用するのは問題がありますっ!(キリッ

    また、ハンズオンの主旨に反しますので、プログラムを実行して確認するのはお控えください。今後、IDEや静的解析ツールによる効果を確かめるハンズオンを実施する可能性がありますが、今回は、ツールを使わず実施ください。

    ですよねー。

    #テストケースを理解してからのほうが元ソースも理解しやすいと思うんだ。

  • ソースコードの読解力はソースコードを書いた人の能力や、書いた人と読む人の相性による部分も大きいと思う。

    #ジェネリックプログラミングで書かれたコードは苦手です。

  • Anonymous Coward : 2009年09月17日 9時58分 (#1640885)

    若い頃はいわゆる「火消し」の仕事を多くしたのですが、そこで読まされるコードは「ぐちゃぐちゃ」で「仕様書は無いor嘘が書かれて」いて、そして「短納期」だったですね。
    この頃の自分みたいに「火消し」専門職の方々は、コード読解力は高いのではないでしょうか?
    (自分はもう、この能力は衰えました)

    プログラム自体の理解もですが、何らかのフレームワークを使っている場合やプロジェクト固有の作法がある場合もあって、そういう部分の理解も必要ですね。
    プログラム書いた人の性格とかクセを分析する事も必要でした。

    このテの仕事で必須の道具はfind、grep、コード整形ツールですね。
    特に自分の場合コード整形ツールは重要で、必ず(C言語なら)K&R様式に整形していました。

  • s02222 (20350) : 2009年09月17日 11時31分 (#1640916)

    ハンズオン対象のソフトウェアは、JavaAppletで作成されたWindows標準ペイントライクな「ペイントツール」です。

    なお、このソフトウェアは、「新入社員教育のプログラミング研修の最終課題として、数人のチームで開発しているソフトウェア」であるものとします。

    その程度の規模で、そのクオリティなら、コードを読むより一から作り直した方が速い・・・ってな回答は無しかな?

    # ただし役に立たない一発芸として

  • 実は、どれだけ熟語やテンプレートを知っているかどうかだったりして。
    --
    -- 哀れな日本人専用(sorry Japanese only) --
  • 色を混ぜるパレットはpalette。palletはモノを載せるパレット。
  • Anonymous Coward : 2009年09月17日 12時24分 (#1640944)
    これはねぇ、もう脳内コンパイラの性能によるんじゃないかと。

    コードを読みながら脳内スタックに各変数をプッシュしていく。
    で、各命令文において、各変数の値を変化させて行き、
    結果、次にどの処理が流れるか、というのを脳内でシミュレートしていく。

    こういうロジカルな思考が得手か不得手か、という話だよね。

    コードレビューとかしていると、やはりこの思考の速度の差を痛感する。
    話が早過ぎて、こちらがついて行けない人の説明と、
    遅過ぎて、話が進む前にこちらで言いたい事がわかっちゃう人と。
    逆に発言していても、こいつは話について来れてないな、
    とか、話に納得してくれているな、とか。

    観察していると、やはりこの思考の早い人が、
    プログラマとしての総合力(早く書けるだとか、バグが少ないだとか、
    書いたコードが読みやすいだとか)が高い気がする。
    その中でも特に、書いたコードから発生するバグが少ない気がする。
  • syn (673) : 2009年09月17日 13時36分 (#1640970) ホームページ
    せっかくソースコードという形を取ってるんだから、コードを読解するためにデバッガでステップ実行させたりログから処理の流れを追ったりという手法も使いたいところですよね。
    特にオブジェクト指向で作られたソフトウェアだと、静的なコードリーディングだけだとインタフェースにある関数を呼び出してても実際にどのクラスのコードが実行されるかを特定するのが難しいですし。
  • IOCCC (スコア:1, おもしろおかしい)

    Anonymous Coward : 2009年09月17日 16時08分 (#1641065)

    コード読解力を鍛えられるサイト貼っておきますね

    http://www.ioccc.org/main.html [ioccc.org]

  • 奈良先端科学技術大学院大学 森崎と申します。

    ページに多数の来訪をいただきました。ありがとうございます。
    また、結果を送付いただいた方にも感謝いたします。ありがとうございます。

    属人性、非属人性、全体傾向を明らかにするために、より多くの結果を集めようとしています。11/4, 11/24の祝日明けを締切りに設定していますので、ぜひご参加ください。

    現在、結果を送付いただいた方にはこれまでの中間結果をフィードバック中です。

    詳しくは、http://se.aist-nara.ac.jp/html/review/code_review_cost_estimation/html/ [aist-nara.ac.jp]まで。

    コメントで議論いただいた内容は次回への参考として検討します。議論いただいた方にも感謝いたします。

  • MeeD (18266) : 2009年09月17日 11時35分 (#1640918)

    地球上では出来のいいプログラマでも、宇宙から来たプログラマに「戦闘能力、たったの6か。ゴミめ」とか言われちゃうんですね。
    (戦闘能力1=読解能力の最小単位)

  • Re:たった6倍か (スコア:1, すばらしい洞察)

    Anonymous Coward : 2009年09月17日 11時39分 (#1640921)

    文字通り「できない」人との間になら無限大の差が開くと思うよ。

  • Re:たった6倍か (スコア:1, すばらしい洞察)

    Anonymous Coward : 2009年09月17日 22時13分 (#1641352)

    え~と通常、作業は1回では終わりませんよ? 繰り返されるものです。
    なので差は n乗で効いてきます

  • 9/27(日)(第2次締切り)、10/12(月)(第3次締切り)を予定しております。
    不明な点が多い旨のご指摘をいただきましたので、改版いたしました。

    だそうです。

  • 6個のコメント が現在のしきい値以下です。