プログラムの写経、もしくはカーゴ・カルト・プログラミングを抜け出すきっかけは? 74
ストーリー by hylom
ほしい物はコピペで作れなかったから 部門より
ほしい物はコピペで作れなかったから 部門より
あるAnonymous Coward 曰く、
スラド読者の皆さんは、プログラムの勉強の為に、教科書や参考書通りにプログラムを入力する「写経」の様な行為や、カーゴ・カルト・プログラミングの様な事を経験した事があると思う。
その段階を抜け出したきっかけは何だろうか?
その処理が何を意味しているかを深く考えず、不必要であるものも含めてとりあえず動いているコードをコピペするようなプログラミングスタイルを「カーゴ・カルト・プログラミング」などと呼ぶそうだ。
「カーゴ・カルト」とは、文明レベルに差のある人々が交流したとき、文明の遅れたほうの人たちが進んだ方の人たちの所有物を「神が作った物」と考え、その中身ではなく外見を模したものを作り出す行為。コードを理解できずにコピーすることからこういった名前が付けられたそうだ。
写経するソースなんかなかった (スコア:2)
多分、習い始めた(FORTRAN)1-2か月くらいは、教科書そのままを売ってみたんだと思うんだけど。
最初の一歩は模倣から (スコア:1)
全ての技術は模倣から始まる。最初の一歩は良いものを模倣するのが最善です。
模倣したものを少しずつカスタマイズしていくうちに技術が身につく。
が、技術が身についただけでは職人として一人前になったに過ぎない。
オリジナリティのあるものを作れるかどうかは別の問題。
# 最初に変なものを模倣するとまずい…
Re: (スコア:0)
会社の新入社員教育でEnterprise Hello Worldを叩き込まれたのが俺の人生の分岐点だった
考え方の違い (スコア:1)
写経から抜け出したのは、自分が思っていることをやらせるにはパソコン側にも理解出来るように書かないとならないってのを明確に認識したあたりですかね。
「int型?float型?なにそれ、同じ数字なんだからそれくらい同じように処理してよ」なんて思ってた時期もありました。
# 趣味レベルでしか書いてないので、本職の人からしたらまだまだ全然
スクリプトが動かない (スコア:1)
「カーゴ・カルト」とは、文明レベルに差のある人々が交流したとき、文明の遅れたほうの人たちが進んだ方の人たちの所有物を「神が作った物」と考え、その中身ではなく外見を模したものを作り出す行為。コードを理解できずにコピーすることからこういった名前が付けられたそうだ。
どこぞのサーバーで動かしてたスクリプトがこちらのサーバーで動かないのは、こちらのディスクパス構成がおかしくなっているのが原因。
コマンドを置いているパスを(以前どこかで使ってたサーバーと同じものに)「直して」くれ。
という呪いみたいなリクエストは年に何回か飛んできます。
そのスクリプトの中のコマンドパス指定を今使っているサーバー環境に合わせればいいのに。
普通、利用環境で変わりそうなのってスクリプトの最初の方で定義してるんじゃないのかな。
#「普通」っていうのも個人の思い込みで通用しない罠。
そんなこと最初からやってない (プログラムではね・・・) (スコア:1)
「その段階を抜け出したきっかけは何だろうか」
プログラムはアルゴリズムありき。
アルゴリズムを現実に動かすのがプログラミング。
自分はプログラミング歴 38 年の初心者ですが、覚えたときからそうしています。
サンプルプログラムは動かしても、コードをそのまま動かすなんて、怖くてできない。
そんなことしたら、バグが有っても取れないじゃん。
優れたコードがあっても、そこからアルゴリズムを導き出せるまでは使いません。
…プログラムではね。
---
sendmail の CF を書くときは今でも・・ゲフンゲフン。
バイナリの写経 (スコア:1)
ゲームするためにバイナリの入力はしていた気がするけど、あれは写経っていうんだろうか。
本を読んでコマンドを覚えて、PCのあるところでプログラミングをしていたから、
最初から写経はしてないなぁ。やりたいことがあるから、プログラミングするんだし。
今は写経もしないんじゃないかな。
あちこちにコードがあるから、コピペするだけ。
設計 (スコア:0)
やりたいことを実行させるのに必要なアルゴリズムと機能を実現するために必要な関数群を思い浮かべて設計できるようになるかどうかが分かれ目だろう。
何をどう実行させたらいいかわからないうちは、内容なんて理解できずにコピペしているなんてことが新人には多い。
内容を理解していないから、問題が発生しても対処できなかったりする。
Re: (スコア:0)
今だとライブラリやプラグインを探して使うのが主流になってるから
もうそれもアリと思い始めてる
良部門名 (スコア:0)
> ほしい物はコピペで作れなかったから
多分カーゴ・カルトから抜け出さない/抜け出せない人達って、その「ほしい物自体」を想像できない/しない人たちなんじゃないかなと思った。
何年か前に新人が何かの時に言った「教えてもらってないから考えませんでした」って言葉に衝撃を受けた記憶がよみがえりました。考える能力の不足問題?
Re:良部門名 (スコア:2, すばらしい洞察)
考える能力の不足では無く、知の飢餓感の不足だとおもう
Re: (スコア:0)
あー、なるほど。確かにそれは大きいかも。
ない (スコア:0)
雑誌の投稿プログラムや書籍で勉強した、、、
いわゆるナイコン族だったので、まわりのナイコン族とプログラム言語やアルゴリズムの議論だけやってた。理屈だけ頭にあるけど手を動かしたことがない状態が1年以上あったので、写経の類ややれなかった。
わからなくても動かせる環境がすぐに手に入った人がうらやましい。
Re:ない (スコア:2)
なんだこのスレの同志感は・・。
ポケコンから入って、飽き足らず電気屋で写経するも見直しイヤだからエラーコードからたぐって修正、メジャー機種は人気で使えないからマイナー機種へ移植(if800とか・・)、という流れでした。
しかし今考えると、電気屋も店頭にたむろする子供を相手に、よくあの状況を許してくれたもんだなぁと、感謝。
Re:ない (スコア:1)
ナイコンじゃないけど、
ベーマガのコードを一心不乱に入力→でもどこかでミスってる→ミスを見つけるために動作の把握やデバッグ技術が身に付く→気がついたらプログラミングができた
という成長過程……
Re: (スコア:0)
オレもこれ。
ベーマガやプロポのゲームを打ち込んで(=ある意味写経)で遊んで、改造して遊んで...を繰り返してたかな。
仕事やら趣味でプログラムを組むようになった頃にはアセンブラ、C言語、C++だったから、
写経よりもライブラリ使用になったんで、まぁ、ライブラリソースの中身は知らない。
他人のプログラムでムカついたのは、その人本人が元の関数を作ったにせよ、似たコードをコピペして新しい関数
を作ってを繰り返してたプログラムかなぁ...
その人のソースはホントに触りたくない。修正しててイライラしてくる。
似た関数が増えた時点で共通化関数にしろと言いたい。
Re: (スコア:0)
ナイコン族が長く、PCを手に入れた後もゲームメインでタイピング練習をしていませんでした。
おかげで写経だと大変なので自然と自分で考えて (キーボードを見ながら) 打ち込むクセがつきました。
なので今でも写経は苦手です(マテ) PC使い出してン十年なのにタイピング速度は今でも200~250文字/分程度。
Re: (スコア:0)
おっさんたちは全員写経からですね。
無敵化とか連射対応とかで修正に乗り出し、その後はマイナー機種を買ってしまったゆえPC8xのプログラム移植とかをへて
オリジナルのプログラム作成って感じですね。
Re:ない (スコア:1)
ベーマガとかは編集部による選考が、ある種のコードレビューになってたからね。真似してもあまり問題はなかった、と思う。
問題は中途半端にVBAとかから入ったタイプ。
なまじ「駄目な癖」のついてる人が作ったコードを写経するところからプログラミングから入ってたりすると、「お前は余計なことするな、一生、世界と挨拶しててくれ」と言いたくなるようなクソコードを量産したりするから。
駄目な技術の拡大再生産は恐い、マジで。
Re: (スコア:0)
ポケコン使いだったが、他機種のプログラムを打ち込んでは、動くように修正していくことばかりしてた
写経が役に立たないことは、写経を繰り返してよく分かった (スコア: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: (スコア:0)
これを真に受けてThis is THE magicと大真面目に書いてしまうのが写経プログラマー
写経は動かない (スコア:0)
当然タイプエラーがあり動かない。
構文に関するバグは取れるが、変数名や関数名でやらかしてたりすると、動いてるようでも結果がおかしい。
処理や仕様を追っているうちにという感じだろうか。
Re: (スコア:0)
classのprivateフィールドに書くべき内容を
publicに写経したやつがいたけど、動いてたよ。
こんにちは、世界 (スコア:0)
Hello world. を書いたことがない者だけ石を投げよ。
#何かの本に「#include 」はおまじないだと思ってくださいって書いてあったな。
Re: (スコア:0)
「おまじない」という説明は、私も説明できるほど理解してないので突っ込まないでというメッセージです。
Re: (スコア:0)
Cの本で「おまじない」と「void main」を書いてるの見たことあります
Re: (スコア:0)
Hello worldすっ飛ばして本を読み進めてこんなもんだろ!でやってみてあんまりまともに動かなかった時から、
ちゃんとHello worldをやるようになった。
カーゴ・カルト・プログラミング (スコア:0)
写経はまだ初心者だからいいけどカーゴ・カルト・プログラミングはやばいな。
意味も分からずそこら中で CoInitialize() 呼び出してるとかだよね。
Re: (スコア:0)
DSL系には意味が分かって挫けそうに投げ出したくなる文も有る
enabledelayedexpansion
とか
実話。 (スコア:0)
//. ◯◯可能
//. ↑原因不明だがこの空行はかならず必要なので削除しないで!(削除するとコンパイルエラーになる)
Re:実話。 (スコア:1)
能の2バイト目が"\"なので次の文字がエスケープされてるパターンですね。
Re:実話。 (スコア:1)
コードはShift_JISで記述されており,コンパイラがクソなせいで「能」のコード「0x94, 0x5C」の 0x5C がバックスラッシュと解釈され,続く改行をエスケープすることにより,変な挙動となったのでしょう。
よくあること……なのかな?
Re:実話。 (スコア:2)
出典の怪しい社内規定なら見かけた... (スコア:0)
正しく写経してくれるのなら良いのだが、
良く分からないまま受けた講習会資料の中途半端なコピペに
ググってタマタマ拾ったウソ知識を足して3で割った様な規定を作り上げて、
下々の者に押し付けた挙句、監査で吊し上げを食らうまで
半年間、自分の正当性を主張し続けた中途入社の
自称傭われ敏腕マネージャーが居たんだよ…
あの半年を返せ!!
Re:待って (スコア:2, すばらしい洞察)
「写して動かす」より「読んで理解したものを自分で書いて動かす」のとコストに差がなくなったら、脱初心者ってところですかね。
最初はそれでいいと思いますよ。
Re: (スコア:0)
え?読んで理解してるから別な言語で書くんでしょ?(TDD)
別な言語の実装理解なんかは写経って言ってんだけどっっz
ある程度の数式なら見ただけで実装できるし
アルゴリズム本もコード見なくても実装できるし言語仕様の時とかだけ写経してるんだけどもしかして俺初心者だったの?
確かにレッドコーダーにはなれてないしレイティング2000超えたぐらいだけど俺初心者やったんか。。。
ヒョエー世の中のプログラマってターゲットレベルで一人前なのかな?
Re:待って (スコア:1)
Re: (スコア:0)
見ただけで実装できるとか、アルゴリズム本もコード見なくても実装できるなんてのはね、、、
そんな低次元なことを、出来るとか出来ないなんて言い出すのだと、まわりから初心者だと思われるのは仕方がない。
Re:待って (スコア:2)
タレこみはおかしくないと思います
このコメントツリーの元コメがおかしいのだと
Re: (スコア:0)
九九の暗唱できるし、分数の割り算も本を見ないで出来るから、数学初心者ではないとか言われたら、どういうイメージで見られるのか想像できんかな。
Re: (スコア:0)
待って、あなたとカーゴ・カルトの一番の違いは動機だと思う。表面的な手段だけで同じタイプと思ってはダメだ。
> 意味を理解するのに --snip-- 写経するんだけど
この動機が無いまま、ただ写経してやり過ごす事に問題を感じるわけで、だから別の話でしょう。
Re:プログラムのロード (スコア:2)
待っててコイサンマン (スコア:1)
諸星大二郎の「ダオナン」(1979年)を読んでいたので, 正しくは「サン」というのを知っていたのだ.