web-dev-qa-db-ja.com

ジュニアソフトウェアエンジニアとして、私はそう感じた場合、何かが間違っていると言うべきでしょうか?

最近入社し、初めての仕事です。コードベースを読んだ時、コードが上手く書かれていないように感じました。私がコードに言及した問題のほとんどが here であるように見え、さらに Anemic Domain Model があるように見えました。単体テストはなく、findbugsやpmdなどのコード品質チェックツールを採用していません。私が抱えている問題は、コードを理解するのが非常に難しいということです。経験が浅いので、結論が間違っているかもしれません。上記の事実を上司に伝えるかどうかについてアドバイスが必要です。コミュニケーションをとる場合、誰に(技術リーダー、アーキテクト、プロダクトマネージャー)、どのように連絡しますか?そして、私がジュニアで経験がないので、私がコミュニケーションをとれば、彼らはそれをひどく取るでしょうか?

11
Why123

チームの上級開発者に尋ねます。それが間違っていると思うと彼らに言わないでください。代わりに、コードを理解していないことを伝え、コードがそのように開発された理由を知りたがります。彼らにあなたにコードを説明するように頼んでください。

29
Bryan Oakley

上級開発者、またはコードの構造と詳細について十分に理解している人から対立しない方法でコードの説明を求めることは良い考えです。

質問している詳細(なぜコードがそうであるのか)について質問し、答えが何かを書き留めてください。説明の後で満足できない場合は、問題をもう少し掘り下げてケースを作成し、バックアップする準備ができているとします。最初にあなたを助けた人にそれを提示し、彼らがあなたの発見についてどう思うかを尋ね、そこから作業します。

あなたの職場の文化によっては、誰かがあなたと一緒にコードを検討する機会を待つことになるかもしれません。可能であれば、この時間をとって問題をさらに詳しく調べてください。ジュニア開発者は一般的に経験豊富であるとは期待されておらず、このような状況が発生します。

9
user7007

実際には、答えは「いいえ」です。 「良い」や「悪い」などの言葉は経営陣によってのみ使用されます。 「良い」とは何かを定義するには、管理者になる必要があります。これがあなたが望むものであるかどうかはあなたの好みです。

私は自分自身はプログラマーではありませんが(まあ、とにかく職務制限ではありません)、多くのプログラマーと一緒に仕事をしている/知っています。たとえば、[重要な通信会社を挿入]の低レベルの管理職の女性と、[主要な視聴覚企業を挿入]の上級設計エンジニアの男性を知っています。女性は、キャリアレベルの人と経験が新しい言語を学ぶことが期待されるためには、それがいかに「侮辱」で「不合理」であるかについて常に進んでいます。男はARM=開発を開始しましたが、Eclipseのような「未完成の」ソフトウェアを使用したくないので、常に有料ツールの海賊版に私を悩ませています。物語の教訓-あらゆる種類の悪いコードが存在しますそれを指摘しても友達にはならない。

とは言っても、本当にこれを実行したい場合は、ここに提示されている他のアドバイスが実際の方法です。

3
jamesson

@Bryan Oakleyの発言に加えて、単体テストの欠如の唯一の説明は、チームがそれらを書く時間があると感じたことがないということです。これは一般的なジレンマであり、リファクタリングも非常に困難にします。

したがって、あなたが取ることができる最も建設的なコースは、おそらくコードの「より良い理解を得るための方法」として、コードのユニットテストを書くことを志願することであることをお勧めします。これにより、ドアを開けて他の人を修正しているときに遭遇した主な臭いの1つを解決できます。

3
Matthew Flynn

何か質問することを恐れないでください。指を向け始めないでください。ご存知のように、あなたは ExpertBeginners の深刻なケースを経験しているかもしれません、そして人々はちょうど彼らのやり方に慣れているかもしれません。その場合、あなたはいつでも彼らを啓発しようとすることができます。しかし、開発者のエゴは簡単に対処できません。

これは、現在の開発者が開発する前に作成されたレガシーコードである可能性もあります。彼らはあなたと同じようにそれに不満を抱いているかもしれません。

2
BrandonV

貧血領域モデルについて。私も、ゲッター/セッターを持つ構造体のように使用されるオブジェクトについて混乱していました。特にJavaプロジェクト)ですべてにどのように使用されるかは特に好きではありません。ただし、この設計にはケースがあります。

システムには、複数の言語を使用する複数のコンピューターが存在する場合があります。オブジェクトは、ブラウザのJavaScript、C++アプリサーバーサイド、Javaアプリサーバーサイド、Pythonに実装されている別のネットワーク上のWebサービスなど)で使用できます。 。

サーバーまたはクライアントを使用している場合、一部の動作は異なります。 「保存」方法を考えてみましょう。オブジェクトがJavaScriptの場合、サーバー側のコードが行うのとまったく同じ手法でデータベースにデータを取り込むことはできません。 JavaScriptの「保存」メソッドでサービスコールを非表示にすることができます。しかし、コードがそれが存在する層を「認識」し、サービスを明示的に呼び出すことは悪くありません。

使用している階層によっては、一部の動作が存在しないはずです。 「描画」メソッドを考えてみましょう。これは、クライアント側のJavaScriptにのみ関連します。データを伴うパッケージング動作は、分離の原則に違反する可能性があります。描画は、フロントエンドコンピュータでのみ行う必要があります。オブジェクトに各層で異なるメソッドを与えることができますが、それは正しくありません。

代わりに、昔ながらのCスタイルのアプローチを使用します。コンピュータ間で受け渡しする構造体のようなオブジェクトがあります。 (多言語、異なるネットワーク、サーバーサイド、クライアントサイド)。 Cスタイルのメソッドは「サービス」であり、Webサービスの場合があります。きちんとしたOOPポリモーフィズムを各層で使用しているかもしれませんが、アプリは古いCスタイルの手法で通信します(これは常に悪いことではありません)。

0
Lord Tydus