私は最近、最初のプログラミング試験を受けました...そしてまあ、それはほとんど失敗しました。まったくうまくいかなかった。私は大学時代以外の時間に自分のせいにしているだけで、ほとんど何もしませんでした。
今、私は夏の時間近くに別のものが来ると私はこれが再び起こることを許可していません。数週間、私はもう少し読んで、読んで、読んでいます。私は見逃していた古いことと私たちがやっている新しいことを繰り返し続けます。したがって、言語の理解に大きな違いがあることに気づくことができます。しかし、それはそれについてです。私はコードを読むことができ、コードで何が行われているのかがわかりました...しかし、自分でコードを書くことになると、私は無知です。どのようなアプローチを取るべきかわからず、質問を完全に理解することはできません。
私は毎日かなりの量(過去1か月間で5〜6時間程度)を読んでいます...しかし、私のIDEを開くとき、私は常に悲惨な気持ちになります。特に、ノード、リスト、アレイリスト、インターフェースなどの知識があるので、それについてのページでそれらを読むだけでなく、プログラムで行われているすべてのことを正確に指摘できるので、プレサンプルコードに注釈を付けると、うまくいきます...自分のコードを書くのはまた別の話です。
プログラムを書くことでプログラムの書き方を学びます。
しかし、あなたは小さい、男から始めなければならない。
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
そこから、構築を開始します...
public class HelloWorld {
static String test = "This is a test";
public static void main(String[] args) {
System.out.println(test);
}
}
その後...
public class HelloClass {
String test;
public void setTest(String str)
{
test = str;
}
public String getTest()
{
return test;
}
}
public class HelloWorld {
HelloClass myHelloInstance;
public static void main(String[] args) {
myHelloInstance = new HelloClass();
myHelloInstance.SetTest("Hello World.")
String myResult = myHelloInstance.getTest();
System.out.println(myResult);
}
}
... 等々。オブジェクトがどのように機能するかの基本を理解すれば、より大きなプログラムを書くのがはるかに簡単になります。
すばらしい質問です。登るには複数の学習曲線があることを理解することが重要です。あなたがあなたがプログラミング言語を学んでいるだけだとは思わないようにだけです。あなたはそれよりもかなり多くやっています。
あなたが学んでいる...
苦労しているのがポイント3だと思います。あなたはコード(構文)で物事を言う方法を学んでいますが、実際に私はコードで何を言っているのか私たちに尋ねています。物事を行う正しい方法と間違った方法はありますか?
あなたが挑戦することをお勧めします。演習として以下をご覧ください。
http://en.wikipedia.org/wiki/Eight_queens_puzzle
今、これは難しい課題です。各クイーンがお互いから安全になるように、8人のクイーンをチェス盤に置く必要があります。
したがって、学習者としてはこれは行き過ぎかもしれませんが、この問題を確認し、それを使用してコードの記述方法を学ぶことができます。
ここに試してみる戦略があります...
記述された問題が解決されるよりもはるかに単純なように問題を言い直します。 8つの女王を忘れてください。 1つだけに集中してください。メモリ内のチェス盤を表すコードを記述し、その盤に1つのクイーンを配置し、テキストで画面に表示する方法を学びます。
ステップ1で刺し傷ができたら、2人のクイーンを配置し、両方が安全になるようにします。
最後に、2人以上のクイーンをボードに配置して、それらがすべて安全になるようにします。
上記のステップは、Step-wise Refinementと呼ばれる設計戦略のひねりです。デザインの面では少し古い学校ですが、空白の画面から興味深いコードにすぐに移動できます。
他にも設計と実装の戦略があります。いくつか例を挙げれば、テスト駆動設計、オブジェクト指向設計、および設計パターンです。
そのうちに、これらの戦略を武器に追加し、必要に応じてそれらを使用します。学習して実践する設計戦略が多ければ多いほど、それは簡単になります。
ソースがあなたと一緒にいられますように。
知識とノウハウには大きな違いがあります。新しい学習者は、プログラムを読んでもプログラムを「理解」できるため、プログラムがそのように書かれている理由を実際に理解していると考えるのは、よくある間違いです。
そして、その第二部に到達する唯一の方法は、練習することです。座って、テキストエディタ、コマンドラインを開き、それに取り掛かります。
この段階では、いくつかの複雑なソフトウェアコンポーネントが相互にどのように相互作用するかを理解する能力が制限されている可能性があります(予想されます)。そして、基本から始めることを強制するので、それは実際には良いことです。銃をジャンプして正しいペースで移動しないでください。小さなタスクの小さなエクササイズから始めます。
正直に言うと、Javaでプログラミングを学ぶことから始める方法だと私は確信していませんでした(私は以前、大学での生活のためにプログラミングを教えていましたが、時々私的な授業も行っています)。それ自体は複雑すぎて始められません。ほとんどのJava=本はかなり気の遠くなるように見えます。それでも、確かにそれは可能です(少なくとも、プログラマーに期待する世界的な知識の一部の領域については) )、ステップバイステップでの学習に限定する限り。
あなたがJavaに設定しているので、まともなJava本が必要な場合は、お勧めします:
あなたがクラスで何を使っているのかわからないので、私はこれだけに言及しています。他にもたくさんの本があります。いくつかは良いです。何人かは何年もの間学生を不自由にするでしょう。
これからは、クラスで見たすべての演習とコードサンプルについて、この2ステップのプロセスに従うことをお勧めします。
失敗して本をのぞく必要があると感じた場合、失敗は次のいずれかである可能性があります。
最初の原因は、あなたが最も頻繁に直面するものである可能性があります。 2つ目は逸話です。どちらも繰り返しの練習で対処されます。
これらの初期の例の1つを実装することに失敗するたびに、本をもう一度見てから、もう一度閉じてください。本を見ながらコーディングしないでください。ソリューション全体をdeleteして、最初からやり直すことをお勧めします。繰り返しは学習プロセスの面倒ですが重要な部分です。
これを軽く服用しないでください。 「はい、わかりました、私は知っていますこれ」または「私は90%そこにいます、それはほぼ同じくらい良い」と自分に言いたいと思う衝動を感じるたびにスキップしたいと思います別のセクションに戻って、その衝動と戦い、やり直してください。概念を完全に理解していなかったことを自分に正直に認めるのは非常に困難です。
サイドノート:ほとんどの学校のプログラムが、物事をあまりにも馬鹿にして、生徒に高度すぎるツールを提供することによってプログラミングコースを「キックスタート」しようとするのは、非常に悪いことだと思います:目標あなたの人生を惨めにすることではありませんし、あなたにとっても後のキャリアであなたのツールによって自動化され、時々かろうじて覚えさえすることを暗記することでもありません。それはあなたに浮かぶすべてのビットを教えるためです。
エクササイズの実装に成功した場合、必ずしも次のエクササイズに直接ジャンプする必要はありません。それを改善するために何ができるか見てみてください。要求された出力を変更できますか?小さな機能を追加しますか?オプション?主な難題をクリアした楽しいゾーンにいるので、試してみてください。これらの自主的に課された小さな要件は、あなたの精神を少し上に保つ可能性が高くなります。
ただし、あまり遠くに行かないでください。アルファベットを印刷して反転させ、突然画面の対角線上に色のグラデーションで表示されるようにしないでください。小さな一歩を踏み出してください。学習は長く反復的なプロセスであり、難易度が高くなる問題にアプローチする必要があります(たとえば、私が通常どのように recursionを説明する を考えているかを参照してください)。
あなたの問題は実際にはプログラミングとはまったく関係ありません。数千人が数学を学ぼうとするときに遭遇するのと同じ問題です。
あなたが彼らに問題を与えた場合、彼らは解決への彼らの方法をどのように動かすかを見ません。しかし、あなたが彼らのための解決策を書き留めれば、ほとんどはそれを理解し、「くそー、それはとても簡単だった!」と考えるでしょう。それでも、あなたは彼らに異なる測定値と仮説で同様の問題を与えるでしょう、そして彼らはそれを解決することに失敗します:彼らはその背後にある論理を理解していなかった、そして彼らは彼ら自身でそれを行うことができるように練習が必要です。
これは数学の一般的な問題ですが、私の意見では、ソルフェージュ、言語文法、物理学など、いくつかのロジックが必要な他の多くの分野で見られます。そして、それは「自然な」能力ではありませんこれらのことを理解するために:それは単に実践に帰着します(その分野、または個人がこの分野の概念をより簡単に理解するように導く他の分野で)。
コードを書くことを学ぶことができない理由はありません。 「ああああ」に到達するまでやり続けるだけです。 /エウレカの瞬間。次に、次のより難しい問題に進みます。
これらも役立つかもしれません(後で):
これがあなたが聞きたい答えではないことは知っていますが、次のコードを記述してください!
より具体的には、理解しているコードを分析します。私はそれを通常の英語に「翻訳」するのに役立ちます(私は比較的初心者なので)。
最初にコードを書くためのアイデアをブレインストーミングしてください(つまり、「ここで変数を宣言し、このセグメントを反復処理する」など)。次に、これらのさまざまなセグメントを実行する方法を1つずつ調べます。
コーディングは暗記の練習ではなく、ビルディングブロックから何かを構築する方法を考え出すようなものではないことに注意してください。実際の外国語を学ぶのと同じように、理解が最初に来ます。これは、あなたが順調に進んでいることの良い兆候です。
コードを読み書きすればするほど、コードが意味をなすようになると信じてください。
他の人が言ったように、これはあなたが練習し、練習し、練習しなければならない場合です。
1つの問題のみを解決する小さなプログラムの束を記述します
時には、最も難しい部分は実際にプログラミングに値する何かを思い付くことです。可能であれば、クラスや継承など、苦労していると思われるトピックで作業してみてください。私の頭の上のいくつかのアイデア:
GetArea
を与えます。次に、TriangleクラスとRectangleクラスにPolygonを継承させ、GetAreaが実装されていることを確認します。より高次のポリゴン(五角形、六角形など)については、これを繰り返します。*コードゴルフの目的は、質問に記載されている最小限の文字、バイト、またはその他のメトリックを使用して、提供されたタスクを実行することです。答えのいくつかを読んだら、人々がこれらの問題を解決する賢い方法にすぐに感謝します。 しないでください最小バイト数で問題の解決に集中してください!コードゴルフに投稿する人々は非常に経験豊富なプログラマーです。しかし、いくつかの質問はそれ自体で簡単なタスクを提供します。
いくつかの楽しいコードゴルフの例:
問題解決の基本構造:
これらの多くは、関数がどのように見えるべきかについての良い考えをあなたに与えます。 Xが与えられ、Yを行うと、結果はZになります。
void foo()
{
// Set up X here
// Do Y here
// Display Z here
}
基本を学び、言語に慣れるためには、上記のテンプレートで十分です。よりオブジェクト指向のテンプレートは次のようになります:
Z foo(input X)
{
Z result;
// Do Y to X
return result;
}
役立つ場合は、紙に書き留めます。 あなたが人間としてどのようにしてこの問題を解決するのか、その過程を自分で語ってください。例:番号i、j、kを指定して、降順で表示します。人として、それを解決するのは簡単です。難しいのは、アイデアを行ごとの説明に変換して、コンピューターで解決できるようにすることです。
あなた自身のアイデアも思いつくようにしてください。それは難しいかもしれませんが、最も単純なプログラムでさえ、あなたが知らなかった何かをあなたに教えるかもしれません。重要なのは、基本に慣れるまで、基本を身につけることです。
コードを読むだけではどこにも到達しません。コードを書く必要があります。コードを書くだけです。作成したコードががらくたであっても心配しないでください。誰もががらくたコードを書いています。一部の人々はそれから生計を立てています。誰もが良いコードを書き始めることはありません。私は、学習中に悪いコードを書くことはほぼ必要だと私は考えています。
同じことを行う2つのコードブロックを読み取る場合、良いコードと悪いコードの違いを理解するのは難しいですが、スクリプトを記述して、知識のある人がそれをレビューしてフィードバックを提供すると、違いがはるかに明らかになることがよくあります。あなたはそれをあなたが知っているものに直接適用することができます。
プログラミングは、暗記によって覚えることはできません。タイムテーブルや履歴の日付とは異なります。プログラミングは、鋭敏さを保つために一定の練習が必要な実践的なスキルです。コードを書かずにプログラミングを学ぶことは、本を読んで泳ぐことを学ぶようなものです。
この質問にはすでに本当に良い答えがいくつかありますが、まだ見たことのない考えがいくつかあります。
プログラミング言語の学習は、「実際の」言語の学習によく似ています。単一の文、科学論文、本など、書くより読む方が常にはるかに簡単です。読むとき、文脈からだけで多くを理解することができ、読むときにテキストやコードを理解することができます。わからない単語を見つけたら、同じ語幹を持つ別の単語を知っているかもしれません。メソッドを見るとき、メソッドの名前はそれが何をするかについての良い考えを与えます。書くときは、構文だけでなく実際に使用する単語も覚えておく必要があります。プログラミングについても同じです。
他の人が言ったように、readingプログラムからwriteプログラムだけを学ぶことはできません。
小さなものから始めましょう。 Javaチュートリアルを探し、すべてのユニットを次々に実行します。十分な自信がある場合は、小さなプロジェクトを選択してスキルをテストします。おそらく、よく知っている簡単なゲームをいくつか選択してください。 GUIのやりとりはそれほど必要ありません。決定したら、Eclipseを開いて「空白のページ」を見つめるだけではありません。ストーリーボードを作成します。複雑なUML図を描く必要はありません。特定の側面について考えてください。プログラムの問題を解決できます。つまり、ストーリーや議論がどのように展開されるか、いわばコードです。そして、コードを書くときは、下書きから始めます。通常、プログラムが何をすべきかを順番に説明するたくさんのコメントを書きます。その後、実際のプログラムコードの入力を開始します。
他の人が言っているように、あなたはコードを書く練習をする必要があるだけです。それが実現するためには、事前定義されたメッセージの印刷、単純なインタラクティブな電卓の作成、特定のタスクの解決など、何らかの問題の解決に挑戦する必要があります。
インスピレーションが不足している場合、 Project Euler には、難易度が増す数学/プログラミングの練習問題がたくさんあります。これらは達成するための明確で挑戦的な目標を提供し、プログラムをより快適に設計するのに役立ちます。
それが本当に家の近くにヒットするので、私はこのトピックにチャイムを入れようと思っただけです。
コーディングを始めるには、必要だけです。誤解しないでください。読むことは素晴らしいのですが、実際に役立つコーディングの知識が何かを構築しているということです。 1つの夏の配置からそれについて読んだ前年よりも多くを学びました。
私もあなたに追加する必要があります盲目的にコーディングを始めるべきではありません。自分でプロジェクトを作成します。自分が何を作りたいのかを理解するために、自分を入れるための何らかの方向性が必要です。どれだけ早く学べるかに驚かれることでしょう。 IDE=を開き、Hello Worldの簡単な例を作成し始めると、そのやる気を起こさせる感覚がすぐにあなたに忍び寄ります。少し奥行きのあるものを見つけて、それを知る前に、あなたは拡大します。その上に。