「完璧なプログラマーの症候群」を破る方法[非公開]


16

そう思うのはおそらく私だけではないでしょう。しかし、私は「完璧なプログラマーの症候群」と呼ぶ傾向があります。多くの人が言うのは完璧主義者と同じですが、この場合はプログラミングの領域です。ただし、プログラミングの領域は、このような症候群には少し問題があります。

プログラミングをしているときに、コードがきれいで、ほとんどのベストプラクティスに従う優れたコードであるという自信がない、または自信がないと感じたことはありますか?従うべき非常に多くのルールがあるので、どういうわけか圧倒されるような気がします。もちろん、私はプログラマーであり、プログラミングが大好きであるというルールに従うことを好まないというわけではありません。これを芸術と見なし、ルールに従う必要があります。しかし、私もそれが大好きです。私がしたいことを意味し、自分がやっていることが正しい方向に進んでいるという良い感覚を得るためにルールに従うのが大好きです。ベストプラクティスと優れたコードに関する。

多分それは組織の欠如ですか?たぶん、それは経験不足ですか?たぶん練習不足?たぶん、誰かが指摘できる何かが欠けているのでしょうか?どういうわけかその症候群を取り除く方法はありますか?


1
この質問は、あなたの個人的な背景についてもう少し知っていれば答えることができますが、すぐにローカライズされてしまうかもしれません。プログラミングの道はあなたが始めるのに良い場所かもしれません。
back2dos

私はそこに同意しません..背景がこのように感じることができるものは何でも、おそらくある程度は違うと思いますが、それでも。
ルシノ

2
誰もが同じ症状を経験する可能性がありますが、実際には原因は大きく異なるため、「治癒」します。
back2dos

完璧なプログラマーはいません。あなたは彼/彼女のスキルを向上させるための勢いと欲求を持っている経験豊富で詳細志向のものを見つけるかもしれません。-あなたはそれらを「ゲッターに行く」と呼ぶかもしれません...
ユスボフ

「ルールに従わなければならない」...そしてあなたの問題があります。「ベストプラクティス」は規則ではなく、集合的な経験に基づいた提案です。それらを壊れない規則として扱っているなら、あなたのストレスの根源を見ることができます。
GrandmasterB

回答:


21

優先順位を付けます。まず最初に。重要なことに集中します。

優先順位は異なる場合がありますが、一般的には次のことに注意する必要があります。

  • 正しいコード
  • 保守可能なコード
  • きれいなコード
  • シンプルでエレガントなコード
  • 効率的なコード

たぶんその順序で。ただし、最初のポイントが最も重要です。それなしでは、コードは役に立たない。正しく動作しないプログラムで何をしますか?

それを機能させてください、他のすべてはあなたが解決する必要がある問題を解決するためにほとんど無関係です。もちろん、私もこれに苦しんでいます。私が学んだことは、効果的なソリューションに集中することです。それは十分です。それは仕事の99%です。

あなたは良いコードのようものについて考えたいかもしれません。それは何ですか?どんな人がそれを書きますか?良いコードを書くには?とても簡単です。動作するコードを記述します。作業コードは良いコードです。他のすべては後で来る。

もちろん、プロフェッショナルチーム環境でコードを記述する場合、明白で読みやすいコードと保守可能なコードがますます重要になります。ただし、まだ最初のタスクは、それを動作せることであり、それに焦点を当てることです。必要な場合にのみ、改善とリファクタリングを開始できます。

多くの場合、コードの正確性が非常に重要であることは非常に明白です。しかし、コードを作成する際にその重要性を受け入れることはできません。我々は、我々は時期尚早な最適化を使用し、コーナーをカットしようと書き込みにエレガントなコード、我々がいる前であっても、作業のコードが書かれています。最初から完璧を目指して努力するのは人間の性質ですが、プログラミングとソフトウェア開発は反復的なプロセスであり、優先事項が存在します。したがって、再び、それを動作させ、後で他のすべてを心配します。正しいコードの重要性を理解し、努力してください。

いわゆるグッドプラクティスがたくさんありますが、常識が最も重要だと思います。なぜプラクティスが良いと考えられるのか、いつどこでそれらを適用するのかを考えてください。ただし、グッドプラクティスのあらゆる部分に対応しようとしないでください。個人的な経験に代わるものや代替物はありません。読んでいる本の数、出席しているセミナー、その他に関係なく、よくある落とし穴を避けることはできません。大事なことは、できることならいつでも、物事を正しく行い、楽しんで学ぶことです。


9
最適な最適化は、プログラムを非稼働状態から稼働状態にする最適化です。
deadalnix

1
@deadalnix完璧なアドバイス!それはとてもシンプルで、明白ですが、すべてのコードでとても真実です。
-zxcdw

7
+1。私は、maintainableを正しい上に置くことを検討します。保守可能なコードの1つの品質は、それを修正することは合理的な努力の問題であるということです;)
back2dos

1
EFficientはすべての上にあるべきですが、データベースコードとエレガントな方法について話している場合は正しいです。優れたSQLコード(開発者ではないdatbaseに適しています)がエレガントになることはめったにありません。物事を行うには非効率的な方法が知られていますが、それらを定期的に使用し始めると、保守性が低下したり、理解しにくくなったりすることはありません。
HLGEM

2
@HLGEM実際、特定の分野では優先順位が完全に逆転する場合があります。たとえば、極端なサイズと速度の制約の下で記述されたアセンブリコードを作成し、リバースエンジニアリングします(デモシーン製品)。そのような状況では、プログラムの正確性さえ疑問視されるかもしれません-多くの誤動作しているコードが非常にうまく機能することが判明しました(たとえば、誤ったコードに基づく美しい視覚的および音声のアーティファクト)。
zxcdw

6

この問題を回避する最も簡単な方法は、痛いものだけを変更することです。多少の変更がそれをさらに改善するかもしれないと思ったとしても、正しく、読みやすく、保守可能なコードを磨かないでください。しかし、たとえば何かを変更して、目的が不明な変数、または理解するには長すぎる関数を修正しようとしたら、それを修正してください。すぐに。

もちろん、そもそも良いクリーンなコードを目指して努力すべきではないという意味ではありませんが、最初の試みは、他に証明されない限り「十分に良い」と考えるべきです。


+1 iはその部分が好きです。「最初の試みは、他に証明されない限り、「十分」です。」
ルシノ

出向し、賛成しました。間違いなく黄金のアドバイス!
zxcdw

4

これに対する最善の解毒剤は、これらのベストプラクティスとコードのクリーン化ルールはすべて、それ自体のためにもコード自体にも存在しないことを思い出すことだと思います。

最後に、何よりも重要なのは、ソフトウェアが機能し、使用できることです。そして、あなたがそれを終わらせなければ、それは起こりません。

私はコーディングとアートを比較するのは好きではありませんが、これに関してはうまくいきます。アーティスト(特に著者)は、常に完璧ではないものが常にあるため、作品の制作を続けたいと思うことがよくあります。しかし、出版を無期限に遅らせて、だれかがその作品を鑑賞することを妨げている場合、完璧な価値は何でしょうか?


2

実現する最も重要なことは、コードが常に変更されることであり、常に改善の余地があるということです。完璧なコードはありません。たいていの場合、今日作業しているクラスライブラリは、今後6か月間で大きく異なります。新しいテクニックを習得するか、実際に機能するパターンを見つけます。コードが簡単に保守可能で読みやすい限り、あなたは良いはずです。理想的には、後でリファクタリングしやすくするための単体テストが必要です。

コードを完璧に見せて、考えられるすべての標準に従うのは簡単です。それは私たち全員に起こります。数週間前に書いたコードを見ると、変更を加えることを考えるようになります。ここにプロパティを追加し、そこでメソッドをリファクタリングします。そして、それはプロジェクトの終わりに起こるようです。しかし、もしあなたがそれで包みすぎたら、あなたはショートッピングのバグを作ることになってしまうでしょう。私はそれをキャリアの早い段階で数回行いました。午前3時のバグ修正セッションが2回あり、その問題が解決しました。


1

他の方法でやり直してください。

「より良くできること」の代わりに。「何が私を怒らせますか」を求めます 何もしないまで。


4
「本が完成するのは、それ以上何も追加できないときではなく、何もそれから削除できないときです。」-コード完了
ジョナサン

それは実際、サンテグジュペリの言い換えであり、ここでのコード完成よりも信頼性が低いのは面白い。
scrwtp

1

プログラマーとしての仕事は、コードを生成することです。ベストプラクティスの目的は、物事を理解/実行/記憶しやすくすることで生産率を上げることです。これらの慣行に従うことが実際に物事を成し遂げる邪魔になる場合、あなたは何か間違ったことをしている。できるだけ早くコードを生成しようとするだけで、それを実行できるようにプラクティスを進化させる必要があります。


同意しません。プログラマーとしての仕事は、問題を解決することです。あまりにも多くのプログラマーが問題を見て、「それに対する解決策をコーディングできる」と言って、すでに存在する解決策を探し回らない。最善の解決策は、書く必要がないものです。とはいえ、ソリューションをコーディングする必要があるプログラマーとして、あなたの仕事は要件を満たすことです。要件が変更された場合(ifではなく、いつ)に要件を満たすコードを簡単に変更できるようにするためのベストプラクティスが存在します。
キース

1

動作させ、きれいにし、安定させ、パフォーマンスを高めます。

最初の3つは、誰かがタイムラインでSOLIDコードを書く方法を知りたいと思うたびに私が支持する格言です。最初にコード行を作成するとき、それは単に機能しなければならないので、あなたがしなければならないことを行い、空想にならないでください。初めてコードの行を再訪するとき、それはもはや一度限りのものではないので、コードをクリーンアップして読みやすくし、保守性を高める必要があります。カーソルがその行に入る3回目は、おそらく大したことではないので、SOLID方法論に準拠するようにリファクタリングし、依存関係を抽象化し、パターンを実装し、一般的にコードをプラグインまたはプラグインしやすくします将来の強化のため。

コードの優雅さは、プログラマーが機会に気づいたときに達成されるものであり、一般に、前の手順に従ってコードの簡素化、クリーン化、および可読性と保守性の向上を図ります。最大化するものではありません。

パフォーマンス管理コードは、ほとんどの場合、メモリ管理言語(Java、.NETファミリ、ほとんどの機能言語など)で最も懸念されません。これらの環境での目標は、正しいコードを記述することです(ここでは、すべての予想されるケースで予想される結果を生成するものとして定義された「正しい」理解しやすく、適切に構造化されているため、保守が容易です)、パフォーマンスは二次的です(通常、正しいコードからある程度進行します)。すべての場合において、アルゴリズムは「十分な」パフォーマンスを発揮します。「時期尚早の最適化がすべての悪の根源である」ことを忘れないでください。必要とは知らない最適化を行うことは、時間を無駄にし、コードを難読化し、一般的に進行を妨げます。最初に動作する必要があり、次に動作したら、実行して、実行速度を確認します。(公開されている要件であるベンチマークで定義されているように)十分に高速でない場合は、それまで改善してからを停止します。


0

あなたは本当にプログラミングについて実用的である必要があります。はい、私たちはすべて正しいことをしたいと思っていますが、あなたはあなたの残りの人生のためにそれを磨くためではなく、働くソフトウェアを提供するために報酬を受け取ります。

取るアプローチは、あなたの職業生活の中で「それを成し遂げる」ことです。配信して先に進みます。個人的なプロジェクトのために完璧主義を保存します。


私は理解していますが、私はこの「黒または白」を信じることができません。
ルシノ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.