誰かが悪いプログラマーと見なされるのはいつですか?[閉まっている]


57

プログラマーは自分がやっていることを下手だと思いますか?

可能であれば...彼/彼女はどのように改善する必要がありますか?


3
その人は、プログラミング関連のWebページで回答を受け入れないからです。冗談:
ダニエル

1
@EvanKroske:いいえ、そうではありません...コミュニティWikiは、投稿の共同編集を可能にするために存在します。参照:Our
Meta-

多くの質問では、単一の回答を受け入れることは不可能です。参照してください:私たちのメタ-検索:受け入れ
タマラWijsman

すべての質問が、実際に問題に対処する回答を得られるわけではありません。
ローレンペクテル

回答:


134

彼らが自分の間違いやピアレビューから学ぶことに失敗したとき。

ある時点ですべてが緑になります。しかし、あなたが良くならない、または良くしようとしないなら、あなたは悪いプログラマーです。


4
合意-常にあなたの間違いから学び、フィードバックループを持たなければなりません。
マルセルラモテ

1
@PSUはよく言った。他のクラフトと同じように、プログラマーは商人であり、常に学習している完璧ではありませんが、ミスから学ぶことに失敗した場合、あなたのクラフトは改善されません。
クリス

2
それは非常に広い定義です。プログラマーに限定されません。これは、科学者、料理人、スポーツマン、翻訳者、管理人、写真家、そして実際にあらゆる職業に適用されます。
RegDwight

13
誰もが少なくとも週に1度はバカです。
MIA

@RegDwight:あなたのポイントは...でしたか?
-SamB

125

彼が知らないことを知らず、調べることにまったく興味がないプログラマー。


16
この100倍の賛成票を投じることができれば、私はそうします。長い目で見れば、少し謙虚で学びたいという欲求が多くを補います。
ウィリアムピエトリ

1
ングーとウィリアムも+1。これは、悪い「プログラマー」の最も典型的な基準です。
fabrik

あなたがLOTを知らないことを知っているとき、そしてあなたがしようとするのと同じくらい一生懸命に、あなたはそれのほとんどを決して知ることはないでしょうか?
スティーブンエバーズ

@snOrfusは、あなたは...あなたを教えるためにメンターを見つける

75

大きな警告サインは、彼らが「カーゴカルト」プログラマーである場合です。つまり、彼らは物事をしますが、なぜそれらのことをするのわかりません(単に「魔法」です)。Eric Lippertによる素晴らしい投稿はこちら

記事から:

コードが何をするのかを理解しているが、どのようにそれを行うのかを理解していないプログラマ。

3
*そして、しばらくの間その技術でコーディングされています
ジョー・フィリップス

5
これは、Java / SpringやRuby on Railsなどのフレームワークを使用してWeb開発を行ったことがあるほとんどすべてのプログラマーに当てはまります。これらのフレームワークは、通常のプログラマが理解することを通常気にしない黒魔術に満ちています。
missingfaktor

3
@Missing Faktor-したがって、それを行うほとんどのプログラマーは偉大なプログラマーではないと言うのはそれほど正確ではありません:)
seanmonstar

14
この場合も、プログラマーがフレームワーク、仮想マシン、またはコードを構築しているものの内部動作を完全に理解する必要があると仮定するのは非現実的です。(または、実際、ベアメタルに達するまでの、以下のすべての抽象化層の詳細。)最も関連性の高い部分だけを知っていても、完全に優れた生産的なプログラマーになることができます。
ジョニック

4
FAKTORを@Missing:彼らは正確に使うライブラリやフレームワークの内部を理解していない可能性がありますが、彼らは、少なくとも各事かを知る必要があり、そのコードがためのものです:「frobberをスナークする」、「ドキュメントは、これがあると言うので、時空の連続性の完全性を維持するために必要」など
-SamB

45

私にとって大きな落とし穴は、彼らがあなたや他のプログラマーに質問をするときです。それは、彼らが自分でそれを理解するための努力を全くゼロにしたことを明確に示しています。

当然の結果として、同じプログラミングの質問を何度も行って、情報を内部化していないことを示します。


ああ、私は彼と一緒に仕事をしました。幸いなことに過去形。
マイクウッドハウス

1
いくつかは、「ちょうどそれを修正する」ためにあなたを求めて、まともな質問を形成することさえできない
deltreme

21

FizzBu​​zz問題の解決に時間がかかる場合。


1
優れたプログラマーになる可能性のある初心者には、問題を抱えている人もいると思います。
JD Isaacks

2
良いプログラマーに形を整えたいと考えているジュニアプログラマーを探しているなら、初心者でも大丈夫です。しかし、この問題はささいなことなので、経験のある人なら誰でも書いてはいけません。
マットディトロリオ

8
これを解決するために、エントリーレベルのプログラミングコースを無事に終えた人を多くの時間をかけてはいけないと主張します。
EpsilonVector

4
初心者がFizzBu​​zzを解決できない場合、プログラミングジョブに応募するべきではありません。プログラミングできると主張する場合(たとえば、プログラミングジョブに応募することにより)、FizzBu​​zzを解決できるはずです。
チンメイカンチ

1
FizzBu​​zzに関するStackoverflowの質問は一見の価値があります。除算やモジュラスを使用しないPythonソリューションをご覧ください。stackoverflow.com/questions/437/…–
ゴードン

21

新しい技術/言語を学ぶことを拒否し、既に知っていることに固執することを主張するプログラマー。


補遺:(コメントにダッシュのコメントを追加)

これの延長線上にあるのは、一部のテクノロジーの機能のサブセットを知っているが、それについてそれ以上何も学びたくないという人々です。プログラミング言語、エディター、その他のツール...


6
...そして正当な理由がないので、追加する必要があります。
missingfaktor

18

チームメンバーがネガティブプロデューサーである場合。

|# Lines Written| - |# Lines of bugs introduced| - |# Lines of rework required| < 0

悪い開発者のために、チームの残りの部分がより多くの仕事をしなければならないことを意味します。 NNPP


1
私は同意します-これらの人々は彼らのチームに非常にダメージを与えることができます。
マルセルラモス

44
ええと...昨日、500行の冗長コードを削除しましたが、バグは発生しませんでした。LOCメトリックスは有害と見なされますか?
-Piskvor

5
ほとんどのメトリックはひどいものであり、通常、LOCメトリックはほとんど役に立ちません。ここでのポイントは、悪いプログラマーは、チームが完了するよりも多くの仕事を作成する人だということです。
danivovich

5
LOCメトリックは役に立たないわけではありません。彼らは有害です。さらに、LOCカウントはほとんどの現代言語で非常に困難です。しかし、ここではメトリックがポイントではありません。|作成する作業| -|間違っていた仕事| -|修正作業| ...つまり、最終的に修正する必要がある作業に6時間を費やし、その修正にさらに6時間かかる10時間かかった場合、-2時間になります。とにかく、時間は本当にあなたが得ようとしているものです。
MIA

1
LOCメトリックは、バグが隠れなければならない場所の数を測定する優れた方法です
。– SamB


15

彼らが物事を行うより良い方法があることを知っているときでも、時間が許せばそれでもそれらをすることを拒否します。


しかし、「より良い」ものについて専門家の意見の相違がある可能性があります。
DarenW

@DarenW-誰かが悪いプログラマーだとは言わないが、それは彼らが論争の的となっているトピックに賛成しているからだ。
ジェフ

15

個人的には、少し前に書いた自分のコードを見て、何か問題を見つけられないプログラマーは、良い人ではないと思います。「しばらくの間」は経験に応じて拡張できます...数週間から1年程度です。


5
彼らが何も悪いことを見つけることができず、それが彼らを心配させたらどうなるでしょうか?
-SamB

1
さらに悪いことに、彼らは何も間違ったことを見つけてそれを修正しようとすることができません。
トゥーンクリティ


14

私が小さな店のチームリーダーだったとき、私は再割り当てしなければならなかった(私も私の直属の監督者も大量のレッドテープと書類の山なしで終了能力を持っていなかった)、または契約更新を持たないいくつかの人々がいました現在のエンゲージメントの終わりに。列挙されたタイプのいくつかは他のチームリーダーでも機能し、ほぼ同じ見方をしていました。私の本の「悪いプログラマー」カテゴリーに人々を連れて行ったもの:

  1. 過去に訓練不能または骨化
    「プログラマー」が、訓練/教育がどのように行われようとも、新しいシステム、新しいツール、または展開されているものを吸収できないようです。上記のトレーニングを頻繁に繰り返す必要があります。
    「プログラマー」が10年または15年前に使用したテクノロジーまたはコーディングパラダイムのみを知っている場合。それで十分だったのに、なぜ変更する必要があるのでしょうか?
  2. カウボーイコーダー
    計画なしで最初にコーディングする人。「今すぐ修正する必要があるため」、本番コードやデータに未テストの変更を加えた「プログラマー」は、「修正」が失敗すると驚かれます。
    カウボーイはまた、間違いなくチームプレーヤーではありません。スティンキンチームは必要ありません。
  3. 天候ベーン
    この「プログラマー」は「テクノロジーデュジュール」に夢中になっており、すべての新しいフレームワーク、言語、方法論など、新しくてホットなものをすべて見ています。
  4. 「大きな頭脳」
    この「プログラマー」は、彼の才能と能力を非常に確信しているので、プロジェクトがあまり意味をなさないことが行われます。たとえば、「システムにとって非効率的であるため」標準ライブラリを書き換えたり、当面の問題に適さないツールや技術を導入したりします。例:メインフレーム環境でのLispまたはForthの紹介。
  5. LOC a。Sandbagger
    この「プログラマー」は、難読化と誤った方向を使用して、aを増やし ます。LOC:支払いを受けるコードの行。この状況で、ページとページ、画面と画面の重複構造であるコードを見ました。段落または制御変数名のみが変更され、行数が増加しました。
  6. 不可欠なエキスパート
    手元の問題を解決するためのドメイン知識を持っているが、彼らはそれについてすべてを「知っている」ので、「プログラマー」。実際、彼らがバスにぶつかった場合、組織全体がクラッシュするでしょう。{ 所見:自分が不可欠だと思う人は通常そうです。(誰もがこの格言の情報源を手に入れましたか?)}
  7. The Pasta Chef
    この「プログラマー」は、スパゲッティコードを専門とし、構文的に実装されたIDEなしでは追跡するのが難しすぎる識別子を使用しています。例: IndexI1O0、Index1I0Oなど
  8. 夏のインターン-具体的にはサブタイプのウォーキング災害
    私の古い店では、高校や大学の後半のインターンを雇っていました。ある部門では、一部の機器の使用状況を追跡するために小さなデータベースが必要になりました(現在はこれが遅れており、dBase IIIを使用していました)。男は夏中ずっとコーディングしましたが、大学が秋に始まったときは行われませんでした。彼は、1週間の延長と、2週間目の延長を得ました。2週目の終わりに、私は彼のプロジェクトを引き継ぎ、終了するためにシステム開発に持ち帰るために派遣されました。彼は自分がやったことを見せてから、未完成の部分を見せてくれました。うまくいったものは見た目が良いものでしたが、アプリケーション不完全な。コピーを取得するためにフォーマット済みフロッピーの新しいボックスを開いたとき、彼は「ちょっと待って、テストファイルを削除させてください...」と言い、何とか言う前に彼はたくさんのファイルを削除しました。
    疑わしい種類であり、彼のアプリケーションが私の店に戻ったときにほとんど見た目が悪いことに気付いたので、私は部門に戻ってノートンを引き出し、削除したファイルを元に戻し、いくつかの追加のロジックを見つけようとしました、不完全であっても。
    悪いロジックではなく、悪い振る舞いを見つけました。彼が使用していたPCに接続されたプリンターは、デイジーホイールプリンターでした。通常マウントされる文字セットはスイスのバリアントでした。削除されたプログラムの出力は、名前、住所、DOB、一部の文字コード、およびある種のID番号を出力します。フォーマットとレイアウトが気になりました。複数の人の生年月日はすべて、ほとんど合法的な飲酒年齢でした。criss-crossディレクトリでそれらを検索したとき、ほとんどのアドレスはそこにありませんでした。私が上司に印刷物を見せたとき、彼は私を見て、「運転免許証、あなたは思いませんか」と言いました。私はそう言った。彼はそれが彼がゼロックスの隣のゴミの中に透明なストックがすべて切れているのを見つけた理由だと言いました。私たちの悪い男の子は、運転免許証で彼と彼の友人の年齢を調整するためにオーバーレイを作りました。当局に報告しました。彼の最後の2週間支払われていません

これらは、私が協力しなければならなかった悪いキャラクターのほんの一部です。

/ s / BezantSoft


RE「彼らは通常、不可欠だと思う人」は、en.wikipedia.org
wiki / Dunning%E2%80%93Kruger_effect


10

知識/能力の明らかな欠如は別として、プログラマーは、コードが本来よりも読みにくく、保守しにくい場合、悪いものです。


1
そして、プログラマーは、うまく書かれたコードを読むことができないとき、本当に悪い人です:-)
Maniero

4
これはほとんど全員ではないでしょうか?つまり、ほとんどの場合、コードの読み取りや保守が本来よりも難しくなるとは限りませんか?
SamB

いや。コードは常に読むよりも書く方が簡単です。しかし、この苦痛を可能な限り軽減する非常によく書かれたコードを維持する必要がありました。
チンマイカンチ

10

誰も彼のコードを読むことができないとき。どんなに明るくてもかまいません。プログラマーは島ではありません。


まあ、もし彼がUnlambdaで書いているなら、誰も読むことができないはずです。
SamB

また、プログラマーが最初に何かをするのに非常に短い時間しかかからず、その上でカスタマイズを行うのに多くの時間を費やす場合。プログラマーはほとんどの場合ペーストコードをコピーするため(これは最初は高速であるため)、これはよく見られますが、意図がないためにそこから変更するのは難しい(優れたプログラマーでも)ため、時間がかかります最初にカスタマイズ可能なコードを記述します。
サンディーパンナス

7

詳細に注意を払わず、常に「機能しているので、そのままにしておきます。ログ内の例外はすべて重要ではありません」モードです。


7

プログラマーには、ソロとチームという2つのカテゴリがあります。

悪いソロプログラマーは

  • 単純なタスクを完了するのに時間がかかりすぎた人。
  • 自分が何をしているのか自分で研究できない人。
  • 今日コーディングされたものを数日以内に忘れてしまい、自分のコードベースをうまく維持できない人。
  • 要件の変更に適応できない人。

悪いチームプログラマーは、次のような悪いソロプログラマーカテゴリに分類される人

  • 他のチームメンバーと調整できない人。
  • 批判を歓迎しない人。
  • 他人に役立つ方法や、他のチームメンバーから利益を得る方法がわからない人。
  • 読みやすいコードを書くことができない人。
  • 他の人に読みやすくするためにコメントしない人。

8
先週プログラミングしたものをどのように実装したか正確に覚えていません。これは珍しいですか?私は、有限の人間の記憶を扱うことはプログラミングの課題の1つに過ぎないという印象を受けました。したがって、詳細を覚えておく必要がないように、コードを構造化し文書化することの重要性。
ジェームズ

@James私の英語を許してください;)。プログラマが数日後に戻って自分のコードを見に来て、まったく手がかりがない場合、それは悪い兆候です。また、数日前に正確にどのようにやったかを覚えていませんが、自分のコードを見て「何を考えていたのですか?」
tia

@James:彼はそれの半分がどのように機能するかを忘れてしまったということは問題ではありませんように、正確に、彼は彼のコードをドキュメント化する必要があります
SAMB

4

彼らが答えを知らないことや、物事を調べることを望まないことを認めたくない。

あなたがそれを知らないなら、あきらめないでください-それを理解して、それを終わらせてください。


4

私の経験での大きな警告サインは、彼らがハックにコメントしないときです...

あなたは私が何を意味するか知っています:あなたがそれをするより良い方法が全くないのであなたが非常にハックすることを強いられたとき。

優れたプログラマーは、そうすることを嫌い、その種のハックを入れるのがどれほど嫌いなのかをインラインでコメントしますが、選択の余地はありません。悪いプログラマーは、ハックするだけでコメントはしません。


3

プログラマーが大量のコードを書くとき、明らかに静かになります。非常に大きな関数、おそらく行またはコードブロックのコピー/貼り付け、必要な場合はさらに多くの方法を使用します。


3

正確にそれを行う正しい方法を示し、繰り返しそれを簡単な方法で繰り返しました。


3

私は答えを閉じた重複トピックからここに移動しています。あなたが悪いプログラマであるかどうかを認識できますか? もう1つのトピックは、回答を作成しているときに閉じられていました。私の答えは、他の質問者によって表現された質問をより直接的に扱っており、あなたがそれを理解すればより良く読めるでしょう。

はぁ!私の一部は、すでに忙しいこのトピックに追加したくありませんでしたが、私の他の部分が勝ちました!なぜ勝ったのか。この特定のマルチログにさらに言葉を追加するのはなぜですか?なぜなら、これについては、以前の多くのコメンテーターとは多少異なる見解を持っているかもしれないからです。

バイナリは、コンピューターで最適に動作します。「1」または「0」、「オン」または「オフ」です。これらの有名な2つの状態を使用して、多くの情報を抽象化およびエンコードできます。しかし、それは人間の問題に対してあまりうまく機能しない傾向があります。「良い」または「悪い」、「正気」または「非常識」、「良い」または「悪」、「賢い」または「愚かな」、「脂肪」または「薄い」、「生きている」、または「死んでいますか?」これらの種類の二極化された評価は、常に思いやりのある人間の一部を非常に不満のままにしてきました。私が適用する測定スキームが何であれ、私は通常、そのような厳しいコントラストに対する答えは、実際には、そのような極と他の極との間の連続体に沿ったどこかにあることを見つけます。

私はこの傾向とかなり長い間戦いましたが、私の個人的な解決策は、このような評価に3つの単語を適用する方がはるかに便利だということです。

したがって、あなたの質問に対する私の答えは、あなたがそれを言い換えることを提案し、これを自問することです:「私はどの程度まで悪いプログラマーですか?」または、さらに良いことに、他の方向でそれを尋ねることができます:「私はどの程度まで良いプログラマーですか?」真実を追求すれば、おそらく「悪い」プログラマーと「良い」プログラマーの間の連続体に沿った自分自身を見つけるでしょう。次に、この経路に沿ったおおよその位置を特定できたら、おそらく「良い」終わりに近いポイント、つまり近い将来自分自身を見つけたいポイントを特定できるでしょう。

そのポイントをあまり遠くに設定しなければ、おそらく後端をギアに入れて、その方向に動かし始めることができます。このかなり単純なヒューリスティックアルゴリズムを何回か反復処理すると、すぐにこの質問をする必要があるプログラミングに忙しすぎることに気付くかもしれません!ああ、できる限り早く頻繁にキーボードのコードを叩き始めると、おそらくより速く進歩するでしょう。そして、少し休憩をとる場合は、仲間が書いた高品質のコードを読んでください!動的なオープンソース開発の最近では、学ぶべき無料で絶妙なコードが不足していません。

だから、私はあなたに私の3つの小さな言葉「どの程度まで」を試して、彼らがあなたをどれだけ良い方向に導くことができるかを見ることを強くお勧めします!


2

「できません」と言う人。

私の意見では、それはすべて問題解決に関するものであり、このツールは実際に作業を完了するよりもはるかに関連性が低いはずです。MS-Accessまたはアセンブリ言語を使用して解決しなければならない場合、それは時間とお金の問題であり、「できない」という問題ではありません。

警告サインは、物事を行う学術的で「適切な」方法に焦点を合わせすぎており、仕事を成し遂げることに十分に焦点を合わせていません。


2
そして、なぜそれができるのかと彼が言うとき?
マニエロ

1
それでは、停止する問題を解決するのはどうですか?できますか?
Pシェブド

2
それがない場合などは不可能な何かを却下する悪いその逆。
ランドールシュルツ

2
@Randall Schulz:クレイグリストからわかるように、ロックスタープログラマーは、広告代理店で開発のすべての層(データベース、ユーザーエクスペリエンス、展開、システム管理者、ユーザーサポート)を通常の賃金よりも大幅に安く処理する人です。それらの一つ。彼らは彼らをロックスターと呼んでいます。なぜなら、この60週間後、彼らの食事は、エコノリンバンでツアーをし、食べ物のためにギターを持ち歩かなければならない人に似ているからです。
ダンモネゴ

1
ええ、私は抜本的な一般化を行いました:)、しかし..それはポイントを作ることでした。「私の専門的な意見は、やるべきではない」ということです。さらに良いのは、「同じ問題を別の方法で解決することについて」です。私のポイントは、優れたプログラマーはソリューションに焦点を当てるべきだということです。「できません」、オプションを提供しないと、クライアントは非常にイライラします。
ダンウィリアムズ




2

SOLID、DRY、OOPなどの原則を知らない人。特定のテクノロジーを知るよりも、プログラミングの原則と基礎をよく理解することが重要です。強固な基盤を持つ人々は、新しいトピックを簡単に学ぶことができ、より良いコードを生成します。


2

割り込みやマルチタスクをあまり理解していない組み込みプログラマ。また、ビットフィールドを操作する必要があるが、それらの論理操作とシフトを把握していないプログラマ。



2

悪いプログラマーと初心者のプログラマーを区別する1つのことは、作業している言語やAPIにお気に入りのシステムを実装するという頑固な主張です。

以前の開発者がカスタムdbfアクセスライブラリの上に階層化されたAshton Tate DBase III + APIの大規模なセットを(Javaで)再実装したシステムを継承しました。Javaコレクションフレームワークは使用されていません。

これは、DBase III +(または場合によってはクリッパー)アプリのように見え、動作するJava /スイングアプリを作成できるようにするためでした。

このシステムで彼が書いたアプリにはライトバーメニューがあり、ライトバーをオプションにナビゲートすると、下部にボタンの列があるフルウィンドウフォームが開きます。1980年代にさかのぼる小さなタイムマシンのようでした。

その男は明らかに熟練した開発者でした。彼は、そのプロジェクトの期間内にシステム全体を自分で記述できることを十分に知っていました。また、他のいくつかの内部システムで再利用することもできました。

しかし、彼は自分のコードが作業したシステムの機能を悪用したという点で、ひどいプログラマーでした。彼は、Java / Swing / SQLを学ぶよりも、疑わしい利益のカスタムライブラリに3か月を費やす意思がありました。

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