厳しい締め切りにもかかわらず効率的なコードを書く方法


28

私は、成果物の期限が厳しいプロジェクトが多数ある環境で働いています。クライアントと直接話をすることもあるので、仕事を迅速かつ迅速に行うことが必要です。

私の問題は、私が頭に浮かぶ最初のソリューションのコードを常に書いているということです。もちろん、その瞬間に最高だと思いました。しかし、それは常にいものになり、後でそれを行うためのより良い方法があるが、時間制限のために変更する余裕がないことを後で理解します。

コードを効率的かつ時間通りに配信するためのヒントはありますか?


11
効率的なコードに集中するのではなく、コードを修正します。それは何マイルも続きます。後続のリリースの効率を保存します。
ジェシーC.スライサー

回答:


23

コードを保守する必要がある場合は、コードの保守性を高めるために追加の時間が必要であり、バックエンドで費用を節約できることを説明します。言い換えれば、保守可能なコードを要件にします。

彼らがそれを気にしないのであれば、常に改善し、可能な限りベストプラクティスを取り入れるために最善を尽くすこと以外、あなたが何か別のことをする必要はないと思います。


3
確かに、実際にはそのように機能することはめったにないことを除いて、私はそのすべてに同意します。あなたの上司はXデートで何かをしたいと望んでおり、動きません。残念なことに、あなたはまだそれを成し遂げなければならないか、おそらくどこかで仕事を見つけることができますが、これはしばしば選択肢ではありません。
エドS.

4
@EdS。他の場所で仕事を見つけることは常に選択肢です...それは「あなたのキャリアを維持する」と呼ばれ、そうするのに時間と労力がかかります。
スポイケ

17

さて、これは少しクレイジーに聞こえるかもしれませんが、私はそれが動作することを誓います。プログラミングのためだけでなく、創造性、集中力、記憶力を高めるためのレシピです。

  • よく食べる
  • 瞑想する
  • 十分な睡眠をとる(人によって7〜9時間)
  • 脳があいまいなときはいつでも昼寝
  • 未解決の問題で眠りにつく。すべてを完了して一日を終わらせないでください。難しいタスクを1つ保留にします。潜在意識は非常に効果的です。
  • 快適な服を着る
  • 運動
  • 数独(プログラムされていない)、クロスワード、数学のドリル、空間パズルなど、暗示的なメンタルエクササイズを行う
  • 自分の客観的な実験を実行して、どの行動がパフォーマンスに影響するかを確認します(これが機能するには、パフォーマンスをテストする信頼できる方法が必要です)。
  • あなたの精神的な健康に注意してください
  • コットンパンツ
  • あなたの性的健康に注意してください
  • 家族や友人のために時間を作る
  • 職業以外のこと(音楽、料理、スポーツなど)に習熟し、同じことをしている他の人と交流する
  • 一部の人々にとって、ペットは必須です

気付く前に、プログラミングの生産性とソリューションの品質に顕著な改善が見られます(他の分野の改善は言うまでもありません)。

ソース:

  1. 奇跡の脳:脳力を最大限に高め、記憶力を高め、気分を高め、IQと創造性を向上させ、精神的老化を防ぎ、逆転させます
  2. 定量化された自己
  3. セス・ロバーツ - サイエンティフィック・アメリカンで

6
あなたは忘れていた:カフェインなし。
クリストファー

忘れてしまったこと:コーディング中にPORNを見ないでください!ありがとうございました!
アミールホセイン

9

直感に反しますが、おそらく速度を落とす必要があります。頭に浮かぶ最初のソリューションを実装するとき、自分自身のために多くの余分な作業を作成します。「道を」とは、その日の午後遅くという意味です。自分で作成した問題は、開発に数か月かかることはありません。オプションを検討してください。より少なく入力し、より深く考えます。短いプロジェクトであっても、コーディングを少なくすれば実際にスピードアップすることがわかります。

クライアントが特定の業界に集中している場合は、再利用可能なコンポーネントを持つプロジェクトを構築してください。コードを書かないことは、書くよりも速いです。

クライアントの観点からすると、これは「高速、高品質、安価、2つ選択」のような匂いがします。もちろん、私たちは皆、すぐに欲しいものを望んでいますが、あなたのクライアントは、これが長期的に最善かどうかを考慮する必要があります。トレードオフを明確にし、彼らが良い判断を下せるようにしてください。


これに同意する。コーディングを開始する前に、2つまたは3つの可能なアプローチを検討してください。次に、実装の容易さ、テストの容易さ、効率、および拡張性の組み合わせに基づいて、選択を行います。
オメガケンタウリ

8

別の仕事を探してください。

あなたは約6ヶ月後にそれを見つけるでしょう。あなたがやった仕事に誇りを持っていない年に。さらに、新しい技術、技術、またはフレームワークについて学ぶことができる時間がないため、1年後、新しい技術に追いつくことができなくなります。開始時よりも、1年後には市場に比べて悪いプログラマーになります。

時間がかかりすぎると(たとえば数年以上)、品質コードが高く評価されず、スピードだけが求められるこうしたペースの速いジョブを除いて、どこにでも雇用されるのは非常に困難になります。

とはいえ、「現実の世界」の学習体験として、ペースの速い環境については何か言わなければならないことがありますが、約6か月と言えます。十分です。それを超えて、あなたは数人のリクルーターと接続し、より良い場所を探すように見えるべきです。あなたはもっと幸せに、正直になります。


2
「mos」とはどういう意味ですか。?
ダリウス.V

mos。=ヶ月。さらに2つの文字を
...-gnasher729

私はあなたを知らないが、ペルシャ語の「mos」には悪い意味がある。それはお尻を意味します。;)
AmirHossein

3

クライアントから見ると、コードの効率はそれほど重要ではなく、非常に高価になる可能性があります。最近、コードの作成に費やした時間は、時間を正当化するためにCPU時間を節約する必要があります。ほとんどのプログラムでは、効率はそれほど重要ではありません。それがある場合でも、ほとんどのコードはそれほど効率的である必要はありません。選択を考えると、私が好むのは、より効率的で保守が難しいコードよりも保守が容易なソリューションです。

開始する前にコーディングの計画に時間をかけることで、ソリューションを評価し、代替アプローチを検討する時間を確保できます。これにより、コーディングとテストの時間を節約できます。多くの場合、単純なコードの方が効率的であることがわかりました。

必要な数の行を使用して、コードをきれいにレイアウトします。複雑なコードはオプティマイザーを混乱させ、結果としてコードが遅くなる可能性があります。最新のコンパイラーはコードの最適化に非常に優れており、その仕事をすることを信頼しています。

十分で十分であることを受け入れます。より効率的なアプローチを思いついたら、自分自身にメモしてください。時間があれば、より効率的な設計のいくつかを、実装したものと比較してください。小さい(影響を受けるコードのみ)および大きい(それらを使用するプログラム)で試してください。これにより、より効率的なアプローチが適切かどうかを判断できます。

多くの人々は、時期尚早な最適化を悪いアプローチと考えています。実装にはコストがかかる場合があります。残念ながら、多くの時期尚早な最適化は、実際に最適化したコードほど効率的ではありません。コードを適切に最適化するには、変更の前後にコードをインスツルメントして、実際に効率が改善されているかどうかを確認する必要があります。

結合度が低く、凝集度が高い、よりクリーンなコードを書くのに役立つテクニックを学びます。多くの場合、複雑さを軽減すると効率が向上します。開発中に修正する必要があるバグを最小限に抑えるのに役立つテクニックは、より迅速に配信するのに役立ちます。これにより、別のアプローチをテストする時間を空けることができます。


1

ロバートは最も重要な側面を取り上げました。

私はそのような環境で働いており、コードは6か月以上は存続しません(できません)。私が考えることができるいくつかの親指のルールがあります:

  1. オープンソースライブラリ、サードパーティのソリューションなどを使用してください。関連する学習は、メンテナンスとデバッグが少ないことで報われます。ただし、バグの多いライブラリに縛られている場合は、運命にあります。
  2. デザインが拡張可能であることを厳しく確認してください。必須の要件:ほとんどの作業は、新しい機能を構築するのではなく、改善として行われます。
  3. 厳密なテスト計画を作成します。QAを取得するか、テストを自動化して回帰テストを確実にします。
  4. IDE、コード生成ユーティリティなどのスマートツールを使用します。
  5. 可能な限り構成可能なものにしてください。(フリップ側はテスト作業の増加です)
  6. タイピング速度を改善します:-)

1

設計段階では、同僚話し合います。

設計とその方法について話し合い、決定を綿密に調べさせます。賢いことに全員が同意すれば、より健全な設計になります。


1

練習。それが第二の性質になるまで、良いコードを書く練習をしてください。次に、コーディングの高速化を練習します。次に、コーディングを改善します。そして、完了したら...もう少し練習します。


0

私の問題は、私が頭に浮かぶ最初のソリューションのコードを常に書いているということです。もちろん、その瞬間に最高だと思いました。

いいえ、それはあなたの問題ではありません。それは美徳です。おそらく動作する可能性のある最も単純なことをしています。ただし、リファクタリングと組み合わせた場合にのみ機能します。これは継続的なプロセスです。次の最も簡単なことを何度も何度も繰り返して実行できるため、システムは常にソリューション空間に対する現在の理解を表しています。

あなたの問題は、ソフトウェアシステムの真のライフサイクルコストを理解していない管理者がいることです。そのコストの90%はメンテナンスであり、初期実装ではありません。テストとリファクタリングは、ソフトウェアシステムのライフサイクルコストを削減するための最良のツールです。あなたのマネージャーがあなたにこれらのことをさせないなら、彼らは無責任であり、再訓練される必要があります。または、新しい仕事を見つける必要があります。

最後に:前に述べたように*、あなたはnoと言う方法を学ぶ必要があります。

* 非常に厳しいスケジュールでコーディングする方法は?


0

スコープと時間を修正した場合、期限を設定するためにできることはドロップ品質のみです。

可能であれば、利害関係者に見える外部品質を落として、内部品質、つまりコードベースでの居住性を損なうものを妥協しないでください。

この状況で自己改善が少しでもあなたを助けるとは思わない。どちらかと言えば、残念ながら、通常は自己主張です。

仕事が予定されているときに、ドアに足を踏み入れるようにしてください。上司は、あなたが何かをするのにどれだけの時間がかかるかをどのように推定できますか?

上司や顧客に選択肢をもたらします。多くの場合、何も伝えずに品質を落とすことを選択するのは開発者自身です。後期プロジェクト/作業は非常に一般的であり、通常「管理」されます。期限に間に合わせて行動し、締め切りに間に合わない場合は警告します。

あなたが彼らに何も言わないなら、彼らは範囲を切ることも期限を動かすこともできません。

何らかの形で品質に妥協する場合は、それを彼らの決定に任せるようにしてください。お互いに重さを与えるものを与えます。

あなただけが決めることができるもの。あなたはちょうどそれが動作するようになった場合。しかし、それは非常に維持不可能です。おそらく、それがすべての場合に機能するかどうかは不明です。誰にも言わないでください。やり直してください。非常に多くの場合、それはあなただけが下せる決定です。問題を明確にするのに非常に時間がかかるか、非技術的なマネージャーがいるためです。

時にはそれがあなたの仕事の倫理の一部であり、「時間がない」という理由で手を洗わずに患者を縫い合わせるだけでしょうか?

とりわけ、覚えておいてください:後はありません。


0

私は、Webアプリケーションに取り組んでいる.Net開発者です。

私が始めたのは-

C#コードの場合、まず(可能であれば)LinqPadでそのコードを記述しようとします。

Javascriptコードの場合、最初にそのコードを記述し、jsfiddle / jsbinでテストします(可能な場合)。

これはコードの品質には役立ちますが、私を遅くすることはありませんでした(そして、いくつかのケースでは、それが高速であることがわかりました)。


この投稿は読みにくい(テキストの壁)。ですが、あなたは気編集をより良い形にそれをINGの?
gnat

@gnat-提案をありがとう。投票で提案を受けるのに役立ちます。書式設定が改善されたことを願っています。
user637563

完全な環境以外でソリューションを見つけることには、メリットがあります。動作するものがあるので、それがシステム全体で動作しない場合、問題はシステムの他の部分との競合でなければならないことがわかります。その後、ソリューションを変更して競合を削除し、ソリューションが完全な環境の外でも機能するかどうかを確認できます。あなたの正気は、これから先、あなたに感謝するかもしれません。
曲げられた
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.