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


76

質問を始める前に、私について少し説明します。

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

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

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

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

プログラミング/コーディングスキルを開発および拡張できる方法は何ですか。

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

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


13
参考:私の経験から、理論的知識は後の部分で確実に役立つでしょう
-Gopi

6
「X日間の泳ぎ方を教える」本を読んで泳げますか?
pramodc84

9
「意図的な練習」。現在のレベルよりもやや難しいことをして、解決し、それから学び、繰り返します。

7
確かに@ pramodc84しかし、水泳に関連する本を読んで、その後、川に飛び込むことは確かにちょうど直接川に飛び込むと水泳を学ぶするより役立つ
Gopi

5
ほとんどの大学でそうです。学位とは、優れたコーダーになることではありません。それはその背後にある理論とそれらを適用する方法を知ることです-あなたは良いコーダーであることは卒業生に練習として残されていると言うことができます。
コンフィギュレー

回答:


46

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

また、コーディングに特化した有用な本を見つけるかもしれません。「コード完了」など。これらには、優れたコードとは何かという説明が含まれており、基本的な知識と組み合わせることで、優れたプログラマーになることができます。


8
Code Completeは良い読書です。それは、私がプログラマーとして大学を卒業したときに読んでいたことを最も望んでいる本です。
グレナトロン

2
その本は私のmust-readリストに載っています。:)ありがとう!
ykombinator

2
@ykombinator:(push 'code-complete must-read)
ジョルジオ

98

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

聞いた、知っている。なるほど、覚えています。私は理解しています。

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

常に最も挑戦的な道を歩んでください。

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

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

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


19
常に最も困難な道を進むために+1。最終的に、それらは簡単な道になります!いい答えだ。
ライアンヘイズ

3
チャレンジに向けて準備することは確かに困難な作業のように思えますが、成功するための動機付けになると思います。素晴らしい答え。私が最もよく知っている言語は、最初に頭に浮かぶ言語で、手がかりがなく、各プロジェクトで継続的に学習しました。
クリス

2
私はほとんどの挑戦によって最も激しく変化しました。より肯定的です

2
良いプログラミングは観客のスポーツではありません。
シークレット

4
@ Pierre、1)ラテン語、2)Perlを学びたい。ラテン語でPerlをコーディング

21

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


1
まさに!それは素晴らしい点です。おそらく、まだメンターはいないでしょう。
ykombinator

4
いくつかのコードを書いて、特定の質問とともにStackOverflow.comに投稿してください。
ジェフ

2
これが、私たちのプロジェクトのコードレビューを得るためにむさぼり食い続ける理由ですが、「そのための時間はありません」。
MetalMikester

1
@MetalMikester-しかし、それを行う時間は常にあります。
ジェフ

1
@JeffOそれはまさに今起こっていることです。:(
MetalMikester

10

Dan Northが行ったプレゼンテーションと、QConをSharpening the Toolsと呼ばれる初心者から専門のプログラマーに移行する方法について説明します。以下は、プレゼンテーションからの重要な提案です。

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

8

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

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

ネイト・カービーから素晴らしい引用があります:

「悪いプログラマーは詳細を無視します。悪いデザイナーは詳細を失います。」

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

また、1時間あたりに記述できるコードの行数の速度は、目標とするべきではありません。David Parnasの引用が好きです。

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


5

学んだほとんどすべての言語で、ベッティングプールまたはバカラゲームを実装しました。

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

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

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

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


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

4

このように考えてください。...Tiger Woodsは、ゴルフを見たり読んだりして、「最高の」ゴルファーにはなれませんでした。彼は、他のアスリートと同じように、勉強して、練習して、自分のゲームを改善できる場所を見つけて、それについて何かをすることで、そのようになりました。

コーディングは同じです。それをより良くするための最良の方法は、他の人が何をするのかを研究し、なぜ彼らがそうするのかを理解し、それを自分でやることです。


はい、タイガーウッズは多くの恋人を持つことで「最高の」ゴルファーになります。:-)彼は本当に良い例ではありません。
DL

4

他の人間の活動と同様に、改善する最善の方法は知識を練習することですが、そのためにはいくつかの運動が必要です。 The Pragmatic Programmerの著者の1人であるDave Thomasは、格闘技のkataコンセプトに似たCode Katasのコンセプトを紹介しました。

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


4

水の中にジャンプすると、最初は寒いかもしれませんが、外に出たいと思うかもしれませんが、すぐに体がそれに慣れて再び暖かくなり、水中で快適になると、泳ぎ回ることができます一番深い場所。

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

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


3

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

または、最新バージョンをカバーする適切なものがある場合は、言語構文リファレンスを読むことができます。ここで例はC#リファレンスです(最上位のバージョンではありません。探していた構文を持たない、より人気のある古いバージョンを見て間違いを犯しました)


3

一般的なコンセンサスは「コードをもっと書く」であり、これに同意しますが、多くの異なる種類のコードを書くべきであるというアドバイスに追加します。Javaは言語に関しては問題ありませんが、パワースペクトルの上下にコードを作成する必要があります。Javaに加えて、低レベル言語(Cはこれに適しています)、スクリプト言語(perlが好きですが、Pythonも良い選択です)、関数型言語(ここではlispが一般的な推奨事項ですが、OCamlとHaskellも適切な選択です)、少なくともアセンブリ言語を読むことに慣れる必要があります。

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

すべてのプロジェクトの範囲は比較的小さくする必要があります。目標は機能満載のプログラムを用意することではなく、実行する可能性のあるさまざまなドメインで幅広い経験を得て、それぞれに必要なさまざまな種類の思考を学び、そして、あなたの興味がどこにあるかを見つけます。

これを行うと、どのタイプのプログラミングに最も関心があるかがわかります。オープンソースプロジェクトを検索または開始して、大規模なコードベースでの作業経験を積むことができます。期間プロジェクト、および他の開発者との共同作業。


2

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

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

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


2

私の提案

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

2

ピアレビューは、コードの品質の向上に本当に役立ちます。実際のメンターがいない場合は、StackOverflowまたはRefactorMyCodeまたはメーリングリストにコードを投稿して(必要な最小値に減らした後)、コードの品質の改善を支援してください。


1

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

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


1

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

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

ああ、NPコンプリートの意味がわからない場合、またはビッグO表記が怖い場合は、おそらく計算とアルゴリズムのクラスの理論を取る必要があります。


1

Builder、Factory、Composite、そして最終的にはObserver、Mediator、Flyweightなどのデザインパターンを読んでください。設計パターンは、コーディングソリューションのすべてではありませんが、オブジェクト指向プログラミングの理論的概念を実装する方法を示しています。


1

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

情熱を持っている既存のプロジェクトを選択します。コードを読み、デバッグし、物事が毎日どのように機能するかを理解してください。また、プロジェクトを自分で使用してください。次に、必要な機能の追加を開始します。同じまたは類似のアプリケーションを作成しようとしても。

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