他の多くの人がこのフォーラムで行っているように、私は長年にわたってコードスタイルのガイドラインに取り組んできました。これには、私が嫌いだと思う格闘スタイルガイドと、スタイルガイドを使用してスタイル全体を読みやすくするために他の人にスタイルガイドを使用することを奨励することの両方が含まれます。
企業は共通のコーディング標準の恩恵を受けています。企業向けのソフトウェアを開発する際には、前の世代のコードを取得するために新しい開発者をどのように訓練するかなど、考慮すべき重要なことがたくさんあります。コードを書いているとき、あなたはいつもこれについて考えているわけではありません。実際、多くのコーダーは、他の人が行ってから5年または10年後にどのようにコードにアプローチしたいかを考えさえしないことを選択します。コーディングスタイルガイドは、企業がこれらの5年と10年の目標に焦点を当てる方法であり、開発者がより大きなスキームで作業しやすくします。
一方、コーディングスタイルガイドは、完璧なコーディングスタイルを開発して書き留めることができないため、不完全であることが有名です。実際に、完璧なものを作ろうとすると数学的な証明が失敗し始めるおかしなケースに出くわします。したがって、コーディングスタイルガイドが不完全であることがわかります。5年から10年後に必要なものに完全に焦点を合わせているとは限りません。
コーディングスタイルを「強制」した場合、後で価値を上げるために価値を犠牲にすることになります。努力に見返りがあると確信できる場合、これは「投資」と呼ばれますが、コーディングスタイルガイドの作成が不十分な開発者は、開発者の気を散らすことでこれらの「読みやすさ」の利益が支払われることを証明できます。コードから離れます。私の経験では、ソフトウェアが30年または40年使用される可能性のある氷河期の顧客向けのソフトウェアで、強制コーディングスタイルにメリットがあるケースはごくわずかです!
代わりに、コーディングスタイルガイドをマニフェストとして扱うのが最も効果的だと思います:「これは、私たちのグループにとって最良のコーディングスタイルであると信じています」。それは言葉で文書化された流動的な思考の束です。「信じる」という言葉は重要です。信念が変わったら、コーディングスタイルガイドもそれに合わせて変える必要があります。
これが、「強い個人的な反対」の引用の出番です。私が「完璧な」世界と呼ぶものでは、あなたが最高だと思うコードを何でも書いて、その結果で生きます。私たちはプログラミングをしているときに「ソフトな」結果を見落とすことがよくありますが、この場合は重要です。あなたが自分のスタイルで書くことに何の問題もありません。もしあなたが私にあなたに重要で長続きすることを決して与えないことを気にしないならば、開発します。
システム全体をゴルフコースのように考えてください。コーディングスタイルにより、フェアウェイを簡単に進むことができます。あなたがコーディング標準に固執しているなら、私たちは人生ができるだけ簡単であることを確認します。独自のコーディング標準を使用することで、さらにラフになればなるほど、チームでの価値を証明しなければなりません。
月曜日の朝に来て、私たちが1年かけて悩んでいた問題を週末を通して解決し、あなたがあなた自身の「特別な」コーディング標準でそれをやったことを見つけるために、私はあなたに言うつもりはありません修理する。シャワーを浴びに行くように伝えます。あなたの「特別な」コーディング標準が非常に「特別な」場合、エントリーレベルの開発者にコードを「レビュー」して、コードの仕組みに関する知識を広め、読みにくいと思われる場合は彼/彼女がすべきだと言ってもよいでしょう。それを片付ける。あなたはその週末に会社に十分な価値を提供したので、あなたが犯したひどいコーディング標準違反に言及する価値さえありません。
もちろん、このゴルフの比phorには範囲外があります。フォームに新しいフィールドを追加するなど、ランクとファイルのタスクを実行するように依頼し、マクロを定義するような怪しげな文字を使用して、フォーム入力コード全体を特定のスタイルに合わせてリファクタリングすることにしますそして、スタック交換から学んだばかりのいくつかのひどいテンプレートメタプログラミング手法は、戻って修正するように求められます。あなたが行動することを選んだ、それらは結果です。
(免責事項:私はこの実装を完全に書いてis_base_of
、些細な作業を解決し、上級開発者から得たすべての地獄を獲得しました。それは価値があると言います。このパターンがC ++仕様の7つの無関係な部分のようにくっついて驚くべきことをしている様子を見てください。上級開発者の皆さん、それboost
をこの特定のプロジェクトに禁じるのです!)