
プログラムの写経、もしくはカーゴ・カルト・プログラミングを抜け出すきっかけは? 105
ストーリー by hylom
ほしい物はコピペで作れなかったから 部門より
ほしい物はコピペで作れなかったから 部門より
あるAnonymous Coward 曰く、
スラド読者の皆さんは、プログラムの勉強の為に、教科書や参考書通りにプログラムを入力する「写経」の様な行為や、カーゴ・カルト・プログラミングの様な事を経験した事があると思う。
その段階を抜け出したきっかけは何だろうか?
その処理が何を意味しているかを深く考えず、不必要であるものも含めてとりあえず動いているコードをコピペするようなプログラミングスタイルを「カーゴ・カルト・プログラミング」などと呼ぶそうだ。
「カーゴ・カルト」とは、文明レベルに差のある人々が交流したとき、文明の遅れたほうの人たちが進んだ方の人たちの所有物を「神が作った物」と考え、その中身ではなく外見を模したものを作り出す行為。コードを理解できずにコピーすることからこういった名前が付けられたそうだ。
写経するソースなんかなかった (スコア:2)
多分、習い始めた(FORTRAN)1-2か月くらいは、教科書そのままを売ってみたんだと思うんだけど。
Re:写経するソースなんかなかった (スコア:1)
三ヶ月目からは教科書を改変して売ったのか?
オープンソースな教科書だったのかな?
設計 (スコア:1)
やりたいことを実行させるのに必要なアルゴリズムと機能を実現するために必要な関数群を思い浮かべて設計できるようになるかどうかが分かれ目だろう。
何をどう実行させたらいいかわからないうちは、内容なんて理解できずにコピペしているなんてことが新人には多い。
内容を理解していないから、問題が発生しても対処できなかったりする。
Re:設計 (スコア:1)
ごめんなさい
率直に言ってあなた新人と同等、または年数を重ねてなおそれでいいと経験則を得てしまっている点では新人以下だと思いますよ
カルトカーゴは尊崇の意味を含みますが、あなたのやり口はカルトカーゴですらない「理解できないけど問題なさそうだから(問題の有無は中身を理解していないから判断できないよね)つかっちゃっていまんとこ問題ないわ~」ってだけ。
何屋さんかは知りませんが・・・まあ、先人の知識を(理解なく無条件に)尊重するのは美徳かもしれませんが、技術屋か科学屋だったら(ごめんねきつい言葉で)あんたバカだよ。。。
良部門名 (スコア:1)
> ほしい物はコピペで作れなかったから
多分カーゴ・カルトから抜け出さない/抜け出せない人達って、その「ほしい物自体」を想像できない/しない人たちなんじゃないかなと思った。
何年か前に新人が何かの時に言った「教えてもらってないから考えませんでした」って言葉に衝撃を受けた記憶がよみがえりました。考える能力の不足問題?
Re:良部門名 (スコア:3, すばらしい洞察)
考える能力の不足では無く、知の飢餓感の不足だとおもう
Re: (スコア:0)
あー、なるほど。確かにそれは大きいかも。
最初の一歩は模倣から (スコア:1)
全ての技術は模倣から始まる。最初の一歩は良いものを模倣するのが最善です。
模倣したものを少しずつカスタマイズしていくうちに技術が身につく。
が、技術が身についただけでは職人として一人前になったに過ぎない。
オリジナリティのあるものを作れるかどうかは別の問題。
# 最初に変なものを模倣するとまずい…
Re: (スコア:0)
会社の新入社員教育でEnterprise Hello Worldを叩き込まれたのが俺の人生の分岐点だった
考え方の違い (スコア:1)
写経から抜け出したのは、自分が思っていることをやらせるにはパソコン側にも理解出来るように書かないとならないってのを明確に認識したあたりですかね。
「int型?float型?なにそれ、同じ数字なんだからそれくらい同じように処理してよ」なんて思ってた時期もありました。
# 趣味レベルでしか書いてないので、本職の人からしたらまだまだ全然
Re:考え方の違い (スコア:1)
私はアセンブラから入った口なのでこのコメントを書いた方とは正反対で
まず演算性能の制約がありきだと思う者ですが、高級言語から入った方なら
計算したい事柄にCPUその他の制約に縛られたくないと思う気持ちも
よくわかる気がします
BCD演算のみでやれ!->おせーよ
わかったよ、誤差のない浮動小数点演算でいいよ->ねーよ
個のせめぎあいは当面止むことはなさそうです
スクリプトが動かない (スコア:1)
「カーゴ・カルト」とは、文明レベルに差のある人々が交流したとき、文明の遅れたほうの人たちが進んだ方の人たちの所有物を「神が作った物」と考え、その中身ではなく外見を模したものを作り出す行為。コードを理解できずにコピーすることからこういった名前が付けられたそうだ。
どこぞのサーバーで動かしてたスクリプトがこちらのサーバーで動かないのは、こちらのディスクパス構成がおかしくなっているのが原因。
コマンドを置いているパスを(以前どこかで使ってたサーバーと同じものに)「直して」くれ。
という呪いみたいなリクエストは年に何回か飛んできます。
そのスクリプトの中のコマンドパス指定を今使っているサーバー環境に合わせればいいのに。
普通、利用環境で変わりそうなのってスクリプトの最初の方で定義してるんじゃないのかな。
#「普通」っていうのも個人の思い込みで通用しない罠。
実話。 (スコア:1)
//. ◯◯可能
//. ↑原因不明だがこの空行はかならず必要なので削除しないで!(削除するとコンパイルエラーになる)
Re:実話。 (スコア:2)
能の2バイト目が"\"なので次の文字がエスケープされてるパターンですね。
Re:実話。 (スコア:2)
コードはShift_JISで記述されており,コンパイラがクソなせいで「能」のコード「0x94, 0x5C」の 0x5C がバックスラッシュと解釈され,続く改行をエスケープすることにより,変な挙動となったのでしょう。
よくあること……なのかな?
Re:実話。 (スコア:2)
そんなこと最初からやってない (プログラムではね・・・) (スコア:1)
「その段階を抜け出したきっかけは何だろうか」
プログラムはアルゴリズムありき。
アルゴリズムを現実に動かすのがプログラミング。
自分はプログラミング歴 38 年の初心者ですが、覚えたときからそうしています。
サンプルプログラムは動かしても、コードをそのまま動かすなんて、怖くてできない。
そんなことしたら、バグが有っても取れないじゃん。
優れたコードがあっても、そこからアルゴリズムを導き出せるまでは使いません。
…プログラムではね。
---
sendmail の CF を書くときは今でも・・ゲフンゲフン。
バイナリの写経 (スコア:1)
ゲームするためにバイナリの入力はしていた気がするけど、あれは写経っていうんだろうか。
本を読んでコマンドを覚えて、PCのあるところでプログラミングをしていたから、
最初から写経はしてないなぁ。やりたいことがあるから、プログラミングするんだし。
今は写経もしないんじゃないかな。
あちこちにコードがあるから、コピペするだけ。
ない (スコア:0)
雑誌の投稿プログラムや書籍で勉強した、、、
いわゆるナイコン族だったので、まわりのナイコン族とプログラム言語やアルゴリズムの議論だけやってた。理屈だけ頭にあるけど手を動かしたことがない状態が1年以上あったので、写経の類ややれなかった。
わからなくても動かせる環境がすぐに手に入った人がうらやましい。
Re:ない (スコア:3)
なんだこのスレの同志感は・・。
ポケコンから入って、飽き足らず電気屋で写経するも見直しイヤだからエラーコードからたぐって修正、メジャー機種は人気で使えないからマイナー機種へ移植(if800とか・・)、という流れでした。
しかし今考えると、電気屋も店頭にたむろする子供を相手に、よくあの状況を許してくれたもんだなぁと、感謝。
Re:ない (スコア:1)
ナイコンじゃないけど、
ベーマガのコードを一心不乱に入力→でもどこかでミスってる→ミスを見つけるために動作の把握やデバッグ技術が身に付く→気がついたらプログラミングができた
という成長過程……
Re: (スコア:0)
オレもこれ。
ベーマガやプロポのゲームを打ち込んで(=ある意味写経)で遊んで、改造して遊んで...を繰り返してたかな。
仕事やら趣味でプログラムを組むようになった頃にはアセンブラ、C言語、C++だったから、
写経よりもライブラリ使用になったんで、まぁ、ライブラリソースの中身は知らない。
他人のプログラムでムカついたのは、その人本人が元の関数を作ったにせよ、似たコードをコピペして新しい関数
を作ってを繰り返してたプログラムかなぁ...
その人のソースはホントに触りたくない。修正しててイライラしてくる。
似た関数が増えた時点で共通化関数にしろと言いたい。
Re:ない (スコア:1)
オレも最初は雑誌のプログラムで勉強して実物はかなり後だったけど、ナイコン族って言うとは知らんかったわー。
理解を先が当然だから、カーゴ・カルト・プログラミングなんて想像もつかん。
the.ACount
Re: (スコア:0)
ナイコン族が長く、PCを手に入れた後もゲームメインでタイピング練習をしていませんでした。
おかげで写経だと大変なので自然と自分で考えて (キーボードを見ながら) 打ち込むクセがつきました。
なので今でも写経は苦手です(マテ) PC使い出してン十年なのにタイピング速度は今でも200~250文字/分程度。
Re: (スコア:0)
おっさんたちは全員写経からですね。
無敵化とか連射対応とかで修正に乗り出し、その後はマイナー機種を買ってしまったゆえPC8xのプログラム移植とかをへて
オリジナルのプログラム作成って感じですね。
Re:ない (スコア:1)
ベーマガとかは編集部による選考が、ある種のコードレビューになってたからね。真似してもあまり問題はなかった、と思う。
問題は中途半端にVBAとかから入ったタイプ。
なまじ「駄目な癖」のついてる人が作ったコードを写経するところからプログラミングから入ってたりすると、「お前は余計なことするな、一生、世界と挨拶しててくれ」と言いたくなるようなクソコードを量産したりするから。
駄目な技術の拡大再生産は恐い、マジで。
待って (スコア:0, オフトピック)
新しい言語に習得に写経したり
処理を理解するのに機械学習のサンプルコードをいじくり回したり
意味を理解するのにTDD本を別な言語で写経するんだけど普通じゃなかったの!?
普通の人って読むだけで理解できるの。。。?
Re:待って (スコア:2, すばらしい洞察)
「写して動かす」より「読んで理解したものを自分で書いて動かす」のとコストに差がなくなったら、脱初心者ってところですかね。
最初はそれでいいと思いますよ。
Re:待って (スコア:1)
Re: (スコア:0)
見ただけで実装できるとか、アルゴリズム本もコード見なくても実装できるなんてのはね、、、
そんな低次元なことを、出来るとか出来ないなんて言い出すのだと、まわりから初心者だと思われるのは仕方がない。
Re:待って (スコア:2)
タレこみはおかしくないと思います
このコメントツリーの元コメがおかしいのだと
Re: (スコア:0)
待って、あなたとカーゴ・カルトの一番の違いは動機だと思う。表面的な手段だけで同じタイプと思ってはダメだ。
> 意味を理解するのに --snip-- 写経するんだけど
この動機が無いまま、ただ写経してやり過ごす事に問題を感じるわけで、だから別の話でしょう。
写経が役に立たないことは、写経を繰り返してよく分かった (スコア:0)
LISPの入門書に、「再帰による階乗」が出てきたが、いくら写経しても全く理解できなかった。
時間をかけて手習い本を読むと、↑くらいは何も考えなくても頭の中から出るようになった。
Re:写経が役に立たないことは、写経を繰り返してよく分かった (スコア:1)
再帰が理解できない人って, 漸化式とか見たことないのかな?
# 最初に再帰を使える言語処理系に触ったのってBASIC09だった気がする
Re: (スコア:0)
多分Fortran系の繰り返しでプログラミングを学んだから理解できないんだ
昔のMITはSchemeをはじめに教えていたし
まほー (スコア:0)
もう大分昔になるけど、
This is a magic. Don't change this.
ってコメントに書いたことならある。
多分、コンパイラのオプティマイゼイションのバグか何かだったんだと思うけど、
コード上は副作用とかないのに、消すと正常に動かなくなる謎のコード。
Re: (スコア:0)
a magicとは普通言わないよな
Re: (スコア:0)
「だって"a magic"以外の書き方に変えたら動かなくなったんだもん!」
#元コメントとは別人のただのおもおか狙いのAC
Re: (スコア:0)
英語的には、 THE magic ですね
Re:まほー (スコア:1)
これを真に受けてThis is THE magicと大真面目に書いてしまうのが写経プログラマー
写経は動かない (スコア:0)
当然タイプエラーがあり動かない。
構文に関するバグは取れるが、変数名や関数名でやらかしてたりすると、動いてるようでも結果がおかしい。
処理や仕様を追っているうちにという感じだろうか。
Re:写経は動かない (スコア:1)
最初から変数名は一度だけタイプして後はコピペしかしない事を徹底してたから、そうしない人を見て「何でだろ?」と不思議に思ってたな。
the.ACount
こんにちは、世界 (スコア:0)
Hello world. を書いたことがない者だけ石を投げよ。
#何かの本に「#include 」はおまじないだと思ってくださいって書いてあったな。
Re:こんにちは、世界 (スコア:1)
Hello world. を書いたことないなー。
機械語から入ってFortanやってからCに来て、おー機械語と同じ間接アドレスがポインタの名で使える!なんて感激したけど。
the.ACount
Re:こんにちは、世界 (スコア:1)
USENETの comp.* の定期投稿だったかwebのどっかに
二桁か三桁の言語で紹介してたものがあったから自分で書いてみる
というモチベーションはなかった。
カーゴ・カルト・プログラミング (スコア:0)
写経はまだ初心者だからいいけどカーゴ・カルト・プログラミングはやばいな。
意味も分からずそこら中で CoInitialize() 呼び出してるとかだよね。
Re:プログラムのロード (スコア:2)
待っててコイサンマン (スコア:1)
諸星大二郎の「ダオナン」(1979年)を読んでいたので, 正しくは「サン」というのを知っていたのだ.
Re:ライブラリ使うのも大して変わらんような (スコア:1)
ライブラリまでどうこう言い出したら、他人の成果物のコンパイラや実行環境、OSを使うのも駄目じゃないの?
Re:別に思弁的に思いついたことでは無い (スコア:1)
何でリーダーの生産性が嘘かというと、
・第一原理が無い。
・無い以上、その場限りの判断はまったく根拠なし。
(だけでなく、時に致命的な問題をも引き起こす。
とくにプロジェクト終盤に完全な明後日の発言を吐き、
リーダーの為、それが尊重され、悲惨なことになる。)
・そうならないために、上位部署に問い合わせたり、
業務用SNSで全員に問い合わせたりすることになるが、
それでは生産性が並みになる。だから嘘。
・しかも判断を下す必要の元となる問題を、提起する側に無い、
必要十分な質問の文案を作れないばかりか、故意/悪意にも
見えるねじ曲がった文案になり、居ない方がまし。
だからです。