プログラマがやってはいけない97のこと

プログラマが知るべき97のこと改変シリーズ第4弾.抜粋元のメインは,#やってはいけないプログラマーのNG まとめ - Togetter,および twitter 検索 - #やってはいけないプログラマーのNG です.また,プログラマが体験するべきではない50の危険なこと - Life like a clown からも一部抜粋しています*1.尚,登場する人名は適当な仮名に変更しています.

今回は,タイトル通り「プログラマがやってはいけないこと」に絞ってみました(プログラマが受ける理不尽系は除外).尚,過去のプログラマが知るべき97のこと改変シリーズは最後に一覧を列挙しますので,併せてお楽しみ下さい.

  1. 全角スペース使う
  2. インデントにタブと空白が混在
  3. 変数名や関数名でスペルミス
  4. 変数名が女の名前
  5. char aznable;
  6. 浮動小数を等値比較
  7. 三項演算子の数行に渡る多重ネスト
  8. 同じシステムの中で複数の文字コードが混在
  9. 増殖する #define XXX_OK, #define XXX_NG シリーズ
  10. ロジック修正してもそのままのコメント&関数・変数名
  11. 人のソースを何があったとしても絶対に読まない
  12. これと同じ処理を他の機能でやってるからコピペでいいよね
  13. めんどくさいから全部 public でいいや^^;
  14. staticを使えば,わざわざインスタンスを作る必要などない
  15. 全部グローバル変数
  16. 見積もり時の規模に合わせるため,やたら冗長な処理やコメントを入れたりする
  17. 1関数1000行越え
  18. 1000行以上のプログラムなのにコメントが先頭のテンプレだけ
  19. 以前の実装は全てコメントアウトして残しておく
  20. コメントアウトソースコードのみで5000行突破
  21. ドキュメントとソースが微妙に違う
  22. ドキュメントはソースのみ
  23. /* おまじない */
  24. /* このプログラムは作り直した方が良いと思う */
  25. /* エラー処理は後で実装 */
  26. /* 念のため */
  27. /* 暫定 */
  28. /* 後で直す */
  29. /* 気が向いたら直す */
  30. /* 直すんじゃないかな */
  31. /* ま,ちょっと覚悟はしておけ */
  32. /* 絶対にバグはない */
  33. /* 警告が出るが問題ない */
  34. /* コンパイルエラーはコメントアウト */
  35. /* さわるな危険 */
  36. /* ここで例外は起きない */
  37. /* ここにはこないはず */
  38. /* ロジックとしてはおかしいけどなぜか動くのでこのまま */
  39. /* やる意味があるのかわからないけどやっておく */
  40. /* ここをコメントアウトしたら動く */
  41. /* この一行を加えると何故か動く */
  42. /* この変数は使わないけど消すと動かない */
  43. /* どうして動くのかわからない */
  44. /* このプログラム,汚すぎてバグ直すにも直せないよ,わけがわからないよ */
  45. /* こんな短期間で組めるわけねーじゃん */
  46. /* echo どうかしてるぜ! */
  47. /* 山田さんに修正しろって言われたから修正しました */
  48. /* 田中さんが仕様を考えました,田中さんに聞いてください */
  49. /* \\fileserver\ほげプロジェクト仕様書.xls */
  50. /* 神プログラムなので動かすと死にます */
  51. /* ここ元々は GPL のコード */
  52. #ifdef NOT_USE
  53. int temp1, temp2, temp3;
  54. int kaunta1, kaunta2, ...
  55. int i, j, k, l, m, n, o, p, q; /* とりあえず宣言しておく */
  56. int flg; /* flag */
  57. unsigned char notuse[1024]; // メモリ破壊される対策に空間あけておく
  58. printf(""); // この行を取り除くと動かない
  59. sleep(100); //なぜかうまくいく
  60. sleep(0.001); //実行順序入れ替え
  61. } catch (Exception e) { /* エラー対策 */ }
  62. this++;
  63. 「C++をマスターしました」
  64. 乱立する xxxString クラスシリーズ
  65. 『初めてのC』を居間に放置
  66. ポテチ(お菓子)食べた手で画面を指さす
  67. コピー&ペーストした時に不要なコードを削除するのを忘れる*2
  68. ノートPC持ったまま飲み会参加
  69. twitterにハマる
  70. rm -rf /
  71. それは仕様です
  72. ビルドの通らないソースをコミット
  73. テストコードのないリファクタリング
  74. 共有フォルダでソースコード管理
  75. 共同プロジェクトでのファイル上書き
  76. 課題一覧.xls、課題一覧(最新).xls、課題一覧_今日の日付.xlsが入っているフォルダ
  77. バージョン管理なしでの日付.zipデグレ
  78. コンフリクトしたソースコードを強制コミット
  79. SVN でのコミット合戦
  80. 休み前日にコードをコミットしてから自動ビルドが終わる前に帰ること
  81. 時間がないからレビューは割愛
  82. 運用環境に「エラーorz」みたいなメッセージを残す
  83. バックアップなしの本番データの更新
  84. 本番環境のJSPを稼働中に修正
  85. 未テストの環境に納品すること
  86. 開発者の本体でしか動いた実績のないコード
  87. 直前までコード弄って現地でテスト
  88. すぐ出来ますと言う
  89. 一度も動かしていないのに「出来ました!」(ヒドイときはコンパイルすら通らない)
  90. 周りの迷惑も考えずぶつぶつ独り言を言いながらやるセルフペアプログラミング
  91. 「なんか,一箇所変数未定義でコンパイラ通らないから,宣言足しといたよ〜」
  92. 「あ,これって仕様自体間違ってるからバグじゃね・・・まぁいいか,問い合わせるのめんどくせーし」
  93. 「まぁいいか.どうせ俺が使うシステムじゃないし」
  94. 「コード汚いから1から書き直そう!!」
  95. 自分が書いたソースコードを共有せずに退職
  96. 逃亡
  97. go to #やってはいけないプログラマーのNG

*1:2, 9, 15, 30, 31 は独自に追加しました.

*2:編集ミスってましたゴメンナサイ.