web-dev-qa-db-ja.com

プロのプログラマーではない、またはこれからそうでない人が、より読みやすく、使用して解釈するのに役立つコードを作成できるようにする

私はエルビスです。アインシュタインになることを学ぶために一生懸命努力しています。私はモートで働いています。

このクレイジーバカは何を話しているのですか!?!? (最初の数段落だけ読む必要があります)

そのリンクを読みたくない場合は、基本的に私はプロのプログラマーであり、上司は(これは恐ろしく正確です)です。

コンピュータサイエンスの学位はないものの、OfficeとVBAに精通しており、通常、同僚の間で共有される生産性アプリケーションを作成するプロの基幹業務プログラマ

そうは言っても、私の仕事の大部分は、石畳のコードをまとめて、本番環境で使用できるようにすることです。しかし、非常に貧弱なスタイルと cargo-cultism はこれを困難にします。これは、彼がプログラミングの本を読みたくない、または私が彼にコードのリファクタリングを手伝うことを許さないという事実によってさらに悪化しています。

プロのプログラマーではない人を支援するための他の戦略はありますか?プロのプログラマーが今後私が使用して解釈するのにもっと読みやすくて使いやすいコードを書くことは決してないでしょうか?

20
durron597

いくつかのコメントであなたの応答を見て、経験していることが非常に一般的であることに気づいているかどうかはわかりませんが、特に専門家の分野でドメイン専門家(科学者と呼びましょう)が、目前の問題のアルゴリズムを組み込んで調整する。

科学者に文句を言って彼らが変わると期待するのではなく、科学者が「コードの品質」についてあまり気にする必要がないことを理解してください。プログラミングではなくドメインに主な関心がある人は言うまでもなく、他のソフトウェア開発者に「コード品質」を気にさせることはしばしば困難です。

ここからどこへ行くかは、「科学者」が自分の仕事を理解する能力にどの程度自信があるかに大きく依存します。彼らがあなたが彼らのコードを理解できると確信していて、あなたが物事を変更するときにそれを汚さないなら、通常問題はありません。彼らはあなたの専門知識に依存します。

ただし、科学者がコードを変更することを望まない場合は、まだ信頼を「獲得」していない可能性が高いです。その場合は、科学者の修正に焦点を当てるのではなく、自分で「修正」に焦点を当てるべきです。それが私が意味することは、彼らの信頼を得るための手段を講じることです。おそらくこれを行う最も簡単な方法は次のとおりです。

テストプロセスの一部として:

  1. アルゴリズムを理解しやすいものに変え始めます(例:図、PDL、数学表記)
  2. アルゴリズムを理解することを学びます。
  3. エッジのケースを必ず特定してください。
  4. 簡略化された「代替」表現が正しいかどうかを科学者に尋ねる
  5. そして、最も重要なのは、発見した問題を特定することです。そして、「非難的」と鳴らさずに、「アルゴリズムを見ていたときに、XYZがこれを実行するのか、それとも実行するのか」のように言います。この弾丸ほど信頼を得るものはありません。

バグの検索を開始し、関心のある領域への関心を示したら、少なくとも「プロフェッショナル」にするためにコードを変更し始める可能性がはるかに高くなります。多くの場合、彼らはプロトタイプをもうコーディングする必要性さえ感じなくなります。彼らはあなたが彼らに教えたそれらの「代替」記法の1つに何かを書くだけで(彼らがそれを実現することさえせずに)、彼らはあなたが彼らが何を意味するかを知っていると確信するでしょう。

どうしても、私の最初の試みは、科学者があなたを助けるためにどのように「コミュニケーション」をより良く助けることができるかについていくつかの提案を提供することです。しかし、あなたはそれを試したようです。したがって、あなたが制御できる唯一のステップは、あなたが何をするかです。彼らの自信を得ると、ほとんどの場合、ドメインの専門家は、コーディングを他の誰かに渡すことで安心し、コードを書くための細部すべてについて心配する必要がなくなります。彼らはむしろアルゴリズムの改善に焦点を当てているでしょう。

時々、あなたにできることは、提案を提供し、その後それを残すことです。あなたが100%正しいとしても、彼らがすでに拒否したか、彼らがしたくないと決心した何かをいじり続けるなら、あなたは上司や先輩に感銘を与えることはありません。実際、これは、あなたが提案者であるか提案者であるかに関係なく、関係を損ないます。仕事を楽にするためにできることに集中してください。

8
Dunk

彼が本当に「プロのプログラマーではない人、プロのプログラマーになることは決してないだろう」とあなたが言うように、そしてあなたの仕事の大部分が本当に「彼の石畳のコードを取り、それをプロダクションの準備にする」ことであるとき、それはあなたのように聞こえます2人のチームは、プログラミングをあなたに任せ、プロジェクトの管理部分に集中すると、より生産的になります。

ただし、これはあなたが正しいと仮定しています。私たちのプログラマーは、他の人が書いたコードを私たちのものよりもずっと無視する傾向があります。この先入観は打ち負かすのが非常に難しく、同僚を過小評価しています。彼が考える「カーゴカルトプログラミング」は「証明されたベストプラクティス」であり、「オブジェクト指向パターンの優雅な適用」は彼にとって「不必要なオーバーエンジニアリング」かもしれません。話のあなたの側しか知らないので、私にはわかりにくいです。

他の人々のコードに対する軽蔑は、私たちのプログラミングスタイルが異なるほど強くなります。その場合、1つのプロジェクトで異なるプログラミングスタイルを混在させると保守が非常に困難になるため、それは前向きな直感です。

両者が他方のスタイルを模倣できない場合は、明確な責任を定義できます。アプリケーションの一部を1人で担当し、もう1人をもう1人で担当させます。両方のモジュール間の明確なインターフェースを一緒に定義しますが、内部実装は担当者に任せます。彼のコードのバグをより認識させるには、ユニットテストを記述して、一緒に指定したインターフェイスコントラクトに従ってコードが動作しないことを指摘します。

明確なコード所有権を確立することで、さまざまなスタイルのより良い共存に到達できます。また、自分のコードのバグを修正する責任がある場合は、お互いのコードを頻繁にナビゲートする必要はありません。

19
Philipp

あなたは自分自身に問いかける必要があります:ここでの最終的な目標は何ですか? 1.上司を助けるために? 2.会社を助けるために? 3.自分を助けるために?そして、「上記すべて」に答える前に、速度を落としてください。最初のタスクは、主な目的を明確に定義することです。答えはそれに依存するためです。

あなたの目標は:

  1. 上司を助けますか?諦めます。彼はそれを求めているようには見えません。 「彼は自分のコードが悪いことを知っているが、それは彼が必要とすることをする」と言った。それでは、議論の終わりです。上司が現在の状況に不満がない限り、上司は変わらないので、上司はあなたを助けようとするあなたの努力に憤慨します。将来のある時点で彼が現状に「苦痛を感じる」場合、うまくいけば、あなたは信頼できるメンターとしての地位を確立し、助けを求めてどこに来るかを知っているでしょう。

  2. あなたの会社を助けますか?現在の状況は収益を脅かしていますか?締め切りは危険にさらされていますか?上級管理職は熱を上げていますか?そうでない場合は、それをあきらめてください。 (これは基本的に、ジミーホファが元の投稿へのコメントで述べたポイントです。)ただし、現在の状況が実際に部門/会社にとって許容できないリスクを表している場合は、プロセスを変更する必要があります。その場合は、座って異なる分業の概要を説明することをお勧めします。ここで重要なのは、上司のコードのリファクタリングに費やす時間は新しいコードの作成に費やすほうがよいことを説明することです。あなたは自分ですべてを書く時間はないと言いますが、それは私が提案していることではありません。それぞれの強みを最大化する方法を理解する必要があります。彼をMortと考えるのをやめて、優れたドメイン知識を持つジュニア開発者と考えてください。それは業界で非常に共通の作業体制であり、それを成功させる方法を学習する必要があります。たとえば、heyouが彼の重要性を知っていることを確認してください専門知識は(このステップを頻繁に繰り返す)であり、その後次の戦略(または類似の何か)を、市場への知識を得るためのより速いパスとして謙虚に提案します:(a)作業を「アジャイル」スプリントに分割し、(b)全体的な要件とアーキテクチャを定義する(各スプリントで)非常に前もって共同作業を行います。 (c)前のステップで合意したインフラストラクチャを構築する一方で、彼が離れて、​​すべてのアルゴリズム決定を解決するためのプロトタイプを構築します。 (d)彼がそれを検証するためのテストを構築する間、彼のアルゴリズムをあなたの構造に実装します。 (e)ピアプログラミング環境で一緒にV&Vを実施します。 (たとえば、「このテストは失敗しました。なぜですか?アルゴリズムの論理エラーまたはコーディングの間違いですか?」;ここで繰り返します)。

  3. あなた自身を助けますか?ここで正直に言ってください。あなたがしているすべてがあなたの仕事を楽しんでいないと不平を言っているなら、私はあなたが上の#2について考えるより多くの時間を費やす必要があることを提案します。会社を気にせず、仕事を楽しんでいない場合は、履歴書を配布してください。会社を気にかけているが、仕事を楽しんでいない場合は、#2に焦点を当てることが両方のアカウントに役立つはずです。しかし、その場合、あなたの情熱が自分の仕事に対する自己中心的な欲求不満からだけでなく、チームを助けたいという願望から純粋に生じていることを誰もが明白である場合にのみ、それは「双方にとって有利」です。

3
kmote

このディスカッションに何かを追加するかどうかはわかりませんが、ShowMessage('Hello');などの行でアクセス違反が発生している同じようなシナリオで作業していたため、同じ行にさらにコードがあることがわかりました、画面の右側から、

私はあなたが2つの基本的な選択肢を持っていると信じています:

  1. コードを実行しましょう。コードが機能し、必要な処理を行っている場合は、上司からコードの修正を特に求められない限り、そのままにしておきます。それはまた、彼があなたのコードがよりよく見えることを理解し、あなたに仕事を任せるかもしれません(彼の答えでダンクが指摘したように)。
  2. あなたが非常に決心しているコードをプロフェッショナルにするためには、ライブラリ/フレームワークを構築彼が使用できること。一般的に修正するエラー/戦略にパターンがある場合は、それらをいくつかのライブラリファイルにまとめて、会社の "ベースライブラリとして提供することができます。 「、これは共通のインターフェースとしても使用できます。
2