人気サイト様 最新記事

博士ちゃんねる ヘッドライン

管理人からのお知らせ

26日~28日まで、管理人多忙のため更新お休みです!

レスの強調ウゼェー!というドクターへ

レス内の強調表示をOFFにする コチラをクリックして切り替えてください。設定は30日間Cookieに保存されます。
現在のステータス:強調有効

スパゲッティコーダーについて語ろう @ [プログラマー板]


スパゲッティコーダーについて語ろう @ [プログラマー板]
1: 仕様書無しさん 2012/07/07 13:43:17
-スパゲッティコード、スパゲッティコーダーとは
-スパゲッティなコードはどうやったら回避できる
-こんなスパゲッティーなコード書いてるマがいた
-マが考えるおいしいスパゲッティの作り方
-何が原因で人はスパゲッティなコードを生み出してしまうのか
-スパゲッティを解くときのコツ

みたいな、スパゲッティに関することを話すスレがなさそうなのでたてました。
スパゲッティに関する持論や、職場での体験談などお聞かせください。
管理人より:「スパゲッティコード」とは、複雑に入り組んでいて無駄に長く、書いた本人しか、いやさ、書いた本人でさえも改変も修正も不可能な、神聖不可侵なプログラムコードのことを言います。(一般的には)
2: 仕様書無しさん 2012/07/07 13:45:19
んでとりあえず自分から

この間スパゲッティを履き違えてる人いたんだ
自分が理解できないコードは全部スパゲッティらしい
だから、自分が理解できる自分のコードはスパゲッティじゃないと思っているらしい


この人に、どうやって真実を伝えれば、事を穏便に済ませられ、みんなハッピーになれると思う?
21: 仕様書無しさん 2012/07/11 19:08:37
>>2にもあるけど、スパゲッティの定義も人それぞれだから、何を持ってスパゲッティというかは微妙なとこだな
馬鹿の考えるスパゲッティは、実は保守しやすく見通しがいい、クラスがきちんと作られてるいい実装だったりもするしww
23: 仕様書無しさん 2012/07/12 15:26:41
>>21
そういうのはスパゲットーニと言って、ミートソースのような重いソースでも比較的ほぐれやすい。
3: 仕様書無しさん 2012/07/07 14:01:17
1メソッドに処理つめこんであったら、
コメントとかで処理概要な意図などしっかり書かれててもスパゲッティと呼べる

どうみてもマに向いてないタイプの糞コーダーはだいたいこのタイプ

新しいクラス作るときでも、まず似たようなクラス全体をコピペしてきて、処理を削る作業からコーディングに取り掛かる
無駄な手打ちをしろとは言わん
だが、まず最初に他のソースコピペからはじめる奴は、ほぼスパゲッティ職人の素質あると思うわ

メソッド呼ぶコストとか意識しないといけないような環境なら1本道処理も意味ある場合もあんのかもしらんが、
少なくともうちの職場でやってる仕事にそういうのはねーしな
7: 仕様書無しさん 2012/07/07 21:54:19
既存メソッドにフラグ引数追加すんなや!!
8: 仕様書無しさん 2012/07/07 22:41:48
コピペを繋ぎ合わせてたら、絡まっちゃったw (テヘペロ
9: 仕様書無しさん 2012/07/08 02:21:49
疎結合だった所をいくつもまとめて密結合にしないで下さい
あんただけレビューに時間かかるし手戻りも多いんだから自覚してるだろうに
10: 仕様書無しさん 2012/07/08 09:41:22
コピペコーダーはスパゲッティ職人でもある
12: 仕様書無しさん 2012/07/08 14:12:37
むしろ、仕様変更繰り返すと、簡単にスパゲティになるよ。
17: 仕様書無しさん 2012/07/08 20:28:04
スパゲッティコードの修正頼まれたら、さらに意味不明なフラグを用意してジャンプ先でさらにフラグをセットして、そのフラグを元にジャンプしたりさせてさらに難解にする
22: 仕様書無しさん 2012/07/11 19:50:43
賢いフリしてる馬鹿の文章そのままなんだよなぁ
24: 仕様書無しさん 2012/07/12 19:15:06
具体的に、どういうのがスパゲッティだと思う?
25: 仕様書無しさん 2012/07/12 19:44:20
>>24
メソッドが入り組んでる
aの中でb
bの中でc
cのなかでd
特に理由もなく
26: 仕様書無しさん 2012/07/12 19:57:48
>>25
それじゃ、a->b->c->dの一本道じゃないか。
せめてdからbを呼ばないと。
28: 仕様書無しさん 2012/07/12 21:03:20
公開されてるメソッド名やフィールドが俺々略語。
・1メソッドが無駄に長かったり、内部処理が全く分割されてない多機能メソッド。
・似た処理をコピペしたコードが点在している(仕様変更が入ると、修正箇所が増大するのでスパゲティ)。
・リテラルのハードコーディング'(同上)。
・インナークラスや匿名クラスの多用。
・他所の参照を持ちすぎ。
・temp/tmp/hoge/moge/hage のような汎用名の多用。

最後の派、1メソッドが長くなければローカル変数名は何でもいいと思うけど、
一本糞メソッド作る奴はローカル変数もこういうのばっかり使うしな

とにかく後の事何も考えてないあほ実装は、糞コードでとてもスパゲッティだと思ってる
あちこちに依存しててこんがらがってたり、コピペ量産しまくってたり

>>25
メソッド多いってだけじゃ読み解く側の理解力不足ってだけな事もあるだろうから、入り組んでるかどうかは、実際のコード見てみないと判断つかない希ガス

メソッド名も理解しようとしなければ、IDEもろくすっぽ使えなくて
スクロールしまくってメソッド参照さがしたりしながら、複雑だーって言ってたりする奴うちにいるしw
27: 仕様書無しさん 2012/07/12 20:34:17
一メソッドに20行超とか、アホみたいに機能詰め込んでるやつは、そのメソッドのなかがこんがらがっててとてもスパゲッティ
29: 仕様書無しさん 2012/07/13 00:37:09
>コピペ量産しまくってたり
ネットで拾った大量のコピペを繋ぎ合わせて、コンパイルが通っただけで俺スゲェ
1日にコピペした「ステップ数」が俺スゲェ
…そんな文系脳の偽プログラマを混ぜないで下さい、本当に。
35: 仕様書無しさん 2012/07/13 15:35:09
スパゲッティだと女性うけしないからパスタにしよ
36: 仕様書無しさん 2012/07/13 16:06:06
つってもスパゲッティ以外を食う機会なんてそんなに多くないけどなw
管理人より:「スパゲッティ」というのは「パスタ」という集合のサブセットです。日本では「スパゲッティ」を「パスタ」と呼ぶのがオシャレみたいな風潮ですね。
37: 仕様書無しさん 2012/07/13 16:11:45
日本人なら蕎麦コードだろ。
いや、たれ流し的に作っていくから、流しそうめんコードか?
流した後は俺シラネって意味でもしっくり来るな。
41: 仕様書無しさん 2012/07/14 01:19:15
>>37
盆栽コードと呼びたいね

意図不明に捻じ曲がって何処と繋がっているかよくよく目を凝らさないと判らないようなところなんか特にね
43: 仕様書無しさん 2012/07/19 21:45:36
「なんで、このクラスにその関数や変数を突っ込んじゃったんですか!(ありえないっしょ・・・)」

そこに、クラスがあったから



マロリーかお前は
ジョージ・マロリー (Wikipedia) ジョージ・マロリー ジョージ・ハーバート・リー・マロリー(George Herbert Leigh Mallory 、1886年6月18日 - 1924年6月8日?)は、イギリスの登山家。
(中略)
マロリーが「なぜ、あなたはエベレストを目指すのか」と問われて「そこに山があるから(Because it is there. )」と答えたという逸話は有名だが、本当にマロリーがこのような発言をしたかどうかについては疑義が投げかけられている(後述)。
44: 仕様書無しさん 2012/07/19 21:53:33
何をどのクラスやネームスペースに入れるかは熟練した人でも結構悩む設計に直結するから
ましてや新人やスパゲッティストにわかるわけがない
45: 仕様書無しさん 2012/07/19 22:28:04
とりあえず動くし
48: 仕様書無しさん 2012/07/20 06:51:55
「とりあえず動くし」をやめれば、デバッグの工数が激減すると思うのだが、
あくまでも思うだけなんだよな・・・・実際はどうなんだろう・・・・・?
49: 仕様書無しさん 2012/07/20 16:11:53
生産性が下がります
51: 仕様書無しさん 2012/07/21 06:53:00
曜日と時間から漂う絵に書いた餅感が尋常じゃない件
52: 仕様書無しさん 2012/07/21 08:43:35
>>51
こういうのは恨み節というんだよ
実感こもっている
53: 50 2012/07/21 10:57:26
>>51
週末は早寝しなくていいからなw
普段は朝6時起き、8時半始業~の5時定時だから、その反動で夜更かししたくなるんだ

ああでも絵に描いたもちなのは確かにそうだ
最近やってるのはずっとそういうのが全くない環境で、頭の悪い仕事ばっかやってて気が狂いそう
腐ったスパゲッティをどうほどくのが今後楽になるか、ってことばっか考えてる

ほどく蕎麦からバグ出てくるし…
54: 仕様書無しさん 2012/07/21 11:15:35
>>53
麺類好きだな
60: 仕様書無しさん 2012/07/22 08:33:02
日本のソフトウエア技術者と掛けて原子力保安院と解く。

その心は、
おまえら全員素人じゃないか!

(記者会見でブチ切れた記者のヤジ)
62: 仕様書無しさん 2012/07/22 15:23:03
日本のIT産業の失敗には次の2つの理由がある

他産業への従属化に舵をきったこと
利益を重視してヒトやモノへの投資より消費を優先させたとこ


これのおかげで使い捨て奴隷ばかりが増し人材を作る環境が潰え
知識や技能の向上を人任せにさせ人材を作ろうという風潮まで潰えた
63: 仕様書無しさん 2012/07/22 18:00:27
ジョブスのスピーチを有難がって買い求めるサラリーマンとか笑えるwwwww
笑える・・・
71: 仕様書無しさん 2012/07/24 01:30:53
N-BASICあたりでは、サブルーチンなし、条件比較分とGOTOだけのプログラム書いてたよ。
いまみたらさっぱり解らん、当時の俺は天才かもと思ってしまう。
72: 仕様書無しさん 2012/07/24 10:48:21
>>71
しかも、DAT文でマシン語だからね。
74: 仕様書無しさん 2012/08/06 22:48:45
引継ぎさせられると素人PHPerのスパゲティソースがマジでむかつく
更地にしてやりたくなる
75: 仕様書無しさん 2012/08/08 10:40:11
>>74
フレームワークの使い方わかってなくて、めちゃくちゃなことしてたりするよな。
76: 仕様書無しさん 2012/08/10 00:26:31
あるあるすぎる

こっちは納品後のソースに対し客が内部で開発してぶち壊した挙句
バグだってこっちに障害報告あげてきててマジはげそうだわ
内部開発自体もう数年繰り返してるんだから、少しくらい言語仕様学べよ…
77: 仕様書無しさん 2012/08/11 17:19:09
納品先が中身いじったんなら当然追加費用取れるだろ?
なら、別によくね?
81: 仕様書無しさん 2012/08/12 10:11:46
>>77
大手だから、客とやり取りしてる立場じゃないからなぁ
コード自体全て向こうの持ち物だっていう契約で、
渡されたコードに対して機能改修とかを加えるっていうアレなスタンスだから、どうにもならん

ぶっちゃけスパゲッティが量産されすぎてて、もう手に負えない
78: 仕様書無しさん 2012/08/11 17:46:42
いや金の問題じゃなくて、いつまでたっても成長しない相手を嘆いてるんじゃまいかと
79: 仕様書無しさん 2012/08/11 17:49:40
最初なら丁寧に説明して対応する
二回目でも次からガンバレの気持ちで普通に対応する
でもそれが三度四度と続くと、お前等いい加減に汁!と怒りたくもなる
80: 仕様書無しさん 2012/08/11 19:55:46
いや、最初に譲歩しちゃダメ
ビジネスなんだから

そこ納得してくださいってことは丁重に説明するけど譲歩はダメだ客がつけあがる
82: 仕様書無しさん 2012/08/12 10:28:37
>>78
それもあるなー
自分なんて、今の仕事始めて1年半弱くらいだし、プログラミング言語経験もほぼ同じくらいしかないにわかマ
そこに入ってから勉強しただけだってのに、なんか気づいたら一番詳しい人みたいな扱いされてたりする
客で開発してる奴も、うちで開発してる奴も、そういうの勉強する意思みたいなのあんまないしなぁ
動けばいい、あとの事は知らんって感じ

>>80
直接相手したことはないけど、うちのとこもだいたいそんな感じになってるっぽいな
客の客が相当馬鹿なこと言ってるらしくて、客がそれを丸呑みする状況になってるくさい…
やっぱ水が落ちてくるような感じの仕事はもうだめだと思うわ
とてもておくれている
85: 仕様書無しさん 2012/08/13 19:20:10
本当にほしいと思ってる人間と、作る人間の間に無駄に人が挟まりすぎるのが問題
ウォーターフォール・モデル (Wikipedia) ウォーターフォール・モデル ウォーターフォール・モデルは、ソフトウェア工学では非常に古くからある、もっともポピュラーな開発モデル。
(中略)
プロジェクトによって工程の定義に差はあるが、開発プロジェクトを時系列に、「要求定義」「外部設計(概要設計)」「内部設計(詳細設計)」「開発(プログラミング)」「テスト」「運用」などの作業工程(局面、フェーズ)に分割し、原則として前工程が完了しないと次工程に進まない(設計中にプログラミングを開始するなどの並行作業は行わない)事で、前工程の成果物の品質を確保し、前工程への後戻り(手戻り)を最小限にする。通常は「線表(ガントチャート)」を使用してスケジューリングする。
管理人より:しかし、彼らはおそらく、元請け→子請け→孫請け→ひ孫請け…というゼネコン式の受注形態のことを指していってるような気がする。
5: 仕様書無しさん 2012/07/07 14:55:56
麺は少し塩を多めにいれ、茹でるだけ。ソースと同時並行でやるのがいい。
ソースはオイルソースがお手軽で簡単。
芯をとって縦に薄くスライスしたにんにくと、オリーブオイルを50cc~くらいを、適当なパンに入れて弱火で加熱し、種とった唐辛子を適当にちぎって入れる。(辛いほうが好みな人は、唐辛子の種も入れちゃってもいい)
にんにくに薄く色がつくくらいまで、じっくり香りと唐辛子の辛味をオイルに移したら、一度オイルとにんにく唐辛子をパンから出して、ベーコン、セロリ(具は割と何でも合う)なんかを炒めて、白ワインをちょっと加え(なくてもいいけど個人的にオススメ)、火が通るまで軽く炒める。
オイルと唐辛子、にんにくを戻して、麺の茹で汁をお玉一杯分くらい加えてソース完成。
味付けが足りないときは、軽く塩なんかを足して調整するといい。

同時作業は2口コンロないと鍋変えながら並行作業とかになって結構面倒だけど、
お手軽でおいしい、ペペロンチーノの完成です。

みなさん大変ですね。
プログラムというのは、膨大な量の情報を、いかにしてロジックを分割し、疎結合にできるかが、上級者とそうでないマの境目(のひとつ)と言えるでしょう。
オブジェクト指向がどうのこうのとか、デザインパターンだどうだとかいうのは、結局この分割し統治するための手段にすぎない。

かつて、大量のまずいスパゲティを平らげ、前任のケツを拭いて回った管理人の経験から察するに(スレの内容とかぶってますが)おそらく以下の4点です。
  • 同じような、しかしほんのちょっぴり違う処理を、何ヶ所もコピペする。
  • ひとまとまりの処理が異常に長い&ものすごい入れ子になっている。
  • 生のSQL文を文字列連結して書く。(その割にSQLのことがよくわかってない)
  • Controllerにビジネスロジックを書く。(でもMVCフレームワークを使いたがる)
一番最後のやつはCakePHPとかのMVCフレームワーク使ってるPHPerに多かったですね。CakePHP的にそのほうが良い理由とかあるのかな(使ったこと無いけど)。今だにわかりません。わかりませんが、彼らのコードがスパゲッティなことに変わりはない。
やはりプロのグラマーにはセンスとか閃きとか、そゆのが大事なのか…。

トップ絵はJurgen Tellerという写真家が撮った、歌手のビョーク。スパゲッティ・ネーロという、イカスミをすり込んだ真っ黒なスパゲッティを口からダランと…。そして案外乳がでかい。
ラティーノ No.6(1.65mm) スパゲッティ 袋 1000g×12個
富永貿易
売り上げランキング: 1,828


元スレ:http://kohada.2ch.net/test/read.cgi/prog/1341636197/

人気サイト様 最新記事

博士ちゃんねる ヘッドライン

管理人からのお知らせ

26日~28日まで、管理人多忙のため更新お休みです!
    • ※1 : ドクター・ノオ・ネーム
    • 2014.10.18 20:45
    乳がでかい!( ゚∀゚)o彡°
  1. トラックバックはまだありません。


コメ欄での議論はおおいにけっこうですが、当サイトではドクター同士の罵り合いは禁止となっております。反論する際には、相手の意見・人格を尊重し、どうぞ冷静に。
*