web-dev-qa-db-ja.com

コードを作成するための最も最適化された方法をどのように見つけますか?

私のプログラミングのキャリアの中で、私はJavaとPHP、Javascript、そして少しのRubyを書いています。私はCS専攻ではありませんが、より広範なインターネット専門家の学位からWeb開発に入りました。デザイン、ユーザーエクスペリエンス、開発。フロントエンド開発者としてスタートし、すぐに複雑なアプリケーションに取り組む素晴らしい仕事を手に入れました。フロントエンドの世界をマスターすると、プロジェクトのソフトウェアエンジニアになる機会がありました。システムと私がやりたいことを行うためにそれを設計する方法を理解することができました。

明らかに私はCSの学位を持っている他のほとんどの人と仕事をしています。私が取り組んでいるアプリケーションに何かをさせる方法を理解するのは早いかもしれませんが、彼らは通常私よりも基本的な概念をよく理解しています。

そうは言っても、JavaおよびPHPについては、言語のドキュメントが公開されていますが、適切に最適化されたコードを書くためのベストプラクティスを教えてくれるリソースがあります。これらのドキュメントを読むことは、コードを記述して、あなたのような人に見せて、「なぜあなたはこれをしなかったのか」または「私は彼がしなかったとは信じられない」の束を得られないほど十分ではありません。それ。 "

ブログはたくさんありますが、より良いコードの書き方を説明することに焦点を当てた人が書いているのは、あちこちにあります。あるいは、私が間違っているかもしれません。私はこの質問をそれほど明確に説明しているとは思いません。私の主な問題は、コードを書いてそれを動作させることができることです。それがうまく書かれていると思いますが、私にはよくわかりません。コードを機能させるだけでなく、他の人がそれを見て、彼らが自分に言っているのと同じように、あなたがそれを書いたことをどのように知っていますか?現在誰かが特定の言語リソースを持っているなら、私はPHP onesを好むでしょう、それが私が取り組んでいるものだからです。

4
dan.codes

optimizedには2種類あり、個別に理解する必要があります。

  • パフォーマンスに最適化
  • 可読性、再利用、保守性のために最適化されています

これら2つが100%オーバーラップすることは、おそらく非常にまれです。ほとんどの人はbestコードを単に2つの最適な組み合わせであると考えています。

パフォーマンス

パフォーマンスを最適化する方法を理解するための最良の方法は、言語とライブラリの機能を学習することを学ぶことであることがわかりました。たとえば、あなたのそれらのCSピアはおそらくArrayListがストレージに配列を使用することをずっと前に学びました、そして配列は固定長なので、配列を新しいにコピーするある種の操作が必要です要素を追加するときの配列。 LinkedListとは対照的です。要素を追加することは、最後の要素を見つけて参照を割り当てることよりもコストがかかりません。 (これは本当に基本的な例です。すでにご存じかもしれません)。

Javaの内部を把握するための他の良い点は、HashMaps、StringBuilder対String(可変または不変)、synchronized、I/O、そしてWebで作業している場合は、サーブレットと関連するライブラリ。最も重要なことは、Javaがメモリを使用する方法と、参照を制御してオブジェクトの作成を制限する方法を本当によく理解することです。

PHPとJavaScriptでは、目標は同様ですが、コンテンツが異なります(これに限定されません:) PHP-リクエストライフサイクルとrequire/includeのパフォーマンスの理解JavaScript-イベント処理(必要のない場所にイベントを配置するか、未使用のイベントをクリーンアップしない)は、私が知っているパフォーマンスの問題の最大の原因です。

読みやすさ、再利用、保守性

これは理解のすべてですDRY( 自分を繰り返さないでください )、 懸念の分離"あなたはそうではありませんこれが必要になる」 と他のリファクタリングとアーキテクチャの原則。

このため、@ Developer Artの提案とClean Codeのような本を読むことは非常に役立ちます。ここでは経験も非常に重要です。この領域では、実際にはCSピアに勝る可能性があります。

最高のコード?

前に言ったように、全体的に最適化されたコードの最も重要な部分は、パフォーマンスと可読性/保守性の両方について考えることを覚えておくことです。パフォーマンスの改善の最後のビットが完全に読み取り不可能なコードブロックを犠牲にしてもたらされる場合、おそらく価値がありません(場合によっては、大規模な問題が発生すると、かもしれません-大量のメモ付き!)。一方、「美しい」コードがまったく効率的でない場合は、それほど美しくありません。

あなたにとって、私の最善の提案は、あなたが使用している言語の陰に隠れ、基本的なデータ構造を理解し始めることです。これらについて具体的な質問がある場合、スタックオーバーフローは明らかに貴重なリソースです。

18
Nicole

主に2つの改善点があります。

1.直接フィードバックが得られます。つまり、yourコードが確認されます。誰が別の問題です。おそらくあなたの同僚(コードレビュー、ペアプログラミングなど)によって、またはオンラインでどこかにそれを配置し、オンラインで賢い人々からフィードバックを得ます。

2.物事を正しく行う方法を学びます例によって次に、それを実践に適用します。本、ブログを読み、StackOverflowで質問と回答を確認し、人々が一般的な問題をどのように解決するかを見ます。しばらくすると、家族の一連の状況についてグッドプラクティスと見なされるものを理解できます。

1がなく、特定のケースで2が見つからない場合:

3.問題に取り組むための最初の提案(アルゴリズム、アーキテクチャの決定など)を行い、それを行うための正しい方法に関するフィードバックと提案を得ます。

特定の言語でコードを記述するベストプラクティスについては、専門書を参照してください。

アーキテクチャの決定におけるベストプラクティスについては、まず一般的な設計パターンを確認し、次に、作業中またはつまずきのあるコードでそれらを観察して認識します。

別の素晴らしい情報源はあなたの実践です。あなたは最善の推測をして、それを実行して、何が起こるかを確認します。一連の意思決定の結果(特に長期的な結果)を経験した後、状況のベストプラクティスとは何かを理解します。

2
user8685
  • これが正式な要件ではない場合でも、同僚のコードを見て、あなたの同僚にレビューしてもらいます。うまくいけば、何か上手な人がいます。
  • Stackoverflowに関する質問にコーディングサンプルで回答してください。
  • オープンソースプロジェクトに参加してください。
1
JeffO