どのようにして人々に“それを成し遂げるだけで”抽象化と柔軟性を評価しますか?

StackOverflow https://stackoverflow.com/questions/210421

質問

公式のインターフェースをスキップして、基礎となる実装の詳細に直接アクセスしたいときに、問題を解決したい他の人々との間に困難を感じることがあります。

そうすることで、問題をより迅速に解決できると主張します。そうすることで、アーキテクチャがより緊密に結合され、新しい要件が発生するにつれて変更が困難になると私は主張します。

現在の設計と設計の哲学と柔軟性の価値、脆弱なコードの維持と変更を試みるコスト、カプセル化とデータの隠蔽、階層化されたアーキテクチャの価値、仕様の小さな変更がコードの小さな変更につながるように堅牢である。そして、彼らは「しかしこれはもっと簡単だ」と言います。

これらの人々をどのように処理しますか?

役に立ちましたか?

解決

ショートカットをとることは誤った経済であると彼らに納得させます。

最初のコーディングの努力は、最初の開発努力の30%未満であり、プロジェクト全体の努力(保守を含む)の10%(私の経験では)未満であることを説明します。

彼らが納得できないままで、あなたにそうする権限があるなら、あなたのやり方でそれをするように彼らに言ってください。権限がない場合は、他に何もしません。最終的には、上司が何か価値がある場合、これを認識し、あなたは権威のある立場になります。

他のヒント

それらのバグを修正するいくつかのレガシーコードで彼らに働きかけてもらいます。これは私が知っているほとんどの人がこれらの本当に貴重な教訓を学んだ方法です...難しい方法です。

"簡単に"いつ?さて、すべてが流動的な状態にないときは?または、顧客の要件が変更され、もはやソリューションではない「ソリューション」が得られた3か月後?

構造とルールのために構造とルールはあまり好きではありませんが、A)誰がボートを運転しているのかB)ルールとは何か、C)このようにした理由。

私のショップでは、コードを書き直さなくてはならないのは、たくさんのものを台無しにしてハードコーディングしたか、問題に対する脆弱な「解決策」を作成したからです。ひとたび要件の変更によって物事がひっくり返されたときにフラストレーションが減ることに気づいたら、より柔軟なアプローチに従うことは難しくありません。通常、「今日必要」ではなく「長距離」用にコーディングしているため、デザインは理由で作成され、同じ理由でデザインがフォローされます。

「get it done quick」モードになっていたため、モジュールの書き換えに1週間(7日間連続)費やしました。 7日間の厳しい時間、10から12時間の日が正しい方法で、ゲームの終盤、スーパーボウルを観戦できたとき。あれそこで教訓を学びました。あなたの「友人」もその種の目を開かせるものを自分で経験する必要があるかもしれません。

幸運を祈ります!

実際、これについて反対意見を述べるのは嫌いですが...

ヴァンヘイレン(決まり文句)を引用すると、「すべての時間と場所があります」私は確かに悪い文章を支持することはありませんが、時にはそれを成し遂げる必要があり、堅牢/永続的とハッキング/文書化の間の幸福な媒体を見つける必要があります。 (文書化された部分は特に重要です。2つの面:1つは、あなたがやっていることは何でもそれを成し遂げるために単に行われ、特定のショートカットを取っていることを明確に示していることです。問題へのより適切なアプローチ方法についてはどうでしょうか。

プログラマーとして、私たちはしばしば完璧なコードを書くよう努力します(まあ、私たちの一部はそうします)。時には全体像を見失うことがあります。コードを高速かつ緩くし、将来の影響を最小限に抑えます。

これを正当化として使用しないでください-80/20ルールはもちろんここに適用されます。ほとんどの場合、これらの線に沿ってショートカットを絶対に押しつぶします。しかし時々...

見せて! "しかし、これは簡単だろう"で小さなモジュールをやってみましょう。あなたがそれを正しい方法でやっている間にスタイル。次に、要件に2〜5個の変更を加えるように依頼し(変更を行う必要があります)、変更の実装に関するタイミングコンテストを実施します。 1、2日かかるかもしれませんが、彼らはそれを取得します。そうしないと、すべての新しいプロジェクトまたはタスクで同じ議論が行われます。

それらについて類推することができます。...

チェスのルールは非常に単純です。それらを子供に教えることができます:「このような馬の動き」、「このような城の動き」など

それがあなたの知っていることなら、チェスをすることができ、おそらく楽しい時間を過ごすことができますが、ゲームについてより深い知識を持つ誰かが毎回あなたと一緒にボードを一掃するつもりです。あなたは彼らがどうやってそれをやっているのか分からないので、あなたはもはや楽しくさえないほどひどく打たれるでしょう。

同じ原則がプログラミングにも当てはまります。言語の構文といくつかの単純なデータ構造を知っていれば、プログラムを機能させることはできますが、複数のリリースサイクルに耐えなければならない大規模なアプリケーションでは、あまり運がありません。

Chessには開始点、攻撃戦略などが設定されています。デザインパターンがあります。

最善の方法は、おそらく彼らを経営陣に昇進させて、彼らがそれほど大きな損害を与えられないようにすることです。

問題は、ほとんどの人が最も基本的な概念とドラッグアンドドロップスタイルの開発以外のソフトウェアデザインについても知らないことです。すべての最高の新しいコンセプトとテクノロジーについて研究し、教育する開発者ごとに、家に帰ってPCを見ない10人がいます。それらを教える必要があります。

5年ほど前に大きくて複雑なシステムを設計しました。次の5年間、「私の」に影響を与えたすべてのプロジェクトに自分を投入しました。野bar人が私の建築を汚すのを防ぐシステム。絶え間ない容赦ない圧力をかけている限り、アーキテクチャをきれいに保つことができましたが、負けた戦いと戦っていました。その理由は次のとおりです。

1)ほとんどの人は、仕事が今日終わったかどうかで判断されます。 3年前にプロジェクトを予定通りに開始するために角を切った(または2つ)ため、誰もbody責されたことはありません。一方、多くの人々は、プロジェクトを時間通りに出せなかったことで re責されています。

2)コード、アプリケーション、またはユーザーなどに対する所有感があるため、システムを整頓したい場合があります。多くの人々は所有感を持たないため、あまりにも満足しています。何かをハックして、それを使ってできるようにします馬を水に導くことはできますが、彼を気にすることはできません。

3)コードを適切に保守するように全員を説得する 場合、新しい人々が参加し、正しいことをする方法を教える必要があります。たとえ成功したとしても、常に新しい敵と同じ戦いをしているので、失敗したと感じることができます。

4)実際には間違っている可能性があります。マイクロソフトがプログラマーの2倍の時間を費やしてMS-Paintを堅牢で保守可能にすることは、経済的に意味がありますか? Sometimesいハッキングされたシステムで十分な場合もあります。ほとんどの優秀なプログラマーはこれを理解するのに苦労していますが、これは通常彼らが優秀なプログラマーだからです。

5)私は、より速くそれを行うことができるか、またはそれを理解する唯一の人であるか、ルールを破る幼稚な必要性があるために、物事を一緒にハッキングすることで邪悪な喜びを取る人がいると誓います。これらの人々に理由を付けることはできません。彼らと議論する時間が長くなればなるほど、プロジェクトの締め切りが近づき、とにかく何かを一緒にハッキングすることを強いられます。

6)システムよりもシステムをよく理解している可能性があります。あなたにとってtoいハックのように見えるものは、「軽く踏む」ように見えるかもしれません。システムに精通していない人に。または、コードを堅牢にするための余分な努力は、プログラマーがこれまでに経験したことのない問題からプログラマーを保護します。リターンコードをチェックしなかったため、何か問題が発生するまでリターンコードをチェックすることを学習しません。その時点で、「余分な作業」ではなくなります。 「必要な作業」になり始めます。

小規模で緊密な開発チームがある場合は可能です。しかし、組織が大きくなればなるほど、成功する可能性は低くなります。 250人のITショップで物事を速く行うことよりも物事を正しく評価することができた場合、説得力は伝説的です。

カプセル化理論を読むように伝えます(決してそうするわけではありません)。 http://www.edmundkirwan.com/

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top