Hatena::ブログ(Diary)

やねうらお−ノーゲーム・ノーライフ このページをアンテナに追加 RSSフィード

GT-Rの買取ならここですわ。どこよりも高く買取ってもらえるはず。お勧め!GT-R 買取
電王戦出場記念! 書籍化されたで! 監修したで!(`ω´) 絶版なってしもた Kindle版で復活!! 記事書いたで!
解析魔法少女美咲ちゃん マジカル・オープン!

YaneuLabs / やねうら王公式 / やねうらおにメール / twitter / プロフィール

 | 

2005-05-09 デスマーチ

[] デスマーチ  デスマーチを含むブックマーク  デスマーチのブックマークコメント

正直言うと私は本当のデスマーチを経験したことはない。もちろん3日3晩徹夜プログラムしたような経験はあるが、本当のデスマーチとはほど遠いと思う。だけど、デスマーチが絵空事ではないことは知っている。


軍曹が】携帯電話開発の現状【語る】

http://s03.2log.net/home/programmer/archives/blog38.html

http://s03.2log.net/home/programmer/archives/blog39.html


そうは言うものの、上の話は、私にとって、あまり現実味が感じられない。「10万行のスパゲッティコード」と言うが、yaneSDK2nd/3rdにしても10万行ぐらいはある。(スパゲッティコードではないつもりだが) だから10万行ぐらいたいした量だとも思わない。50行1ページで印刷してもたかだか2000ページしかない。1ページ100行で両面印刷ならわずか500枚だ。だから、こういうのは最初にすべて印刷してしまったほうがいい。「ノートは1日で平均2冊が消費された。準備してきた物が10冊だったから6日目の朝に売店に買いに行った」とか書いてあるが、こんなことしてたら時間がかかって当たり前。どうしてリストプリントアウトしてそこにメモらないの?と言いたい。


担当する機能の最上関数を見つけるのに1週間かかった。その時はS上等兵が歓喜の叫び声を上げたものだ。 」なんて、いくら何でもかかりすぎだ。これでは全然話にならなくて当たり前。逆アセして解析していても、普通、そこまで時間はかからない。これにしてもクロスリファレンサをかけて(or 自分でクロスリファレンサを作って)、結果を印刷して手元に置いておけばずいぶん作業効率が違うはずだ。なんで、手作業で延々と追いかけてるの?と言いたい。


とは言うものの、他人のプログラムを引き継ぐというのは、自分で好きなように作っていいのとは違って、個人差が顕著に現れる。自分ひとりでプログラムを全部書くだけならば楽にこなせる人ですら、他人のプログラムだと何をやっているのかすら理解できないことがしばしばある。自分ひとりでなら全部書けるから「自分は出来る」と勘違いしてしまいがちだ。私はそういう人に、いつもはっきり言うことにしている。「違うんだ。あんたは出来ないんだ。正確に言うと、あんたは自分の流儀でないとプログラムを満足に完成すらさせられないんだ」と。

yaneuraoyaneurao 2005/05/09 02:32 スパゲッティプログラム解読の秘技(?)についてはいずれ書く!(`ω´)

melt_slincmelt_slinc 2005/05/09 02:51 自分のプログラムだろうと、他人のプログラムだろうと、言語の文法には従ってるはずなのだから、わからないってことは無いと思うんですけどね……。
自分がそういうソースを見たことがないからかもしれませんが……(;´Д`)

yaneuraoyaneurao 2005/05/09 02:57 それは甘い。たとえば2次方程式の解を「解の公式」(中学校で習うよね)で求めるプログラムを考えてみよう。

そこに出てくるのは、四則演算とsqr(これも、ニュートン法で書いてあるかも知れない)だけなんだけど、「解の公式」や「ニュートン法」を知らない人が見ても、operationとしては何をやっているか明瞭なのに、プログラム全体の意味はさっぱりわからない。

同様に、自分の知らないデータ構造や、自分の知らないデザインパターン、自分の知らないアルゴリズム、自分の知らない数学的事実etc..そういうのがある限りは、言語の文法をいくら理解してもプログラムそのものが理解できるようにはならない。

melt_slincmelt_slinc 2005/05/09 03:05 確かに、プログラマに必要な知識って、文法じゃないですね……。
そう考えてみると、他人のプログラムを読めない人って、プログラマとしての知識が低いって事なんですかね……。
……なんか失礼な事を言ってるような気がしますね。すみません(;´Д`)

aiueoaiueo 2005/05/09 03:06 ヤネ氏はデスマーチを経験したことがないのではなく、デスマーチをデスマーチと感じない強い精神力の持ち主だからじゃないかな。




と褒めてみたのでご褒美(愛ちゃん)をください。

yaneuraoyaneurao 2005/05/09 03:10 むしゅめは 誰にも 渡さん!(`ω´)

yaneuraoyaneurao 2005/05/09 03:14 > そう考えてみると、他人のプログラムを読めない人って、プログラマとしての知識が低いって事なんですかね……。

いやー、それがですね、プログラムの解読にその分野での専門知識が必要になる場合があるわけですヨ。それは、ときに「高分子におけるほげほげ」であったり、「偏微分方程式におけるほげほげ」であったり、「熱力学におけるほげほげ」だったりするわけです。場合によっては「ほげほげハードウェアのインターフェース仕様」であったり、「ほげほげチップの入出力タイミング」であったり。

そういうのって、プログラマとして一般的に必要だとされている知識でもないので知らなくても当然というか..。

melt_slincmelt_slinc 2005/05/09 03:21 ええ、ええ、すみません。めちゃめちゃ軽はずみな発言でした(;´Д`)
次からはもっと考えて発言します……。

shibachoshibacho 2005/05/09 07:31 このエントリ、自分のこと言われているようだ。。。痛ぇ〜〜

replicornreplicorn 2005/05/09 07:41 プリントアウトしない人の言い分は「検索できないじゃないか!」なのですが、別に印刷したものを見ながらエディタで検索すればいいだけなんですけどね。あと、印刷代が勿体ないという方もいますが、今は印刷コストも大したことないのでモタモタして浪費する人件費と秤にかけると印刷したほうがはるかに安い場合がありますね。仕様書を仕上げるもの印刷してペンで赤入れしたほうが楽で早かったです。

> operationとしては何をやっているか明瞭なのに、プログラム全体の意味はさっぱりわからない。
 これが以前私に仰った他人のコードを読む重要性のひとつですね!

デスマ経験者デスマ経験者 2005/05/09 09:00 >リストをプリントアウトしてそこにメモらない
デスマになる環境はたいていは当たり前のことが自由にできません。この場合だとプリンタがそもそも設置されていない。プリンタを使うには許可が必要(協力会社には絶対許可がおりない)。ソースコードを外部に持ち出すのは禁止なので印刷はだめの何れかだと思います。そして、外部からプリンタを持ち込むこともできません。ですので、ノートに手書きになったのだと思います。

デスマ経験者デスマ経験者 2005/05/09 09:10 >クロスリファレンサをかけて(or 自分でクロスリファレンサを作って)、結果を印刷して手元に置いておけばずいぶん作業効率が違うはずだ。
こういった作業も認められません。逆に作業効率を上げようと工夫しようとすると怒られます。もし、改善しようするとつぶされます。デスマ参加者の中には残業代だけを稼ぎたいだけの輩がいます。そういった輩は常識がないので本当にえげつないことをしてきます。

centraircentrair 2005/05/09 09:33 デスマーチというのは皆が自分のできる事をやろうとするけど、どうしても時間が足りなくなって陥るもんだと思ってたから、
やねさんの言うのは最善の尽くし方を考えればこのデスマーチからは抜け出せるんじゃないかって事だけど
↑は、もはやデスマーチでは無い気がする。
このブログ書いてる隊長はデスマーチームの中でトップみたいだから効率上げて怒られる事もないだろうし。

kanokekanoke 2005/05/09 09:54 技術者ががんばればどうにかできるようなものは、自業自得なので同情できません。
でも本当のデスマーチは、技術者がどうにもできないところから発生するものなのです。
しかし今日のエントリ内容は色々胸に突き刺さりますね!!

afaf 2005/05/09 11:20 プログラマーの人はソース印刷してチェックするんですね。
それはそうと、プログラマーは出社しても隣の席の人とはメッセでしか会話しないって本当ですか?

yaneuraoyaneurao 2005/05/09 11:26 > それはそうと、プログラマーは出社しても隣の席の人とはメッセでしか会話しないって本当ですか?

しらんけど..そのへんは、会社によるんじゃないかな..(´ω`)

mizusawamizusawa 2005/05/09 12:17 yaneSDKって10万行もあったんですか。一度一通り読ませていただいたことありますが、読みやすく勉強に最適だと思いました……とか担いでみる。(´ω`)
自分はまだ経験浅いのでデスマーチと呼べるほどの事は未経験ですけど、そういうことが起きないように日頃から頑張らないとなぁ……。

shibachoshibacho 2005/05/09 12:19 具体的にどんなエディタでソースコードを印刷しているのか聞きたいな。

yaneuraoyaneurao 2005/05/09 12:26 私の場合、秀丸でフツーに文字小さくして印刷してます。2段組とかにするときとかは、rubyとかでちょっとした整形プログラムを書いてからすることもありますけど。

fkmfkm 2005/05/09 14:35 goto文のまったく存在しないスパゲッティプログラムって存在するのでしょうか??

kanokekanoke 2005/05/09 14:42 >プログラマーは出社しても隣の席の人とはメッセでしか会話しないって本当ですか?
少なくとも私の会社では、決定事は(隣の人とでも)メールで送りあうようになってますよ。仲間内とはいえども言った言わないの水掛け論にならないように…。

enraenra 2005/05/09 18:23 無駄に人を割いてプロジェクトを進めないからじゃないですかねぇ。
人が増えれば増えるほど、この手の障害って増えますから。

enraenra 2005/05/09 18:23 ↑デスマにならない理由。

e3475e3475 2005/05/09 19:52 >goto文のまったく存在しないスパゲッティプログラムって存在するのでしょうか??
一例だけど、あるよー。今まさにそんなプログラムをメンテナンス中。
(大量にコピペコードが埋め込まれたクラス総数700弱のjavaコードをできる限り忠実にC++に移植した物ってなんだよ・・・)

bontan-amebontan-ame 2005/05/09 21:22 ファイルやクラスの依存関係が入り乱れてるのも立派なスパゲッティですよね。
(doxygenとかで可視化してもスパゲッティ風になったりしてw)

DeaRDeaR 2005/05/09 22:11 デスマ……は経験した事ないですけど、スパゲッティコードは時々……”val001”とか”func001”とかは真面目に止めて頂きたい……何か分からずにgrepな作業をするハメに……

tailliartailliar 2005/05/09 22:55 >grep
俺も泣きながら毎日grepしてますが・・・
.NETなのでdllの中にも文字列があって大量の文字化けが混入_| ̄|○
コード内にHITしたと思ったらコメント部分
死んできます_| ̄|○

さださだ 2005/05/09 22:58 今回の元ネタはデスマーチでは無いんですね。それと今更ながら、他人のソースコードを見て勉強しろとおっしゃる意味がやっとわかったような気がします。

ykcykc 2005/05/10 00:47 一通り読ませていただきました。
やね氏の書かれていることは、間違ってはいないとは思います。 
ただ、ここで取り上げられているプロジェクトの問題点には、
  ・恐らく、上層部で衝突が起きている
    仕様書は恐らくあいまいに作られている(そうでもしないと承認されない)→製品はあいまいには作れない
    →ぼろが出る→仕様変更(上層部の衝突は未解決)→製品はあいまいには・・・(ループ)
  ・↑の理由により、どこのチームも火を噴いている
    他のチームが、ぼろを出してくれることを待っている節があり(体のいい隠れみのに出来るから)、
    それがチーム間の衝突を招いている。
  ・プロジェクト管理者が管理を放棄している
  ・リスク管理がまったくされていない
  ・会社全体に、病んだ政治が蔓延している
  ・無駄な会議をしすぎてる(社風なのかも。)

ざっと浮かんだだけでも、以上のようなものが見受けられ、「そりゃデスマーチになるよ。」と言いたくなります。
  ここで論じられている、スパゲティコードの解析うんぬんは、たしかに軍曹さんのチームにとって改善点ではありますが、
だからといって、真っ先に非難されるべきものではないと思います。
(仮に軍曹さんが優れたスキルを持っていたとしても、デスマーチに変わりはなかったでしょうし、
 プロジェクト管理者が開発者のスキルに合わせて、スケジュールや人員配置を調整し、対応すべき問題ではないかと。)
  それに、「開発者が優れたスキルを持ち、英雄的な献身をすれば、デスマーチは回避できる」というのは、
デスマーチを引き起こす連中が、いつも考えていることです。

個人的には、やね氏の
>正直言うと私は本当のデスマーチを経験したことはない。
は、かなりすごいことだと思うので(本人は、気付いていないかもしれませんが、良いプロジェクト管理をされているのでしょう。)
(有)やねう企画流のデスマーチ予防策をまじえながら、
社長として、プロジェクト管理者としての視点から、この問題を論じて欲しかったです。

長文失礼しました。

DeaRDeaR 2005/05/10 01:06 私の場合は上層部同士の連絡が個人的なメールや電話のみで繁栄されなかった。なので、部署によって仕様が全く違う。そして管理者が放棄しているにも近い管理、そんな感じでデスマしました。専門学校で(;´Д`)
ある意味貴重な経験をさせてくれる学校でした、あそこは……。

やぎたやぎた 2005/05/10 10:04 > 「担当する機能の最上位関数を見つけるのに1週間かかった。その時はS上等兵が歓喜の叫び声を上げたものだ。 」なんて、いくら何でもかかりすぎだ。
これ、大量の本来なら無関係なはずの関数を無関係な箇所に何度も使いまわして、無関係なはずのデータ領域を無関係な箇所に何度も使いまわして、無関係なはずのデータ構造に無関係なはずのデータ構造を無理矢理当てはめて、どう考えても動かないのに最終的には偶然動いている。
という状態なんだと思いますよ。僕は月に四百時間労働までやったことありますが、三百五十時間以上を強いられるようなゴミプロジェクトは大抵そんな設計およびソース、もっと言えばそういったものが出てきてしまった何らかの社会的要因があるはずです。
見たことなかったらわからなくても無理ないですよね……。

やぎたやぎた 2005/05/10 10:08 わわ、他の方のコメントをよく読んだら内容がかぶりまくってました。失礼しました。
少なくともデスマーチを避けることぐらいはちゃんと考えていればいくらでも可能なので、管理者側でデスマーチを生み出している方はとっととホームレスか何かに転職すべきですね!

学生学生 2005/05/14 11:19 旧ソースを全て新ソースの中にコメント文として埋め戻す、
なんて愚行が開発現場では本当に行われているものなんでしょうか?
それもダブルスラッシュ禁止なんてルールも、自分だったら気が狂います。

yaneuraoyaneurao 2005/05/14 11:25 そのへんは「郷に入っては郷に従え」ダナァ..(`ω´) それが許せないところまで来たら、自分で会社をつくりなチャイ。ただ..

>旧ソースを全て新ソースの中にコメント文として埋め戻す、
なんて愚行が開発現場では本当に行われているものなんでしょうか?

そういう会社もあると思う。でも、旧ソースの部分はエディタの機能とかで非表示にしておけばヨロチイ。CVSよか案外便利かもよ?

> それもダブルスラッシュ禁止なんてルールも、自分だったら気が狂います

そういうことを強制されたら、自分のソースはダブルスラッシュ使って書いて、それを /* */に置き換えるプリプロセッサを書くとヨロチイ。

 | 

1900 | 01 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 06 | 08 | 10 | 11 | 12 |
2015 | 01 | 02 |


Microsoft MVP
Microsoft MVP Visual C# 2006.07-2011.06