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

あなたの「コード読解力」はどれくらい? 72

ストーリー by makeplex
自己研鑽は欠かさずに 部門より

あるAnonymous Coward 曰く、

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

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

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

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

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

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

    #えっ違う?

    • by jerry_fish (32739) on 2009年09月17日 12時40分 (#1640951) 日記

      ウチの職場にもいます。
      そして私の配線は美しくないです。
      スパゲティコードという言葉を知って暫くの間、
      結線のことだと思い込んでました。

      #ごめんなさい、ごめんなさい、ごめんなさい

      --
      ☆大きい羊は美しい☆
      親コメント
    • by Anonymous Coward
      先っぽを探すのが早いと
  • 1げっと (スコア:3, 興味深い)

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

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

      by Anonymous Coward on 2009年09月17日 20時05分 (#1641277)

      >あと目をひいたのは、ファイルを先頭から最後まで(読まないなりも)目を通していたところかな

      そりゃそうだ。
      前からたどっていくよりも「あ、あんな記述あったっけ」って
      思える方が、早いからね。
      IDEで、プログラムの構造がツリーになって見えていたとしてもやっぱ見ておくかな。

      でもやっぱり、同じ所を何度も見てるってのは
      プロフラムの目的が分かっているからだと思います。
      どういう部分が胆か、想定してかかっているからですね。
      自分ならキーになるAPI(いくつか候補はありますが)を叩いている部分を探したりして特定すると思います。

      親コメント
  • by okky (2487) on 2009年09月17日 11時37分 (#1640919) ホームページ 日記

    たとえば自然言語だと…

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

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

    .

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

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

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

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

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

    .

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

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

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

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

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

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

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

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

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

      > 上から下へ書いて

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

      親コメント
    • by TarZ (28055) on 2009年09月17日 11時12分 (#1640906) 日記

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

      Rail : Hello, world! [voxelperfect.net]

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

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

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

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

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

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

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

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

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

      --
      1を聞いて0を知れ!
      親コメント
    • by Anonymous Coward on 2009年09月17日 6時48分 (#1640847)
      普段Eclipseを使ってるJavaプログラマです。
      アウトライン機能や、使用箇所、定義箇所にジャンプする機能などを使っているからか、あなたの言う次元を意識した事はありません。
      #個々のメソッドがコンパクトにまとまっている良いコードである事が前提です

      Eclipseに限らず、IDEを使っている人、エディタを鍛えまくっている人は同じ事を感じているのでは無いでしょうか。
      で、こういう支援機能を外付けするためには、元となるソースはプレーンなテキストであった方が有利なのだと思うのです。
      いわゆるビジュアル言語が、簡単と言われながら主流とならないのは、外側から支援機能を付け足すのが困難だからという側面もあるのでは?
      親コメント
      • Re:あるべき論 (スコア:3, すばらしい洞察)

        by Anonymous Coward on 2009年09月17日 7時57分 (#1640855)

        私はもっと古くさく、エディタだけですべてを完結させたい、
        IDEでさえも気持ちが悪い日曜プログラマです。

        旧式のプログラミングだと、ソース(やMakefileなど)さえ
        見ればすべてが記述してある、という安心感があります。
        IDEだと、メニューのどこにどんな設定があり、それによって
        同じソースでも違うバイナリができるとか、あと自動生成
        されたソースなんて読む気にならないし(これは言語や
        ライブラリ側の問題で、自動生成できるようなコードなんて
        1行で記述可能にするべきです)。

        次元という話をすれば、1次元が2次元になったところで
        たかが知れているという気がします。ブロックダイヤグラムの
        ようなものは書きやすくなりますが、ちょっと複雑になると
        すぐに2次元の紙の上では線が結べなくなります。1次元
        よりはちょっとまし、くらいの感じでしょうか。それくらいなら、
        そんな五十歩百歩の2次元はばっさりと切り捨てて、自然言語に
        近くテキストエディタがそのまま使える1次元構造を
        守った方がいいと思います。

        親コメント
    • by kabuchan (37144) on 2009年09月17日 9時26分 (#1640873)

      オフトピ気味だけど

      アステリアとか使ってみるといいと思うよ

      ttp://japan.cnet.com/blog/kenn/2005/05/18/entry_asteria/?cmode=tlist

      ここでは、ビジュアルプログラミングが成功するのは難しいとか
      この本(言語がってこと?)は萌えないとか書いてあります。

      私は、ビジュアルプログラミングって気持ち悪いけどね

      親コメント
      • by Anonymous Coward
        http://japan.cnet.com/blog/kenn/2005/05/18/entry_asteria/?cmode=tlist

        > ここでは、ビジュアルプログラミングが成功するのは難しいとか
        > この本(言語がってこと?)は萌えないとか書いてあります。

        リンク先ではなくて、献本された人の感想ですね。

        > 私は、ビジュアルプログラミングって気持ち悪いけどね

        リンク先でも、難しいことをやらせるとぐちゃぐちゃになると正直に書いてあります。
        MacのAutomatorもプログラミング環境というには非力ですが便利ですよ。
    • by hishakuan (32621) on 2009年09月17日 11時15分 (#1640908) 日記

      あなたの人生の物語を思い出した。
      曼荼羅みたいな表現でぐにゃぼやーっと部分ではなく全体の理解に至る言語のお話だから、
      プログラミングの理想とは正反対なのかな。
      私は純文系の道を歩んでいて仰っている事のほとんどが理解できてないと思うけど。

      親コメント
    • by the.ACount (31144) on 2009年09月17日 14時07分 (#1640977)

      ソースって二次元の画面に書いたものしか見たことないなー。
      ソースが上から下へ並んでて、コマンド情報が横に書かれてて、さらにインデントで深さがあるから、三次元じゃない?
      大体、computerの中でも、一次元のaddressに命令と参照address情報が入ってて二次元になっているんだし。

      --
      the.ACount
      親コメント
    • by Anonymous Coward
      もしかして:Adobe Flash
    • by Anonymous Coward

      ソースの2次元化っていうのはどうなんだろう。ちと想像できない。
      どんなプログラミング言語でも結局は、CPUにフェッチされる順序を記述しているんじゃないかなぁ。
      これって、どこまで行っても線形なんだよね。

      • by firewheel (31280) on 2009年09月21日 10時45分 (#1642641)

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

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

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

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

        親コメント
  • by greentea (17971) on 2009年09月17日 9時44分 (#1640878) 日記

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

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

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

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

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

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

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

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

  • 以下の手順でソースコードを読解いただきます。

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

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

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

    ですよねー。

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

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

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

    • 私の場合は型付けの方式の違う言語間をスイッチするとしばらく混乱します.
      そういうスイッチングが早くできるということもコードを理解する能力なのかな.

      --
      屍体メモ [windy.cx]
      親コメント
    • by Anonymous Coward

      書いた人の思考が想像の範囲外の時も読みにくかったですね。
      不具合修正での話ですが

      ・計算やデータの比較チェックで合わないから、原因を追究することなく直前に比較する値を代入して比較するコードに修正。
      ・エラーがでてしまうので、エラー処理そのものを単純削除(エラーそのものがでない仕組みならうれしいですが)
      ・コメントが半分嘘。(コメントが間違いかソースが間違いか悩む。はじめから半分嘘ってわかっていればまだよかったのですが。)

      まさか、そんなことするわけないって思ってどこかにちゃんとした修正があると思い何度も読み返しました。

      • お決まりですが (スコア:3, すばらしい洞察)

        by genkikko (36404) on 2009年09月17日 11時34分 (#1640917) ホームページ 日記

        >書いた人の思考が想像の範囲外の時も読みにくかったですね。

        それが実は昔の自分が書いたものだったりするんですよね。

        親コメント
      • by Anonymous Coward

        >不具合修正での話ですが
        このリストに自分の感覚を追加すると
        ・変数名に意味のある名前がつけられている時は其れが嘘でも読みやすいです、逆に他の変数と似通った名前だったりすると読みにくい
        ぶっちゃけ区別が付くか付かないかが重要だったり(意味が真逆に付いた変数名とかは許すけど意味が真逆のbool is*()はムカツク)

        #意図がわからないコードはバグのある意図の通じるコードより困る

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    by Anonymous Coward on 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]まで。

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

  • by Anonymous Coward on 2009年09月17日 9時27分 (#1640874)

    ハンズオン記録用フォーマットのページ数を見ただけで読む気なくしました(爆)

  • by Anonymous Coward on 2009年09月17日 10時35分 (#1640896)
    C/C++のバージョンも欲しいところ…
    と思ったけれど、defineとテンプレートとoperatorを駆使し始めるとカスタムし放題で凄まじい事になりそうだ。

    どの程度生成的技法を使うかで分類した上でケースを作っておかないと誤差が激しすぎるな……
  • by Anonymous Coward on 2009年09月17日 10時45分 (#1640900)

    リンク先に飛んで説明文を読む時点で読解力の無さを痛感しました。
    その先、コードまで読む気がしねぇや。

  • by Anonymous Coward on 2009年09月17日 10時58分 (#1640901)

    自然言語だって人によって読解力に差があるのは当たり前なんだから、人工言語である
    プログラミング言語に読解力は個人差が大きい事に、どんな発見が隠されているのか理
    解出来ないし、6倍がそもそも「個人差が大きい」と言い切れるのかが謎です。

    日本語の読解力の低い人と高い人の差が6倍程度で収まるのか?

    オレなんか間違いなく下の方に位置するけどね>日本語読解力

  • by Anonymous Coward on 2009年09月17日 11時08分 (#1640904)

    せいぜい6倍程度か、思っていたほど差はないってことでしょうか。
    できる人とできない人の間には数百倍の差が開いてもおかしくないと思ったんだけど。

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

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

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

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

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

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

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

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

      親コメント
      • なので差は n乗で効いてきます。

        んー。じゃ、計算が面倒だからlogをとって10倍して単位を(デシモリサキ)にでもしてスッキリさせてと・・・6倍だと約8(デシモリサキ)ほど違いがあるんですね。

        それで、力の比が約8(デシモリサキ)のときに、圧力の比に換算すると約16(デシモリサキ)になっているのでしょう。

        /* 座布団1枚とモデして欲しいモード */

        --
        大槻昌弥(♀) http://www.ne.jp/asahi/pursuits/ootsuki/
        親コメント
    • by Anonymous Coward
      Javaの勉強から始めるレベルの人、そもそもJavaを知らないくせに勉強する気もない人、等を取り除いているからではないでしょうか。
      実際の現場には、このレベルの人がゴロゴロいます。

      本人が言っているのだから間違いない。
      (恐ろしいことに、職場では「技術力の××さん」で通っています)
typodupeerror

にわかな奴ほど語りたがる -- あるハッカー

読み込み中...