プログラミングの勉強をしていて、サンプルコードを読んでもイマイチ何が起こっているのかわからない時があります。
私は、処理を順に追っていき、具体的に変数がどう変わるのかなどを紙に書いて理解しようとしています。
皆さんは難解なコードを理解するためにどういったことをしますか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答9件
0
OpenCVの関数をCで再現するコードが本に載っていて、その説明がほとんど無かったので
画像処理系など、専門的な分野のコードの場合、そもそも専門分野の方の知識がなければ、「自然言語で説明されてすら内容を理解できない」ことも十分考えられます。
「バックグラウンドの理解を先に深めてからコードに取り組む」か、「所与のコードはブラックボックスとして使うのに専念する」かの2つに1つです。
投稿2019/08/06 05:05
総合スコア145121
0
ベストアンサー
せっかくコンピューターがあるんですから使いましょう。変数をウォッチしながらステップ実行してください。
#追記
これ低評価した人、パソコン使えないんじゃないですか?
サンプルコードを読んでもイマイチ何が起こっているのかわからない時があります。
変数をウォッチリストに入れてステップ実行するのは極めて有効な手段ですし、熟練したエンジニアなら常日頃から慣れ親しんでいる方法です。
つまり、そこにあるコードのアルゴリズムの詳細を把握するために、その道のプロ(バイトに毛の生えたようななんちゃってプロではなく)が使っている方法です。
投稿2019/08/05 13:22
編集2019/08/06 01:37総合スコア28656
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
どういったことをしますか?
「サンプルコード」なら,「それが何のサンプルなのか?」という話があるでしょうから,まずその「何の」の部分の話側の概念を理解することに努めます.
つまり,コードを読まなきゃならない場合,
いきなり変数レベルでどうの…とコード解読を始めるのではなく,まずそのコードの出所に訊くなりします.
- 人から出てきたコードならその人から何らかの情報が得られることが期待できますし,
- 本に載っていたサンプルコードならその本に説明なりがあるでしょう.
- アルゴリズムの名前がわかっているなら,まずそのアルゴリズムに関して調べます.
まずどうにかして概念というか大まかな話でも把握してからでないと,各変数の値の移り変わりをいくら追ったところで,処理の意味のレベルで把握するのは極めて難しいと思いますので.
投稿2019/08/06 02:07
総合スコア11632
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/06 02:09
2019/08/06 04:43
2019/08/06 04:56
2019/08/06 07:33
0
こんにちは。
C++のテンプレート・メタ・プログラミング(TMP)を除けば、地道な努力です。
読んでいる最中に出てきた文やライブラリのクラス、関数の意味を調べ、各変数の意味を把握します。
それでも良く理解できない時は、自分でコンピュータになったつもりでプログラムを実行します。
変数の内容は、時系列で紙に書きましょう。あまりに多量の変数を扱うと とても読めないので、なるべく対象を最小限に限定(例えば、ソートならソート対象の要素数は3くらいから始める)
なお、TMPは熟練者の手にもあまるので初心者のころは断念した方がよいと思います。
【大蛇足ですが】
「テンプレート・メタ・プログラミング」で検索して、まさかの「ちょまど」さんの解説がでてきてびっくりです。そして、記事の最後からリンクされている「中3女子」の人はTMP界の神か悪魔です。
投稿2019/08/05 13:25
総合スコア23272
0
何やってるのか調べるには、コンピュータのつもりになって動きを追いかけるというのは、古来よりの定番手法です。
技術が進歩して開発ツール内からデバッガによるステップ実行ができるようになったことで手間は省けていますが、本質は同じ。
※昔はデバッガを使うためには専用のハードウェアが必要だったんですよ
ただ、これで分かるのは動きであって、それの意図までは教えてくれません。意図は読み解くしかないのです。
たとえは悪いですが、殺人事件で手口が分かったところで、「なぜ犯行に至ったのか?」は分からないのと同じです。
投稿2019/08/06 02:03
総合スコア13703
0
「アルゴリズム」が探索やソートなどの「アルゴリズム」であるのなら、
まずそのサンプルコードを記述している言語に対する理解が、十全にできていないと困ります。そうでないととても追いきれないからです。「このポインタのポインタのポインタ何やってるの?」みたいな。
「アルゴリズム」の勉強は言語の勉強が済んでからにしてください。
投稿2019/08/05 13:23
総合スコア30933
0
大きなシステムも複数の関数をよびだして、システムとして成り立ってます。
アルゴリズムを理解するなら、なにかご自分で何かをしたら結果として
hogehogeするみたいなシステム仕様書を作成し
hogehogeをするにはどういった関数群をつくってあげないといけない
というアプローチですすめるとよいです。
当然システム、または機能の実装なので
hogehogeを実行する前に各々の関数が正常に動作するか
関数の単体テストも必須です。そういった積み重ねで
アルゴリズムを理解できるとおもいます
投稿2019/08/06 05:02
総合スコア1015
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/06 07:30