銀行の世界でコード設計の努力または怠lazを選択する


23

私は素晴らしい投資銀行で2年間働いてきました。

私は、最適化されたコードを作成し、適応された優れたデザインパターン、ソリッド原則、デメテルの法則を尊重し、あらゆる種類のコードの重複を回避することを望んで、いくつかの技術プロジェクトを作りました

本番環境での配信=>バグがゼロの場合、すべてが期待どおりに行われています。

しかし、大部分の開発者は、すべてのコードが読解には複雑すぎることを正確にするために来ました。たとえば、「ifおよびinstanceofをいくつか作成し、ポリモーフィズムを忘れて、緊急の生産バグを修正するのが非常に簡単になるようにします」。私は答えることを好まなかった......

これらの開発者はまったく好奇心がないことを知っており、優れた設計を理解する努力を拒否しています(たとえば、90%の開発者は戦略パターンとは何かを知りません。 )、私のプロジェクトマネージャーは、私は本当に間違ったやり方であり、世銀の世界にとって理想主義すぎると言った。

私に何をアドバイスしますか?本当に良いコードの欲求を維持するか、そうである開発者の大多数に私を適応させるならば、私によると、私による開発者の仕事のすべての美しさである設計コードによって本当に面白くないです。

それとも逆に、基本的なオブジェクト指向の原則とベストプラクティスを習得して、自分のコードに適応する必要がありますか?


19
七面鳥を
扱う

8
組織を変更するか、組織を変更します。-マーティンファウラー
ドンロビー

9
@ Mik378通信に問題がある可能性があります。この質問を書いたときのようにコードをだらしなく文書化すると(そして、オブジェクト指向の「粗雑さ」が増えるほど、より多くの文書が必要になりITradeSettlementVisitorます。あなたが好きな美しいコードを書くことは一つのことです。他の人がアクセスして使用できるように構造化して文書化することはまったく別です。
quant_dev

2
@quant_dev:Mik378についてあまりにも多くのことを想定していると思います。彼の質問は、私には不十分な言葉遣いではないようです。彼はネイティブスピーカーではありません。OOでの冗長性や過剰な設計は嫌いですが、Mik378が説明する状況はまた鐘を鳴らします。 "if(exp)then True else False")...この種の人々は、デザインパターンやポリモーフィズムにも怖がり、したがって、従来の手続き型の単純なコードに戻る可能性が高いです。
アンドレスF.

2
タイトルにあるように、同僚のためにコードをシンプルかつ簡単に維持することは怠慢であることに強く反対します。

回答:


20

私のプロジェクトマネージャーは、私は本当に間違ったやり方であり、世銀の世界にとって理想主義すぎると言っていました。

GTFO!

それらを離れて同情する時間。なぜ性交する必要がありますか?無能なスタッフと長期的に見ればお金がかかることはご存知でしょう。これは技術的な議論のゲームではありません。これは政治についてです。彼らに他の開発者やGTFOを訓練してもらいましょう!あなたが十分な政治的重みを持っていないなら、GTFO!より良い慣行を持つ会社を検索します。

そこにとどまる唯一の理由は、あなたの頭痛に対する適切な補償です。したがって、彼らは平均またはGTFOをはるかに上回ります!ソフトウェア開発者としてもあなたがそこで成長できるとは思いません。私たちの職業の成長は、主にあなたよりも優れており、ベストプラクティスを奨励する人々と働くことによって達成されます。そして、あなたが良いほど、気にする企業にとってのあなたの市場価値は高くなります。

ええ、私はこれが私の通常の答えの1つではないことを知っていますが、実際、この会社で政治ゲームをプレイできないなら、GTFOです。

私に何をアドバイスしますか?本当に良いコードの欲求を維持するか、そうである開発者の大多数に私を適応させるならば、私によると、私による開発者の仕事のすべての美しさである設計コードによって本当に面白くないです。

最適ではないソリューションの提供を希望する会社では働きません。ソフトウェアに自分の名前を刻みたい。私はそれを誇りに思います。私は、OOパラダイムに基づいた言語で手続き型アプリケーションを作成しません。私は高品質のソフトウェアを信じており、もし会社がそうでなければ、GTFOをやる!あなたが十分なお金を持っていることを願っています。


4
1 -それはGTFOが何であったか、私に起こったら...(urbandictionary.com/define.php?term=gtfo
Reddog

2
@Falcon私はあなたに完全に同意し、私の考えを共有している人々を見つけるのは喜びです。そして特にあなたが言うとき:「私たちの職業の成長は、あなたよりも優れており、ベストプラクティスを奨励している人々と働くことによってほとんど達成されます。」最も驚くべきことで、本当にイライラするのは、私が若い開発者であり、古い開発者からはあまり学んでいないことです。あなたの答えをありがとう:)
Mik378

+1、私は完全に同意します。この銀行は良い職場環境のようには見えず、その問題は乗り越えられないように見えます:悪いプログラマー、悪い管理。確かにGTFO!
アンドレスF.

2
@ Mik378:現在の雇用主はあなたの能力を十分に活用することができず、その結果あなたが価値あるものを支払うことができません。より良い組織はあなたからより多くの価値を得ることができ、より多くを支払うことができます。
ケビンクライン

+1、より多くの賛成票を与えることができれば、あなたは私から1000を得ます。自分で投資銀行で働いたことがあるので、Mik378が何を扱っているかを正確に知っています。毒性行動、極性応答者、エゴマニアの繁殖地です。優れた技術を促進するためのアイデア環境ではありません。
荒涼とした惑星

18

タフスポット。私は、あなたの主張に立ち、妥協する意志を示す、2つの方法を並行して進めることができると思います

  • これはお金についてです。実際には開発者の仕事と同じですが、銀行の環境を重視しているので、これはさらにうまくいくはずです;)。あなたのスタイルがお金を節約することを見せてください。設計が理由で要件の変更が本当に簡単に行える方法の例を見つけてください。他のコードの一部を見つけてみてください(ここではあまり攻撃的にならないようにしなければなりませんが、コードのスタイルを比較することです)。そもそもコードの品質が高いため、このような問題に注意してください。

  • これはお金についてです。実際にコーディングスタイルにお金がかかる場合はどうでしょうか?他の人が適切な設計によって保存されているものよりもあなたのコードを理解しようとしてより多くの時間を費やすなら、それはうまくいくかもしれません。あなたは技術的に正しいことをしているかもしれませんが、それでもチームの努力に積極的に貢献していません。また、OOP設計をやり直すこともできます。私は「良いデザインは美しい」という側面であなたと一緒にいますが、ここで彼らの視点と彼らが実際に彼らの視点からどのように正しいのかをあなたに気付かせようとしています。前のポイントと並行して、あなたがそれを上書きした場所を見つけようとします。これにより、操作の余地があります。わかりました、あちこちでもう少し実用的になることができますが、このコードが本当に優れているところもあります。


開発された回答をありがとう。私はあなたのアドバイスに注意しました:)
Mik378

これに単純なFizzBu​​zz問題を追加します。Javaで記述してからTDD方式で再度実行すると、突然読めなくなります;-)。
マルタインVerburg

@Martijn Verburg-TDDはコードを読めないと思いますか?
ドンロビー

@Don Robyの-倍そうで、OO言語でFizzBu​​zzのようなものを扱う場合は特に
マルタインVerburg

+1 @ Nicolas78「また、OOP設計をやり直すことも可能です」-たとえば、プリミティブデータ型をintのようなオブジェクトにするなど。
therobyouknow

16

しかし、大部分の開発者は、私のすべてのコードが読解には複雑すぎることを明確にするために私のところに来ました

彼らが正しいかもしれないということは、あなたにはまったく起こりましたか?

私は、彼がエレガントだと表現したコードを書くことに多大な努力をした人と仕事をしました。彼は他の人の仕事をエレガントではないと非難しました。コードを維持する必要が出てきたとき、彼のコードは私が修正することにしたコードではありません。それは非常に正確で厳格なので、それを変更することは非常に危険です。

ここで言及する興味深い言葉は「複雑」です。複雑であると表現できるコードが、特に良いと表現されることはめったにありません。


1
+1000同意します。コードは人間向けです。もちろん、他のコーダーはほとんどのコーダーが書いたものを読むことができるはずであるという警告があります。基本を理解していない人は誰でも改善する必要があります。
イアンホルダー

3
+1 @temptar「彼らが正しいかもしれないということがあなたに起こったのですか?」「複雑であると表現できるコードが、特に優れていると表現されることはめったにありません。」
therobyouknow

2
-1:私は彼らが正しいとは思わない、ほんの少し先輩、そして質問をよく読んでそれが明らかになると思う。OPのキーフレーズは、「あらゆる種類の重複コードの回避...」です。彼はコードを乾燥させようとしていますが、そうするには同僚が明らかに欠けている高度な知識が必要です。また、彼は「if ... instanceofを追加するだけ」という同僚の提案を引用しました。また、OPが正しい軌道に乗っており、彼の同僚が大きなWTFを構築していることもわかります。
ケビンクライン

私が心配しているのは、「複雑すぎる」OOPは良いことですが、非常に複雑になることもあります。オリジナルのポスターがOOPのクールエイドを飲んだのではないかと疑っていますが、それが常にコーディングの最良の方法であるとは限らず、必要のない場所で多くの余分な複雑さを導入しているかもしれません。
ザカリーK

この同僚は、将来のメンテナンスのためにテストを実施していないようです。プロジェクトマネージャーに報告してください。

10

ビクトリア朝時代の家具メーカー(少なくとも、今日でもその仕事を見る人たち)は本物の職人であり、彼らが作ったものは、機能的で、美しく、巧みに作られ、設計され、生涯続くように作られました。しかし、過去150年間で世界は変わりました。食堂のテーブルを購入する際に安価な代替品がより商業的に実用的である場合、多くの人々はそのような職人技の代価を支払う準備ができていません。

多くのプログラマーは、残念ながら古くからの職人になりたいと思っていますが、これは常に起こり得ないことです。あなたは、適応するか、去るかを選択できます。職人を求めている企業もありますが、ほとんどが機能し、安価で、現在の製品を求めている企業に圧倒されています。

あなたがほとんどの商用ソフトウェア開発に適していないという私へのヒントは、「本番環境での配信=>バグがゼロの場合」です。Nasaでさえ、スペースシャトルでそれを達成していませんでした。

詳細に注意を払い、初期コストが許容される唯一の場所は、レベル1のライフクリティカルなシステムです(例:アビオニクス/航空宇宙、自動車、軍事、医療)。


1
1 @mattnzのために、「あなたは選択肢を持っている、適応や休暇。」
therobyouknow

2
私は同意しません-これは銀行です。エラーが非常に高くなる可能性があるため、ソフトウェアにバグがないことを好む傾向があります。また、ソリューションは数年または数十年にわたって実行される場合があります。

2

問題は、間違った場所で作業していることです。あなたは非常にアカデミックに傾倒しているプログラマーのようです。あなたがいる環境ではうまくいかず、あなたとあなたの「複雑すぎる」コードを取り除くためにいくつかの言い訳が発明される可能性が高いです。あなたは自分で同意するか、あなたを解雇するのに十分な裏表紙の証跡を持つまで、ジャンクの割り当てやパフォーマンスの悪い評価などを与えられることがあります。

あなたの学問的価値を大切にする職場を見つけることをお勧めします。彼らはそこにいます。また、実用的なものと学問的なものとの境界にあるものもあります。そのような仕事はあなたの最良の選択肢かもしれません。なぜならそれはあなたが他の人たちの手綱を抑えるのを助けるようにあなたのアプローチにいくらかの混乱を招くことができるからです。


+1 @jfrankcarr「ジャンクの割り当てが与えられる可能性がある」(建設的な解雇の形式)の賢明な観察
therobyouknow

2

雇用主を変更するなどの抜本的な対策を講じる前に、あなたのエグゼクティブのような非プログラマーが、なぜあなたのコーディング方法が会社にとって優れているのか、時間とお金を節約できるのかを説明する能力を向上させようと思います。また、デザインパターンのためだけにデザインパターンを適用していないことを確認してください。KISSとYAGNIのルールも守っていますか?(OK、戦略パターンとポリモーフィズムはロケット科学ではありません。同僚に適応する時間を与え、そのアプローチを選択する理由を説明しください。)


私は同意します、問題は彼らが学びたくない、彼らのメンタリティを変えたくないということです(私はJavaの天才ではありませんが、大部分の人々が優れたものと考えるものを理解していないとき知って、私はそれを学ぶために努力します(本、インターネット記事、stackoverflowなど)。要約すると、彼らはパターンで頭痛を持ちたくありません(私はパターンと言いますが、プログラムの「優れた」原則と言えます一般的に)それは彼らに多くのお金をもたらさない...それを言うのは難しいが、それはとても真実である。アプリケーションだけがうまく機能していたら=>私は確かにこのトピックを書かないだろう
Mik378

@ Mik378:あなたは「他の人が間違っている」ことについて多くを語っています。あなたがしたすべてが正しかったことを確認してください
Doc Brown

@DocBrownポリモーフィズムには、単純なinstanceofが単一のメソッドに保持するファイル間でロジックを断片化するという明確な欠点があります。おそらく、作業単位が小さすぎますか?

2

私の会社では、Clean Code Developerに基づいて一連のワークショップを実施しました。その目的は、多忙で期限があり、不正な妥協点がある通常の日常業務以外のフォーラムを作成することでした。自分の仕事。

実際のプロジェクトからの実例も議論されました。参加者からのフィードバックは非常に肯定的でした。ただし、実際のメリットを測定することは困難です。

これらのワークショップへの出席は、一部は企業主催の時間であり、一部は参加者自身の余暇でした。学習を気にせず、単に仕事をして家に帰りたいだけの同僚に連絡することはありませんが、自分の仕事に興味がある他の人にとっては興味深いかもしれません。


私はこのアイデアがとても好きです。
temptar

2

まず、あなたのやり方が本当に良いかどうかをチェックします。オブジェクト指向コードは非常に優れている場合がありますが、隠れた副作用の悪夢にもなり得、すべてのアクションはいくつかの異なるクラスを必要とします。

さらに良いのはInfoQに行き、Rich Hickeyの「Simple Made Easy」に関する講演をご覧ください


1

絶え間なく苦労せずにそこで働き続けたい場合は、少し手を加える必要があります。すべて手続き型の開発者グループは、すぐにポリモーフィズムを受け入れません。彼らはオブジェクト指向で設計することはできないかもしれませんが、彼らはあなたのコードから学ぶことができます。彼らはあなたのコードのいくつかが保守しやすいことを評価するかもしれません。

補足として、面接プロセス中に質問をして、好みに一致することが重要だと思われる場合は、どの開発プロセスとコーディング方法が使用されているかを確認する必要があります。


0

緊急事態が発生します。あなたは完璧ではなく、彼らの手ある時点であなたのコード台無しにします。GPが確認するように、決して休まない限り、それは健康に良くありません。そして、劣悪なコードを出力する可能性が高くなります。

コードの品質は向上する可能性があります(実証されていない事実)、ポリシーがあります。(地獄の事実として確認してください)

ポリシーに従うよう警告されており、ポリシーに従わなかった場合の責任があります。緊急事態。銀行のアプリケーション。つまり、あなたの目標が貧しい状態で終わり、刑務所に入ったら、同じ結果を得るためのもっと楽しくてもっと意味のある方法を見つけ出すことができます。

あなたのセルメートは、あなたの元同僚の好奇心欠如についてとりとめのないことを聞いて喜んでいるでしょう。

(再び、あなたの会社はおそらくOO設計に対する内部ポリシーを持たないでしょうが、コードを修正しようとする不器用なCOBOLトレーニングを受けたエンジニアは、薄気味悪い部分を補ってくれるでしょう。クリティカルヒットを獲得する確率は40%です)


1
個人的には、本当の非常に優れた開発者は、その汚いコードと同じくらいすぐに素晴らしいコードを実行すると思います。非常事態については同意します...しかし、プロジェクトが4か月間計画されており、開発者が何をするか、どのように、また何かがアプリケーションに既に存在するかについてのグローバルな見解さえ持っていない場合彼らを助ける、私はそれを受け入れることができませんでした。開発者が「このコードは恐ろしいことを知っていますが、それを壊すかもしれないのでリファクタリングすることは決してありません」と言ったら、それはばかげています。彼らはエンジニアですか?エンジニアはリスクを取ると、いくつかの本当の良いユニットテストはconfiantであることを確認する必要があり
Mik378

1
ここで銀行と話をしていない場合は同意します。私はいつも彼らが他のプログラマーとは異なる束だと感じています。彼らはまた通常より古いです。(私の環境では、少なくともどこでも、私は推測します)彼らの数学は簡単ですが、その正確さはそうではありません。
ZJR

@ZJRあなたはここで夢中になり、OPのあなたの予言がオブジェクト指向を使用するための刑務所の時間をしています。ほとんどの銀行コードはこのような精査の対象ではありません。
quant_dev

0

プログラミングは、それ自体のためではなく、目的を達成するための手段として考えられていることを忘れないでください。使用するすべての製品とサービスについて考えてください。下のコードがエレガントに作られているかどうかを検討するのに多くの時間を費やしていますか?または、それらが機能するだけで、それらに感謝しますか?興味のある業界や原因を見つけて、それを使って組織を見つけ、それだけでなくプログラミングを含むソリューションを提供します。問題はさまざまな方法で見事に解決できます。

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