「機能する限り」は標準ですか?[閉まっている]


23

私の最近の質問を参照してください: プログラミングは、底辺への競争における職業としてですか?

私の最後の店にはプロセスがありませんでした。アジャイルは本質的に、彼らが彼らのプロジェクトを開発または管理する方法について全く計画を持っていなかったことを意味しました。これは「やあ、ここにたくさんの仕事があります。2週間でそれをやりましょう。ペースが速くて機敏です」。

彼らは問題があると知っていたものをリリースしました。彼らは物事がどのように書かれているか気にしませんでした。数人の開発者がいるにもかかわらず、コードレビューはありませんでした。彼らはバグだと知っていたソフトウェアをリリースしました。

私の以前の仕事で、人々はそれが機能する限り態度を持ち、それは大丈夫です。基本的に仕様を調査している間に書いたコードの書き直しを要求したとき、彼らはそれを否定しました。コードが複数の場所で繰り返され、カプセル化が行われず、人々がコードを変更するのに長い時間がかかったため、コードを書き直したかったのです。

本質的に、私の印象はこれです:プログラミングは次のように要約されます:

  1. 最新のツール/テクノロジーに関する本を読む
  2. これに基づいてコードを一緒に投げ、会社が「カスタムコードを維持する」ことを望まないので個々のコードを書くことを避けます
  3. それを見せて、「それが機能する限り」次のことに進みます。

次の仕事はもっといい店を手に入れるといつも言ってきました。それは決して起こりません。これなら、行き詰まってしまいます。技術は常に変化します。ここでの唯一の専門的な開発が最新のMS Pressテクノロジーブックを読んでいる場合、10年で何を構築しましたが、さまざまなテクノロジーの表面的な知識ですか?私は心配しています:

  1. 専門的な基準を持つ最善の方法
  2. この状況で有意義な知識と経験を開発する方法

3
これはどこの国ですか?

3
避けられないディルバート参照:runningagile.files.wordpress.com/2007/11/...
nikie

5
<quote>本質的に、アジャイルとは、プロジェクトの開発または管理方法に関する計画がまったくないことを意味します</ quote>これはアジャイルではありません。これは何でもありません。
マーティンヨーク

4
@Martin York:確かに、いくつかの場所では、計画や仕様が欠けているとアジャイルと呼ばれているようです。それは、弦のどこに左指を置くべきかわからないチェロを演奏し、それを無調音楽と呼ぶようなものです。
デビッドソーンリー

2
人々は質問の要点を逃していると思います。私のポイントは、ここで説明したダイナミクスは、実際にはスキルを必要としないか、開発者がスキルを構築するようには思われないことです。それは、耐えられない表面的なレベルの知識の開発につながるようです。会計士、弁護士などは、トレーニングの価値を高める経験を積んでいます。私がここで見たダイナミックさを考えると、私たちはそうではありません。
-q303

回答:


8

私は、優れた開発者になるための重要な側面であると思われるものに間接的につまずきました。「機能する限り」と巧妙に設計されたエレガントなコードのバランスをとることです。

政治のように、中間の微妙な位置を取るよりも、スペクトルの一方の端に自分の位置を賭ける方がはるかに簡単です。私が遭遇した開発者の大部分は、コーディングカウボーイハックとアーキテクチャ宇宙飛行士の2つのカテゴリのいずれかに分類されます。両者のバランスをとろうとしています。思ったほど簡単ではありません。

より直接あなたの質問に答えるために、はい、私は「それが機能する限り」がしばしば標準だと思います。しかし、別の見方をしてください。あなたは同僚を教育し、より良い実践を導入しようとする素晴らしい立場にいます。しかし、極端に行かないで、なぜ私たち全員がこれをしているのかを覚えておいてください:顧客の問題を解決するため。


2
+1特に:remember why we're all doing this: to solve our customer's problems.
ジョージマリアン

21

>>私の前の仕事で、人々はそれが機能する限り態度を持っていました、それは大丈夫です。

私はここでは少数派かもしれませんが、私は同じ態度を持っています。何かを書き換えるには、なぜこれが必要なのかという明確な証拠があるはずです。そして、私は「uf、私はそれがコード化された方法が好きではない」というようなことを意味しません-すべての開発者はコードに関する好みを持っています。書き換えたい部分にはいくつかの問題があるはずです。

  • パフォーマンスの問題
  • システムの他の部分よりも多くのバグが見つかりました
  • 開発者は、この部分で作業する際により多くの時間を費やします

7
+1I strongly believe that to rewrite something there should be clear evidence why do we need this
ジョージマリアン

3
+1。ほとんどのプログラマーはコードに非常に情熱を傾けているようで、美しさや純粋さなど、コードが実際に開発対象の単なる成果物であることに気付かないほどです。最後に、重要なのはそれが機能することだけです。それはあなたの有料顧客が気にすることです。
ジョナスプラッカ

9
私はあなたの答えに問題はありませんが、この態度はコードを書き換えるすべての実際の正当な理由に反対するために経営者によって頻繁に使用されます-「それは本当の理由ではありません」、そして彼らは前進します。
ニコール

4
@Michael:リファクタリングは非常に重要です。そして、コードが機能するということです。競合他社が勝つため、すぐに完了します。限られたリソースでそれを成し遂げることも非常に重要です。なぜなら、お金が非常に少なく、他にもやることがたくさんあるからです。非常に重要なことが非常に多くあり、ビジネスはそれらの間のバランスを取ることです。簡単なタスクではありませんが、Googleなどの成功したタスクは、常に「すぐに何かを取り出し、後で磨く」という態度に傾いているようです。
ジョナスプラッカ

3
@Joonas Pulakka:それは完全に市場に依存しています。ウェブサイトにとって、多くの場合、最高の製品を所有することよりも最初にすることの方が重要です。一方、例えば、重要な医療機器を使って「すぐに何かを取り出して、後で磨く」ことを試みた場合、おそらくあなたのビジネスは長くは続かないでしょう。
ニキエ

14

アジャイルは、バグのあるソフトウェアのリリースを決定する人間に対して責任を負いません。人間です。

とはいえ、品質を非常に重視しているので、それは良いことです。あなたは完璧主義者であり、最新の技術に追いついていないなら、あなた自身の価値を心配していると確信しています。

問題は、完全主義先延ばしになり、先延ばしが平凡につながることです。

そのため、ビジネスは市場投入までの時間などを優先し、アジャイルを使用して、予測可能なペースで迅速に価値を提供します。

あなたはあなたの会社のビジネス戦略を説明しなかったので、あなたはそれについてあなたのマネージャーに質問することから始めるべきだと思います。

彼らの目標と計画(彼らそれらを達成するのを助けるためにあなた雇った)に沿って調整することにより、あなたはあなた自身と個人の目標に集中するのではなく、あなたがそれらに貢献する方法を理解するより良い立場になります。

understand彼らの価値に挑戦することで、あなたはあなたのものを共有することができ、それが実りあるコラボレーションの始まりになると確信しています。

そして、彼らが彼らが何をしているのかわからないことがわかった場合、あなたの唯一の選択肢は終了することです。


2
私は特にこの行が好きです:The problem is that perfectionism leads to procrastination and procrastination leads to mediocrity.
ジョージマリアン

1
ピエールはこのサイトのヨーダのようなものです!
-ozz

3

それはすべてあなたが構築しているものに依存します。1か月だけオンラインになるマイクロサイトを構築していて、構築に9日間ある場合:はい、動作する限り十分です。

FA-18システム用のフライバイワイヤアルゴリズムを作成している場合は、可能な限り完全に構築することをお勧めします。

そのため、ほとんどのテクノロジーの答えの場合と同様に...それは異なります。


2

会社によって異なります。しかし、多くの企業は深刻な競争と時間のプレッシャーを抱えています。それが典型的な理由です。もう1つは、潜在的に十分なスタッフのいない大きなワークロードです。(人員不足の理由はいくつかありますが、必ずしも会社のせいではありません。)そうは言っても、一部の組織は湿った紙袋から抜け出すことができませんでした。

ここでは80/20ルールが適用されると思います。基本的に、安っぽい80%に耐え、20%に取り組む必要があります。ただし、それらであってもトレードオフを行う必要があることを理解してください。ビジネスでは、通常、それが絶対に正しいかどうかは問題ではありません。あなたが今それを持っていることが重要です。


2

ここでの唯一の専門的な開発が最新のMS Pressテクノロジーブックを読んでいる場合、10年で何を構築しましたが、さまざまなテクノロジーの表面的な知識ですか?

それはかなり嫌なことですが、その10年で注目すべきいくつかの壮大な失敗があったかもしれません。私はそこで働くことについて好きであったか、楽しんでいないかなり具体的なことを思い出すことができる多くの場所を見てきました。会社がスクラムを実装しようとするか、テスト駆動開発アプローチを採用しようとする場合のような新しいプラクティスがありますが、それらはチャンスかもしれませんが、正式な教室の設定ではないため、必ずしも専門的な開発とは見なされません。

さまざまなカウボーイコーディング戦略とともに「機能する限り」が一般的なさまざまな場所を知っています。いくつかの新興企業で、この種のメンタリティを見てきました。会社がまだ若く、彼らが本当に何をしようとしているのかという考えを洗い流そうとしている場合に意味があります。私が働いてきた他の会社では、プロセスと成熟度が非常に高くなっていますが、必ずしも見つけるのは簡単ではありませんが、恐れています。「好きだ。後の仕事の状況のた​​めにそれを覚えているだろう」と私が行きたいところに、「私は本当にそれが好きではありません。私は注意します。将来的にそれを避けようとする。」


2

私はこのような店で彼らに追いついたばかりの時点でしばらく働いていました。文字通り解決できなかった既知のバグがある2、3年前のアプリケーションがありました。レイアウトの幅と高さの計算を実行する4,000行のループを考えてください。コードの一部を修正して1つのインスタンスの問題を修復すると、以前の開発者がマジックナンバーを使用して計算結果を任意に調整することで同様の問題を帯域支援していたため、20の問題が発生します。コードは有毒以外のものとは言えません。

最後に、この既存のコードを使用してレイアウトを処理できると上司に言われた新しいプロジェクトを手渡しました。どういうわけか私は彼に私にそれを「変更」させるように説得したので、彼は私に余分な時間を与えました。代わりに、レイアウトを支援するために適切に設計されたライブラリを作成するのに時間を費やしました。この新しいプロジェクトのバグは、文字通り、解決するのに10秒かかりました。問題を特定してからコードを見て、何が問題なのかを確認することさえできました。

私はこれが私のマネージャーにとってターニングポイントになると思ったが、私が得たのは背中を軽く叩くだけで、彼は基本的に「あなたのやり方もうまくいくと思う」と言った。

それ以来、私は別の店で働き始めました。ポイントは、彼らの心を変えることはできないということです。別の場所で仕事をするだけです。


2
同意します...あなたが仕事をする場所で誰かの心を変えようとする意味はありません。私があなたが最初に働いたとあなたが説明した場所で働いているように感じます。そして、できれば緑の牧草地に船をジャンプする準備ができてい
ます

同じこと; 文字通り正しいことをすることができない無知な同僚との仕事を常に見つけているようで、より良い方法を説明しようとすると、この「ハァッ」を手に入れます。なぜそうすることができないのか、言い訳(コードをリファクタリングする時間がない、やらなければならないなど)なので、何も変更せず、不十分に書かれたものに対処しなければならないことにイライラします。
ウェインモリナ

1

経済には一種の進化プロセスがあり、遅かれ早かれそうした企業を廃業させるという希望がまだあります。しかし、多分、技術進歩のペースが速すぎると、新しいニッチが多くなりすぎるため、弱い競合他社でも十分な「食料」を見つけることができます。

良い場所で働くチャンスを増やしたい場合は、数週間ごとに新しいものを書くのではなく、多くの顧客に販売する製品を持っている会社を探してください。優れたコードベースを持ち、常に既存のコードを壊すことなく新しい機能を追加できることに関心があるはずです。


1

大学の私の主要な仲間を思い出させます。彼はVLSI設計クラスを受講していましたが、最初の宿題のために、幅約1ミクロン、長さ1マイルのコンポーネントを思いつきました。シミュレーションは完全に合格しました。

彼の批評家に対する彼の返事は、「私のたわごとが機能するということだけです」。


1

非常に良い規範はパレート原理です

80〜20ルールのプロジェクトの経験があり、非常にうまく機能しました。「完璧主義のためにどこで線を引きますというこの質問への答えも役立つと思います。

「パレート原理」という用語は、パレート効率を指すこともあります。 パレートの原理(80-20ルール、極めて少数の法則、および因子スパース性の原理としても知られています)では、多くの場合、効果の約80%が原因の20%から生じると述べています。 経営管理思想家のジョセフ・M・ジュランはこの原則を提案し、1906年にイタリアの土地の80%が人口の20%に所有されていることを認めたイタリアの経済学者ヴィルフレド・パレートにちなんで命名した。彼は、庭のエンドウ豆の鞘の20%にエンドウ豆の80%が含まれていることを観察することにより、原理を開発しました。ビジネスでは一般的な経験則です。たとえば、「売上の80%がクライアントの20%から来ている」などです。数学的には、参加者の十分に大きなセット間で何かが共有される場合、「参加者の(100-k)%がk%をとる」ように50〜100の数kが必要です。数kは、50(等しい分布の場合、つまり、人口の100%が等しいシェアを持つ場合)から100近く(少数の参加者がほとんどすべてのリソースを占める場合)に変化する場合があります。数学的に80%という数値については特別なことはありませんが、実際のシステムの多くは、この分布の中間的な不均衡の領域のどこかにkを持っています。 パレート原理は、同じエコノミストによって導入されたパレート効率に正接的にのみ関連しています。パレートは、人口間の収入と富の分配という文脈で両方の概念を開発しました。

ソースへのリンク


それは素晴らしいことですが、質問とどのように関連していますか?職場の20%が不良ソフトウェアの80%を生み出していると言っていますか?
カークブロードハースト

いいえ、ソフトウェアが80%動作する場合は問題ありません。許容されるエラー率は20%です。
アミールRezaei

0

基本的に仕様を調査している間に書いたコードの書き直しを要求したとき、彼らはそれを否定しました。コードが複数の場所で繰り返され、カプセル化が行われず、人々がコードを変更するのに長い時間がかかったため、コードを書き直したかったのです。

違反はありませんが、マネージャーとして、私は次のようにどこかでその声明を読みました。

「すでに書いたコードを書き直すために2回支払われるように頼んだとき、会社は支払いたくなかった。最初に書いたときに作った混乱をきれいにするために余分なお金が欲しかった。同僚は自分の人生を難しくしていることに怒っていました。」

それがあなた自身のコードである場合、あなたは文句を言っています-あなたはあまり立つ必要がありません。

更新

私はこのPOVが人気がないことを理解しています。しかし、私もそれがプロの開発者の責任と態度とまったく矛盾しているとは思わない。

クリーンなコードを作成する場合(そして、これを行うには多くの理由があります-コードが実稼働で使用されるかどうかに関係なく)、この問題は定期的に発生します。

きれいなコードとリファクタリング時間を見積もりに含めると、コードベースを整理するスケジュールもできます。スケジュールのプレッシャーが原因で必要な時間が得られない場合、発生した技術的負債を処理した結果、将来の見積もりが上がるはずです。

ある時点で、将来の推定値(または推定値を取り巻く不確実性)を利用して、書き換えを主張することができます(マネージャーがプロセスの高速化を求めている場合)。そうでない場合は、ビジネスがあなたの見積もりを受け入れて、代わりに交換するよりも継続的なコストを支払うことを受け入れます。これは純粋にビジネス上の決定であり、技術的な決定ではありません。

スケジュールを交渉する時間は、コードを書く前であって、後ではないことを忘れないでください。コードが記述(および「機能」)した後、顧客、管理者、および幹部は、元のコストに近づくかそれを超える「メンテナンス」の別の請求書を見たくありません。あなたがビジネスについて思うほど強くそれを感じるなら、あなた自身の時間にそれを書き直してください-それはあなたがビジネスにそうするように頼んでいることです。

マネージャーの観点からすると、書き換えのスケジュールを設定すると、彼のお尻が一線を画します。あなたが届けることに失敗したとき、またはあなたが言うほどに生産性を上げたとき-彼はバッグを持って残った人です。あなたが不平を言うのは比較的マイナーな不便と比較して、彼がどちらを好むかを推測してください。


2
「本質的に仕様を調査する」ことに注意してください。マネージャーとして、詳細な仕様を提供してくれて、書き直す必要がある場合は、私のせいです。仕様を提供せずに、私が書いているように仕様を進化させる場合、コードの初期部分の要件をすべて把握していないため、リファクタリングする必要があります。
-q303

8
私はこの答えを痛めつけたいと思います。しかし、私はできません...これは本当にマネージャーが考える方法です。マネージャーが受け入れることができる用語でそれを言うのは開発チーム次第です。問題が機能していても「書き換え」と言うと、毎回マークの反応が引き起こされます。おそらく、「固める」、「安定化する」、または「仕上げる」と言っても耳障りではありません。マネージャーは、不完全なコードで本番環境に移行したことを認識しなければなりません。仕事を終えるかどうかは彼ら次第です。開発者にそうしないことのコストを納得させるのは開発者次第です。
ジェフネクト

1
@jeff-スポットオン!賢い同僚はかつて私に、「彼らに言う機会を与えないでください、それはあなたが質問をどのように言い表すかに依存します」と言いました。
-ozz

2
マネージャーとしてのあなたのスタンスは、元の開発者が去るまで機能します。その後、他の誰かがコードを取得する必要があり、a)本来の変更よりも10倍長い時間を費やすか、b)ひどいバグを引き起こす変更を作成します。そして、それは彼のコードについて不平を言っているコーダーではありません。それがいることを問題に文句新しい開発者のあなたは、彼らがより簡単に固定されている可能性がときに解決されることを防止します。開発者は交換可能な「リソース」であるという考えは、非常に素朴な視点です。
アリ

0

それがあなたが得ることができる仕事の種類であるなら、戻って古いコードを書き直すのではなく、毎回より良いコードを書くことに集中してください。サードパーティのパッケージを接着する領域内で移動できる品質範囲はまだあります。

時間があり、メンテナンスしている既存のコンポーネントのコードを改善したい場合、あなたがやっていることが機能する限り、許可を求めずにそれを行うことはできませんか?コンポーネントを使用する次のプロジェクトの見積もりに時間を考慮します。

低レベルのプログラミングの場合、作業から学習の満足度を得ることができない場合は、オープンソースプロジェクトを検討する時が来たでしょうか。


人々が既存の、いコードに触れるのを好まない主な理由は通常、バグ修正/絆創膏の多くの反復を通じて機能することです。勝手に書き直すことは、許可なく-それらのバグ修正をすべて捨てるようなものです。戦いでテストされたコードを、工場出荷時の新しいものと交換しています。私は許可を求めずにそれをしません。
カークブロードハースト

0

q303、あなたの質問がおもしろいと思ったので、開発者が技術的負債に対処できるようにマネージャーを説得する方法について、このプログラマーの質問を読む価値があると思うかもしれません。

私は一般的に、はい、それが標準だと思います。動作しているが最適ではないソフトウェアは、動作していないソフトウェアよりもはるかに優れていることを理解してください。「働く」の定義は、各個人の認識とバイアスに基づいて変わる可能性があるという議論もあります。新しいシステムを実装するとき、古いシステムの方が優れていると感じたと言う人が常にいます。そして、開発者と話をするとき、彼または彼女はくだらないソフトウェアに取り組んだことを認めたがらない可能性があります。

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