はじめに
実践による学習:知識とノウハウ
知識とノウハウには大きな違いがあります。新しい学習者にとって、プログラムを読んでいるときにプログラムを「理解」できるので、プログラムがそのように書かれている理由を実際に理解していると考えるのはよくある間違いです。
そして、その2番目の部分に到達する唯一の方法は、練習することです。座って、テキストエディタ、コマンドラインを開き、そこに進みます。
この段階では、いくつかの複雑なソフトウェアコンポーネントが相互にどのように相互作用するかを理解する能力が制限されている可能性があります(予想される)。そして、基本から始めなければならないので、実際には良いことです。銃をジャンプして正しいペースで動かさないでください。小さなタスクのために小さなエクササイズから始めてください。
正直なところ、私はJavaでプログラミングを学び始めることが道であるとは確信していませんでした(私は大学で生活するためにプログラミングを教えていました。それを始めるには複雑すぎるため、ほとんどのJavaの本は非常に困難に思われます。それにも関わらず、あなたが一歩一歩学習することを制限する限り、(少なくともプログラマーに期待するグローバルな知識のいくつかの分野では)確かにそれを行うことができます。
本
Javaを使用しているので、まともなJavaの本が必要な場合は、以下をお勧めします。
- Javaで考える。大丈夫ですが、今は少し時代遅れです。
- Javaチュートリアル。それは正確に最高の学習者の仲間ではありませんが、すべての基本をカバーし、例を提供するので、手元に置いておくのに最適なリファレンスです。学習Java言語トレイルは、私はそれが最初に把握するのは難しいかもしれ概念を紹介して、それは完全な初心者のために困難なことができると思うだろうけれども、おそらく、あなたの読書リストにする必要があります。
- 効果的なJava。それは学習のための素晴らしい本ではありませんが、後で手元にあるべき素晴らしい参照でもあります。一度に読むのではなく、一口サイズのチャンクで読みます。
あなたがクラスで何を使うのかわからないので、私はこれに言及しているだけです。他にもたくさんの本があります。いくつかは良いです。何人かは何年も生徒を不自由にするでしょう。
学習プロセス
基本的なワークフロー
これからは、クラスで見たすべての演習とコードサンプルについて、この2段階のプロセスに従うことをお勧めします。
- 読んで勉強する
- 演習を読む
- それらを理解したことを確認してください
- コード
- 本を閉じる
- そのコードエディターとコマンドラインでコンピューターの前に座る
- 自分でプログラムを書き直そうとする
失敗した場合
あなたが失敗し、あなたが本を覗く必要があると感じたら、あなたの失敗は次のいずれかである可能性が高いです:
- (おそらく)あなたは実際に解決策を理解していなかった、
- (あまりありません)ソリューションの特定の部分がどのように見えるかを忘れていること:構文、API使用、...
最初の原因は、最も頻繁に直面するものです。2番目は逸話です。両方とも、繰り返し行われる方法で対処されています。
これらの初期例の1つを実装することに失敗するたびに、本をもう一度見てから、もう一度閉じてください。本を見ながらコーディングしないでください。ソリューション全体を削除して最初からやり直すことをお勧めします。繰り返しは、学習プロセスの煩わしいが重要な部分です。
これを軽視しないでください。「はい、わかりました、これを知っています」または「私は90%そこにいます。それはほぼ同じです」と言いたい衝動を感じるたびに、別のセクションにスキップして、その衝動に立ち向かい、やり直します。コンセプトを完全に理解していないことを正直に認めることは非常に困難です。
サイドノート:ほとんどの学校のプログラムは、物事をあまりにも馬鹿にせず、生徒にとって高度すぎるツールを提供することで、プログラミングコースを「キックスタート」しようとするのは大きな障害だと思います。キャリアの後半でツールによって自動化され、時にはほとんど覚えていないこともあります。それはあなたに浮かぶすべてのビットを教えることです。
成功の場合:超えてください!
演習の実施に成功した場合、必ずしも次の演習に直接ジャンプする必要はありません。それを改善するためにできることを試してみてください。要求された出力を変更できますか?小さな機能を追加しますか?オプション?あなたが今あなたが主な困難を通り抜けているその楽しいゾーンにいるので、試してみてください、そしてこれらの自己課せられた小さな要件はあなたの精神を少しでも維持する可能性が高いです。
ただし、行き過ぎないようにしてください。アルファベットを印刷して、それを反転させて、画面の対角線に突然色のグラデーションを付けて表示することはありません。小さな一歩を踏み出します。学習は長く反復的なプロセスであり、難易度を上げながら問題に取り組む必要があります(たとえば、再帰の説明について私が通常どのように考えているかを参照してください)。
学習中-比較
あなたの問題は、実際にはプログラミングとはまったく関係ありません。これは、数千人が数学を学ぼうとするときに直面する問題と同じです。
あなたが彼らに問題を与えた場合、彼らは解決への道をどのように進めるかを見ません。しかし、彼らのために解決策を書き留めると、ほとんどの人はそれを理解し、「くそー、それはとても簡単だった!」と思うでしょう。それでも、あなたは彼らに異なる尺度と仮説で同様の問題を与え、彼らはそれを解決できません。彼らはその背後にある論理を理解していなかったし、彼らはそれを自分でできるようにするための練習が必要です。
これは数学の一般的な問題ですが、ソルフェージュ、言語文法、物理学などの学習が必要なロジックが必要な他の分野の多くで見られます。これらのことを理解するために:それはただ練習に行き着きます(それはその分野で、または個人がこの分野の概念をより容易に理解するように導く他の分野で)。
コードを書くことを学ぶことができない理由はありません。「ああああ!」に到達するまで挑戦し続けるだけです。/ユーリカの瞬間。次に、次のより困難な問題に進みます。
これらも役立つ可能性があります(後で):