ソースを読む技術

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
自分のソース、他人のソース、オープンソース等々のソースを
読む技術、手法などを夜が明けるまで語り明かしましょう
2デフォルトの名無しさん:2006/02/04(土) 22:16:37
1に経験、2に経験、桂三枝はいらっしゃ〜い
3桂三枝:2006/02/04(土) 22:21:54
いらっしゃ〜い
4デフォルトの名無しさん:2006/02/04(土) 22:52:23
突然ですが、今からこのスレはおたふくソースに勝るソースを語るスレとなりました。
5デフォルトの名無しさん:2006/02/04(土) 22:59:41










                                            糸冬
                                       ---------------
                                        制作・著作 NHK
6デフォルトの名無しさん:2006/02/04(土) 23:00:55














                                            糸冬
                                       ---------------
                                        制作・著作 創価学会
7デフォルトの名無しさん:2006/02/04(土) 23:10:56
8デフォルトの名無しさん:2006/02/04(土) 23:12:56
おたふくいいよおたふく
9デフォルトの名無しさん:2006/02/05(日) 00:59:32
ctags, grep, globalを使う
10デフォルトの名無しさん:2006/02/05(日) 01:00:27
>>9
global kwsk
11デフォルトの名無しさん:2006/02/05(日) 01:52:05
gtags
htags
12デフォルトの名無しさん:2006/02/05(日) 03:10:25
ソースを飲む技術
13デフォルトの名無しさん:2006/02/05(日) 03:30:12
暗記力とプログラム構造を頭の中にイメージする力かね。
ツールの使い方みたいな小手先の技術なんてどうでもいいよ。
14デフォルトの名無しさん:2006/02/05(日) 03:43:58
俺は目玉焼きにソースかけて食べる派
>>14
俺は塩だな。
気分によってはあら引きのコショウを少々。
16デフォルトの名無しさん:2006/02/05(日) 13:49:15
とりあえず、Code Readingを読めばいいんでないかい?
17デフォルトの名無しさん:2006/02/05(日) 14:18:31
やっぱり音読が一番でしょ
孔子さまもおっしゃってる通り100回声に出して読みたいプログラム
18デフォルトの名無しさん:2006/02/05(日) 14:30:16
doxygen使ってます
ただしソースの量が多くなるとジェネレートで相当待たされる
CPUの使用率も高く、その間何もできなくなるな
19デフォルトの名無しさん:2006/02/05(日) 14:59:28
特別な経験や暗記力は不要
構造を図式化するだけ

図式化は面倒ではあるが、完成してしまえば
規模、構成、バグなどを短時間で理解できる
20デフォルトの名無しさん:2006/02/05(日) 15:11:21
>>19
ただし相手が糞ソースでないことが前提である。
21デフォルトの名無しさん:2006/02/05(日) 15:20:01
糞ソースでないことはほとんどない
2219:2006/02/05(日) 15:56:01
糞コードを図式化する
糞コードだからこそ図式化する
理解するための図式化
糞コードでなければ図式化は不要
23デフォルトの名無しさん:2006/02/05(日) 16:23:23
そこでdoxygenですよ
24デフォルトの名無しさん:2006/02/06(月) 08:28:46
コメントを書き込みながら読む
25デフォルトの名無しさん:2006/02/06(月) 10:22:53
構造化エディタ(古い表現だな)で分岐先へ飛んだり戻ったりしながら流れを追いかけるのが楽だな
あとは読み解いたソースを頭の中でイメージ化できるかと小人さんがどれだけ動いてくれるかに掛かってくる
26デフォルトの名無しさん:2006/02/06(月) 12:03:47
仕様書が無いと難解。
きれいなソースでも時間がかかる。
27デフォルトの名無しさん:2006/02/06(月) 12:50:42
デバッガ使ってステップ実行とか、
ログ仕込むとか。
28デフォルトの名無しさん:2006/02/06(月) 13:27:38
実行してどうする
読めよ
29デフォルトの名無しさん:2006/02/06(月) 14:41:44
ソースを読む技術よりも

バイナリを読む技術を教えて欲しい
30デフォルトの名無しさん:2006/02/06(月) 16:12:10
機械の体を手に入れる
31デフォルトの名無しさん:2006/02/06(月) 16:13:47
>>30
人間だからといって、
DNAが読めるわけでもあるまい。
32デフォルトの名無しさん:2006/02/06(月) 16:16:35
>>30
999に乗れ。
33デフォルトの名無しさん:2006/02/06(月) 17:59:48
34デフォルトの名無しさん:2006/02/06(月) 18:23:38
>>10
これだろ

GNU GLOBAL
ttp://tamacom.com/global-j.html
35デフォルトの名無しさん:2006/02/06(月) 23:49:05
とりあえず有名そうなとこ
「ソースを読むための技術」
ttp://i.loveruby.net/ja/misc/readingcode.html
「ひらメソッド」
ttp://hira.main.jp/wiki/pukiwiki.php
36デフォルトの名無しさん:2006/02/07(火) 02:26:48
ひらメソッドって、頭の使い方を工夫することを放棄してるな。
まあ著者もそのうち成長するのだろうけど。
37デフォルトの名無しさん:2006/02/07(火) 19:43:19
>>36
kwsk
38デフォルトの名無しさん:2006/02/08(水) 03:47:42
まず良いソースがどんなものかサンプルがいるな

知っている奴リンク張れや

特に>>1
39デフォルトの名無しさん:2006/02/08(水) 09:38:53
むしろ下手なソースを挙げて
改善していくことにより
設計のまずさなども
学習できる。
でも俺は挙げん。
40デフォルトの名無しさん:2006/02/08(水) 09:58:04
下手なソースを改善することも重要だけど、
下手なソースを素材そのままにいかに付き合うか、これも重要。
41デフォルトの名無しさん:2006/02/08(水) 11:02:42
42デフォルトの名無しさん:2006/02/08(水) 18:06:00
どんなに良い食材を使っても
ソース一つで台無しになる場合があるからな。
43デフォルトの名無しさん:2006/02/08(水) 18:17:39
>>42
ふらんすじんにあやまれ
44デフォルトの名無しさん:2006/04/16(日) 17:16:56
今このとき――

   我々は立ち上がる――

      /\     我が名を永遠に刻むため――
    /∬ \
   / .人   \
 / (__)   /\
 \(__) /  \    時は満ちたり!
   \   /       \            ニュース速報  いざ出陣!!
    \/        \
          ∧∧∧∧\
         (  ´/) ))ヽ∧
         /   /  / ´∀) ∧∧
       ○(   イ○  (   ,つ, ,゜Д゜)
       /ヽ  )) ヽ  )ヽ )と  , イ
       (_/(_/(_/(_/ノ(_/⊂ノ> )J
   / ̄Y ̄`|/ ̄^Y ̄ヽ/ ̄ ̄Y `´ ̄\  http://live22x.2ch.net/news/
45デフォルトの名無しさん:2006/05/07(日) 20:46:04
良い小説って
目次や登場人物一覧とかってなくても
章立てや人物の特徴(?)とかが明確になっているから読める

プログラムソースコードもそーゆー事だ
46デフォルトの名無しさん:2006/10/02(月) 01:54:26
製作者がプライド捨てて簡潔・平易に書いたソースが理想的。
製作者がこれでもかってくらい知識ひけらかして書いたソースって、
ソースのメンテ拒否してるようにしか見えない。
そしてコメント内容が間違ってるなんて論外。
47デフォルトの名無しさん:2006/10/02(月) 05:07:35
>>46 の意訳: 私はバカです
48デフォルトの名無しさん:2006/10/12(木) 01:57:22
知識をひけらかして読めないコードってどういうんだよ?
49デフォルトの名無しさん:2006/10/12(木) 03:20:17
template<char x>int _(int){return x;}int i,L;int main(){L

=++ i;_
<'_'> ('_')
/i | L/ i | L
/ L / L ;;;

}
50デフォルトの名無しさん:2006/10/18(水) 00:50:20
>>46
プログラマなんて掃いて捨てるほどいるんで、
ソース読めない方はとっとと転職する事を勧める。
51デフォルトの名無しさん:2006/10/18(水) 03:51:11
>>50
オマエ等ドカチンの根性主義はどうでも良いんだよ
こういう問題意識から新しいパラダイムが生まれるんだ
52デフォルトの名無しさん:2006/11/04(土) 20:03:53
仕事が遅い奴はソースを読むのが駄目。
そういう奴ほどソースを眺めているだけで読んではいない。
ソースは斜め読みをしてはいけない。
53デフォルトの名無しさん:2006/11/04(土) 20:28:55
すぱげりーソース読みたくないので職変えるか
54デフォルトの名無しさん:2006/11/04(土) 20:52:32
>>52
あなたの言う眺めると読むの違いは?
55デフォルトの名無しさん:2006/11/05(日) 03:10:09
テーマに詳しくて、基本的に計算式とか技法とか原理とか理解してれば
斜め読みでも何をやっているのか、おおよその見当はつく。
逆だといくら努力してもわからない。

建築わからない人が構造計算のプログラム見てもしょうがないとかそういうことだろ。
56デフォルトの名無しさん:2006/11/05(日) 04:23:51
>>54
眺めるというのはただソースをスクロールさせているだけで
脳が知らず知らずのうちにソースを拒絶している状態。
読むというのは一字一句まで読む位の覚悟と集中力で
8時間くらいぶっ通しでソースを頭に叩き込む作業。
57デフォルトの名無しさん:2006/11/06(月) 00:24:22
「8時間っすか」
58デフォルトの名無しさん:2006/11/29(水) 17:59:48
そう、8時間。
59デフォルトの名無しさん:2006/12/05(火) 00:58:50
時間というより「読んだ〜」という気になるのはスタックが
10段とか上下しつつデータが分割されたり再構成されるフローの
イメージがぴしっと立ち上がった時。

過程の90%位までは「あれがこうなってそうなるとああなって・・・」の
各々の処理フローが脳内で交差してるだけなのに、臨界点を過ぎると
パズルのピースの様にスパスパはまる。で、そこから設計意図(そもそも
なぜその処理・実装が選択されてるのか)が逆に理解できたら
「ソースが読めた」ということだと思う。「ここはこうなりゃいいのに」と
思った所が次のリリースできっちり直ってきたりすると気持ちいい。
60デフォルトの名無しさん:2007/02/14(水) 06:40:04
持ちネタないけどage
61デフォルトの名無しさん:2007/02/14(水) 07:31:47
オフショアであっても、現地語でいいから
コメント入れとけといいたい
62デフォルトの名無しさん:2007/02/14(水) 07:53:41
カネもらってPG読む仕事なんて
「まだ動かないけど」なんてさわやかな笑顔で
いきなりキングファイル5冊とか渡されるんだぜ?
63デフォルトの名無しさん:2007/02/14(水) 13:46:05
日本語のコメントが書かれたソースを
英語圏の人に渡したら文字化けしたまま読んでたんだけど
その人は「文字化けしてる」という事実にすら気付いていなかったようだ
64デフォルトの名無しさん:2007/02/14(水) 13:54:16
あらゆるコメントの90%はクズ
65デフォルトの名無しさん:2007/02/14(水) 22:29:19
コメントについてのコメントが必要だ。
66デフォルトの名無しさん:2007/02/15(木) 01:46:07
どうコメントすればいいかわかりません!
67デフォルトの名無しさん:2007/02/15(木) 02:18:13
>>66
// どうコメントすればいいかわかりません!

こうですか?わかりません!><
68デフォルトの名無しさん:2007/02/15(木) 07:54:19
#もう〜
#つまんなすぎっ!
69デフォルトの名無しさん:2007/02/15(木) 11:33:45
必要なコメント:
・思いつきアルゴリズムの処理の前に、軽く流れを説明するコメント。
・関数の前には一行要約。
・定石にそぐわない処理に理由を説明。
 例えばmallocの戻り値をチェックしない等。

不必要なコメント:
・ブロックの最後に、ブロック先頭の文を添える。以下例。
if(C) {
} // if(C)
・式や文単位で処理の内容を説明するコメント。以下例。
if(C) // Cは真か?
 fprintf(fp, "('A`)"); // fpに顔文字"('A`)"を出力。
・自分語り。「ここはこのように書くべきだ!」等。
70デフォルトの名無しさん:2007/02/15(木) 12:32:08
他人の書いた小汚いソースを読むほど腹の立つことはない
71デフォルトの名無しさん:2007/02/15(木) 15:08:20
ナナメにさらさら眺めてたら今の自分にとって重要な個所が強調表示されてで見える。
72デフォルトの名無しさん:2007/02/15(木) 15:14:38
>>69
> 必要なコメント:
> ・関数の前には一行要約。

関数自体や引数にコメントがいらないくらい、
適切な名前が付けられているのがベストだと思う。
73デフォルトの名無しさん:2007/02/15(木) 16:19:10
確かに。ベストはそうかも知れませんね。
貧相な環境でソース解析する時に、処理内容が想像しやすい関数名にどれだけ助けられたことか。

>>69 ミス訂正。
×定石にそぐわない
○定石から外れた
74デフォルトの名無しさん:2007/02/15(木) 22:17:20
=begin
いやんのびたさんのエッチ
=end
75デフォルトの名無しさん:2007/02/22(木) 01:02:45
コメントは処理内容よりもデータの説明と背景説明をしっかり
やってほしい。

おおざっぱな処理目的と図に描ける程度のデータの説明があれば、
後はモジュール冒頭とか中核コード周辺の要所要所に何でそんな処理を
しているのかとか、なんでその方法を選択しているのかとか、
どういう経緯で現在の形に至ったのかとかコードに直接関係しない
背景情報を書いておいてほしい。

そのコードに関する背景なら自分語りでもいいので冗長なまでに
書いた上で、TODO/FIXME/WONTFIX/BUG/INFOとかタグ打ちしておいて
貰えれば意図をつかんだり斜め読みする時助かる。処理内容の
説明は簡単にコードと乖離するけど、背景情報は変わらないから。
76デフォルトの名無しさん:2007/03/18(日) 21:51:25
なる程。参考になる。
77デフォルトの名無しさん:2007/04/07(土) 19:36:42
読む話じゃなくて書く話になっとる
78730:2007/04/07(土) 20:36:33
うまく読む技術など存在しない
日本の国語教育の弊害だな。
相手の意図を汲み取るより
自分の意図を的確に伝える教育が必要だ。

79デフォルトの名無しさん:2007/04/08(日) 10:47:04
CODE READINGとか読む技術の本だけど。
80デフォルトの名無しさん:2007/04/19(木) 14:16:51
ある日曜プログラマの言葉
「この世の中で、最も理解しがたいのは、過去の自分のプログラムである」
81デフォルトの名無しさん:2007/04/23(月) 19:02:02
「何で俺以外が書いたソースってこんな汚いんだ。」って、みんな思ってる。
82デフォルトの名無しさん:2007/04/23(月) 19:39:54
読みたくないと思わせるようなソースを書くやつの方が圧倒的に多いけど、読みやすい人も多少はいるお。
83デフォルトの名無しさん:2007/04/24(火) 22:14:54
プロトタイプだからということで殴り書きで作っていたら、
なぜか途中でリリース版になりました。

後を引き継いだ人、がんばって!
84デフォルトの名無しさん:2007/04/25(水) 00:13:38
他人に読みやすくなんて書いてやらねーよ
読むんじゃねーよスケベ
85デフォルトの名無しさん:2007/04/25(水) 00:54:49
入社時にちゃんと事細かい契約書にサインさせているとこならいざしらず、
そうじゃない会社ならソースファイルは個人の創作物だとか言い張って他人に
見せないってことはできなくはないだろうな。裁判では多分確実に負けるだろうけどw
86デフォルトの名無しさん:2007/04/25(水) 10:56:59
>>83
あるあるw
87デフォルトの名無しさん:2007/05/10(木) 02:33:56
>>85
ソースのコメントを全て削除しろw
コメント部分はプログラムではない。
自分しかわからない用語を沢山つかえ!
88デフォルトの名無しさん:2007/05/11(金) 05:55:52
>>84
今日の自分は明日の他人なんだよ
ソースを読みやすく書くのは他人のためじゃなく自分のためだよ
保守も含めてプロジェクトに関わった経験長ければ長いほどそうなる

汚くて言いと云ってる香具師は短期プロジェクトしか知らないか
作りっ放し逃げっ放しだったんだろうな

89デフォルトの名無しさん:2007/05/11(金) 06:09:41
ネタにマジレスしてまで偉そうなことが書きたいとw
90デフォルトの名無しさん:2007/05/11(金) 06:21:37
2chなんてみんなそうじゃないか
全力で喰いついた方が盛り上がるだろ
91デフォルトの名無しさん:2007/06/09(土) 14:29:20
盛り上がる?
92デフォルトの名無しさん:2007/06/09(土) 15:32:24
>>88
ひんと:偽装派遣
93デフォルトの名無しさん:2007/06/09(土) 16:38:47
読むのが大事とか言うけど
書く経験が相当無いと読めないんと思うんですが間違ってますか?
少なくともAPI関数とかライブラリの機能何て何度か使った経験が無いと
それがどんな挙動するか分からないし…
94デフォルトの名無しさん:2007/06/09(土) 18:38:33
そんなんどっかに書いてあるやろ
95デフォルトの名無しさん:2007/06/09(土) 18:40:20
書いてある事の詳細が理解できなく
いったんそれのテストプログラム作って動作確認しちゃうんですが
それじゃまずいって事ですよね?
96デフォルトの名無しさん:2007/06/09(土) 18:43:49
べつにまずくはないだろうけど、人のコード読む時に全ての詳細を理解しようとしてたらキリがないよね。
97デフォルトの名無しさん:2007/06/09(土) 18:46:50
ソースを読むコツは、全体把握
98デフォルトの名無しさん:2007/06/09(土) 19:10:56
効率よく、全体把握するコツを、教えてください。
99デフォルトの名無しさん:2007/06/09(土) 19:16:38
なんつーか全体を把握するのに必要な情報をつかむ為に細部を調べて悩んでる状態なんだよね俺
一応マクロとか作って手でテストコードを0から書く手間は減らしてるから
そんなに面倒でもないんだけど、理想はそんな事せずにすらすら読んでいきたいもんなんだ
やっぱ慣れていくうちに変わるもんなんだろうか?
100デフォルトの名無しさん:2007/06/09(土) 19:46:58
ストーリーよりもデータ構造を理解するように努める
101デフォルトの名無しさん:2007/06/09(土) 23:58:28
>>99
データ構造から攻めるのは非常に有用。
あとは、最初はモジュール構成とかデータ構造とか機械的に目標を決めて着手す
るけど、なるべく早くピンポイントで知りたいことを決める。
102デフォルトの名無しさん:2007/06/10(日) 00:29:48
今の職場に転職して三ヶ月。
思うことは、「…さすがに限度があんじゃねえの?」
謎の計算式に、意図の取れない条件文。
引数、戻り値、定義値は一切使わず、
ローカル変数は可能な限り使いまわされる。
もう本当勘弁してください。読めません。

…いや、まあ、一緒に働いてる人は
それでちゃんと仕事できてるんだから
俺の力が足りないだけなんだけどさ。
103デフォルトの名無しさん:2007/06/10(日) 00:42:27
>102
カッコエエ
人が変ったら保守できなくなって
破綻するけどな普通
よほど待遇いいのだろうか?
104デフォルトの名無しさん:2007/06/10(日) 01:45:48
逆説的だけど、全体を把握するためには、まず細部を見る必要があるんだよな。
解析の入り口さえつかめれば、トップダウン&ボトムアップの繰り返しで大体理解できる。

最近配属されたところ、ライブラリ名がLIB0010,LIB0020, でその中の関数名がLIB0001() 。
引数はP01,P02... 。こういうプログラムが実在するとはじめて知りましたw
105デフォルトの名無しさん:2007/06/10(日) 01:59:30
おれJavaでそういうの見たことあるw
106デフォルトの名無しさん:2007/06/10(日) 02:07:00
インクルードガードに使う文字に普通に使うもの+GUID使うのとかもヤバイのかなぁ
107デフォルトの名無しさん:2007/06/10(日) 02:10:43
目に付くとこにGUIDが書いてあると一気に萎える
108デフォルトの名無しさん:2007/06/10(日) 02:21:15
>>106
インクルードガードは問題ないだろ。
109デフォルトの名無しさん:2007/06/10(日) 11:44:53
>>104
それどこの不治?
110デフォルトの名無しさん:2007/06/10(日) 11:49:33
>>104は実在する




と昔のどっかのスレで見ました
111デフォルトの名無しさん:2007/06/13(水) 22:02:58
>>104
釣りにしてももうちょっと真実味がある内容のほうがいいんじゃないか?                 ・・・ってきっと本当なんだよな(鬱
112デフォルトの名無しさん:2007/06/14(木) 15:14:21
C++のソース読むのにVisualStudioより便利なのってあります?
113デフォルトの名無しさん:2007/06/15(金) 15:36:00
ソースは読むものじゃない
かける物だ
                  by,>>113
114デフォルトの名無しさん:2007/06/15(金) 17:24:05
・・
115デフォルトの名無しさん:2007/06/15(金) 17:48:28
そーっすかwww
116デフォルトの名無しさん:2007/06/15(金) 18:08:04
ワロタ
117デフォルトの名無しさん:2007/06/15(金) 23:36:54
>>113
天才?
118デフォルトの名無しさん:2007/06/15(金) 23:39:58
>115
こっちのが笑えたけど
119デフォルトの名無しさん:2007/06/16(土) 00:19:11
ソースよりソープだ
120デフォルトの名無しさん:2007/06/16(土) 00:22:42
>>119のせいですべてが台無しになった件について
121デフォルトの名無しさん:2007/06/16(土) 01:14:07
イヤン・ソープ
122デフォルトの名無しさん:2007/06/16(土) 01:20:30
既にダジャレスレになっている件について
123デフォルトの名無しさん:2007/06/16(土) 01:59:37
そのうちソープについて語るスレニなる予感
124デフォルトの名無しさん:2007/06/16(土) 08:18:26
慰安ソープ
125デフォルトの名無しさん:2007/06/16(土) 21:18:19
>>106
#program onceもしらんとは
126デフォルトの名無しさん:2007/06/16(土) 22:22:58
>>125
移植性って知ってる?
127デフォルトの名無しさん:2007/06/17(日) 01:28:25
pragmaやろ
128デフォルトの名無しさん:2007/06/17(日) 06:01:10
#program once ワロタ
129デフォルトの名無しさん:2007/06/17(日) 11:35:21
ごめん、本当は、普段はC++なんか使ってないんだ orz
130デフォルトの名無しさん:2007/06/17(日) 13:22:24

     ,, - ―- 、
  ,. '" _,,. -…;   ヽ
  (i'"((´  __ 〈    }
  |__ r=_ニニ`ヽfハ  }
  ヾ|!   ┴’  }|トi  }  そうかよかった時間があるんだね>>129
    |! ,,_      {'  }  ではさっそく僕と
   「´r__ァ   ./ 彡ハ、   いっしょにお風呂にはいろう
    ヽ ‐'  /   "'ヽ
     ヽ__,.. ' /     ヽ
     /⌒`  ̄ `    ヽ\_
    /           i ヽ \
   ,'              }  i  ヽ
    {             j   l    }
   i   ヽ    j   ノ   |   } l
   ト、    }   /  /   l  | .|
   ! ヽ      |  ノ    j  ' |
   { |     } |      l    |
   ヽ |     i  | \    l    /|
    { |     l   |     |   / |
    l !        |       l  / |
131デフォルトの名無しさん:2007/06/17(日) 21:36:46
一回限りのコーディングでバグ知らずはもはや神の領域だよな
#program once
132デフォルトの名無しさん:2007/06/17(日) 21:45:01
#program onze
133デフォルトの名無しさん:2007/06/17(日) 21:49:50
#program orz
134デフォルトの名無しさん
低脳の溜まり場