パスワードを忘れた? アカウント作成
13523005 story
プログラミング

プログラムの写経、もしくはカーゴ・カルト・プログラミングを抜け出すきっかけは? 105

ストーリー by hylom
ほしい物はコピペで作れなかったから 部門より
あるAnonymous Coward 曰く、

スラド読者の皆さんは、プログラムの勉強の為に、教科書や参考書通りにプログラムを入力する「写経」の様な行為や、カーゴ・カルト・プログラミングの様な事を経験した事があると思う。

その段階を抜け出したきっかけは何だろうか?

その処理が何を意味しているかを深く考えず、不必要であるものも含めてとりあえず動いているコードをコピペするようなプログラミングスタイルを「カーゴ・カルト・プログラミング」などと呼ぶそうだ。

カーゴ・カルト」とは、文明レベルに差のある人々が交流したとき、文明の遅れたほうの人たちが進んだ方の人たちの所有物を「神が作った物」と考え、その中身ではなく外見を模したものを作り出す行為。コードを理解できずにコピーすることからこういった名前が付けられたそうだ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 多分、習い始めた(FORTRAN)1-2か月くらいは、教科書そのままを売ってみたんだと思うんだけど。

  • by Anonymous Coward on 2018年02月09日 15時05分 (#3358815)

    やりたいことを実行させるのに必要なアルゴリズムと機能を実現するために必要な関数群を思い浮かべて設計できるようになるかどうかが分かれ目だろう。
    何をどう実行させたらいいかわからないうちは、内容なんて理解できずにコピペしているなんてことが新人には多い。
    内容を理解していないから、問題が発生しても対処できなかったりする。

  • by Anonymous Coward on 2018年02月09日 15時23分 (#3358825)

    > ほしい物はコピペで作れなかったから

    多分カーゴ・カルトから抜け出さない/抜け出せない人達って、その「ほしい物自体」を想像できない/しない人たちなんじゃないかなと思った。

    何年か前に新人が何かの時に言った「教えてもらってないから考えませんでした」って言葉に衝撃を受けた記憶がよみがえりました。考える能力の不足問題?

    • Re:良部門名 (スコア:3, すばらしい洞察)

      by Anonymous Coward on 2018年02月09日 15時36分 (#3358834)

      考える能力の不足では無く、知の飢餓感の不足だとおもう

      親コメント
      • by Anonymous Coward

        あー、なるほど。確かにそれは大きいかも。

  • 全ての技術は模倣から始まる。最初の一歩は良いものを模倣するのが最善です。
    模倣したものを少しずつカスタマイズしていくうちに技術が身につく。
    が、技術が身についただけでは職人として一人前になったに過ぎない。
    オリジナリティのあるものを作れるかどうかは別の問題。

    # 最初に変なものを模倣するとまずい…

    • by Anonymous Coward

      会社の新入社員教育でEnterprise Hello Worldを叩き込まれたのが俺の人生の分岐点だった

  • 写経から抜け出したのは、自分が思っていることをやらせるにはパソコン側にも理解出来るように書かないとならないってのを明確に認識したあたりですかね。
    「int型?float型?なにそれ、同じ数字なんだからそれくらい同じように処理してよ」なんて思ってた時期もありました。

    # 趣味レベルでしか書いてないので、本職の人からしたらまだまだ全然

  • 「カーゴ・カルト」とは、文明レベルに差のある人々が交流したとき、文明の遅れたほうの人たちが進んだ方の人たちの所有物を「神が作った物」と考え、その中身ではなく外見を模したものを作り出す行為。コードを理解できずにコピーすることからこういった名前が付けられたそうだ。

    どこぞのサーバーで動かしてたスクリプトがこちらのサーバーで動かないのは、こちらのディスクパス構成がおかしくなっているのが原因。
    コマンドを置いているパスを(以前どこかで使ってたサーバーと同じものに)「直して」くれ。
    という呪いみたいなリクエストは年に何回か飛んできます。

    そのスクリプトの中のコマンドパス指定を今使っているサーバー環境に合わせればいいのに。
    普通、利用環境で変わりそうなのってスクリプトの最初の方で定義してるんじゃないのかな。
    #「普通」っていうのも個人の思い込みで通用しない罠。

  • by Anonymous Coward on 2018年02月09日 18時18分 (#3358952)

    //. ◯◯可能

    //. ↑原因不明だがこの空行はかならず必要なので削除しないで!(削除するとコンパイルエラーになる)

  • 「その段階を抜け出したきっかけは何だろうか」

    プログラムはアルゴリズムありき。
    アルゴリズムを現実に動かすのがプログラミング。
    自分はプログラミング歴 38 年の初心者ですが、覚えたときからそうしています。

    サンプルプログラムは動かしても、コードをそのまま動かすなんて、怖くてできない。
    そんなことしたら、バグが有っても取れないじゃん。

    優れたコードがあっても、そこからアルゴリズムを導き出せるまでは使いません。
    …プログラムではね。
    ---
    sendmail の CF を書くときは今でも・・ゲフンゲフン。

  • by jizou (5538) on 2018年02月10日 6時50分 (#3359296) 日記

    ゲームするためにバイナリの入力はしていた気がするけど、あれは写経っていうんだろうか。

    本を読んでコマンドを覚えて、PCのあるところでプログラミングをしていたから、
    最初から写経はしてないなぁ。やりたいことがあるから、プログラミングするんだし。
    今は写経もしないんじゃないかな。
    あちこちにコードがあるから、コピペするだけ。

  • by Anonymous Coward on 2018年02月09日 15時28分 (#3358829)

    雑誌の投稿プログラムや書籍で勉強した、、、
    いわゆるナイコン族だったので、まわりのナイコン族とプログラム言語やアルゴリズムの議論だけやってた。理屈だけ頭にあるけど手を動かしたことがない状態が1年以上あったので、写経の類ややれなかった。

    わからなくても動かせる環境がすぐに手に入った人がうらやましい。

    • by abies (39185) on 2018年02月10日 8時54分 (#3359318)

      なんだこのスレの同志感は・・。

      ポケコンから入って、飽き足らず電気屋で写経するも見直しイヤだからエラーコードからたぐって修正、メジャー機種は人気で使えないからマイナー機種へ移植(if800とか・・)、という流れでした。

      しかし今考えると、電気屋も店頭にたむろする子供を相手に、よくあの状況を許してくれたもんだなぁと、感謝。

      親コメント
    • by Anonymous Coward on 2018年02月09日 16時13分 (#3358862)

      ナイコンじゃないけど、
      ベーマガのコードを一心不乱に入力→でもどこかでミスってる→ミスを見つけるために動作の把握やデバッグ技術が身に付く→気がついたらプログラミングができた
      という成長過程……

      親コメント
      • by Anonymous Coward

        オレもこれ。
        ベーマガやプロポのゲームを打ち込んで(=ある意味写経)で遊んで、改造して遊んで...を繰り返してたかな。

        仕事やら趣味でプログラムを組むようになった頃にはアセンブラ、C言語、C++だったから、
        写経よりもライブラリ使用になったんで、まぁ、ライブラリソースの中身は知らない。

        他人のプログラムでムカついたのは、その人本人が元の関数を作ったにせよ、似たコードをコピペして新しい関数
        を作ってを繰り返してたプログラムかなぁ...
        その人のソースはホントに触りたくない。修正しててイライラしてくる。
        似た関数が増えた時点で共通化関数にしろと言いたい。

    • by the.ACount (31144) on 2018年02月10日 13時36分 (#3359422)

      オレも最初は雑誌のプログラムで勉強して実物はかなり後だったけど、ナイコン族って言うとは知らんかったわー。
      理解を先が当然だから、カーゴ・カルト・プログラミングなんて想像もつかん。

      --
      the.ACount
      親コメント
    • by Anonymous Coward

      ナイコン族が長く、PCを手に入れた後もゲームメインでタイピング練習をしていませんでした。
      おかげで写経だと大変なので自然と自分で考えて (キーボードを見ながら) 打ち込むクセがつきました。

      なので今でも写経は苦手です(マテ) PC使い出してン十年なのにタイピング速度は今でも200~250文字/分程度。

    • by Anonymous Coward

      おっさんたちは全員写経からですね。
      無敵化とか連射対応とかで修正に乗り出し、その後はマイナー機種を買ってしまったゆえPC8xのプログラム移植とかをへて
      オリジナルのプログラム作成って感じですね。

      • by Anonymous Coward on 2018年02月09日 19時04分 (#3358984)

        ベーマガとかは編集部による選考が、ある種のコードレビューになってたからね。真似してもあまり問題はなかった、と思う。

        問題は中途半端にVBAとかから入ったタイプ。
        なまじ「駄目な癖」のついてる人が作ったコードを写経するところからプログラミングから入ってたりすると、「お前は余計なことするな、一生、世界と挨拶しててくれ」と言いたくなるようなクソコードを量産したりするから。
        駄目な技術の拡大再生産は恐い、マジで。

        親コメント
  • 待って (スコア:0, オフトピック)

    by Anonymous Coward on 2018年02月09日 15時29分 (#3358830)

    新しい言語に習得に写経したり
    処理を理解するのに機械学習のサンプルコードをいじくり回したり
    意味を理解するのにTDD本を別な言語で写経するんだけど普通じゃなかったの!?

    普通の人って読むだけで理解できるの。。。?

    • Re:待って (スコア:2, すばらしい洞察)

      by Anonymous Coward on 2018年02月09日 15時38分 (#3358837)

      「写して動かす」より「読んで理解したものを自分で書いて動かす」のとコストに差がなくなったら、脱初心者ってところですかね。
      最初はそれでいいと思いますよ。

      親コメント
    • by Anonymous Coward

      待って、あなたとカーゴ・カルトの一番の違いは動機だと思う。表面的な手段だけで同じタイプと思ってはダメだ。

      > 意味を理解するのに --snip-- 写経するんだけど

      この動機が無いまま、ただ写経してやり過ごす事に問題を感じるわけで、だから別の話でしょう。

  • LISPの入門書に、「再帰による階乗」が出てきたが、いくら写経しても全く理解できなかった。
    時間をかけて手習い本を読むと、↑くらいは何も考えなくても頭の中から出るようになった。

  • by Anonymous Coward on 2018年02月09日 16時06分 (#3358854)

    もう大分昔になるけど、
    This is a magic. Don't change this.
    ってコメントに書いたことならある。

    多分、コンパイラのオプティマイゼイションのバグか何かだったんだと思うけど、
    コード上は副作用とかないのに、消すと正常に動かなくなる謎のコード。

    • by Anonymous Coward

      a magicとは普通言わないよな

      • by Anonymous Coward

        「だって"a magic"以外の書き方に変えたら動かなくなったんだもん!」

        #元コメントとは別人のただのおもおか狙いのAC

      • by Anonymous Coward

        英語的には、 THE magic ですね

  • by Anonymous Coward on 2018年02月09日 16時12分 (#3358861)

    当然タイプエラーがあり動かない。
    構文に関するバグは取れるが、変数名や関数名でやらかしてたりすると、動いてるようでも結果がおかしい。
    処理や仕様を追っているうちにという感じだろうか。

  • by Anonymous Coward on 2018年02月09日 16時32分 (#3358875)

    Hello world. を書いたことがない者だけ石を投げよ。

    #何かの本に「#include 」はおまじないだと思ってくださいって書いてあったな。

  • by Anonymous Coward on 2018年02月09日 17時00分 (#3358891)

    写経はまだ初心者だからいいけどカーゴ・カルト・プログラミングはやばいな。
    意味も分からずそこら中で CoInitialize() 呼び出してるとかだよね。

typodupeerror

私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson

読み込み中...