写経なんてやめとけ

http://kuranuki.sonicgarden.jp/2011/11/post-54.html
http://d.hatena.ne.jp/mizchi/20111102/1320235835

もちろん、学ぶプログラミング言語の文法や基本的なAPIについては覚えているにこしたことはありませんが、それらを覚えることはそこまで重要ではありません。

んなことはない.写経するよりはずっと重要.プログラミングができない奴の言い訳だから耳を貸すべきではない.

自分の手でソースコードを打ってみて、実行してみるということです。

ここまでは,一応賛成.

そのプログラムの表示する文字列の部分を変更していくことで、どこを変えれば、どこの振る舞いが変わるのか、を学ぶことができたはずです。同じように写経をしながら、ソースコードの一部を変えながら、動きがどう変わっていくかを試していくと、より良いでしょう。プログラミングの良いところは、どんな失敗をしても、そこで損失するコストがゼロに近いことです。どんどん試すべきです。

残念だけど,おそらくそれは無理.世の中,そんな単純な処理ばかりじゃねーよ.*1 *2 *3

そこに書かれたソースコードの意味を理解していき、最終的に見本を見なくても同じソースコードを書けるようになることが最初の目標です。

べつに「同じコード」を書く必要は無くて,「同じ機能を実現できること」の方が重要.


また同じコードを実現するための方法を少しでも多く知っておかないと,他人のコードが読めなくなる.*4


もう一つの問題は,手本になるほど綺麗なコードというのを,一体どうやって手に入れるのかということ.世の中に転がってるコードは綺麗なコードばかりじゃない.*5初心者がそのうちのどの部分が綺麗なコードでどの部分が汚いとか判断できるわけがない.

アルゴリズムクイックリファレンス

アルゴリズムクイックリファレンス

Numerical Recipes 3rd Edition: The Art of Scientific Computing

Numerical Recipes 3rd Edition: The Art of Scientific Computing

実際にこういう書籍を開いてみて,そこに書いてあるコードだけを「写経」するだけで,アルゴリズムが理解できるようになると思う?

ソースコードの書き方に正解はありません。正しい書き方というのはないのですが、熟練者であれば、保守性の高いソースコードや、可読性の高いソースコードなどの観点からは優劣を付けることはできます。

プログラムに「正解」はない.同意.

同時にプログラムにも「善し悪し」はある.それが分からん奴はセンスがないから,別の道に進んだ方がいいと思う.

改訂新版 Cプログラミング診断室

改訂新版 Cプログラミング診断室

ベーシックマガジンという雑誌を知ってる世代であれば、印刷されて掲載されているソースコードを目で見ながら、自分のMSXなどのパソコンに打ち込んだ経験があるはずで、その時の経験って、とても良いプログラミングの勉強になってたと思いませんか?

思わない.

ただ丸写しするだけで,誰もがそれを作った人間の考えが読めるようになるわけではない.そういう風に「読む」ためには別の訓練が必要.*6 *7

http://b.hatena.ne.jp/entry?mode=more&url=http%3A%2F%2Fkuranuki.sonicgarden.jp%2F2011%2F11%2Fpost-54.html

  • id:aiaki プログラムって、皮が二枚被っている感じでイマイチ面白くないんだよねぇ。CPUの処理命令が一枚目で、その次にコンパイラの文法っていうところで。要は人の創りしモノ以外の何モノでも無いんだよねぇ。

コレに興味が持てないようだとプログラマは目指さない方が良いと思うが,その洞察力は良いと思う.*8

プログラミングで写経が無意味なのは皮一枚の部分しか見ておらず,表層的なものしか理解できないから.皮膚だけを見て,骨や内臓のことについて何も知らないまま医者になろうとするがごとし.

http://d.hatena.ne.jp/white-azalea/20111104

後、写経するなら、元が良くないと頭の中が変な補正かかっちゃうので諸刃。

同意.そして日本には悪書が溢れているんだな.

ということを踏まえて、写経は道具(API)の使い方とか、デザインパターンの様な応用効かせてナンボの設計思想・方針でやるべきこと。

その場合でも,自分のプログラムの目的や用途にあわせたカスタマイズは必要.クックブックの丸写し作業がないとは言わないけど,それは勉強のためではないだろうし.

Java Cookbook

Java Cookbook

Jakarta Struts Cookbook

Jakarta Struts Cookbook

ああ、後、大学時代、写経したやつで理解してた奴を僕は見たことがない+教科書写経して書いたJavaのプログラム(パズルゲー)で何かを得たコトは全くなかった気がするよ。

ベーマガでも丸写ししてプログラミングスキルが上がった奴はいないと思う.投稿してる人なら別なんだろうが.

http://d.hatena.ne.jp/mizchi/20111102/1320235835

プログラミングで、最初に覚えるべき概念は、四則演算、条件分岐、繰り返し、配列、オブジェクト指向、あとはちょっとした命名規則あたりだろうか。これらの概念を覚えるのに、本に載ってるコードをタイプするという行為ははっきり言って視野が狭い作業である。ものを書き込むという作業は、その前後にしか想像力の触手が絡まない。

この辺りは強く同意.

プログラミングの学習で大事なのは、読んで理解すること。一行ずつ字句的に解釈して、そして自分の欲しい結果との差分を抽出し、そのように操作する方法を理解すること。その意味では原文の、自分で書いたのものを少しずつ変えていく、というところには同意。ただ入り口が写経かコピペかは問題にならない。

だからこそ,写経するよりむしろ書籍のサンプルコードをCD-ROMから読み込むなりサイトからダウンロードなりした方が,写経にかかる時間の無駄を減らせて,その分多くの時間を勉強本来の時間にまわせる.

写経を勧める人って,体育会系的な精神論大好き人間じゃあるまいか.「苦行を積めば積むほど強くなれる」と根拠もなしに信じてるかのようだ.せめて苦行を積むなら頭を使え.体力を使ってもプログラミングは上達しない.

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

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

*1:将棋の棋譜みたいなもんじゃないだろうか.名人が指した棋譜を勉強するのは将棋の達人になる上で良い勉強法だけし,実際に将棋盤の上に駒を並べて真似をすることもやるだろう.でもそこで重要なのは棋譜の中から名人のどのように考えてこの手を選んだか,彼らの丁々発止の思考戦などを読み取り理解し,時にはそれに対する「返し技」を考案することであって,駒を並べることはその考えを表現/記録するための道具でしかない.ただ漫然と「写経」をどれだけ続けていても,決して達人にはなれないのでは.

*2:この手の簡単なオモチャでも,表面だけからでは内部の挙動を完璧に把握するのは難しい.そしてプログラムの複雑さはこんなオモチャの比では無い.

勝ち残り頭脳大作戦

勝ち残り頭脳大作戦

黒ひげ危機一発

黒ひげ危機一発

*3:かけ算九九や,ある種の公式くらいなら,丸暗記の手段として「写経」も意味があるとは思う.でも微積分とか数学の証明問題を意味も分からず写経することに意味があると思う?

*4:国語学習でもある「コレは私のペンです」「この万年筆は私のです」みたいな奴.「言い換え問題」はプログラミング的には地味に重要.
「それは私自身です」というのを表すのに「それは私の祖母のイトコのイトコの娘婿の次女です」みたいなコードを書く奴がいるんだよなー.そんな奴は死ねば良いのに.

*5:初心者向けの書籍に書かれてるようなコードの九割以上は,お手本には不適切.

*6:ちなみに「マイコン BASICマガジン」だったような.通称「ベーマガ」.「マイコン」とかBASICとかが時代を感じさせる. google:マイコンBASICマガジン] [ISBN:488554758X:detail

*7:

ベース・マガジン 2008年 6月号 [雑誌]

ベース・マガジン 2008年 6月号 [雑誌]

「ベースマガジン」で「ベーマガ」.なんじゃそりゃ.

*8:実際は言語の文法とコンパイラの最適化とVMの最適化とOSの仮想化と....という感じで皮が何層にもなっている感じ.