web-dev-qa-db-ja.com

コーディングスキルを向上させるにはどうすればよいですか?

質問を始める前に、ここに私について少し情報があります。

私はコンピュータサイエンスの学部生です。Javaが私の主要なコーディング言語です。

私の大学の基本的な問題は教育水準です。理論的な知識だけでなく、コーディングの知識を生徒に教えることについて心配する人はいません。

その結果、大学の仲間のほとんどはプログラミングをまったく理解していません。

従来のプログラミング環境から抜け出すことができなかったため、コーディングがある程度制限されています。

私のプログラミング/コーディングスキルを開発および拡張するために可能な方法は何ですか。

また、同じのソースを提案できますか?

編集済み:コーディングスキルの開発を示唆する情報源。

76
ykombinator

プログラミングは経験が重要な分野の1つです。したがって、より優れたコーダーになるには、より多くのコードを記述する必要があります。しかし、あなたがすべきことは書くことだけではありません。また、他の開発者のコ​​ードをreadして、そこから良いコードが何であるかを学ぶ必要もあります。 これに関するSOの質問 を参照してください。

また、特にコーディングに特化した本が役に立つかもしれません。 「コード完了」など。これらには、優れたコードとは何か、および基本的な知識と組み合わせて、優れたプログラマーになるための説明が含まれています。

46
P Shved

私のお気に入りの引用は孔子からです:

聞こえます、知っています。なるほど、覚えています。分かります。

私が得たすべての知識は、単一の戦略を適用することからのものでした:

常に最も困難な道を進みます。

C#を学びたいですか? C#開発者としての仕事を取得します。

あなたはイタリア語を学びたいですか?辞書の英語/イタリア語でそこに行き、イタリア語を話します

コーディングを学びたいですか? コード!

98
user2567

コーディングは素晴らしいアドバイスですが、フィードバックをくれる人がいないと、間違いを繰り返すだけです。仕事を見つけ、オープンソースプロジェクトに取り組み、メンターを見つけて、コードを見てもらいます。

21
JeffO

これが プレゼンテーション Dan Northが提供したもので、QConは初心者から熟練ツールにSharpening the Toolsと呼ばれるプログラマにどのように移行するかについて説明しています。以下は、プレゼンテーションからの重要な提案です。

  1. 基本の練習:カタ、楽しみのためのコード...
  2. 他の人から学ぶ:本、ブログなどを読んだり、コードを読んだり、ペアでプログラムしたり...
  3. トレンドを理解する:現在業界で何が起こっているか
  4. 知識を共有する:何かを学ぶ最良の方法は、それを理解して教えることです
  5. ツールボックスを保守する:「時代を超えた」新しいツールを使用する
  6. 学習方法を学ぶ:学習の仕組みを理解する
10
ysolik

単純な言語用のコンパイラーをゼロから作成してみてください。途中で、スキルが大幅に向上します(ボーナスとして、正式な言語理論からのいくつかのニース理論的手法を使用します)。私は簡単なバージョンのExcelを書いてみましたが、これも非常に素晴らしい演習です。

他の人のように、コーディングスキルを向上させる唯一の方法は実際にそれを行うことです。いくつかの大きなプロジェクトで手を汚してください。ただし、大規模なプログラムの場合は、ソフトウェア設計技術を習得することがさらに重要です。そうしないと、プログラムのサイズが管理できなくなるようです。

ネイト・カービーからのニースの引用があります:

「悪いプログラマーは細部を無視します。悪いデザイナーは細部に迷い込みます。」

したがって、これらの2つの抽象化レベルを切り替えることは、習得すべきスキルです。

また、1時間に何行のコードを書くことができるかという速度は、あなたが目指すべきものではありません。 David Parnas による引用が好きです:

「開発者が「大規模なシステムを迅速に構築する方法を知っている人」と説明されているのをよく耳にします。大規模なシステムをすばやく構築するのにトリックはありません。迅速に構築するほど、システムは大きくなります。」

8
D. L.

私が学んだほとんどすべての言語で、賭けプールまたはバカラゲームを実装しました。

このタイプのソフトウェアは

  • 日付と時刻、計算あり
  • 通貨の種類と通貨との間で変換できるもの
  • テストが簡単な個別のルールセット
  • 状態、状態間の遷移、および状態遷移を担当する複数のエンティティ
  • 同じモデルの異なるビューを持つ複数のユーザー
  • 複数の終了条件

複数プレイヤーのブラックジャックとポーカーも機能します。

1つの注意点は、私の日常業務では金融システムに取り組んでおり、チャンスのマルチプレイヤーゲームとトレーディングシステムを作成する際に考慮すべき点が大幅に重複していることです。

5
sal
  • 適切なオープンソースプロジェクトを選択し、コードを読んでください。
  • 中規模のプロジェクトを自分で取り上げ、コーディングを開始します
    • Web開発に興味がある場合は、お気に入りのテクノロジーを使用して、既存のサイトをゼロから構築してみてください。ジャンゴのTwitterはどうですか?
    • デスクトップアプリケーションの開発に慣れている場合は、メモ帳から始めて、高度な機能(最初は正規表現ベースの検索)をサポートするようにそれを即興で作成します。
4
Amarghosh

水に飛び込むと、最初は寒いかもしれませんが、外に出る誘惑に駆られますが、すぐに体が慣れ、再び暖かくなります。水に慣れると、泳ぐことができます。一番深い場所。

数か月前にJavaを勉強した大学を卒業しました。あなたと同じように、適切にコーディングする方法についての手がかりはありませんでした。約1か月前に、PHPでWebアプリを作成したいと考えていました。自分が何をしているのか分からなかったが、ただやってみた。最初は威圧的で圧倒的でしたが、練習するにつれて自然になります。私は何度もアプリケーションを書いて、毎回それをさらに単純化しました。今、私は最初からアプリに取り組んでいますが、今度は、オブジェクト指向の方法を理解し、PEARとそのモジュールクイックフォームを使用しています。それにもかかわらず。

だから練習。水に飛び込む!幸運を祈ります:)

4
Jonathan

このように考えてください...タイガーウッズは、ゴルフを見たり、それについて読んだりしても、「最高の」ゴルファーになることはできませんでした。彼は、他のアスリートがそうであるように、彼のゲームを改善し、それについて何かをすることができるところを見つけることによって、勉強すること、練習すること、によってそれを手に入れました。

コーディングは同じです。それを上手に進めるための最良の方法は、他の人が何をしているかを研究し、なぜ彼らがそのようにそれをするのかを理解し、それからあなた自身でそれを行うことです。

4
Muad'Dib

他の人間の活動と同様に、改善する最良の方法は知識を練習することですが、そのための練習が必要です。 デーブ・トーマス 、本の実用的なプログラマーの著者の一人は、武道におけるカタの概念に似た コードカタス の概念を導入しました。

あなたはそこで見ることができます: http://codekata.pragprog.com/

4
jmservera

私はあなたの好きな言語の構文のすべてを学ぶことを勧めます。仮想関数、継承、ラムダ(存在する場合)の使用方法を理解します。など。私がしたことの1つは、大きな恐ろしいライブラリを取得し(C++のブーストとSTLでこれを実行しました)、すべての行とすべてのキーワードが意味をなすかどうかを確認することでした。

あるいは、最新のバージョンをカバーする良い構文があれば、言語構文リファレンスを読むこともできます。ここの例は C#リファレンス です(一番上のバージョンではありません。探していた構文を持たない、より人気のある古いバージョンを見てミスしました)。

3
user2528

一般的なコンセンサスは「もっと多くのコードを書く」ですが、私はそれに同意しますが、さまざまな種類のコードをたくさん書く必要があるというアドバイスを追加します。 Javaは、言語としては問題ありませんが、パワースペクトルの上下にコードを必ず記述してください。Javaに加えて、下位レベルでいくつかの小さなプロジェクトを実行することをお勧めします言語(Cはこれに適しています)、スクリプト言語(Perlを好みますが、pythonも良い選択です)、関数型言語(LISPが一般的な推奨事項ですが、OCamlそしてHaskellも良い選択です)そして少なくともアセンブリ言語を読むことに慣れます。

また、実装するプログラムの種類をいくつか選択してください。少なくとも、デスクトップGUI、リッチWebアプリケーション、ネットワーククライアントとサーバー、ドライバー、データ変換ユーティリティ、レイトレーサー、および物理シミュレーションの実装を見てください。

すべてのプロジェクトの範囲は比較的小さく、目標は機能満載のプログラムを用意することではありませんが、さまざまな分野でさまざまな経験を積み、それぞれに必要なさまざまなタイプの考え方を学ぶことです。そして、あなたの興味がどこにあるかを見つけること。

これを完了すると、どのタイプのプログラミングに最も関心があるかがよくわかります。また、オープンソースプロジェクトを見つけたり開始したりして、大規模なコードベースでの作業経験を積むことができます。長期プロジェクト、および他の開発者との協力。

3
Cercerilla

あなたはいくつかの同様の答えを得ており、私のものも同じになります。コードを書く。これを行うには、2つの良い方法があります。

  1. あなたにとって本当に魅力的な、または興味のあるものを選び、それを実装してください。ゲームに夢中なら、ゲームを書いてください。 Webに興味がある場合は、面白くてオリジナルのWebサイトを作成してください。あなたもそれを終えることができないかもしれませんが、経験はあなたに多くを教えてくれます。
  2. 興味のあるオープンソースプロジェクトを選び、それに参加してください。既存のコードから学び、それを使用してバグを修正し、単体テストを構築し、新しい機能を実装します。

これらのどちらを使用しても、必要なプログラミングの直接的な経験が得られるだけでなく、学習して質問をしなければならないときに、プログラミングコミュニティへの関与を深めることができます。あなたは多くの間違いをするでしょう。これは良いことです。もしあなたが間違いを犯すのをやめたなら、あなたは学習をやめ、自分に挑戦する新しい方法を見つける必要があります。

2
glenatron

私の提案

  • ペットのプロジェクトを見つけて、あなたが知っているものとは異なる言語(lyke python/c#)でそれを書いてください。これは想像以上にあなたに教えてくれます。類似した他のプロジェクトを見て、それらと同等の機能を入手してください。あなたはこれでゆっくり行くことができ、適度な目標を持って、新しい機能で難易度を着実に増加させることができます。これは就職の面接に行くときにもあなたのショーピースになります。
  • Webサービス、javascript、ajax、ジオコーディングなど、基本的にソフトウェアの世界で前進しているあらゆるものなど、関連するテクノロジーのプロジェクトでの用途を見つけます。
  • Linux/freebsdのような他のオペレーティングシステムで遊ぶ。さまざまな種類のシステムにさらされる機会が増えるほど、それらの動作についての考え方や、なぜ彼らがそうした方法で物事を行ったのかを理解するようになります。
  • コードの一部の使用を終えたら、コードに戻って、常にコードを改善しようとします。非効率性を見つけ、必要に応じてコメントを追加し、それを完成させてください。
  • C2.comで調べてみてください。良いコーディング方法はたくさんあります。これらを学び、自分のプロジェクトに適用してみてください。
  • 実用的なプログラマーやコード一式のような本を読んでください、それらはあなたに戦い強化されたプログラミングの知識を与えます。
  • これは無関係に聞こえるかもしれませんが、RCカーのレース、楽器の演奏、外国語の学習などがまだない場合は、別の技術的な趣味を見つけてください。脳のより多くの部分が使用されているほど、プログラミングが多すぎる可能性があるため、時々リラックスする必要があります。
2
Tjaart

ピアレビューは、コードの品質向上に役立ちます。実際のメンターがいない場合は、StackOverflow、RefactorMyCode、またはメーリングリストにコードを(必要最低限​​に削減した後)投稿することができます。コードの質の向上を支援してくれる人がいます。

2
missingfaktor

はい、プログラミングスキルを伸ばし、それらを鋭く保つためには、練習が非常に重要です。しかし、練習だけでは、これまでのところしかかかりません。また、あなたはあなたよりも多くを知っている人々から学ぶ必要があります。聞いたことのないテクニック、すぐにメリットが明らかではないプラクティス、自分では決して発明できないトリックがあります。

新しいテクニック、きちんとしたトリック、便利な方法を学ぶ方法はたくさんあります。本を読む。同僚と話す。質問をする。他の人のコードを確認し、あなたのコードを彼らにレビューさせる。このサイトを含むプログラミングに関するブログや記事を読んでください。つまり、真空中で作業しないでください。

ああ、そしてNP完全な意味がわからない場合、またはbig-O表記があなたを怖がらせる場合は、おそらく、いくつかの計算理論とアルゴリズムクラスを使用する必要があります。

1
Dima

私は、ビルダー、ファクトリー、コンポジット、そして最終的にはオブザーバー、メディエーター、フライウェイトなどの設計パターンについて読むべきだと思います。デザインパターンはコーディングソリューションのすべてではありませんが、オブジェクト指向プログラミングの理論的概念を実装する方法を示します。

1
Tim Claason

私は何がうまくいったかを提案することができるだけです。プログラミング言語を学び、それを使ってチェスエンジンを作成するという夢がありました。私は本、記事、小さなサンプルに時間を費やしてきました。それで、開発者にとってより良いドキュメントがある実際のプロジェクトをチェックすることにしました。1つを選択し、プロジェクトを毎日読み始めました。本を読んでいる間、過ぎた日は時間の無駄だとは思わないでください。記事や本を読むのに時間を費やすよりもはるかに優れています。一目では分からないことがたくさん出くわしますが、根気よく研究していけば日々変わります。 1週間ですべてを理解することを期待しないでください。いくつかのことを理解できないときは、低い自尊心を維持する必要があります。

情熱を持っている既存のプロジェクトを選択してください。コードを読み始めてデバッグし、毎日の動作を理解してください。また、プロジェクトを自分で使用してください。次に、必要な機能をいくつか追加します。同じまたは同様のアプリケーションを書いてみてください。

1
Freshblood

"練習!"それは決まり文句です。

数学の授業で学んだことを復習し、問題に対処するプログラムをいくつか作成する必要があります。また、エレベータープログラム、自動販売機(コインの変化を計算する)を実装して、ロジックスキルを磨きます。日常生活のすべてを考え、それらを実装します。

1
Ming-Tang