質問を始める前に、ここに私について少し情報があります。
私はコンピュータサイエンスの学部生です。Javaが私の主要なコーディング言語です。
私の大学の基本的な問題は教育水準です。理論的な知識だけでなく、コーディングの知識を生徒に教えることについて心配する人はいません。
その結果、大学の仲間のほとんどはプログラミングをまったく理解していません。
従来のプログラミング環境から抜け出すことができなかったため、コーディングがある程度制限されています。
私のプログラミング/コーディングスキルを開発および拡張するために可能な方法は何ですか。
また、同じのソースを提案できますか?
編集済み:コーディングスキルの開発を示唆する情報源。
プログラミングは経験が重要な分野の1つです。したがって、より優れたコーダーになるには、より多くのコードを記述する必要があります。しかし、あなたがすべきことは書くことだけではありません。また、他の開発者のコードをreadして、そこから良いコードが何であるかを学ぶ必要もあります。 これに関するSOの質問 を参照してください。
また、特にコーディングに特化した本が役に立つかもしれません。 「コード完了」など。これらには、優れたコードとは何か、および基本的な知識と組み合わせて、優れたプログラマーになるための説明が含まれています。
私のお気に入りの引用は孔子からです:
聞こえます、知っています。なるほど、覚えています。分かります。
私が得たすべての知識は、単一の戦略を適用することからのものでした:
常に最も困難な道を進みます。
C#を学びたいですか? C#開発者としての仕事を取得します。
あなたはイタリア語を学びたいですか?辞書の英語/イタリア語でそこに行き、イタリア語を話します
コーディングを学びたいですか? コード!
コーディングは素晴らしいアドバイスですが、フィードバックをくれる人がいないと、間違いを繰り返すだけです。仕事を見つけ、オープンソースプロジェクトに取り組み、メンターを見つけて、コードを見てもらいます。
これが プレゼンテーション Dan Northが提供したもので、QConは初心者から熟練ツールにSharpening the Toolsと呼ばれるプログラマにどのように移行するかについて説明しています。以下は、プレゼンテーションからの重要な提案です。
単純な言語用のコンパイラーをゼロから作成してみてください。途中で、スキルが大幅に向上します(ボーナスとして、正式な言語理論からのいくつかのニース理論的手法を使用します)。私は簡単なバージョンのExcelを書いてみましたが、これも非常に素晴らしい演習です。
他の人のように、コーディングスキルを向上させる唯一の方法は実際にそれを行うことです。いくつかの大きなプロジェクトで手を汚してください。ただし、大規模なプログラムの場合は、ソフトウェア設計技術を習得することがさらに重要です。そうしないと、プログラムのサイズが管理できなくなるようです。
ネイト・カービーからのニースの引用があります:
「悪いプログラマーは細部を無視します。悪いデザイナーは細部に迷い込みます。」
したがって、これらの2つの抽象化レベルを切り替えることは、習得すべきスキルです。
また、1時間に何行のコードを書くことができるかという速度は、あなたが目指すべきものではありません。 David Parnas による引用が好きです:
「開発者が「大規模なシステムを迅速に構築する方法を知っている人」と説明されているのをよく耳にします。大規模なシステムをすばやく構築するのにトリックはありません。迅速に構築するほど、システムは大きくなります。」
私が学んだほとんどすべての言語で、賭けプールまたはバカラゲームを実装しました。
このタイプのソフトウェアは
複数プレイヤーのブラックジャックとポーカーも機能します。
1つの注意点は、私の日常業務では金融システムに取り組んでおり、チャンスのマルチプレイヤーゲームとトレーディングシステムを作成する際に考慮すべき点が大幅に重複していることです。
水に飛び込むと、最初は寒いかもしれませんが、外に出る誘惑に駆られますが、すぐに体が慣れ、再び暖かくなります。水に慣れると、泳ぐことができます。一番深い場所。
数か月前にJavaを勉強した大学を卒業しました。あなたと同じように、適切にコーディングする方法についての手がかりはありませんでした。約1か月前に、PHPでWebアプリを作成したいと考えていました。自分が何をしているのか分からなかったが、ただやってみた。最初は威圧的で圧倒的でしたが、練習するにつれて自然になります。私は何度もアプリケーションを書いて、毎回それをさらに単純化しました。今、私は最初からアプリに取り組んでいますが、今度は、オブジェクト指向の方法を理解し、PEARとそのモジュールクイックフォームを使用しています。それにもかかわらず。
だから練習。水に飛び込む!幸運を祈ります:)
このように考えてください...タイガーウッズは、ゴルフを見たり、それについて読んだりしても、「最高の」ゴルファーになることはできませんでした。彼は、他のアスリートがそうであるように、彼のゲームを改善し、それについて何かをすることができるところを見つけることによって、勉強すること、練習すること、によってそれを手に入れました。
コーディングは同じです。それを上手に進めるための最良の方法は、他の人が何をしているかを研究し、なぜ彼らがそのようにそれをするのかを理解し、それからあなた自身でそれを行うことです。
他の人間の活動と同様に、改善する最良の方法は知識を練習することですが、そのための練習が必要です。 デーブ・トーマス 、本の実用的なプログラマーの著者の一人は、武道におけるカタの概念に似た コードカタス の概念を導入しました。
あなたはそこで見ることができます: http://codekata.pragprog.com/
私はあなたの好きな言語の構文のすべてを学ぶことを勧めます。仮想関数、継承、ラムダ(存在する場合)の使用方法を理解します。など。私がしたことの1つは、大きな恐ろしいライブラリを取得し(C++のブーストとSTLでこれを実行しました)、すべての行とすべてのキーワードが意味をなすかどうかを確認することでした。
あるいは、最新のバージョンをカバーする良い構文があれば、言語構文リファレンスを読むこともできます。ここの例は C#リファレンス です(一番上のバージョンではありません。探していた構文を持たない、より人気のある古いバージョンを見てミスしました)。
一般的なコンセンサスは「もっと多くのコードを書く」ですが、私はそれに同意しますが、さまざまな種類のコードをたくさん書く必要があるというアドバイスを追加します。 Javaは、言語としては問題ありませんが、パワースペクトルの上下にコードを必ず記述してください。Javaに加えて、下位レベルでいくつかの小さなプロジェクトを実行することをお勧めします言語(Cはこれに適しています)、スクリプト言語(Perlを好みますが、pythonも良い選択です)、関数型言語(LISPが一般的な推奨事項ですが、OCamlそしてHaskellも良い選択です)そして少なくともアセンブリ言語を読むことに慣れます。
また、実装するプログラムの種類をいくつか選択してください。少なくとも、デスクトップGUI、リッチWebアプリケーション、ネットワーククライアントとサーバー、ドライバー、データ変換ユーティリティ、レイトレーサー、および物理シミュレーションの実装を見てください。
すべてのプロジェクトの範囲は比較的小さく、目標は機能満載のプログラムを用意することではありませんが、さまざまな分野でさまざまな経験を積み、それぞれに必要なさまざまなタイプの考え方を学ぶことです。そして、あなたの興味がどこにあるかを見つけること。
これを完了すると、どのタイプのプログラミングに最も関心があるかがよくわかります。また、オープンソースプロジェクトを見つけたり開始したりして、大規模なコードベースでの作業経験を積むことができます。長期プロジェクト、および他の開発者との協力。
あなたはいくつかの同様の答えを得ており、私のものも同じになります。コードを書く。これを行うには、2つの良い方法があります。
これらのどちらを使用しても、必要なプログラミングの直接的な経験が得られるだけでなく、学習して質問をしなければならないときに、プログラミングコミュニティへの関与を深めることができます。あなたは多くの間違いをするでしょう。これは良いことです。もしあなたが間違いを犯すのをやめたなら、あなたは学習をやめ、自分に挑戦する新しい方法を見つける必要があります。
私の提案
ピアレビューは、コードの品質向上に役立ちます。実際のメンターがいない場合は、StackOverflow、RefactorMyCode、またはメーリングリストにコードを(必要最低限に削減した後)投稿することができます。コードの質の向上を支援してくれる人がいます。
はい、プログラミングスキルを伸ばし、それらを鋭く保つためには、練習が非常に重要です。しかし、練習だけでは、これまでのところしかかかりません。また、あなたはあなたよりも多くを知っている人々から学ぶ必要があります。聞いたことのないテクニック、すぐにメリットが明らかではないプラクティス、自分では決して発明できないトリックがあります。
新しいテクニック、きちんとしたトリック、便利な方法を学ぶ方法はたくさんあります。本を読む。同僚と話す。質問をする。他の人のコードを確認し、あなたのコードを彼らにレビューさせる。このサイトを含むプログラミングに関するブログや記事を読んでください。つまり、真空中で作業しないでください。
ああ、そしてNP完全な意味がわからない場合、またはbig-O表記があなたを怖がらせる場合は、おそらく、いくつかの計算理論とアルゴリズムクラスを使用する必要があります。
私は、ビルダー、ファクトリー、コンポジット、そして最終的にはオブザーバー、メディエーター、フライウェイトなどの設計パターンについて読むべきだと思います。デザインパターンはコーディングソリューションのすべてではありませんが、オブジェクト指向プログラミングの理論的概念を実装する方法を示します。
私は何がうまくいったかを提案することができるだけです。プログラミング言語を学び、それを使ってチェスエンジンを作成するという夢がありました。私は本、記事、小さなサンプルに時間を費やしてきました。それで、開発者にとってより良いドキュメントがある実際のプロジェクトをチェックすることにしました。1つを選択し、プロジェクトを毎日読み始めました。本を読んでいる間、過ぎた日は時間の無駄だとは思わないでください。記事や本を読むのに時間を費やすよりもはるかに優れています。一目では分からないことがたくさん出くわしますが、根気よく研究していけば日々変わります。 1週間ですべてを理解することを期待しないでください。いくつかのことを理解できないときは、低い自尊心を維持する必要があります。
情熱を持っている既存のプロジェクトを選択してください。コードを読み始めてデバッグし、毎日の動作を理解してください。また、プロジェクトを自分で使用してください。次に、必要な機能をいくつか追加します。同じまたは同様のアプリケーションを書いてみてください。
"練習!"それは決まり文句です。
数学の授業で学んだことを復習し、問題に対処するプログラムをいくつか作成する必要があります。また、エレベータープログラム、自動販売機(コインの変化を計算する)を実装して、ロジックスキルを磨きます。日常生活のすべてを考え、それらを実装します。