続々々..写経なんてやめとけ

「これで何度目だ?」と思う一方で,プログラミングに対する認識が「これはヒドイ」.*1

なぜ小学校では漢字の書き取りテストがあるのか。

漢字ドリルとは、同じ文字を何度も書いて反復するのである。
ひらがなだってカタカナだってそうだ。

書いてみなければ、身につかない。

プログラミングは「カタカナ,ひらがな」とは違う.その例えは不適切.


プログラミングを「漢字の書き取り」にたとえた人もいるが,「算数の計算ドリル」の方がまだしも近い.「書き取り」の例えは極めて不適切で,こういう例えをだすような人はプログラマとは思えん.

ちなみに僕は、ドイツ語のアルファベットが覚えられなくて挫折したことがある。

A,U,Oのウムラウトエスツェットの合計四文字以外は英語と同じ.それさえ覚えられないなんて,単に頭悪いだけでは.*2

外国語を学ぶときに最初にやるのはアルファベットの写経であり、その次にやるのは単語の写経であることは言うまでもない。

逆に言えば,言語を学ぶということは「アルファベットと単語を覚える」ことではない.英語のアルファベットを全部覚えていて,数千語以上の英単語の綴りを覚えていても,英語を学ぶのはそれ以上のものだ.*3


プログラミングにおいても同様だ.プログラミング言語予約語を覚え,文法を覚え,基本APIの使い方を覚えても,プログラミングの学習においてはようやく麓にたどり着いたばかり.
アルゴリズムイントロダクション 第3版 総合版:世界標準MIT教科書 【電子合本版】Code Complete 第2版 完全なプログラミングを目指して リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice) EFFECTIVE JAVA 第2版 (The Java Series) オブジェクト指向設計実践ガイド ?Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方 オブジェクト指向における再利用のためのデザインパターン

であれば、プログラミングという「言語」を学ぶのに写経が最も有効なのは自明ではないかと思う。

「プログラミング」は「言語」ではない.

プログラミング言語」でも「自然言語」とは全く異なる.

その例えは不適切で,その結論も自明ではない.

実際、同じコードを毎回、何千回と写経した僕はいまや目をつぶっていても正確なプログラムが頭に浮かぶ。

ここでいう「正確なプログラム」とはなんぞや.

多くの場合プログラミングとは新しい物を「創造する」作業であり,過去問の答を「丸暗記」することではない.答がわかっているならば,それは既に解決された問題であり,その作業は「車輪の再発明」に他ならない.いやそれ以下か.*4


IKEAの家具の組み立てロボット」も,正確な組み立て工程を再現する.

https://jp.techcrunch.com/2018/04/21/2018-04-20-this-robot-can-build-your-ikea-furniture/
しかし部材や初期条件が完全に同じとは限らない.条件が異なれば状況の変化に合わせた臨機応変な対応が必要になる.*5

プログラムも素人目には全て同じような作業に見えるかもしれないが,完全に同じプログラムは二つとない.*6 自分がやってることが正しいかどうかもわからずに,ただひたすら盲目的に「正確なプログラムを繰り返すだけのロボット」など不要なのだ.

プログラマーというのは、一定レベル以上になると、地球上に存在するどんなプログラムも想像できるようになる。

「想像できる」なら誰でもできるんじゃない?

「創造できる」ならそうではない.

結局のところ、人間は体育会系的な反復練習から逃れることはできない。

「反復練習」とは写経のような単純作業とは限らない.

たとえば野球の「千本ノック」だって,ボールが全く同じコースを通ってくるのでは練習にならない.右へ左へ前へ後ろへと散らすし、スピードだって変化させる.さらにランナーがいたりダブルプレーの練習などになると,さらに複雑に変化する.もはや写経とは似ても似つかない.


そういう意味での反復練習がしたいのであれば,適当な練習問題でもやってみればいい.
アルゴリズムパズル ―プログラマのための数学パズル入門 プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問 もっとプログラマ脳を鍛える数学パズル アルゴリズムが脳にしみ込む70問
写経よりよほど有意義だし,写経の無意味さを痛感するだろう.

http://b.hatena.ne.jp/entry/s/wirelesswire.jp/2018/06/65757/

  • id:sgo2 単純に書き写すのではなく、アレンジした方がより良い。つまり二次創作最強。(とか言ってみる)

トレスして丸パクリするんじゃなくて,浮世絵を模写して,その技法を自分の絵画に取り込んでみるとか.
https://ja.wikipedia.org/wiki/%E6%A8%A1%E5%86%99
http://www.ukiyo-e.jp/japonisme/1

  • id:andesm 昔、アスキーベーマガでプログラム打ち込んだが、苦痛以外の何物でもなかった。しょぼくても良いから、自分でゼロから組んだ方が勉強になる。

twitter

単純な「書き取り」だけでは,代入演算子やforループだって理解できないだろう.*7

漢字の書き取りやひらがなカタカナの練習をするだけで小説家になれるだろうか.


これが「模写」的な学習法だと思う.やるなら写経よりは模写で.

オライリーとか?

Java Cookbook: Solutions and Examples for Java Developers (English Edition)

Java Cookbook: Solutions and Examples for Java Developers (English Edition)

写経する人は,どうせ読まないが.

それに写経やってるような初心者は,良いコードと糞コードとの見分けもつかない.

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

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

*1:最近の社畜不足に対するポジショントーク

*2:せめてロシア語ならまだわかるけど.

*3:中高生でも,その辺はさんざんやったと思うんだが.
表現のための実践ロイヤル英文法(例文暗記CD付き) 英語長文問題精講 新装版 英語構文詳解 (駿台受験シリーズ) どんどん話すための瞬間英作文トレーニング (CD BOOK) Idioms in the News - 1,000 phrases, real examples (English Edition)
たくさんの英単語のスペルを覚えるのは英語学習においても重要だけど,どれだけ単語の綴りだけ覚えても英語ができるようには永久にならない.中学一年生だって,そのくらい知ってる.

*4:まるで「おれは計算ドリルの全問題の正解を、全部丸暗記してるぞ」と自慢してるようなものだ.漢字の書き取りならまだしも、数学問題だと数値が変われば答もかわる.「特定の計算ドリルの正解」の丸暗記に,数学上どんな意味があるのだろうか.

*5:それこそ木材なら,乾燥や湿度一つで素材が変形する.

*6:もしあれば発注ミスか,或いはパクリ.

*7:算数で「=」といえば「等しい」だからな.「a = a+1;」を書いただけで理解できたら,そっちの方がどうかしてる.