私は、成果物の期限が厳しいプロジェクトが多数ある環境で働いています。クライアントと直接話をすることもあるので、仕事を迅速かつ迅速に行うことが必要です。
私の問題は、私が頭に浮かぶ最初のソリューションのコードを常に書いているということです。もちろん、その瞬間に最高だと思いました。しかし、それは常にいものになり、後でそれを行うためのより良い方法があるが、時間制限のために変更する余裕がないことを後で理解します。
コードを効率的かつ時間通りに配信するためのヒントはありますか?
私は、成果物の期限が厳しいプロジェクトが多数ある環境で働いています。クライアントと直接話をすることもあるので、仕事を迅速かつ迅速に行うことが必要です。
私の問題は、私が頭に浮かぶ最初のソリューションのコードを常に書いているということです。もちろん、その瞬間に最高だと思いました。しかし、それは常にいものになり、後でそれを行うためのより良い方法があるが、時間制限のために変更する余裕がないことを後で理解します。
コードを効率的かつ時間通りに配信するためのヒントはありますか?
回答:
コードを保守する必要がある場合は、コードの保守性を高めるために追加の時間が必要であり、バックエンドで費用を節約できることを説明します。言い換えれば、保守可能なコードを要件にします。
彼らがそれを気にしないのであれば、常に改善し、可能な限りベストプラクティスを取り入れるために最善を尽くすこと以外、あなたが何か別のことをする必要はないと思います。
さて、これは少しクレイジーに聞こえるかもしれませんが、私はそれが動作することを誓います。プログラミングのためだけでなく、創造性、集中力、記憶力を高めるためのレシピです。
気付く前に、プログラミングの生産性とソリューションの品質に顕著な改善が見られます(他の分野の改善は言うまでもありません)。
ソース:
直感に反しますが、おそらく速度を落とす必要があります。頭に浮かぶ最初のソリューションを実装するとき、自分自身のために多くの余分な作業を作成します。「道を」とは、その日の午後遅くという意味です。自分で作成した問題は、開発に数か月かかることはありません。オプションを検討してください。より少なく入力し、より深く考えます。短いプロジェクトであっても、コーディングを少なくすれば実際にスピードアップすることがわかります。
クライアントが特定の業界に集中している場合は、再利用可能なコンポーネントを持つプロジェクトを構築してください。コードを書かないことは、書くよりも速いです。
クライアントの観点からすると、これは「高速、高品質、安価、2つ選択」のような匂いがします。もちろん、私たちは皆、すぐに欲しいものを望んでいますが、あなたのクライアントは、これが長期的に最善かどうかを考慮する必要があります。トレードオフを明確にし、彼らが良い判断を下せるようにしてください。
別の仕事を探してください。
あなたは約6ヶ月後にそれを見つけるでしょう。あなたがやった仕事に誇りを持っていない年に。さらに、新しい技術、技術、またはフレームワークについて学ぶことができる時間がないため、1年後、新しい技術に追いつくことができなくなります。開始時よりも、1年後には市場に比べて悪いプログラマーになります。
時間がかかりすぎると(たとえば数年以上)、品質コードが高く評価されず、スピードだけが求められるこうしたペースの速いジョブを除いて、どこにでも雇用されるのは非常に困難になります。
とはいえ、「現実の世界」の学習体験として、ペースの速い環境については何か言わなければならないことがありますが、約6か月と言えます。十分です。それを超えて、あなたは数人のリクルーターと接続し、より良い場所を探すように見えるべきです。あなたはもっと幸せに、正直になります。
クライアントから見ると、コードの効率はそれほど重要ではなく、非常に高価になる可能性があります。最近、コードの作成に費やした時間は、時間を正当化するためにCPU時間を節約する必要があります。ほとんどのプログラムでは、効率はそれほど重要ではありません。それがある場合でも、ほとんどのコードはそれほど効率的である必要はありません。選択を考えると、私が好むのは、より効率的で保守が難しいコードよりも保守が容易なソリューションです。
開始する前にコーディングの計画に時間をかけることで、ソリューションを評価し、代替アプローチを検討する時間を確保できます。これにより、コーディングとテストの時間を節約できます。多くの場合、単純なコードの方が効率的であることがわかりました。
必要な数の行を使用して、コードをきれいにレイアウトします。複雑なコードはオプティマイザーを混乱させ、結果としてコードが遅くなる可能性があります。最新のコンパイラーはコードの最適化に非常に優れており、その仕事をすることを信頼しています。
十分で十分であることを受け入れます。より効率的なアプローチを思いついたら、自分自身にメモしてください。時間があれば、より効率的な設計のいくつかを、実装したものと比較してください。小さい(影響を受けるコードのみ)および大きい(それらを使用するプログラム)で試してください。これにより、より効率的なアプローチが適切かどうかを判断できます。
多くの人々は、時期尚早な最適化を悪いアプローチと考えています。実装にはコストがかかる場合があります。残念ながら、多くの時期尚早な最適化は、実際に最適化したコードほど効率的ではありません。コードを適切に最適化するには、変更の前後にコードをインスツルメントして、実際に効率が改善されているかどうかを確認する必要があります。
結合度が低く、凝集度が高い、よりクリーンなコードを書くのに役立つテクニックを学びます。多くの場合、複雑さを軽減すると効率が向上します。開発中に修正する必要があるバグを最小限に抑えるのに役立つテクニックは、より迅速に配信するのに役立ちます。これにより、別のアプローチをテストする時間を空けることができます。
ロバートは最も重要な側面を取り上げました。
私はそのような環境で働いており、コードは6か月以上は存続しません(できません)。私が考えることができるいくつかの親指のルールがあります:
設計段階では、同僚と話し合います。
設計とその方法について話し合い、決定を綿密に調べさせます。賢いことに全員が同意すれば、より健全な設計になります。
私の問題は、私が頭に浮かぶ最初のソリューションのコードを常に書いているということです。もちろん、その瞬間に最高だと思いました。
いいえ、それはあなたの問題ではありません。それは美徳です。おそらく動作する可能性のある最も単純なことをしています。ただし、リファクタリングと組み合わせた場合にのみ機能します。これは継続的なプロセスです。次の最も簡単なことを何度も何度も繰り返して実行できるため、システムは常にソリューション空間に対する現在の理解を表しています。
あなたの問題は、ソフトウェアシステムの真のライフサイクルコストを理解していない管理者がいることです。そのコストの90%はメンテナンスであり、初期実装ではありません。テストとリファクタリングは、ソフトウェアシステムの総ライフサイクルコストを削減するための最良のツールです。あなたのマネージャーがあなたにこれらのことをさせないなら、彼らは無責任であり、再訓練される必要があります。または、新しい仕事を見つける必要があります。
最後に:前に述べたように*、あなたはnoと言う方法を学ぶ必要があります。
スコープと時間を修正した場合、期限を設定するためにできることはドロップ品質のみです。
可能であれば、利害関係者に見える外部品質を落として、内部品質、つまりコードベースでの居住性を損なうものを妥協しないでください。
この状況で自己改善が少しでもあなたを助けるとは思わない。どちらかと言えば、残念ながら、通常は自己主張です。
仕事が予定されているときに、ドアに足を踏み入れるようにしてください。上司は、あなたが何かをするのにどれだけの時間がかかるかをどのように推定できますか?
上司や顧客に選択肢をもたらします。多くの場合、何も伝えずに品質を落とすことを選択するのは開発者自身です。後期プロジェクト/作業は非常に一般的であり、通常「管理」されます。期限に間に合わせて行動し、締め切りに間に合わない場合は警告します。
あなたが彼らに何も言わないなら、彼らは範囲を切ることも期限を動かすこともできません。
何らかの形で品質に妥協する場合は、それを彼らの決定に任せるようにしてください。お互いに重さを与えるものを与えます。
あなただけが決めることができるもの。あなたはちょうどそれが動作するようになった場合。しかし、それは非常に維持不可能です。おそらく、それがすべての場合に機能するかどうかは不明です。誰にも言わないでください。やり直してください。非常に多くの場合、それはあなただけが下せる決定です。問題を明確にするのに非常に時間がかかるか、非技術的なマネージャーがいるためです。
時にはそれがあなたの仕事の倫理の一部であり、「時間がない」という理由で手を洗わずに患者を縫い合わせるだけでしょうか?
とりわけ、覚えておいてください:後はありません。
私は、Webアプリケーションに取り組んでいる.Net開発者です。
私が始めたのは-
C#コードの場合、まず(可能であれば)LinqPadでそのコードを記述しようとします。
Javascriptコードの場合、最初にそのコードを記述し、jsfiddle / jsbinでテストします(可能な場合)。
これはコードの品質には役立ちますが、私を遅くすることはありませんでした(そして、いくつかのケースでは、それが高速であることがわかりました)。