続・写経なんてやめとけ

  • ところで、小崎さんは自分の学び方を「写経」と読んでいて、僕もこの用語は自然に理解できるのですが、公開後のTwitterの反応を見ていると「写経と呼ぶことが嫌」もしくは「仏教での写経の印象で、内容を勘違いしている」という事例がいくつも見つかりました。
  • ですが、まあそれでも誤解する人が何人もいるということは、いわば「関数名が関数の処理の内容にあってない」的状態なわけです。

誤読というか,写経本来の意味も,文字から類推される意味も「複製」だからなあ.

写経
経文を書写すること.また,書き写した経文.仏典の保存や仏典書写による功徳(くどく)などを目的とする
デジタル大辞泉

写経

仏典の経典の文を書写すること.経典は初め暗唱によって伝えられたようであるが,次第に書写されるようになった.(中略)
仏教の典籍が中国に移入され,翻訳されると,経典の書写は極めて盛んとなり,いわゆる一切経の書写も行われたが,印刷術の発達と共に減少した(中略)
その後写経の習慣は衰微したが,なお写経の功徳に対する信仰の元に祖先の供養,自己の福利などを願って行われ,今日も行われている.
(ブリタニカ国際大百科事典)

写経(というか写本)は要するに印刷機の発明以前に行われていた「写経=(経典の)人力複写」という認識で良いと思う.*1

コピー作業以外のものが主体となる学習法を「写経」と呼んでるとするなら,むしろそっちの方が誤用だろう.「コードを弄り倒す学習法」にこんな用語を使って疑問に思わない人は,プログラマーとしてのセンスに欠けていると断言して良いと思う.copyメソッドの中でcopy以外の作業はすべきじゃ無い.

例えば「100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊」の70ページでは「まず写経することから始めた」というエピソードが紹介されています。また「改訂新版 コンピュータの名著・古典100冊」の99ページでは「技術書の内容にそって深い理解を得ることができる」とおすすめされています。

100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊

100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊

改訂新版 コンピュータの名著・古典 100冊

改訂新版 コンピュータの名著・古典 100冊

ここで注意すべきはどっちも和書で,名著というにはほど遠いという点.*2

そしてもし「写経」がそれほどまでに優れた学習法であるならば,日本以外の多くの国でも活発に行われていて,そしておそらく「写経」以外の別の用語で呼ばれているだろう.しかしそんな表現に出会ったことはない.*3



写経によるプログラミング学習の問題は大きく二つある.

  1. 人力コピーでない作業を写経と呼ぶな:その学習法を写経と呼ぶのなら一字一句変更せずにコピーすることに専念せよ.
  2. 拡張された写経モドキ学習法の人力コピー+改変の学習の限界:これでできるのはプログラミング言語の表層的理解にとどまる.Effective JavaJava PuzzlersやGoFレベルの理解は,写経からは得られない.

EFFECTIVE JAVA 第2版 (The Java Series)

EFFECTIVE JAVA 第2版 (The Java Series)

Java Puzzlers 罠、落とし穴、コーナーケース

Java Puzzlers 罠、落とし穴、コーナーケース

オブジェクト指向における再利用のためのデザインパターン

オブジェクト指向における再利用のためのデザインパターン

Java Puzzlers級の理解は必要ないにしても,Effective Javaくらいは全てのJavaプログラマー必用な基礎レベルと言える.


「写経モドキ」の学習法をとった場合でさえ,学習の本質は「写経(ソースコードの人力コピー)」ではなく「改変して実行させる」方にある.つまり,写経とその周辺には,以下の三種類の「学習法」があるわけだが,

  1. 一字一句書き写して改変しない:本来の意味での「写経」.学習効果は皆無.
  2. 一字一句書き写して,その後改変等を行う:仮に写経モドキ法とでも呼んでおこうか.
  3. いきなり改変から始める:ソースはCD-ROMからインストールしたりネットからダウンロードしたりして,手作業での入力のような時間の無駄は避ける.

まともな人間なら上記3のように,いきなり「改変して実行させる」部分から始めるだろう.この学習法は,もはやいかなる意味でも「写経」とは呼べないと思う.

http://b.hatena.ne.jp/entry/cybozushiki.cybozu.co.jp/articles/m000319.html

  • id:ezookojo 「○○と言っても<意味1>ではなく<意味2>」と注釈しなければならないような時点で、○○という言葉を使うのは意味1で一人歩きさせるだけの不適当な行為なのではないでしょうかby写経と呼ぶの撲滅派

激しく同意.

  • id:jiminko カレーの人がまた噛みつくのかな

毒を食らわば皿まで.

毒なんて食らいたくないんですけどね,放置すると,また猛毒をまき散らす人が出るんだ.憂鬱本の時のように.

  • id:cider_kondo 自分が若い頃はソフトの媒体は紙でテープは外部記憶だったのでそれしか選択肢がなかった。といっても、マシン語というか16進ダンプリストの写経でアセンブラ使えるようになったら苦労はないと思う老害的見解

http://livedoor.3.blogimg.jp/himasoku123/imgs/9/d/9ddd733f.jpg
マシン語でなくとも,たとえばC言語のポインタや「配列」を,写経だけで使えるようになったりするものだろうか.たとえ可能でも,K&Rを読み解くより,遙かに非効率で不正確な理解にとどまるのではないか.

  • id:killerQueen 紙媒体からソースを写経して実行し、エラーが出て止まったらまだまし。エラーが出ずに意味不明な動きをされたときの絶望感ったらハンパなかった
  • id:knjname 今のおもちゃは分解して学びがあるんだろうか
  • id:monamour555 オモチャの分解はアテクシも散々やって,親のラジコンをバラシ叱らとかもしたが…友達のオモチャをバラすってのはキテるな…(感心する場所が違う).

その反面,その言語の泣き所や欠陥については書いてないので,宣伝文句を鵜呑みにするのは危険.*4


こういう意味でも「写経」ベースの学習には限界がある.

http://b.hatena.ne.jp/entry/d.hatena.ne.jp/nishiohirokazu/20140905/1409908066

  • id:farako 書き換えるやらない人いるのかな。……いるんだろうな。

すくなくとも書き換えたら「写経」じゃなくなるわな.この学習法を「写経」と呼んでおきながら,書き換えることを要求するのはおかしいだろ.

  • id:inajob ベーマガの頃はとりあえず全部写してたw 高校くらいから授業のノートは西尾さん方式で写してたな (プログラムではないが

しかし,アスキーの)付録フロッピーや付録CD-ROM/DVD-ROM,さらにはインターネットの発達によって,手書きでの「丸写し」は急激に衰退した.そのあたりも仏教における写経と同じ.*5

  • id:love0hate 「模倣」/上手い人の考え方・動作・成果物を真似るのが上達の早道、みたいな話は別にプログラミングだけの話ではないと思うけどね。
  • id:ricenoodles 漫画を書く練習に好きな作家の作品をトレースしまくるとかそういう話じゃなくて?

技術や考え方を真似るのは良い.そのための近道が名著やすぐれたソースを「読む」ことだ.しかしコピペや「写経」からは,そういう知識は得られないのが問題.

絵描きの比喩でも単に書かれた絵をトレースして複製するだけでは二流にもなれない.そこで使われている「技法」を自分のものにして,異なる対象にも自在に適用できて初めて本物と言えるのではないか.*6

  • id:migrant777 レシピ通りに料理してる感じ。材料の性質や使い方だけ教えても最初からアレンジ料理が作れる人はほとんどいないのと同じように、まずはレシピを忠実に守るのが大事。

不適切な比喩.

プログラミングはレシピを書く作業そのもので,調理する過程はコマンド一発で「ビルド」される.*7レシピを丸暗記するために手で書いたり音読したりする人もいるかも知れないが,意味も分からずにどれだけ丸暗記を繰り返したところで料理の腕が上がることはない.

  • id:KoshianX うーん、やはり写経メソッドとしか言いようがないような。一度英語にしてみるとか? ハンドコピーとか?

"manuscript"って単語はある.*8

1(手書き・タイプの)原稿,草稿,文書,手紙;(手書きの)写本,本
ジーニアス英和大辞典)

2,A manuscript is an old document that was written by hand before printing was invented.
(Collins COBUILD for Advanced Learner's English Dictionary.

  • id:tohnishi 本題から離れるけど、「粒度」という語をコードの行数が多い少ない程度の意味で使っているのが引っかかる。「粒子のきめ細やかさ」的なニュアンスがあまり感じられないので。

たしかに.「粒度」ではなく「コードサイズ」で十分.

  • id:a235 「写経」という語に引っ掛かりを覚える人はそもそもプログラミングに向いてない気がする(ふたこぶラクダのあれ)。

全く逆.これに疑問を「持たない」人はプログラミングに向いてない.

まるっきり「copyメソッドの中にdeleteを実装してるのに放置すんなやボケ.コメントで注意書き入れれば何しても良いってわけじゃねーんだぞ」な状態.

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

  • id:htnmiki 「写経」という言葉に引っかかる人がそんなにいるのか。生き辛そうだ。

そう思うならプログラミングに関わらないが吉.こういう人の書く糞コードにどんだけ酷い目にあわされたことか.

  • id:fuyumi3 「写経」に反感覚える人がいるとは。普通に知れ渡ってる用語だと思ってたが違うのか?

違うと思う.滅多に見かけないし,専門書では見たことが無い.自分が初めて見たのは2011年.*9 いくらコンピューターの歴史が短いとはいえ,いくらなんでもプログラミングの歴史が2011年に始まったわけではない.


だからここ数年ネット界隈で出てきた日本(の糞プログラマー)限定のネットスラングじゃないかと思う.それこそ憂鬱本を名著だと騒いでいた糞プログラマー御用達のコミュニティがひっそりと日本には存在するらしいからな.そういう人達の中で広まっているのではないか.

Twitter

はじめての写経―般若心経を書く (NHK趣味悠々)

はじめての写経―般若心経を書く (NHK趣味悠々)

*1:だから印刷機発明前の書籍は,読み書きできる「専門家」が長時間かけて一冊の書籍を手書きで一字一句書き上げる他なく,極めて高価な代物だったという.

*2:後者では歴史的超糞本である憂鬱本もお勧めしている.そのことからも,この本が糞本とまではいかずとも駄本の類であることは間違いない.

*3:"Learn Python The Hard Way"のアレは写経とは異なる何かだと思う. http://d.hatena.ne.jp/JavaBlack/20130324/p1 http://learnpythonthehardway.org/book/intro.html

*4:チュートリアルだけなら,PHPも良い言語に見えるかもね.

*5:だから「写経」については凄まじい老害臭がするんだが,若い人はそう思わないのだろうか?そんなのは付録CD-ROMが登場する以前,90年代前半かそれ以前に限定される話だと思っていたのだけどな.

*6:ぐぐって,ちょっと興味深かったのがWikipediaの「模写」の項目.ゴッホはこんなこともやってたのね.しかも油絵で. http://ja.wikipedia.org/wiki/%E6%A8%A1%E5%86%99

*7:「ソフトウェア設計とは何か?」 http://web.archive.org/web/20080803072849/www.biwa.ne.jp/~mmura/SoftwareDevelopment/WhatIsSoftwareDesignJ.html

*8:OEDを確認できれば完璧なんだけどね.

*9:http://d.hatena.ne.jp/JavaBlack/20111104/p1