プログラミングの特定の部分を理解できないと思われる場合はどうしますか?[閉まっている]


11

進行中に新しい言語を学び、非常に基本的なプログラムのコードを複数の言語で記述し、クラスに行きます。私は本、記事、レッスン、ビデオを読んだことがありますが、あなたはそれを名付けましたが、特定のもののこつをつかむことができないようです。

例えば、私はポインターを理解していませんでした-それらが得意なもの。(質問の一部ではありません-「ポインタ」でタグを付け直す必要はありません...)


しかし、私の質問は、ポインターが何をするかではなく、代わりにそのようなことをどのように理解できますか?プログラミングの特定の部分に関する本または記事を読んだ後、理解できない場合、どうすればよいですか?プログラミングの特定の機能でコードを書くことは確かに役立ちますが、実際にはそれほど理解するのには役立ちません。理論的な部分は理解する上で重要です。


11
なぜポインターを理解するのに多くの人が苦労しているのかを理解できたらと思います。名前は私が必要とするすべての説明を与えます。
ChaosPandion

1
一部のComputer Architecture 101コースは、ポインターの理解に大いに役立ちます。...その他すべて。
-ZJR

6
質問はポインタに関するものではなく、一般的な質問ですが、ありがとうございます。
バグスター

2
彼が問題を抱えていると告白した一例を思い出すと、彼は啓発に向けて少しだけ助けになるとは思わない...けちけちでつまらない答えと格下げコメントの長い文字列。
ヘイレム

4
@FrustratedWithFormsDesigner:「どうやって学ぶことを学ぶのか」と思う。これは有効で価値のある質問です。
ヘイレム

回答:


22

抽象概念の理解に問題がある場合は、1レベル下に進んでください。Cでポインターを取得できない場合は、アセンブリレベルに移動します。まだ問題がありますか?論理ゲートに至るまで、ハードウェアの詳細をご覧ください。


2
+1:私のために働いた。PDP-10アセンブリ言語の記述を開始するまで、ALGOLのポインターに問題がありました。
ケビンクライン

2
面白いアイデア。ただし、アセンブリでプログラムを作成して実行するのは遠すぎます。私の意見では、このレベルでは基本的な理解のポイントを超えることは不要です。でも、もしそれがあなたがやりたいことなら、もっと力を屋に!
ブライアンフィールド

1
@George Bailey、はい、実際のアセンブリとハードウェアでは少し上を向いているかもしれません。だからこそMIX、他の似たようなおもちゃのアーキテクチャがあります。ハードウェアの部分についても同じです-勉強する単純なおもちゃのCPUコアがたくさんあります。
SKロジック

+1:興味深いアイデアであり、間違いなく機能する可能性が高いが、(OPのサンプルケースを再利用するために)CエントリレベルからASMエントリレベルに移行することは、初心者にとって長く困難で曲がりくねった道であり、コース/プロジェクト/その他で予想されるよりも長い時間。また、意欲の低い人々を疎外する可能性があります(おそらくOPのケースではありませんが、より高いレベルの観点から、これはCSクラスを受講し、これを理解する必要があるがCS自体について気にしない多くの学生をブロックします) 。しかし、長期的には間違いなく良いアイデアです。
ヘイレム

まあ、私のCSの学位は、コンピュータアーキテクチャでこれをカバーしています。論理ゲートについて学び、それらを論理シミュレータで組み合わせて加算器、ALU、そして最終的に非常に単純なRISC CPUを構築しました。また、MIPSアセンブリで簡単なプログラムを作成しました。これはすべてコンピューターサイエンスのBSに必要なものであり、実際には "ウィーダー"コースの1つとは見なされていなかったので、一気に行き過ぎたり、行き過ぎだとは思いません。
アダムJaskiewicz

17

短い増分学習ライフサイクル

  1. 試してみてください理解できない概念を。
  2. コンセプトを照らす何かを実装してみてください。
  3. ホワイトボードに概念を図で示してください(該当する場合)
  4. コンセプトを理解している人と話してみてください。
  5. この人にあなたが理解していること説明してみてください(時には光を見るのに役立ちます)。
  6. 再起動 1から、あなたは最終的にそれを説明できるようになるまで、状態1である誰かに、彼らはそれを取得します。

追加の手順

注意して使用する。

  • 追加の読み物と学習資料を検索する
    • オンライン(人気のある検索エンジンとウィキペディアは素晴らしい友達です)、
    • 図書館で(本や本を読みに行く人を過小評価しないでください)、
    • お使いのシステム上(同梱のマニュアルとドキュメントツールは、多くの場合、最初に疎外されていますが、しばらくして、あなたの最高のgoto-バディ:あなたがそれらで探しているものを見つけることを学ぶなどman -kaproposなど...)
  • コンセプトを使用していくつかのコード読んでみてください...
  • ... デバッガでコードステップ実行します。

あなたはそれが正しいことを確認するためにあなた自身を再評価する必要があるので、これらはです。知識のある人による直接的なメンタリングは通常は優れていますが、もちろん、習得した知識を自分で検証した後、今学んだことを再実装します(そして、それをさらに一歩進めて、その上に構築された高レベルの概念を学ぼうとします)たとえば、ポインタのリンクリストなど)。

クレジット:Nupul(作図用)


2
+1!追加することができます-話す前に、ホワイトボードを試してみてください(または誰かと話すときにホワイトボードを手元に
PhD

1
「デバッガーでコードをステップ実行する」ための+1。簡単なデバッグツールで多くの概念を学びました
...-funkymushroom

@Nupul:良い提案、追加。
ヘイレム

@funkymushroom:確かに、私は通常、この方法で概念を実際に学習することはないと言いますが。ただし、目の前にある「霧を持ち上げる」のに役立ちます。何かに集中しすぎているか、心が揚げているので、ピースが一緒に見えないだけです。一般的な概念よりも、一般的なアルゴリズムの問​​題を理解する方が役立つと思います。
ヘイレム

ホワイトボードと話をしてくれました。
ピーター

5

私の経験では、入力とフィードバックがすべてです。できるだけ多くのフォームで入力を取得し、できるだけ早くミスに関するフィードバックを取得する必要があります。

私の経験では、私のCS学位は非常に乾燥していて、非常に形式的で、プログラミングを教えることにまったく価値がありませんでした。私は週に2〜3の講義に出席しました。もしそれが得られなければ、それはほとんどそれです。そして、オッズは、一人の男がそれを特定の方法で理解し、彼はそれを特定の方法で教え、それだけだということです。さらに悪いことに、彼は他の数十億の関連する概念を理解している可能性が高いため、他の概念の観点からフレームを作成する可能性があります。

Stack Overflowに行き、C ++チャットチャンネルで尋ねると、5分間で5つの異なる説明がありました。それらはすべて私と私が抱えていた正確な問題に合わせて特別に調整されていたので、そのうちの一人が私のために家に着き、それを得たのは驚くことではありません。複数の専門家からのライブフィードバックを取得することで学習できる速度は、乾燥紙ソースから取得できるものを大きく上回っています。

理想的には、休憩を取り、何もすることがなく、彼らとライブでチャットすることを心がけている中小のグループを見つけます。ちなみに、Stack Overflowは、この種の高品質で高速な個人的なフィードバックを得るのに最適な場所です。


3

順不同で、本、友人、そしてよく文書化されたコードを読むことは良い情報源です。練習は学習するための唯一の方法です。小さなユニットテストを書くようにしてください。たとえば、ポインターの場合、文字列を処理するコードを作成します。文字列を逆に、文字列内の各単語を逆に、回文をテストし、文字を数字に置き換えます...

stackexchangeに関する質問をする...;>


2

練習は完璧を作る!(とにかく良い)。できるだけ続けて、できるだけ多くの異なるソースと感覚を使用するようにしてください。

出典:書籍、インターネット、ユーザグループ、友人、ビデオ学習、あなたのようなコードのテストはほとんど「ビット」しましょうサイト使用 jsfiddleを(主にHTML)、
Rubular(Rubyの表現)、
SQlzoo SQLを試すため、
jslint javascriptのため、
コードパッド多くの言語用。

抽象的なものを覚えておくには、ニオミクスを考慮してください-医師はそれらを使用します!

自分を生涯学習者と考え、謙虚でいれば、遠くまで行くことができます。


1
「練習」の場合は+1。しかし、ニーモニック、うーん。彼らは非常に不十分な松葉杖であり、決して置き換えることはできず、理解して取って代わることはありません。実際、彼らは理解の欠如を示しています。「医師はそれらを使用する」のは、あまりにも多くの切断された事実をあまりにも短時間で学習せざるを得ないからです。私たちは、医師に対する私たちの教育がひどいものであるという事実に徐々に近づきつつあります。たとえば、米国は教育を完全に改造しようとしています。ニーモニックは解決策ではなく、問題の一部です。それらを使用していることに気付いた場合、理解できませんでした。
コンラッドルドルフ

1

5分ではなく、しばらくフォーカスを変更する必要があります。または5時間...私はそのコードを見ずに1日のようなものを意味します...ただそれについて冷やします...別のものを読んでください...

今すぐ理解する必要がある場合は...友人またはここから助けを求めてください=)


1

ITの他の全員が行うこと。

検索エンジンを使用して、最初に理解したかったトピックを再検討できるまで、理解できない関連概念を検索します。

スタック、ヒープ、自動変数、C ++コンパイルプロセス、アセンブリ、管理メモリと非管理メモリを完全に理解していない可能性もあります。

これらおよびその他のポインター関連の概念をさらに明確にすれば、おそらくすべてが明確になります。


1

主題を理解する確実な迅速な方法はありません。あなたの成功は、あなたがあなたの研究でどのくらいのコンテキストをもたらすかにかかっています。あなたの視点を念頭に置いて物事を説明してくれる人を見つけることは非常に幸運です。チューリングマシンのように、誰でも他の人が知っていることを学ぶことができます。フラストレーションが自然であるのは、永続性と容認の問題です。

私は、ポインターに関しては非常に苦労したことを覚えています。非常に忍耐強い男が私にそれを説明するまで、私はそれを理解した完全なばかでした。それは時々それが取るものです。


1

これは、学習と教育の一般的な問題です。そして、他の人が言ったように、これを回避する確実な方法はありません。私たちの脳は微妙ではあるが重要な方法で異なって配線されているので、それは私たち全員が異なって学ぶという基本的な真実です。

学習により、新しいニューロン接続が生成されます。神経科学(私はほとんど何も知っていない)に深く入り込むことなく、新しい接続を生成するには、異なる人々の概念に対する異なる種類の露出が必要です。多くの異なる角度を試して、さまざまな説明を読んだり聞いたり見たりしてください。練習!

それがうまくいかない場合は、問題を脇に置いてください。パズルの別の部分を見逃すだけで、一度取得すると、元の問題が明らかに見えるようになります。

あなたはこれらのああを知っていますか瞬間?これは、あなたの脳が新しい接続を確立したときです。これが学習の仕組みです。

ちなみに、良い先生はこれを知っています。テクニカルライティングのガイドラインでは、すべての概念を少なくとも2回、異なる単語を使用して(おそらくテキストを挟んで)説明する必要があると記載されています。注意を払えば、すべての優秀な科学作家がこのルールに従っていることに気付くことができます。

残念ながら、あまりにも多くの教師がそれを無視し、一度だけ説明します。そして、たとえ彼らが素晴らしい比phorでエレガントな説明を見つけることに成功したとしても、これは単に十分ではありません。


0
  1. 関連するドキュメントを読み、疑問点をGoogleで確認してください。

  2. コード例を書いてみて、それらが何をするのかを見てください。

  3. デバッグでコードを実行してみて、ステップごとに見てください。

  4. それでも特定の動作を理解できない場合は、本人またはこのようなWebサイトで誰かに尋ねてください。上記のすべてを試した場合、良い質問を作成するためのすべての要素が必要です。恥ずかしがらないでください:)

私はそれが他の皆がすることとほとんど同じだと思います。


0

研究と学習を続けてください。私は、プログラミングの他のさまざまな側面で同じ問題を抱えています。しかし、他の人と話したり、記事を読んだりすると、最終的に「AHA」の瞬間につながります。一般的に、私が従うことができる情報を提示するのは、他のブログ投稿またはSO回答です。

基本的に、見続け、理解が来るのを忍耐強く待ってください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.