プログラミングのカルト宗派 82
ストーリー by mhatta
正直カーゴ・カルトに属しています 部門より
正直カーゴ・カルトに属しています 部門より
Anonymous Coward曰く、
DZone経由。ハッカーのMichael Ash氏が、自身のブログにThe Cult of Programmingという記事を書いています。「経験上、ほとんどのプログラマは以下の『宗派』のいずれかに分類される」とのこと。
いくつか「予後不良」なものもあるようです。
- 経験カルト
- 最適化カルト
- 簡単カルト
- 高速カルト
- 不確実性カルト
- 完璧カルト
- カーゴ・カルト
とりあえず意訳 (スコア:5, 参考になる)
間違いあったら訂正よろしく
#タレコミ時には訳もつけとけよ
■経験カルト
経験カルトのメンバーは、昔にやったことしかできないと信じています。
彼らを識別するには、彼らの手に余る問題を提示することです。
未使用APIへの恐怖にも似た反応や、サンプルコードの提示要求という特徴的な反応から識別できます。
対処:新しいことも実現できることを提示できれば、カルトからの解脱へ導けるかもしれません。
訳者からの追加セリフ:
「やったことないからできません」
「使えるサンプルコードを提示してください」
■最適化カルト
最適化カルトのメンバーは、他のどんな価値観よりも速さに価値を見出します。
掲示板で「最速の方法は?」とよく質問しています。
速さの価値観にマッチしない意見を提示されると、狂ったような反応を示します。
同様に、どの操作が速くて、どんな操作が速くないかということに関して誤った見解を持っています。
対処:プログラマの工数の重要度、種々の操作の正しい速度、現在のハードウェアの実際の能力などを教育していけば、より生産的になるでしょう。
訳者からの追加セリフ:
「どんなループでもループ内の変数操作は少ないほうがいい」(単純な操作であれば最適化はコンパイラがやってくれる)
「C(Java)は遅い。アセンブラ(C)で書いたほうが速い」(現在のオプティマイザに勝てるプログラマはごく少数だし、その工数をアルゴリズムの最適化に振り向けたほうが効果的)
■簡単化カルト
簡単化カルトのメンバーは、他のどんな価値観よりも簡単な実装に価値を見出します。
掲示板で「一番簡単な方法は?」とよく質問しています。
フレームワークの持つ組み込み機能により、彼らのやりたいことや、大きな問題を解決できると考えています。
自分で機能を実装するように提示されると、狂ったような反応を示します。
対処:適当な規模のプロジェクトを完了してしまうと、この傾向はますます強まるかもしれません。
訳者からの追加セリフ:
「RoR(Spring)にまかせればバッチリさ」
■最速化カルト
表面的には、最適化カルトや簡単化カルトと似ています。
最速化カルトのメンバーは他のどんなものより速度に価値を見出します。
彼らを識別する特有の質問はありません。
しかし、複数の実装を試してから最速のものを採用するところから彼らを識別できます。
彼らは貪欲に速度に関する実験、研究、調査に時間を費やします。
対処:実験、研究、ツールにより元に戻ることもありますが、元に戻る望みのない例もあります。
訳者からの追加セリフ:
「もっと速い実装はないものかね」
■不確実性カルト
不確実性カルトのメンバーは真に知られているものはなく、する前に可能な限り確かめることがベストだと信じている。
彼らは、すでに詳細が提案されている問題に対して執拗に回答を要求するところから識別できます。
最初の質問でさんざん聞いてから他のアドバイスを求めたり、複数のMLや掲示板に同じ質問をマルチポストします。
対処:情報に飢えてるときに、すべての落とし穴を知らなくても旅ができることを実践することかもしれません
訳者からの追加セリフ:
「○○について知りませんか?」
「(回答をもらった後で)それは知ってますが、他にないかと思いまして」
■完璧カルト
完璧カルトは、パーフェクトなコードが数学的に存在することを知っており、それを探すことに没頭します。
彼らは実用的な価値がないコードを際限なくいじっていることがあります。
また、非カルトメンバーから見れば同等で無意味に見える実装について、どちらがよいか意見を求めることがあります。
この作業に終わりがないことさえ除けば、それらのコードはまったく問題ありません。
対処:教育と雇用により治癒しますが、時間外には完璧カルトとして活動しています。
訳者からの追加セリフ:
「この実装とあの実装だとどちらがいいと思う?」
■カーゴカルト
カーゴカルトは、プログラミング以前の疑似科学に属する古典的なカルトです。
カーゴカルトに属するプログラマーは、深い理解の必要性を把握していないどころか、深い理解があることすら気づいてない場合があります。
彼らのコードはまがいものですが、なんとか動いています。
書いたコードはざっと見た限りでは正しそうですが、ちゃんと見るとほとんど理解できない傾向にあります。
欠点を指摘されると、指摘のとおりに修正しようとしますが、直す箇所を間違えています。
彼らは、専門家の議論中に何を話しているか理解できないことを認めないことから識別できます。
対処:手のうちようがありません
訳者の追加セリフ
「動けばいいんだよ。動けば」
突っ込み (スコア:4, 参考になる)
重箱の隅だけどここは「やたら詳細な~」を省いちゃ駄目かと。
>狂ったような反応
違う。They are horrified when-"は「~すると恐怖を覚えます」辺りが適切。
>適当な規模のプロジェクトを完了してしまうと、この傾向はますます強まるかもしれません。
強めちゃ駄目です。ここの"if persistent enough"は「傾向」ではなく本人にかかってる。
「ある程度な規模のプロジェクトを努力の末に完了できればこの傾向から脱却できるかもしれません」
>■最速化カルト
誤読してるっぽいので以下書き直し。
■最短カルト
表面的には、最適化カルトや簡単化カルトと似ていますが、
最短カルトのメンバーは他の何よりも実装に必要な時間に価値を見出します。
彼らを識別する特有の質問はありません。しかし、複数のやり方を考えてから
とにかく実装に必要な時間が最短になると思われる解を採用するところから彼らを識別できます。
彼らは実験、研究、ツールを習得する事などに時間を費やすことを嫌う傾向があります。
対処:実験、研究、ツールを習得することの有用性を頻繁に実践してみせれば
回復することもありますが、望みのない事が多いです。
>教育と雇用により治癒します
重箱の隅だけど「卒業と就職」。つまり「学生や研究者にありがちな傾向で世間に出れば治るよ」と言っている。
署名スパムがウザい?アカウント作って非表示に設定すればスッキリさ。
納期カルト (スコア:2, おもしろおかしい)
-- gonta --
"May Macintosh be with you"
お金カルト (スコア:1, すばらしい洞察)
あれ? (スコア:1)
Re: (スコア:0)
自前のXMLパーサーのメンテで働いたつもりになるのはマジでやめてほしい.
そういうのが趣味なら余暇でやってくれよと.
Re:あれ? (スコア:5, おもしろおかしい)
GPLに「汚染」されたなんていうんですよね。
GNUのソース盗んどいて、仕事ができたことにするのはマジでやめてほしい
そういうのが仕事ならヤクザやってくれよと
Re:あれ? (スコア:1)
Re:あれ? (スコア:1)
プログラミングにおけるカルトなのでは?
Re: (スコア:0)
再利用カルト と すべて自前カルト
で,最悪がコードを書かずにどのカルトが最悪か延々議論すること.
さ, 今日から仕事仕事.
Re:あれ? (スコア:3, おもしろおかしい)
たしか「NIH症候群」とか言われてますよね。
"Not Invented Here"の頭文字を取ったもの。
古い世代のプログラマーほど罹患しやすい病気だそうで…。
clausemitz
Re:あれ? (スコア:1)
> 自前のXMLパーサーのメンテで働いたつもりになるのはマジでやめてほしい
xercesを使ったときは二週間かかって全体の一割くらいしか理解出来なかったけど、
“オレSAX”を作ったときは、三日くらいかかって、ほぼ完璧に動作した。
車輪の再発名だし、最初は不安定化もしれないけど、自分自身が書いたコードだからこそデバッグしやすい。
ヒトの作ったライブラリを習得して、生半可な理解で使ってるような暇があったら、自分で書いた方が速い/早い/正確ってことはある。
私に言わせれば、XMLをパースすることが目的なのであって、既存ライブラリを利用することが目的なのではないと思ったりする。
既存ライブラリを利用するのは「手段」、オレ様ライブラリを自作するのも「手段」
どちらの手段を採用するかは、時と場合による。「自前のXMLパーサーのメンテ」の方が後々楽だと判断すれば、躊躇せずにそうする。再利用が常に最適解だとは限らない。
Re:あれ? (スコア:1, 興味深い)
XMLパーサなら1時間で作れる。
ってよりは字句解析及び構文解析ライブラリ
ライブラリって実績のあるライブラリを利用することで質を高めるって面もあると思うけれど、
ライブラリを理解することでライブラリを作った人の思想を理解すると言う面もあると思うんだ。
それは自分のプログラムの幅を広げることでもあるし、
上記のboost::spiritは特にその発想に驚愕したライブラリだったりして、
そのライブラリコードに感銘を受けることはやっぱり大事だとおもうんだ。
Re:あれ? (スコア:1)
↓ごめん、そうは思えなかった…
「車輪の再発名」「最初は不安定化も」
Re:あれ? (スコア:2, 参考になる)
・自作のライブラリは実装に時間がかかるが、楽しいことが多い。
・他人のライブラリはまあまあ安定しているが、万一問題があったときに対処が難しい。融通が利かないことが多い。
・自作のライブラリは最初は不安定かもしれないが、その場ですぐデバッグしやすい。用途に応じて柔軟に対処できる。
しばしば、頭ごなしに車輪の再発名を非難したがる人がいますが、私は、車輪の再発名は、エンジニアが成長する糧としても、実益の面でも、有効(な場合もある)と言いたいだけです。
Re:あれ? (スコア:1)
訂正しなかったのは私の責任ですが、間違えたのはATOKのせいです(笑
> 「自分のライブラリ」を「他人がメンテする」、ってあたりのところを意識的にか無意識的にかスルーしてるのも気になるところ。
ライブラリに限らず、プログラミングに限らず、あらゆる業務の「引き継ぎ」に関して、一般論として言えることだと思います。
ちゃんとドキュメントを書いて説明するのは、作者の責任なのは理解しているつもり。
ただ、既存ライブラリを採用したとしても、後任者もそれを習得するコストとメンテナンスするリスクを負わなければならないわけで、「既存ライブラリを採用したら解決!」という簡単な話ではありません、時と場合とライブラリの種類によるでしょう。
Re:あれ? (スコア:1)
利点/弱点を深く理解するには必要な事。
>再発名
まあ、非難されるだろうな。
the.ACount
Re:あれ? (スコア:1, すばらしい洞察)
いや, あんただけがそのコードのメンテを永遠に担当するならおおいに結構,ご自由にどうぞ(納期だけはまもってね)なんですが,
他人が書いたオレ様ライブラリを解釈してメンテ・拡張させられるチームの身にもなりなさいって.
そのプロジェクトが自分の手を離れた後も, その俺様XMLパーサーなりの機能拡張とドキュメント化を黙々と
勤務時間外にやってくれるならいいんですけどね.
新たな機能を実装するためには, 往々にして他人が結局汎用ライブラリに差し替える作業を強いられると思うのよ.
パーサー程度ならまだしも, スピード(メモリー)クリティカルな操作だと規模がおっきくなると俺様ライブラリは
使いもんにならんということもままあるでしょう.
(自分もすべては自分で作りたい派だし, 学生時代は3Dライブラリとか数値計算ライブラリを自分で作ってチューニングして
やれフリーなlapackのへぼ実装よりだんぜん速いぜとかやってましたが, それは趣味であって, チームの仕事じゃない.)
それでも俺の方が汎用ライブラリよりよっぽど洗練されたインターフェースのものを短時間で書けるというのであれば,
あなたは独立ベンダーにでもなれば大儲けできると思うよ.
Re:あれ? (スコア:1)
暗号化通信しようと思ったら、さすがに私の手には負えないから、OpenSSLなりWinInetなりを使います。
でも、XMLパーサ程度だったら、所詮文字列処理とコード変換くらいだから、自前の方がやりやすい。
とか、あくまでも、必要に応じて、っていう話。
Re:あれ? (スコア:1, すばらしい洞察)
>> 他人が書いたオレ様ライブラリを解釈してメンテ・拡張させられるチームの身にもなりなさいって.
で言ってるのは、「たとえばあなたが、プロジェクトの元メンバが書いたオレ様XMLパーサとそれを使っているコードを渡されたらどう感じるか」って話だと思うが、それでも
> でも、XMLパーサ程度だったら、所詮文字列処理とコード変換くらいだから、自前の方がやりやすい。
って言えるのかな?
自前で作るなら、自分には確かに分かりやすいのは当然。しかし、 オレ様コードは、書く人は一人でその人にとっては最高なだけで、使う人・メンテする人にとっても最高とはならないんですよ。googleで検索するだけでトラブルシューティングやリファレンス検索、サンプルコード参照できる既存ライブラリに比べ、オレ様ライブラリは作者がそばにいない限りは足枷にしかなりません。もっとも、既存ライブラリがマイナーでメンテされてるかも良く分からないとか、コードが若くてバグが大量にありそうな場合はオレ様ライブラリでも良いとは思いますが。
なので、チーム開発ならメジャーな既存ライブラリがある場合そっちを使うべきです(再実装することが手に負えるか手に負えないかじゃなくて、あくまで既存ライブラリがメジャーかそうでないかで使い分けるべき)。
# などと言いつつ、私も他人の作ったオレ様ライブラリ(一応社内標準)を拒否して自分作ったオレ様ライブラリで置き換えることが良くあるのですが…
## だって他人の作ったオレ様ライブラリのデバッグなんてご免やし。
Re:あれ? (スコア:1)
Re:あれ? (スコア:1)
フリーにしろそうでないにしろ、既製品の有名なライブラリは多機能すぎることが多い。
リヤカーで十分なのに、大型トラックを引っ張り出してくることもあるまい。
Re:あれ? (スコア:1)
よくよく考えて欲しい所ですよね。
『みんなが使ってるライブラリなんだから、正しい動作をするだろう。出力は正しいのだろう』
などという妙な断定で使うなら、問題が発生したときは泥沼化すること請け合いです。
ライブラリってのは自分でも作れるけど同じもの書くなら出来合いのもの使ったほうが色々手間が省けるよねっってのが本来の使い方ではないかと。
なので使い方理解するのに一週間かかるようなライブラリなら、3日で作れる俺コードで正解だと思いますけどね。私は。
まぁ、もちろんデバッグ込みでの話ですが。(3日で作ってデバッグに10日では本末転倒
# いっぺん自分で書くとライブラリの有難味もまたひとしおだしね。
Re: (スコア:0)
自分のコードが完璧であって、自分のコード以外で「汚染」されたものは嫌がる。
ただ、なぜかあまり人の仕事を読まない人もいて、そのために自分のコードへの自信にかかわらず再利用しようという発想自体が無い人もいる気はする。
Re:あれ? (スコア:1)
それって、どうなのかな、とか思うことも多いです。確かに、バグとかあったら恐いのはわかるんですが、開発の労力を考えると、既存のライブラリや人のコードを使う方がはるかにいい方法だとは思うんですけどね。
Re:あれ? (スコア:1)
用意するなら用意するで、本来はそれをどのように用意するか考えておくべきなのに、当初の予算にもスケジュールにも組み込まれていない
簡単に見えるものほど当たり前のものを見落としがちでデバッグが難しい
そして、結局はどこかで拾ったコードを使う事になる
ああ恐ろしい……デスマーチの足音が聞こえる……
Re: (スコア:0)
自分たちの内部での瑕疵なら仕方ないと思えても、顔も性格も知らない、せいぜい名前くらいでしかも本名かもわからない、そんな馬の骨の作ったものに自身の責任をゆだねられるほど、人は強くないでしょ。
一度でもライブラリのバグで苦しんだり、責任者の立場になればわかるよ。
Re:あれ? (スコア:1)
だから、欠陥の多いプロプライエタリ製品を組込んでいる限り、カーゴ・カルトを信奉
するのがいちばん安上がりで、事実上これしかない方法になる。
オープンソース製品だけを組込んでいる場合にも、コストを考えれば第一選択はカーゴ・
カルトになる。欠陥に突き当たれば、大抵はちょっと回避するのが手っ取り早い。
ソースが弄れるというのは、本当に困ったときはカーゴ・カルト以外の手段も使えるぞ、
という最後の精神的拠り所となるに過ぎない。
Re:あれ? (スコア:1, 興味深い)
流れを若干無視しますが、私の場合は簡単なことをしたいだけなのに、パワフルなライブラリを嫌がって自分で書くことはあります。確かにライブラリはよくできているものがたくさんありますが、そのために依存関係が厄介だとか、パラメータが多いとか困った点もあります。
また、私がよくやることですが、プロジェクトの中でルーチンを作り、せっかくだからライブラリとして他人に使ってもらおうと欲をかいて、そのためには汎用性があって・・・とかやっていくと、プロジェクトのためにライブラリを作っていたのが、ライブラリを作ることが目的化してしまうことがあります。そうして作ったライブラリは思いの外使い勝手が悪く、再利用しないことも結構あります。
まあつまりダメプログラマってことですけど。
Re: (スコア:0)
が実は
- 自前によって得られるのが 「快楽」 or 「苦痛」
- 再利用によって得られるのが 「快楽」 or 「苦痛」
というマトリックスが存在して、対極の人がいるということは、容易には
理解されない。でも本当は苦痛だと感じる者にとっては、耐えがたいほどの苦痛なんだ。
プロなら再利用したことも自前で作ったこともあるだろう、発想自体が無いわけじゃない。
Re:あれ? (スコア:3, 興味深い)
再利用にかかる(調査・改造)工数が新規作成にかかる工数よりも必ずしも小さいとは言えない. それを承知で再利用を強行するのは賭けだったり, 苦痛を通り越して破滅をもたらすパンドラの箱だったりすることも少なくない. だとすれば, たとえ「苦」であることが分かっていても, その限度が見切れる方を選ぶというのもプロとしては合理的なんですよね. その点, 目処がつかなければ捨てることができるアマチュアとは判断基準が異なるわけで.
もう一つは, 自分が作ったプログラムを自分で再利用する場合と, 他人の再利用を考慮した場合とではドキュメントを含めた製造コストが大幅に異なることでしょうか. 将来の定かではない多くの「楽」のために再利用できるようにしようとすると, 今の「苦」あるいはコストが少なくとも確実に増えるというのは, 再利用のモチベーションを落とすための強力な要因になると思います. このあたりは多分Easy Cultの一流派とも言えそうですけど.
主張自体は悪くなくても (スコア:1)
するのはちょっとね…。
一つ目の問題は学習の障害になり、二つ目の問題は人間関係の研磨剤になり、三つ目は信用の無駄遣いに繋がる。
久し振りに (スコア:1)
芸術カルト (スコア:1)
今のところ効果的な治療方法は知られていません。
こんな感じなのかな? (スコア:0, おもしろおかしい)
* 最適化カルト→職人タイプ(村の中に埋もれる)
* 簡単カルト→軟弱サラリーマンタイプ(何処の村に行っても歩兵)
* 高速カルト→愚直な兵隊タイプ(彼らには速やかなる名誉の戦死を)
* 不確実性カルト→科学者タイプ(理論で天才になるか?それとも不遇な愚か者か?)
* 完璧カルト→芸術家タイプ(ゲームタイトルが狙い目)
* カーゴ・カルト→卑屈な宦官タイプ(抹殺するか?黙らせながら仕事をさせるか?)
#みんな、ITコンサルタントと縁を切ろうよ♪
---
TaddyHatty - always @( posedge ↑ or negedge ↓ )
Re: (スコア:0)
Re:こんな感じなのかな? (スコア:1)
馬鹿野郎!
石橋は叩いて壊して鉄橋を架ける仕事を作るんだよ!
Re:こんな感じなのかな? (スコア:1)
#それがカーゴというもので。
Re:こんな感じなのかな? (スコア:1)
これを使えば崖を人が渡れるんだぜ?
カーゴカルト (スコア:0)
熱くなりすぎて、ポトラッチに至る過程のそっくりかもしれん…。
カルトって暗記に頼って思考停止ってことでは (スコア:0)
・ほげプロジェクトではウォータフォールで出来たからウォーターフォール以外は役に立たない
・多重継承は絶対禁止
・オブジェクトはモノであって全てがオブジェクトで表現できる
とか
Re:カルトって暗記に頼って思考停止ってことでは (スコア:1)
元ブログにも指摘するコメントがあったけど、
一人の人が、複数の「カルト」に属するケースも多いと思います。
特に「Ease Cult」は、他のカルトとの親和性が高そうな気が……
一つの長所を得るために、多大な努力を要するのと比べ、
数多の悪癖を身に付けるのは、非常に容易ですからね。
// 私はどうだって? そりゃ、もちろん「Cargo Cult」の熱心な信者です。
// 全てのステートメントには、日本語訳のコメントがあるべきです。
// そうすれば、ある日突然、使用言語が「ひまわり」や「なでしこ」に
// 切り替わった場合、速やかに移行できるではないですか。
Re:カルトって暗記に頼って思考停止ってことでは (スコア:1)
個人的には間違ったコメントならないほうがまし―と思ってますが。
一発完動教 (スコア:0)
最も重要な物が抜けている (スコア:0)
Re:最も重要な物が抜けている (スコア:1)
とりあえず動くように直すけど誰がいつ直したのかわからないように偽装する。
--
なんだうごくじゃんで誤魔化す@のりたま(←さいてー)
Re: (スコア:0)
・どこにも所属しておりませんカルト
だろうが
あるいは、自分だけは違うぞカルトと言い換えてもいいと思うが。
Re: (スコア:0)
Re:最も重要な物が抜けている (スコア:1, すばらしい洞察)
Re:最も重要な物が抜けている (スコア:1)