ベストプラクティスを採用する際の障壁は何ですか?どうすれば克服できますか?[閉まっている]


22

私たちはみな、多くの貧弱に書かれたコードを見てきました(そして、私たちのほとんどが書きました)。どうして?良いものよりも悪いものを採用する理由は何ですか?

(私にとって)最も明白な答えは「無知」ですが、それが唯一の理由ではないと確信しています。他に何がありますか?悪いコードを書く誘惑を克服するために何ができるでしょうか?


コスト----------シンプルでわかりやすい。
ほこりっぽいプログラマー

今日、コードが記述された理由とは対照的に、コードの記述が不十分であると言える理由は何ですか?

@Thorbjørn:すみません、質問がわかりませんか?
Kramii復活モニカ

@Kramil、貧弱に書かれたコードを書いたとき、それが不完全に書かれていることを認識しましたか?そうであれば、なぜそのように書いたのですか?そうでない場合、以前とは対照的に、今それを認識できるので、何が起こったのでしょう。

4
@Kramii、「ベストプラクティス」は合理的で批判的な思考の代替になることはありません。すべての「ベストプラクティス」はツールにすぎず、盲目的に使用することは有害です。それが「ベストプラクティス」と考えられているという理由だけで、その背後にある理論的根拠を理解せずに何かに従うことは愚かです。しかし、このような理解があれば、「ベストプラクティス」に従う必要はありません。したがって、「ベストプラクティス」という概念は非常に欠陥が多く、本質的に有害です。
SKロジック

回答:


29

変化への抵抗。

それは、無知、貧弱な管理などの背後にある主要なドライバーです。

Peopleware 2nd Editionの第30章は、このトピックに専念しています。そして、それはもう少し前に書かれた別のかなり有名なコンサルタントによる本からの引用です:

そして、新しい注文の導入の先頭に立つことは、処理が難しく、成功を疑うことも、管理することも危険ではないことを考慮する必要があります。紹介者には、古い命令から利益を得るすべての人々が敵としており、新しい命令から利益を得る可能性のあるすべての人々に温かい防御者がいます。

ニッコロ・マキャベリ:王子(1513)

デマルコとリスターは、人々に変化を求める前に心に留めておくべきマントラを述べ続けています。

変化に対する基本的な反応は論理的ではなく、感情的です。

変化のプロセスが、現在の準最適な状態から新しい改善された世界へとまっすぐにスムーズに進むことはめったにありません。どんな些細な変更でも、新しい現状にたどり着くまでには常に混乱と混乱の期間があります。新しいツール、プロセス、考え方を学ぶのは難しく、時間がかかります。この移行期間中、生産性が低下し、士気が低下し、人々が文句を言い、物事の古き良き方法に戻ることができた場合にのみ望みます。よく知られている問題は、新しい、未知の、イライラする、恥ずかしい問題よりも優れていると感じているため、すべての問題が発生しても非常に頻繁に行います。これは抵抗であり、巧妙かつ穏やかに行う必要がありますが、成功するためには明らかに克服する必要があります。

忍耐と忍耐で、最終的にチームはカオスから次の段階であるプラクティスとインテグレーションに到着します。人々は、新しいツール/プロセスに完全に慣れているわけではありませんが、これらに慣れ始めます。肯定的な「アハ」体験があるかもしれません。そして徐々に、チームは新しい現状を達成します。

カオスは変化のプロセスの不可欠で避けられない部分であるということを認識することは本当に重要です。この知識、およびその準備がなければ、カオス段階に突入するとパニックに陥り、新しい現状と間違える可能性があります。その後、変更プロセスは中止され、チームは以前の悲惨な状態に戻りますが、何かを改善するという希望はさらに少なくなります...


参考までに、上記のフェーズは元々Satir Change ModelVirginia Satirにちなんで命名)で定義されていました。


これは、より確立されたプログラマーには当てはまると思いますが、ベストプラクティスでコーディングしていない人のごく一部しか構成していないと思います。私が見てきたベストプラクティスに従わないコードはすべて、ここでの他の2つの答え-時間の不足と素朴さから来ました。
-AndrewKS

1
@AndrewKS、これは開発者だけでなく、マネージャーとクライアントにも関係します。優れた開発チームとプロセスでは、期限は現実的であり、開発者には現在の能力を超えるタスクが割り当てられません。少なくとも適切な指導と検証がなければ、タスクは割り当てられません。これらの失敗は、ほとんどの場合、経営陣がベストプラクティスの採用に抵抗している兆候です。
ペテルトレック

本当に良い点-私は今までこの状況で非プログラマーについて考えていませんでした。
-AndrewKS

不本意はしばしば特定の怠inessをもたらし、それが最終的に無知を生む。
-S.ロビンズ

23

PéterTörökは正しいが、1つの重要で楽観的な点を除外した。

  • 人々があります彼らが関与しているというの変化を好まないが、彼らはほとんど決してただ彼らに「起こる」というの変化のような

参加して、彼らにアイデアを提供させ、彼らにそれへの利害関係を作らせてください。そうすればそれほど苦痛はありません。

注:これはプログラミングに関連します。多くの技術的に成功したソフトウェアプロジェクトはユーザーが拒否するため失敗するためです。


1
本当に変化を管理するための素晴らしい方法
ニュートピア

あなたはbikesheddingに注意する必要があります!参加させすぎないでください!
-shapr

18

私が働いている時間は大きなもののようです。

たとえば、より多くのコードを記述する必要がある場合に単体テストを採用し、リリース可能な製品を入手するのに時間がかかるのはなぜですか?クライアントxは今それを望んでいます!コードの高速化!

(これは明らかにうまく終わりません)

これはまた、経営と経済の悪さの結果であり、適切な行動に時間を費やすだけの十分な費用を顧客に課していない。


5
ここでも時間がとても大きいです。私の上司は、スタッフ会議で「ビジネスはすばらしい仕事にお金を払っていない」と言っていました。
ジョシュアスミス

@ジョシュア・スミス:wtf !? マジ?彼ら支払うものを正確に手に入れても、私は驚かないでしょう。
スティーブンエバーズ

2
私は、私たちがそれを正しく行う余裕がないというアプローチを見てきました。しかし、混乱を解決するために無限の時間を費やす余裕があります。時間ごとに請求するコンサルティング会社にとって、どのアプローチが最適ですか?
-BillThor

1
@jwenting:以前のコメントを前後関係に置くために、私はスタッフ会議でユニットテストを提唱していました。現在、ユニットテストを書いているのは2人だけです(そして、それを陰険に行う必要があります)。個人的には、単体テストは金の装飾やダイヤモンドの装飾とは考えていません。
ジョシュアスミス

1
@shapr:それは、ロケットとミサイルを製造する会社から聞くと恐ろしいことです。>:P
Mr. JavaScript

11

反対の大規模な証拠にもかかわらず、人々は通常非常に合理的な生き物です。TDDなどのベストプラクティスを採用しない理由は、それが価値があるとは思わないからです。実際には、これらの慣行は最善ではないと考えています。そして、実際にそれらを救うよりも多くの費用がかかること。または、利益は非常にわずかであるため、変更のコストがわずかな利益を上回ると考えています。一番下の行は、ベストプラクティスの問題が一番下の行の問題であることです。

変化のエージェントになりたい場合、あなたの仕事は、収益に対する彼らの認識に欠陥があることを示すことです。ベストプラクティスが本当にベストであることを示す必要があります。利益が即時かつ重要であること。学習曲線が耐えられるほど小さく、少なくともいくつかの利点がすぐに始まることを示す必要があります。

これをどのように表示しますか?自分でベストプラクティスを採用することによって!あなた自身の行動以上に他人を納得させるものは何もありません。場合あなたがベストプラクティスに従ってください、そしてそれについてのボーカルあり、他の人がいることがわかりますあなたは経済分析を行なったし、反対の意思決定をしました。それは彼らに彼らの決定を再考させるでしょう。彼らは個人的にこれを行い、最初はそれを認めません。しかし、そのベストプラクティスを使用してあなたを見ている誰もが、自分の立場を再検討します。

それはあなたが期待できる最高のものです。ベストプラクティスベストプラクティスである場合、残りは自動的に実行されます。おお、それは速くありません、そして、多くのホールドアウトがあるでしょう。移行は遅く、むらがあります。そして、あなたは多くの失望を経験するでしょう。しかし、移行も容赦なく避けられません。一世代かかるかもしれませんが、ベストプラクティス勝ちます。

その証拠として、最後に誰かがgotoを使用しているのを見たときに自問してください。


+1:克服する最良の方法は、自分でベストプラクティスを採用することにより、例を挙げてリードすることです。「あなたは世界で見たい変化でなければなりません。」
-Johnsyweb

7

それは、理想的な方法を知らないと思った、または考えた結果です。人々はコードを不完全に書くこと選択していません。もっとよく知らない場合です。「無知」とは対照的に、「素朴」はより良い言葉です。

良い習慣に従うための最も簡単な方法は、あなたが書いたばかりのコードを書くためのより良い方法があることを認め(ほとんどの場合)、それからその「より良い方法」が何であるかを学ぶことを目指しています。


1
+1。すべての開発者に与えられているわけではなく、より良い方法を学習または探索するのに十分な時間をかけているわけでもありません。多くの(管理者および開発者)にとって、無視できない障害となるまで延期されます。一方、解決策は経験則的に十分な頻度で行われません-多くの人が代わりに既存のソリューションまたは推奨事項を受け入れるのが一般的です。この実践には、チャンス、近似、学習プロセスの大部分が含まれますが、これは理解に不可欠です。また、理解しないことは(より悪いことに)より良い選択をする能力に影響します。
ジャスティン

6

2つの原因

  • 無知。

  • 傲慢。

どうすれば克服できますか?

  • インセンティブ。

マネージャー(つまり、開発者のスキルを購入する人々)がソフトウェアの配信の一環としてベストプラクティスを必要とするまで、何も変わることはありません。多くの組織は明らかに統合失調症です。開発者にさまざまなテクノロジーを教育し、テストされていないソフトウェアまたはテストできない設計を要求しています。またはさらに悪い。


4
確かに:特に致命的な無知+ rog慢なコンボ。
-Sklivvz

6

私にとってのベストプラクティスは、8人のチームが書いたソフトウェアです。書面による要件、コードレビュー、単体テスト、フォーマットリリースドキュメントはありませんでした。エンドユーザーのテストはありません。すべての本が私たちがすべきだと言っていることはありません。コードは急いでバグがあり、維持するのは不可能です。リリースから3年後に廃棄されたため、非常に悪かった。それで、それについてとても素晴らしかったです。最初のリリースから2年後、会社の所有者(自分の家に住宅ローンで開発資金を提供していた)は、3000万ドルから4,000万ドルのバックポケットを持って立ち去りました。

私たちはしばしば、ビジネスのためにお金を稼ぐソフトウェアを作るためにここにいるという事実を見失います。企業は、「ベストプラクティス」を使用してソフトウェアを開発する機会を提供するために存在するのではなく、お金を稼ぐために存在します。

ほとんどの「ベストプラクティス」プラクティスは、利益を改善しません。広く採用されている、すべき、そして採用されているもの。それが「ベストプラクティス」が実践されない理由です。


6

許容リスク

リスクを冒して何かに賭けたことはありませんか?時間の制約があるため、後でリファクタリングするという意図を持って動作するようにします(より早くリファクタリングするのではなく)。実際、これは一部の人にとっては良い習慣と考えられています。

最終的に、あなたは十分な回数燃え、あなたのやり方を変えます。そこにあるすべての「ベストプラクティス」を考えてください。いつもそれらすべてをフォローできますか?矛盾することはありますか?すべての外れ値を処理するのに時間を無駄にしたくありません。

動作する悪いコードを書いて、だれもそれをも​​う一度見ない場合、それはまだ悪いと考えられますか?(「悪いコード」が何であるかを議論することによって哲学的な議論を台無しにしないでください。)


コードを最初に生成するために支払われるという概念に対して+1。第2に、(主観的に)保守可能にするという追加の責任があります。結局のところ-私は庭師に芝刈り機のメンテナンスに余分なお金を払っていない-それは管理するのは彼次第です。彼が良い仕事をして、彼のギアが持ちこたえたら、私は彼を再び招き、彼に再び私のビジネスを与えます。
JavaScript氏

4

IMEそれは他の人が言ったことの組み合わせです。無知(「これまでDataSetしか使用していなかったのに、なぜこのLINQに悩まされていたのですか?」、時間の不足(「上司はできるだけ早くそれを望んでいます。あまり時間をかけられません」)、欠如理解度(「コードビハインドですべてのコードを記述することの何が問題になっていますか?」)すべてが貢献しています。

皮肉なことに、一度その道を歩み始めると、あなたはただ自分自身を深く掘り下げます。今すぐ角を切り、アプリのすべてのコードをASPXファイルに放り込むと、後で修正することはできなくなります。新しいものがあなたに投げつけられ続けるので、あなたはそれらを素早くやらなければならないことを意味します。つまり、ASPXファイル内のすべてのコードを投げる必要があることを意味します(いつか修正することを誓います)など、それは決してありません-開発を停止することはできず、最初に修正する必要があると言うことができないため、スパイラルを終了します。


4

多くの場合、開発者は、より良いプラクティス、またはより重要なことには、より良いプラクティスを使用する利点を単に示されていません(さまざまな理由で「ベストプラクティス」という用語の使用をやめ始めています)。

開発者は「意図的に怠け者」であるという理論があります。言い換えれば、彼らは最も抵抗の少ない経路を選択する傾向があります。

優れたプラクティスのメリット(TDDなど、またはSOLID原則に従う)をすぐに示し、実際に優れた(ただし「怠stillな」)開発者になれるようになったら、抵抗が解消することがわかります。離れて。

それは教育の問題です:)


短いセッション(2〜3時間)でプログラミングを学びました。(実際には、異なる言語でのいくつかのセッション。)セッション中に、非常に良いコードが示され、コードをそのまま記述した理由が説明されました。私の「公式」言語コースのどれも、良いコードを紹介する上でこれまでに近づきませんでした。
-BillThor

「最小抵抗」は非常に記述的です。経験豊富なプログラマーは、アプリケーションのライフタイム全体にわたる「最小の抵抗」が何を意味するかについてのより良い考えを持っているだけです。

4

(不足)知識とスキル+投資時間

誰もこれを出していないことに驚いていますが、私の仕事の多くはシングルトンプログラマーであり、何かに苦労したときに(スタック以外)誰も行かないので、私には明らかかもしれません。私はTDDなどのより優れた手法を知っていますが、それらを使用するのに十分な知識がなく、使用を開始するのに役立つ情報を見つけるのに苦労しています。繰り返しになりますが、例としてTDDを使用すると、TDDの基本的な意味が理解できます-コードが特定の結果を出力することをアサートするテストをビルドしますが、実際に実装しますか?

最近、XCodeには単体テストが組み込まれているという事実を除けば、どこから始めればよいのか分かりません。作成するルーチンを実行した後、ビューにXボタンがあると断言できますか?rotateタグを呼び出した後、UIViewsが適切に再配置されたことをアサートするのはどうですか?

一体、どうすればXCodeで単体テストを書くことができますか?それは私が学習に時間を費やす必要がある他の何かです。


2

@Zuesと@Joshua Smith

はい、私は時間と予算が制約であり、あなたが知っているすべての「より良いプログラミング」原則をプログラムに入れることができないことに同意します。

もう少し時間があれば、現在のタスクをはるかに堅牢な方法で実行できることがわかります。しかし、(特に彼らが最初のiPhoneアプリを完成させている場合や、最初のカスタムメイドのビジネスインテリジェンスソフトウェアを入手している場合)ごく少数のクライアントは、より良い方法を見つけたので、すでにやったことを再実装していると言ったときに理解します。

単体テストでも同じです。残念ながら、私はまだそれらに予算を割り当てる準備ができているクライアントに会っていません。典型的な返信は、「自動回帰テストOKわかりましたが、単体テストですか?時間がありません!市場に迅速に投入する必要があります!」


私はクライアントにユニットテストの時間を割り当てるように依頼することはありませんが、それは仕事の一部であると考えています。ユニットテストでクライアントをコミットさせることは、クライアントが作業を細かく管理することを促進するだけです。あなたがあなたの車を修理するとき、整備士は仕事を成し遂げるために彼がどのツールを使うべきかをあなたに尋ねません!! ユニットテストについても同じことが言えます。ジョブを適切に実行するために必要だと思うテストの適切なバランスを判断する必要があります。
ニュートピア

残念ながら、優れたプログラミング手法は、改善する余裕のない手法よりも高速です。
-BillThor

2

私の経験のほとんどで2つの部分:

  • 時間
  • 現在の状況に最適なプラクティスについて同意するのに十分な人々を獲得する

「ベストプラクティス」は、多くの実際の状況で非常に主観的です。チームの半分がSOLIDとTDDを大量に実行しようとしているときに、残りの半分が60時間の週を使ってあちこちで実行時間を数秒短縮するために必要な手段を使用している場合次のリリースに間に合わないものを再設計すると、それほど遠くに行けなくなります。

チーム全体であまり意見の相違を経験していない場合でも、従うことを決定したポリシーに関する正式な合意、文書化、およびトレーニングを取得するのは多大な労力です。これは、ビジネスの観点から見て非生産的な時間の大きなブロックであり、慎重に正当化する必要があります。


2

時には、習慣がひどいコードを書く主な要因でもあることに気付くでしょう。

あなたは非常に経験豊富なプログラマであり、現在の業界のベストプラクティスについてすべてを知っているかもしれません。地獄、あなたもそのようなことについて専門家になることができます。経験上、そのような人々はひどいコードを書くことはあまりないが、それでも安全で便利だと感じるからといって、古い習慣に逆戻りして、ルールを破るということを知っていることをするのは簡単だと言う。そのような場合、無知と慢、そしてあなたが思いつくかもしれない他のすべての指さしの形容詞は本当に重要ではありません。そのようなプログラマーが自分の仕事に特に悪いというわけではありませんが(これがよくあるケースですが)、ひどい混乱を作りたいとさえ思っているわけでもありません。

私が数えたくないほど何度もこの出来事を個人的に目撃しているのは残念ですが、本当に才能のある人たちは、指と脳が数ヶ月間自動車で動いていたので、純粋なゴミを吐き出しました。ほとんどの場合、これは燃え尽き、悲しみ、ストレスの蓄積の証拠を見る場所です。時々、それは実際に日々の動きを通してそれらを運ぶ盲目的な習慣です。脆弱な人々に不必要にラベルを貼るリスクを回避するために、私はそれを注意深く見守ったことを学んだ。

単に否定的な結論に飛び込むのが簡単だと思う私たちにとっては、ちょっとした考えのための食べ物です...悲しいことに、あなたは頻繁に正しいでしょう。


-1

リファクタリングに沿った何かというタイトルのプロジェクトに支払う関心を示す人はいません。「ビジネス」の利益に訴える言葉が必要です。刷新、再活性化、全体的なリメイク、ライフサイクルのアップグレードなどの言葉は私の職場で機能します。それらのほとんどすべてに、プロジェクトの主要部分としてリファクタリングがあります。

悲しいことに、経済的なヒットマンのおかげで、仕事は賃金がある場合にのみ起こります。たとえ仕事が長期的にビジネスの財産を救うことだけであっても。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.