プログラマに対するひどい指示・ルールについて語ろう 144
ストーリー by reo
全部 main 部門より
全部 main 部門より
ある Anonymous Coward 曰く、
とあるプログラマが「派遣時代に行った酷い現場の思い出」を togetter でまとめた「派遣 PG 時代の思い出」が話題になっている。曰く、
- 「メソッドを作ると処理が上下に飛んで可読性が落ちるので、出来る限り一つにまとめてください」と言われた。
- 前任者が「コードを共通化してください」という言葉を勘違いし、一つの画面クラスに全ての画面の機能を持たせ、メソッドの引数でどの画面として動くかを切り替えるという凄まじい実装だった。
- 帳票 1 枚ごとに 3000 行クラスが書かれていた。
など、恐ろしい話がたくさん並んでいる。/.J でもひどいコードについての話題は数多くあったような気がするが、みなさんが体験したもっとも「これはひどい」という話はなんだろうか ?
ちょっと書き換えるだけでしょ? (スコア:4, 興味深い)
指示というか勘違いしてる人はいままでたくさんおりまして、
「ここんとこちょちょっと変えといてもらえる?5分くらいで出来るよね?」
という人(もしくは似たような考えの人)はたくさんいました。
たしかに変えるだけならちょちょいで出来ちゃうんですけど、一番大変なのは変更後のテストとかなんですよ。
変更はすぐに出来るけど単体テストや連結や総合でのテストを入れると数日かかることを伝えると、私ではダメだと思ったのか他の人に同じように頼みに行き、そして同じ事を言われを繰り返してる人はいました。
次の日に「客に頭下げないといけなくなったじゃないか。どうしてくれるんだ?」とか理不尽なことを言われたのは今ではいい思い出です。
Re:ちょっと書き換えるだけでしょ? (スコア:1, おもしろおかしい)
具体的な指示をもらえてるんだ
「なんでもできるようにしといて」とか
「うまくいくようにしといて」とかはないの?
※あとから仕様変更するよって意味なんだと思います。
あと、仕様書にかかれてない仕様で
「仕様書に書かれてなくてもこんなの一般的な仕様で、入ってないのがおかしいだろ、すぐにいれろ」
「え?どのような仕様ですか?」
「まだ、決まっていない」
とか
手動CVS (スコア:3, おもしろおかしい)
>>世にも悪名高い、コードを修正したらコメントアウトして元のコードを残せというルールだった。
こんな現場でやりました。
せっせとコメントに直しているうちに、自分がCVSの動作を手でやっていることに気づきました。
Re:手動CVS (スコア:2, すばらしい洞察)
>>いらないとこは後日削除すればいい。
それが徹底されないから問題なんでしょう。
Re:手動CVS (スコア:1)
ないんじゃないかな。
コメント削除して、テストとデバッグを一からやり直す工数を考えると、決して安い作業ではない。
それにリファクタリングはおろか、テスト工程さえも「コスト削減」の名の下に削られるご時世で、
「(ソースコードの)クリーンナップ」なんて『無駄な時間』はそうそう与えられないと思う。
その都度削除しておけば、本来は要らない作業だしね。
Re:金庫室的バージョン管理 (スコア:1)
内容に関わるコーディング規約はともかく、
インデント程度だったら、pre-commit hook でフォーマッタを通せばいいだけでは?
Re:金庫室的バージョン管理 (スコア:4, おもしろおかしい)
「落胆その1」
その二行で済む話のために延々会議
「落胆その2」
上司「フォーマッタって何。俺が知らないから使用禁止」
Re:PADでそれをやった (スコア:2)
自分だったら、コメントアウトすべき処理をまとめて偽条件の反復ブロックに入れたりしそうです。
#1.条件が定数の分岐を最適化する処理系前提
#2.しかしそうであっても 上司が理解してくれず「とにかく却下」される可能性あり
# (おかしなことしてないで真面目にコメントにしろ、とか)
金曜の夕方に「じゃあ、週明けに確認するから」 (スコア:3, おもしろおかしい)
プログラマじゃなくても、あるでしょ?
Re:金曜の夕方に「じゃあ、週明けに確認するから」 (スコア:1)
金曜の夜11時頃に「明日の朝までにやっておいてね♪」じゃないの?
プログラマなら良くある話。
俺の例 (スコア:3, 参考になる)
・最初から最適化されたコードを書け
・古いコードはコメントで全部残せ
・全部大文字
・自分のいじった場所には署名する(俺は'%%%'だった)
とルールはこれだけでした
特殊な事情としてZ80-8086コンバータとか使ってたからこんなんなんでしょうが
簡単なアセンブラのソースなのに600KBあったりとかそんなもんでした
メソッドとか以前にタイニーモデルのフルアセンブラでしたからね
読めない奴は技術力が足りんのだ!という感じ
相手のプログラマの技術力が低い場合を考えなければならない局面はありませんでした
低い人いないし
そういう意味では恵まれた職場だったのかもしれません
テストにしても部長がサラサラとDISKBIOSを書いてカチャンと5インチドライブが動けば
それがそのまま商品に載りましたし
半日でPC88からPC80SRに移植したり
そういう時代だったといえばそれまでなんでしょうが
個人的には高級言語が出てきてからの考え方のような気がします、テストって
要はなんだというと技術力が低いから迷うんであってそこは磨けばいいことではないのかと
残業する前に全部方がついているというのが某社の基本でした
広告は完成してから出すとかそういう
コミュ能力を重視するようになってからすっかりそんなこともなくなったようですが
Re:俺の例 (スコア:1)
dsレジスタ禁止というのがありましたかね
別の会社ですが
アルファベットを筆記する際に特殊な字形を使わなければいけなかったとか
あまりひどいというものではないですがいまだに抜けません
言語が高級になる分だけ低練度者に対する配慮をしなければならないのが俺にとってはひどいです
Re:俺の例 (スコア:1)
その人たちと絡むことはなかったのに規約だけ守らされてあれーんという感じ
80486時代になってもフルアセンブラですよ
基本はoptasmとPharLapの386asm
プロテクトモードに自前で移行してあれこれやるという
9801FA(486)の基盤剥き出しの発売前の実機でテストとかしてました
フリフェッチ幅が32バイトになったんで自己書き換えを多用してた今までのスタイルが効かなくなって
そこを修正した386対応版とかが発売される契機になりました
こういうのですか? (スコア:2, 興味深い)
C++の話(本当にあった怖い話) [slideshare.net]
署名スパムがウザい?アカウント作って非表示に設定すればスッキリさ。
Re:こういうのですか? (スコア:1)
Flashの動画なのかしらん、これ。面白そうな感じだけど見れないや。
書き換え禁止 (スコア:2, 興味深い)
コメントは英語で書け (スコア:2, 参考になる)
最悪ってほどでもないけど、
某ガラケー関係の仕事をしていた時のこと。
「PDAの某社を買収した。これからはグローバルでは外国人の方が多いからコメントは英語で書くべき。」
というのは理解できなくもない。
でも実際にはその会社のプログラマで英語ができる人は圧倒的に少数派。
しかも常にオーバーワーク気味で、日本語コメントを書く余力さえもほとんどない。
その結果、コメントが激減して、作った本人にも理解不可能なコードが大量生産
されるのは、火を見るより明らかだった。
プログラマが英語を勉強するのも社内公用語を英語にするのも賛成だけど、
経営者なんだから自社のリソースや現場スキルを見てから経営判断を下すべき。
「あんなこといいな♪ できたらいいな♪ [srad.jp]」で夢物語を騙るのは経営者の仕事じゃない。
できることとできないことの区別もできない経営者は死んでくれと何度願ったことか。
Re:コメントは英語で書け (スコア:1, 参考になる)
意味の中心を表すのが漢字で、意味と意味の関係を表すのが仮名の日本語の方が一瞬にして、文章全体を目で捉えることが可能 [toyama-cmt.ac.jp]
Re:コメントは英語で書け (スコア:1)
ASCIIじゃないとデバッガの画面上でコメントが読めないんで英語(+ローマ字)で書いてたことはあったなあ。
あれはIntelの286用ICEか何かだったか…。
Re:コメントは英語で書け (スコア:1)
プログラマの公用語はC(または他のプログラム)言語だろ
昔趣味でさるOSSをグローバルに共同開発してたが、イタリア語?でコメントがついてたりしたが別に困らなかった
関数や変数名が適切(な英語)であることのほうが重要だと思った
昔さるフィンランドかどっかのデモコーダーと3D演算処理について話すことがあったが、
通訳(といっても正式ではなく英文科出の子かなんか)が泣きそうになったので
数式と図と身振りで直接話したほうが通じた
開発MLで自分の意見を押し通す時なんかは英語力必要なんだろうけど
Re:コメントは英語で書け (スコア:1)
> プログラマの公用語はC(または他のプログラム)言語だろ
そうか!
コメントをC言語で書けばいいんだ。あれ?
Re:コメントは英語で書け (スコア:1)
「全行にコメントを入れろ」というコーディング規約があり、レビューでねちねちと……
頭に来て、意味のないコメントを量産。必要なコメントを削除して意図的に意味のないコメントに置換しました。
ローカルソースは普通のコメントの入ったソースですがメインのCVSに入れる際、コメント削除+機械コメント生成で……
notice : I ignore an anonymous contribution.
酷いのは、この派遣プログラマーかもね (スコア:2)
変なところで、つぶやいて自己満足にひたってないで、
現実を直す努力をすれば、良いんじゃないの?
と、言いたいけど、そうすると、直ぐに首かな?
私は、こういうのが嫌で自分で起業してやっているし、お客さんには、
運用がまずいところは、しっかり指摘してやっています。
恵まれ過ぎですかね。
しかし、私は たとえ3000行のクラスで醜くても、正しく動作すれば、官軍だ。
と思っていますので。
ただし、好ましいとは、言いません。
Re:酷いのは、この派遣プログラマーかもね (スコア:2)
明らかにまずいことを、やっていると思ったら、
変なところで、つぶやいて自己満足にひたってないで、
現実を直す努力をすれば、良いんじゃないの?
と、言いたいけど、そうすると、直ぐに首かな?
そうですね。
元の人も書いていますが、多くの場合派遣元に電話されて首にされます。
#関数名を規則に沿った連番って COBOL の頃の名残なのか~とちょっと思いました。
落ち着くところに落ち着く (スコア:1, すばらしい洞察)
実力のない人は、変えられず、飛び出せもせず、愚痴る。
経営側としては、奴隷に鎖の立派さを互いに自慢させられれば成功。
ここでの問題は、そのだめな現状や指示がいかに面白いか。
不勉強による頭悪い指示自慢は、お笑い芸人が変な顔をするのと同じように陳腐化している今、
どんな面白さが飛び出してくるか。
Re:酷いのは、この派遣プログラマーかもね (スコア:1)
タイトルの
> 酷いのは、この派遣プログラマーかもね
これこそフレームの元では。
どこがどう酷いんでしょうか。
> 変なところで、つぶやいて自己満足にひたってないで、
togetterが全然変なところだとは思いませんし、ただの愚痴ではなくて結構レベルの高い、笑えるつぶやきのまとまりだと思いましたが。
> 現実を直す努力をすれば、良いんじゃないの?
ちゃんとtogetter読んでますか?彼は現実を正す努力をしてたりもしますよ?
彼だってスーパーマンじゃないんですから、grep使うのも却下されたりしたら、そりゃめげますよ。
Re:酷いのは、この派遣プログラマーかもね (スコア:2)
何と戦ってるんだ。ってかあんたは誰のサブアカなんだ。
Error401 - スラッシュドット・ジャパン ユーザ [srad.jp]
おいおい (スコア:3)
ちゃんと、全て自分の責任で仕事するのが現実逃避かよ。
Re:おいおい (スコア:3, すばらしい洞察)
うむ。
それでも「馬鹿を直すよりは、自分で会社を興した方が簡単だ」と思ったからそうしたんだろう?
立派な現実逃避行動だよ。
「簡単と言っても、それはそれは苦労があってね」というのは、何の価値もない主張。何しろ、馬鹿を直すのにはそんなもんでは効かないぐらいの苦労があるんだから。
ここで最も無駄なのは「苦労比較」だね。より多く苦労して実入りが少ないぐらいなら、苦労を少なくして自分の責任で仕事をする方が何億倍も素晴らしい。
.
要約すると、「その場合は現実逃避するのが正しい」なんだが、それを指摘されて何を問題視するんだい?
「なぜおまえたちは現実逃避せずに、馬鹿に付き合ってるんだ?」と指摘するのが正しい反応と言うものだよ。
fjの教祖様
Re:おいおい (スコア:1)
簡単ですよね (スコア:2)
> SIに限らず、「技術的な客商売」をやっていると、
> 時として打合せの時に「簡単ですよね」という「挑発」を受けることがある。
> それが実際に簡単であるかどうか、また相手が本当に挑発しているのかは別にして
> これは一つの「挑発」だと受け取った方がいい。
> なぜなら、あいての意図はどうであれ、そこにはいわゆる「罠」があるからだ。
「簡単ですよね」という挑発 [nurs.or.jp]
簡単。簡単と上司が言い始めたら、酷い指示 or その前触れ。
Re:簡単ですよね (スコア:2)
「**さんがやるとしたら、どうします?」
というのも受けるな。挑発ではないと思うんだけど。
「やらない!」
といったら相手絶句してた。理系の人々からのパクリなんだが。
-- gonta --
"May Macintosh be with you"
業務ロジックの場合 (スコア:2)
>「メソッドを作ると処理が上下に飛んで可読性が落ちるので、出来る限り一つにまとめてください」と言われた。
ケースバイケースなんだけど特に業務ロジックなんかはこれで良いと思う。
どうせ業務的な機能単位・業務的な処理単位に分けても再利用なんてしないんだし、その可能性もまず無い。
気ぃ効かせてわけたつもりでもどうせ上から下まで一直線のロジックなのにあっちこっち飛んで読むのめんどくさいだけ。IDEの機能使えばまぁ追えるけどさ、わざわざセンスの無いメソッド名と引数名付けてわけられてもね。変更あったときも修正に手間かかるし。
そのくせ、小さいIF文で同じことの繰り返しなんかは抽象化してメソッドにわけれるのにやってない。
メソッドの先頭に全部ローカル変数定義してる。
なんてコードだらけのプロジェクトもあるわけです。
だらだら長くても変数のスコープが最小化されていて、無闇やたらローカル変数を切らないで適切に書けば読みにくくはならないし手間もかからないんですよ。
変にオブジェクト指向っぽくしようとするのは無意味。
最終的に出来上がった数々の部品の組み合わせてだらだら並べたバッチ処理みたいのが読みやすい業務ロジックじゃないですか?
そういえば三項演算子はわかりにくいから使うなっていうところがあったな。DECODE(ORACLEのSQL)はOKなのに。
.NETで全メソッドを全部try~catchで囲めとか。折角の例外情報を捨てて上位にスローすれと。try~catchで囲まないと他の囲っているところと違うから保守性が落ちるとか。例外情報捨てたら保守性ガタ落ちだっつーの。
CPUに考えてもらう (スコア:2, おもしろおかしい)
指示書に"CPUの行動はプレステに考えてもらう"とあった。詳しい話を聞きに行くと
企:"だからぁ、CPUのターンならプレステがキャラを動かして…"
俺:"? どこへ動かすんですか?"
企:"CPUが考えたところやろ(怒!"
俺:"CPUの動作条件を教えてください!"
企:"そんなもん知らん!プレステを調べろ(怒!"
俺:"…?"
その後、俺はCPU=R3000A⊆プレステ≠CPU(AIキャラ)=プログラム≒仕様という公式を教える大切なお仕事を(ny
「任せるから上手くやって」 (スコア:1, 興味深い)
そして、
「そんなものが欲しいのじゃない」
一見、全権を委ねた様に言葉だけは見せかけている。
しかしその実は自分の手間を省きたいだけで、決定権を一切委ねる気が無い奴に限ってそういう指示をする。
そういう奴は往々にして、端っこのフォントのサイズに迄口を挟む通常より口うるさい相手だ。
「わかった」つもりになってるSE (スコア:1, すばらしい洞察)
プログラミングの経験がほとんどないままシステム設計やサポートすると
下請けからの(苦労して対応した)結果報告や解決策だけを聞いて自分も「わかった」つもりになる。
だから、新しい問題に対しても「◯◯を△△すれば難しくないでしょ」と「わかった」つもりのまま
ハァ?な浅い事を言って周りを冷笑、辟易させる。
他の人が読めないからP言語禁止 (スコア:1)
システム運用の為のスクリプトを書いていたんだけど、bashだけじゃどうにも埒が明かないので「PythonかPerl使って良いッスか?」とボスにお伺いを立てたら返ってきたのがこの答え。
しょうがないからbash + awkでむりやり書いたが、大層みっともなくなった。
Re:他の人が読めないからP言語禁止 (スコア:1)
それとも、「他の人」と言いながら、P言語が読めないのは実はその上司だけだった、っていう落ちですか?
Re:他の人が読めないからP言語禁止 (スコア:1)
確かに間違ってはいません。でもですね、
・「gzcat hogehoge.tgz | ( cd /tmp; tar xf -)」みたいにサブシェルを使うと「このカッコなぁに?」と聞いてくる
・viでちょっと手の込んだ置換操作をするように手順書を書くと「こんな機能使ったことない」と泣き言を垂れる
・manが英語だったり、ぐぐってヒットしたのが日本語の解説じゃないとお手上げ
などなど、大層愉快なメンツだったので「awkなら判る」という保証もなかったんですよね。
Re:他の人が読めないからP言語禁止 (スコア:1)
は
でも
love && peace && free_software
t-nissie
Re:他の人が読めないからP言語禁止 (スコア:1)
>あながち間違ってないような・・・・
自分も最初はそうも思ったけど、
>>bashだけじゃどうにも埒が明かないので
だから、PerlもRubyもPythonも、なんにも使っていなかったというオチ。
それだったら最低限どれか一つくらいスクリプト言語を採用すべき
というのは妥当な結論だと思う。
Re:他の人が読めないからP言語禁止 (スコア:1, おもしろおかしい)
# 私の世代のP言語ってこっちだな
クラス禁止 (スコア:1)
経験したことのある指示 (スコア:1)
PHPでPC用のサイト作ってて
「画面タッチするだけでリンク動くようにしてよ、銀行のやつ(ATM?)みたいに」(別にiPhoneとかではなく、普通のパソコン全てで画面タッチするとリンクするようにしろ、ということらしいです。)
というのには悩みました。「できません」て言うと烈火の如く怒り出す人なので。
ちなみにその人の役職は「しすてむえんじにあ」でした。
あと、「女性プログラマーはスカート、丈はひざ上のもので」とか言われたことあります。
そのルールが嘘だとしったのはプロジェクト立ち上げの時でした……
#女は私しか居なかったとか
#セクハラだけど訴えたら仕事干されて終わってたし
IDでいいや(。。
神社でC#.NET
C言語で goto文禁止 (スコア:1)
新人の頃、C言語で以下のようなコードを書いたら、
int func( ) {
for ( ) {
処理1
if (処理1失敗) goto ERROR
}
for ( ) {
処理2
if (処理2失敗) goto ERROR
}
正常処理
return 0;
ERROR:
エラー処理
return -1;
}
goto文は禁止ということで、上司に以下のように訂正させられたことがありました。
int func( ) {
int error_flag1 = error_flag2 = 0;
for ( ) {
処理1
if (処理1失敗) {
error_flag1 = 1
break;
}
}
if (error_flag1 == 0) {
for ( ) {
処理2
if (処理2失敗) {
error_flag2 = 1
break;
}
}
}
if (error_flag1 == 0 && error_flag2 == 0) {
正常処理
return 0;
}
エラー処理
return -1;
}
どう見ても訂正後の方が読みにくいだろうといったら、ルールだからと(←いや、あなたが決めたんでしょ?)
-------- tear straight across --------
Re:このメソッドには●●の機能しかないじゃないか! (スコア:1)
> 1メソッドで全部やっちゃう
メソッドにする必要ってあるの???
Re:このメソッドには●●の機能しかないじゃないか! (スコア:1)
私もメソッドはシンプルが良いと思います。
てんこ盛りなメソッドの良くないところは以下の3点かと。
1. 複雑ゆえに保守性が低い。
2. 再利用性が低い。
3. 遅い。
2については, パラメータが多く(推測), 気軽に呼び出すことが大変だから。
従って, 他のメソッドからは使いづらい。
また, 使っても3より遅いから全体として速度も落ちる。
あるいは, てんこ盛りメソッドの処理の途中で得られる結果が
欲しい場合もあるかも知れないのに, それを得る方法はない。
シンプルなメソッドを組み合わせて使うほうが, 全体として,
最終的に, より複雑な処理を効率よく実装できるものと思っています。
もちろん, 程度っつーものはあって, fopenなんかが
読み取り用, 書き込み用, 追加用で別々の名前に
なっていたら, ちょっと辟易する... かも。
Re:このメソッドには●●の機能しかないじゃないか! (スコア:1)
1メソッドで全部やるってことは
methodAll( int flag , ....) {
switch( flag ) {
case 1: method1(....); brek;
case 2: method1(....); brek;
case 3: method1(....); brek;
case 4: method1(....); brek;
....
case 10: method1(....);
default: /* エラー処理 */
}
}
みたいになってるだけということを理解してない故の発言かも。
呼び出しもとがmethod1の機能を呼び出すのが目的なら、methodALL()を
呼ぶよりmethod1()を呼び出した方が安全確実。
Re:基本的な例ですが (スコア:2)
変数の役割がわかりやすくなりようにと名前を考えていたがある変数名を考えるのが面倒になって、
「ソースを提出するときにもう一度考えよう」と変数名をtmpにする。
「しまった!この処理にはもう変数が1個必要だわ」と気がついてtmp1を作り、
いつの間にか「このカウンタの名前もtmpでいいや」となってtmp2, tmp3が出来てくる。
学生の頃は、こんな感じで変数を準備していました。
Re:基本的な例ですが (スコア:1)
そんな勇者ばかり入ってきてあの会社はああなりました(どの会社だ