プログラマーの責任章[非公開]


40

だから、プログラマーの権利章典についても聞いたことがあるし、XPにも同様の概念があります。

最近、人々の権利について多くのことを耳にしますが、彼らの責任についてはあまり聞いていないのが一般的な不満です。それは彼らがすべきことであり、彼らは口に合わないと感じるかもしれないが、プロとして責任を持って行動するプログラマーをそうでない人々から分離するものである。

私は主に、口に合わないものと起こりにくいものに興味があります。これは、プログラマーの90%が実際に実行したいもの(常にリファクタリングしてソース管理を使用するなど)ではなく、プログラマーが回避して回避する傾向があるものです。

それでは、プログラマーの責任章には何が記載されるべきでしょうか?


4
さらに、私はそれがガイドライン1,2,4、および6合うと思う
スティーブンFurlani

2
これは重要な質問だと思います。
HLGEM

1
重要なフォローアップは、「責任あるプログラマーになるために自分をどのように訓練しますか?」
スティーブンフルラニ

2
この質問は、アイテムのリストのみを生成しているようです。答えはかなり印象的ですが(そして、投稿に時間と労力を費やした回答者を称賛します)、それらは意見に集中しており、質問の言葉遣いはポーリングとして私を襲います。
トーマスオーエンズ

5
@ThomasOwensは、「この質問はQ&A形式に適していません」と強く反対しています。これにより、開発者のテスト、開発方法論、フリーランスおよびビジネス上の懸念、品質保証、ソフトウェアエンジニアリングに関する回答が既に得られています。
ジョシュアドレーク

回答:


41
  • プログラマーは、盲目的に実装するのではなく、貧弱な要件を押し戻す責任があります。これには、他のオプションよりも高価であるか、特定のリスクがあることをクライアントに伝えることが含まれます。また、プロの方法で悪いニュースを伝えることも含まれます-悲鳴を上げない、愚かな人々を呼び出す、彼らが愚かまたは他の子供っぽい行動であることを暗示します。プッシュバックする場合、一連の理由(「SQL Serverが気に入らないので使用しない」)と、提示する別の計画が必要です。

  • ただし、プログラマーは、決定を受け入れ、プッシュバックが受け入れられなかった場合に気に入らないツールやデザインを使用する責任も負います。SSRSでレポートが要求された場合、Crystal Reports(クライアントが持っていない可能性がある)でレポートを配信することは受け入れられません。.netソリューションが必要な場合、Haskellで提供することは受け入れられません。チームの誰もが使用したいツールや言語を使用していない場合、管理者が特定の仕事に最適なツールであることに同意しない場合、それを使用することは専門的ではありません。

  • プログラマーは自分の仕事をテストする責任があります。(これが唯一のテストではありませんが、プロのプログラマーはテストしていないコードを送信するべきではありません。)これには、頻繁にヒットしないと思われるコードのブランチもテストする必要があります。ネストされたIFのセットがある場合、すべての可能なルートをテストします。

  • プログラマーは、エラーと例外を適切に処理し、ジョークやin辱ではなく専門的で中立的なエラーメッセージをユーザーに表示する責任があります。

  • プログラマーは、個人データを保護し、会社のために書いた独自コードを保護し、ユーザーをアプリケーションの使用から大惨事(自己負担の大惨事でも)から保護する責任があります。

  • プログラマには、自分のコードが保守可能であり、ソース管理されていることを確認する責任があります。

  • プログラマーは、自分の変更が他の人の行動に悪影響を与えないように、他の人と調整する責任があります。

  • プログラマーは、設計段階でツールや言語のクライアントに最適な選択を推奨する責任があります。ツールや言語で遊んで学習したいものではありません。

  • プログラマーは、自分が気に入らないプロジェクトも含めて、プロジェクトのすべての適切なスタッフと協力する責任があります。人々を好きにすることはあなたの仕事ではなく、彼らと協力して礼儀正しくすることはあなたの仕事です。

  • プログラマーは、合理的な時間枠で指定されたことを行う製品を生産する責任があります。時間枠が満たされない場合、彼または彼女は、それがわかったらすぐにそのことを管理者に通知する責任があります。

  • プログラマーには、仕事を遂行する上での障害についてプロジェクト管理者に知らせる責任があります。彼らは知らないことを修正することはできません。

  • プログラマは、楽しくて面白い部分だけでなく、タスク全体を実行する責任があります。すべてのジョブには退屈な部分がいくつかありますが、それでも実行する必要があります。これには、タイムシートやディスカッションアイテムのプロジェクト管理ソフトウェアへの追加などが含まれます。ドキュメント、コードレビューなどが含まれます。

  • プログラマは、プログラミングの概念だけでなく、サポートしているビジネスドメインを学ぶ責任があります。

  • プログラマーは、スキルを最新の状態に保つ責任があります。

  • プログラマーが台無しになった場合、人間として可能な限り早く問題を解決するために全力を尽くす責任があります。これには、運用データベースで重要なテーブルを削除したことを隠そうとするのではなく、管理者に悪い知らせを伝えることが含まれます。

  • プログラマーは、他の労働者と同じ責任を負います-時間通りに現れ、契約時間を働き、事前に休暇時間を要求し、電話と電子メールメッセージに答える(電子メールを読む)ために必要なフォームに記入する人事など


7
私は愛する冗談のエラーメッセージを。状況はすでに十分に悪いので、それ以上に深刻にする必要はありません-少なくともエラーで私を平手打ちしながら笑わせてください!
ハンニバルレクター博士

2
開発者がすべての状況で自分のコードを個人的にテストする責任について疑問を呈します... 自分のコードがテストされることを保証するために言い直します...組織にプロのテスター(自動および人間の両方)と堅実なプロセスがある場合コードがテストされていることを確認するために、開発者が自分でコードを作成する必要がある理由がわかりません。新しい機能を開発している場合、またはバグを修正している場合は、自分でテストする必要があります。ただし、大規模なリファクタリングを行っている場合、製品全体を徹底的に回帰テストすることは意味がありません。
ジョエルファン

回帰テストとは言いませんでしたが、変更を単体テストして、意図したとおりに動作することを確認する必要があります。
HLGEM

2
エラーメッセージに感嘆符がない場合はどうですか。つまり、「日付が無効です!」
ジョエルファン

1
これらはジェンダーに中立である必要があります。それらを必須にすることで、これは簡単になります。たとえば、「プログラマーは自分の仕事をテストする責任があります」の代わりに「あなたの仕事をテストする」べきです。
シギル14年

42

すべてのプログラマは、コードを他の人が読めるようにする必要があります。


@ケビンD:それ責任です。あなたには人間が読めるコードを作成する責任があります。
doppelgreener

1
@Axidos、自分のやったことに気付いたら答えを変えたからです。
dan_waterworth

関連性がなくなったため、元のコメントを削除します。
ケビンD

1
誰が「読みやすい」?私の「ピア」(つまり、私のような教育と経験を持つ人)?芸術と科学の分野で本当に高い教育を受けている人はいますか?または、Dartmouth BASICよりも高度なものとビジネスをしていないFlying Code Monkeyですか?
ジョンR.ストローム

7
@John、この文脈の他の人は、他のプログラマを意味します。「キリンは他のキリンよりも大きかった」という文で、他の人が空飛ぶ猿を意味するわけではありません。「その他」とは、「まだ言及されていない同じタイプの人」を意味します。
dan_waterworth

22

プログラマーは、ユーザーが提供したすべてのデータのプライバシーとセキュリティを担当します。特に、パスワード、クレジットカード番号、メールアドレス、物理的な場所。


これは、実際にはシステム設計者のドメインに属します。多くの多くのエンタープライズシナリオでは、プログラマーはデータストアに対して発言権も制御権も持ちません。データベースの作成ではなく、アクセスするだけでデータベースの電子メールアドレスを管理できますか?
ニールTibrewala

2
Facebookの人々は、上記の責任のほとんどが適用される限り、申請する必要はないと思います。:)
MetalMikester

4
-1それはあまりにも多くの責任です。
ピーターターナー

6
大規模なシステムでは、1人のプログラマが判断するのは多すぎるかもしれません。しかし、1人または数人のプログラマーが働く大部分のサイトでは、データを適切に保存することが絶対に必要です。ハッシュが必要な場合の暗号化、カスタムアルゴリズム、または不明瞭なセキュリティ。実際にテストされたセキュリティ。
マルフィスト

@Neal:システム設計者は単なるプログラマーです。確かに、大きなプロジェクトの場合、彼はおそらくプログラミングをすることはできませんが、それは彼がプログラマーではないという意味ではありません。そして、それは大きなプロジェクトにのみ適用されます。2人または3人のプロジェクトでは、通常、プログラマーはデータベースの一部または全体を担当します。データを安全に保存するのは彼の責任です。
コンフィギュレー

20

ユーザーに作業を失わせないでください。

これは思ったより難しいです...作業は単なる「ファイル内のデータ」以上のものです...ユーザーがあなたのソフトウェアに費やしたのはいつでもです。

たとえば、ユーザーが30フィールドのフォームに29の有効な項目と1つの無効な項目を入力した場合、1つの無効な項目について不平を言うためにすべての有効なデータをクリアしないでください(無効な項目もクリアしないでください)。おそらくそれは長く、わずかな修正が必要なだけです。さもないと、ユーザーはそれをクリアすると以前の状態を思い出せなくなります)

自明ではないが重要な例は、Windowsおよび他のすべての「ファイルマネージャー」ソフトウェアが間違っていることです。...慎重にCtrlキーを押しながらクリックして一連のファイルを選択し、 Ctrlキーを押しながらクリックすると、以前に選択したすべてのファイルがクリアされず、最初からやり直されます。

彼らが間違っていたもう1つの...私が誤ってCtrl-Aを押すと(隣のCtrl-Sの代わりに)、ファイル内の私の場所を失ってカーソルを先頭に置くべきではありません....プログラムの「失われた」ファイル「work」内の適切な場所。

さらに別の問題:TortoiseSVNの「コミット」ダイアログには、ファイルの長いリストがあります。「コミット」を押す前に、ファイルのリストを下に移動し、各ファイルをダブルクリックして、2番目のダイアログでその変更を確認します。これをすばやく行うために、キーボードのみを使用して<Esc>、2番目のダイアログを閉じて1番目のダイアログに戻ることがあります。誤って<Esc> 2回ヒットすると、1番目のダイアログも閉じてしまい、どのファイルに移動したかを忘れてしまいます。


5
互いに隣り合ったキーに割り当てられた反対のことを行うキーボードショートカットを作成しないようにします(たとえば、CTRL-CとCTRL-Vは、貼り付けようとしたときにコピーした場合、またはその逆)
HLGEM

5
@HLGEM、これを設計し誰逆説的には、おそらく彼が隣同士にそれらを置くことによって、私たちに好意をやっていたと思った
JoelFan

4
そして彼はそうではなかったのですか?つまり、Emacsなどのすべての機能を備えているわけではありませんが、手を動かさずにコピーして貼り付けることができます。
コンマン

1
Total Commanderを使用します。右クリックして選択し、右クリックして選択を解除します。監視中の現在のフォルダーが変更されている間に、他の場所をナビゲートしたり、長時間フォーカスを失ったりしない限り、選択を失うことはありません。
コンフィギュレー

1
最後の例(Ctrl-Aはファイル内の私の場所を失います)について、最近、多くのプログラムで機能する部分的な回避策を見つけました... Ctrl-Z、Ctrl-Y ....ファイルの内容は、それから「やり直し」ます。その結果、内容は以前と同じになり、編集の場所にいます。これは、間違ったCtrl-Aの直前にカーソルがあった場所と必ずしも同じではありませんが、しばしば十分に近いです...これはもちろん、Ctrl-Aでのプログラムの悪い動作を許しません...それは部分的な回避策にすぎませんそして、するとヒットする私にしばらく時間がかかった
JoelFan

15

プログラマーは、プログラムが実行されるシステムを尊重する責任があります。開発とテストが終了すると、プログラムは展開され、意図された目的に使用されます。通常、プログラムは他のユーザーがコンピューターで実行します。プログラマーはこれに留意する必要があります。彼のプログラムは自分ではなく他の人の財産で実行されており、その場所を所有しているようにバージインするのではなく、自宅でゲストとして行動する必要があります。

たとえば、彼のプログラムは次のことを行うべきではありません。

  • ユーザーの同意なしにグローバル設定を変更します。(共有ライブラリ管理の問題を含む。)
  • ユーザーまたはユーザーの同意なしに別のプログラムに属するデータを削除または変更します。
  • ユーザーの同意なしに自分自身を更新します。
  • アンインストールを困難にします。
  • シャットダウンするのが難しくなります。
  • プログラムが何らかの誤ったライセンスチェックに合格できない場合、それ自体を無効にするか、コンピュータの適切な機能を何らかの方法で妨害します
  • システムで実行されている唯一の重要なプログラムであると想定し、それに応じてシステムリソースを占有します。(もちろん、実際のシングルタスクマシンや、フルスクリーンの重いゲームなど、ユーザーが単独で実行することが合理的に予想されるプログラムについては例外が発生する可能性があります。)
  • ユーザーが他のプログラムで他のことをしているときに、ポップアップウィンドウでユーザーの前に飛び出します。(私はあなたを見ています、Yahoo Messenger!)

1
ユーザーとしてもプログラマーとしても、私はそれらが本当に好きです。ドックのアイコンが跳ねるのは、出会ったことのない人々に対する怒りの一番の原因です。
アゴス

7
「ユーザーの同意なしに自分自身を更新する」以外のすべてが好きです。Chrome自体が更新される方法を見つけました-新しい機能を見つけるのが大好きです。しかし、他のプログラムがそれを行う方法はひどいです。私はあなた、Java、そしてあなた、Acrobat Anythingを見ています。んではない私は毎日あなたを更新したい場合は私に尋ねます。一度も言ったことがありません、ヒントをください!
コンフィギュレー

2
プログラムがそれ自体を自動的に更新する場合、少なくともユーザーに最初に同意を求める必要があります。
ギャブリン

TortoiseSVNのことで別の違反...それで何でもちょうどやっては停止に粉砕するシステムを引き起こし
JoelFan

@SpashHit:うーん?私は日常的にTortoiseSVNのを使用して、私は気づいたことがありません...
メイソンウィーラー

8

ソフトウェア職人のため宣言から:

意欲的なソフトウェアクラフツマンとして、私たちはそれを実践し、他の人がクラフトを学ぶのを助けることにより、プロフェッショナルなソフトウェア開発の水準を引き上げています。この作業を通して、私たちは次のことを大切にしました。

  • 動作するソフトウェアだけでなく、巧妙に作成されたソフトウェアも

  • 変化に対応するだけでなく、着実に価値を付加する

  • 個人や交流だけでなく、専門家のコミュニティも

  • 顧客コラボレーションだけでなく、生産的なパートナーシップも

つまり、左側のアイテムを追跡する際に、右側のアイテムが不可欠であることがわかりました。


8

鏡を見て、おそらく自分自身のプログラマーの最悪の資質を認識してください。次に、それらを毎日除去する作業をします。

  1. 新しいことは何も学ばない
  2. スキルを伸ばそうとしない
  3. 新しいものに対して開かれておらず、古い習慣にこだわっている
  4. 仕事の質を気にしない
  5. 仕事の質を向上させようとしない
  6. 情熱のない9対5の労働者であること
  7. 物事について自分の意見を持っていない
  8. 質問せずに他人の意見を受け入れる
  9. すべてを学んだと信じて
  10. 批判を容認しない
  11. 外部入力を聞かない
  12. 自我中心の、すべてを知っている個人であること
  13. 否定的な性格を持ち、他の人を批判する

+1ですが、このように言い回すとかなり否定的になります。
dan_waterworth

1
#13は非常に皮肉だと思います。一般的な意味ではありますが、基本的にここであなたがしていることです。
ダスティンレイザー

6
  • プログラマーの責任は、プログラマーとクライアント間の契約で設定されている要件、分析、設計、および仕様のニーズを満たすソフトウェアを作成することです。
  • プログラマーの責任は、経済的で信頼性が高く、実際のマシンで効率的に動作するソフトウェアを作成することです。
  • プログラマーの責任は、可能な限り効率的かつ倫理的に、そして可能な限り誠実に作業し、最大限のプロ意識で行動することです。

その一部は「プログラミング会社」の責任に適用されます。


4
  • プログラマは、使用するコアライブラリとプラットフォームを知って使用する必要があります。

特にプログラマーが他のプラットフォーム/言語から来たとき。コアライブラリが提供する何かに苦労しているプログラマを見つけることや、無知のためにプラットフォームの利点を悪用することは恐ろしいことです。

  • プログラマは自己文書化コードを作成する必要があります

コードを他の人が使用するために文書化することは非常に重要ですが、保守性に関しては、自己文書化コードは文字通り何時間ものフラストレーションを節約できます。

たとえば、比較します:

// validates if is leap year
if(  year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) ) { 
     doSomethingWithFebruary();
}

if( isLeapYear( year ) ) { 
    doSomethingWithFebruary();
}

4

プログラミングは職業であり、スキルではありません。これは、プログラマーが最新のツール、手法、および技術について自分の分野で最新の状態を維持する責任があることを意味します。

これは、継続的な学習とトレーニングを可能にする時間を与えるためにマネージャーに戻ること、または自分の時間にそれを行うことを意味する場合があります。


2

1)問題の解決には、パフォーマンス、コスト、時間、品質のトレードオフがあることを明確に説明します。

2)リリースノートまたはテスト計画に関係なく、関連ドキュメントを完成させます。(ドキュメントは会社の種類と規模によって異なります)

3)自分の仕事に適したツールを要求する(多くの人がそれについてうめき声をあげるが、必要なものを手に入れるための合理的なケースで上司に近づかない)

...従うことは間違いありません。


2

何か質問-プログラマーは、システムが実行または処理する必要があるかもしれないことについて問い合わせる責任を負うべきです。これには、ユーザーが何ができるかを示すことに専念しているさまざまなサイトがあるため、ユーザーが愚かな質問と見なすものを尋ねることが含まれます。 デイリーWTFSharkTankはいくつかの例ですが、他にもあるはずです。


1

プログラマーは、製品バックログ内のユーザーストーリーを動作可能な出荷可能なソフトウェアインクリメントに変換する責任があります。

そのため、マネージャーは目標を達成するためにすべてのものを確保する必要があります。


1

これが私の提案です。

  1. プログラマーは、職務の基準を下げないために、プログラマーの権利章典に記載されている労働条件を要求する必要があります。

(「プログラマー」とは「週末のハッカー」ではなく「プログラマー」を意味するため、プログラマーが行うべき標準的なことはすべて暗示されています。)


-1。私は、責任が権利を「必要とする」ものであるとは思わない。
クレイジュ

1

プログラマーギルドの5つの教訓

1.)毎週および休日にコードをチェックインします。

2.)プログラミングコミュニティのニーズに対応します。

3.)毎年少なくとも1冊のプログラミング本を読む。

4.)少なくとも年に1回はプログラミング会議に参加します。

5.)あなたの過ちに責任を持ちなさい。


「毎週および休日にコードをチェックインしますか?」毎時という意味ですか?
コンフィギュレー

@configuratorこれらは、プログラマーと呼ぶための最低限のものです。しかし、より多くのチェックインが楽しい
ピーターターナー


0

プログラマーは、ウイルスを書いたり、他のシステムをハックするなど、非倫理的または違法なものを実行または実装するべきではありません(セキュリティホールを発見し、被害者にそれを回避するために被害者にできることを通知する場合を除く)悪意のあるハッカーによる悪用)。

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