WirelessWire News Technology to implement the future

by Category

写経 イメージ

最強のプログラミング勉強法が写経である理由

2018.06.28

Updated by Ryo Shimizu on June 28, 2018, 08:39 am JST

プログラミングを学ぶ最も良い方法は写経である。

写経とは、紙に打ち出されたソースコードをキーボードから入力する行為だ。
一見、ものすごく無駄に見える。

ネットからダウンロードすればすぐに済むものをなぜわざわざ手で入力し直すのか。

でも、考えてみて欲しい。
なぜ小学校では漢字の書き取りテストがあるのか。

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

書いてみなければ、身につかない。
もしも、漢字を一度も書くことなしに漢字を読めるようになったとして、それにどれほどの意味があるだろうか。

英語もそうだ。
アルファベットを書くところから全ては始まる。

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

ハングルを勉強したときも、とにかくハングルの形と音がなかなか覚えられなくて困った。まあ結局、覚えるのは諦めてしまったが。

ギリシャ語も絶望的である。
そもそもΣ(シグマ)とかε(イプシロン)とかはともかく、ζ(ゼータ)とか、ι(イオタ)とか、見ただけでなんと読むのかわからない文字で書かれた文章を読むのはめちゃくちゃ難しい。ほとんど無謀と言って良い。

むかし、アテネに旅行したとき、全ての標識がギリシャ語で書かれていて軽く数学ノイローゼみたいになった。
数学でしか見ない記号で地名が綴られていて、「読めるかボケ!」という感じになるのである。

地図もぜんぶギリシャ語で、よくぞカーナビもなしにメテオラまでたどり着けたものである。

他にもヒンズー語とかアラビア語とか、アルファベットさえよくわからないものが山ほどある。
その手の言語が詰まったデータセットをomniglotといい、見るだけでノイローゼになれる。

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

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

しかし、プログラムの場合、ラクが出来てしまう。コピペが出来てしまう。
でも、それではちゃんと学べたとはいい難い。

例えば以前、東大の深層学習講座ではjupyter notebookで教えていた。確かに基礎ができてる人ならjupyter notebookで十分だろう。

しかし、ごく基本的なPythonの文法を知らない状態でjupyter notebookでの演習だけをクリアしたとしても、本当に道具としてその概念を使いこなせるようになったとは言えない。

要は穴埋め形式であって、全体がわからないのだ。

「プログラムを書ける」というスキルは、当然、ゼロから目的に従って書けるということを意味する。
テンプレートの穴埋めだけやっても、それはプログラムできるようになったとは言えないのだ。

コンピュータにおける写経による学習の素晴らしいところは、間違いを自動的に判定する機能である。
紙に書かれたのと同じように入力したつもりでも、括弧の形を間違えていたり、インデントを間違えていたりするとうまく動かない。

どこを勘違いしたんだろう? とデバッグすることこそ紙からキーボードへの写経の醍醐味である。

僕がハンズオンをやるときは、参加者の生徒と一緒に写経する。
もう何千回、人前で写経したかわからない。最初はみんな驚く。「えっ、この人も写経するの?」と。
しかし、それには意味がある。

実際、同じコードを毎回、何千回と写経した僕はいまや目をつぶっていても正確なプログラムが頭に浮かぶ。
頭の中にPythonの処理系があり、眠っていてもソースコードを検討できる。

プログラムと呼ばれるもののなかでは、ニューラルネットワークのプログラミングは簡単な部類に入るので、ゲームプログラムに比べると頭の中で何日も悩むようなことはほとんどないのだが、そこまでできて初めてプログラミングに習熟したと言えるのだろうと思う。

昔、enchant.jsをプロモーションするときに、その場で与えられたお題に対して9分間でプログラミングする 9 Minutes Coding Battleというのをやっていたことがあるが、あれも基本的には頭の中に全てのコードが把握できているため、目的を与えられるとそこに集中してエネルギーを傾けることができるから可能になるのだ。

プログラミングを学ぶ上で最も重要なのは、頭の中にプログラミングモデルを持つことだ。
もっと大事なのはある課題に対して「それはプログラム可能か、不可能か」ということを瞬時に想像できるようになることだ。

いわば「プログラム勘」のようなものをつかめるかつかめないかだ。

プログラマーというのは、一定レベル以上になると、地球上に存在するどんなプログラムも想像できるようになる。
Facebookからスマートフォンから、Windowsから新幹線まで、たいがいのプログラムは「まあおそらくこのような構造になっているんだろう」と想像できるようになる。ここまでこれると中級者と呼ばれるようになる。中級者くらいになると、本を書いたり簡単な講演をしたりできるようになる。専門学校の講師とかもできるだろう。

中級者になるまでの道のりは早くても2年、普通の人なら4、5年はかかると思う。
中級者になったあとで、自分は残りの人生をどんなプログラムを構築するのに使うべきか考え、誰も作ったことがないような課題を見つけ、解決できるようになると、これは上級者と呼ばれる。

ここにたどり着くには、どういう道のりがあるのかといえば、もうひたすら書くしかない。
結局、バスケットボールを上達するとか、野球を上達するとかと同じで、ひたすら反復練習してうまくなるしかないのだ。

以前、とある巨匠に「どうすれば絵がうまくなるんですか」と間抜けな質問をしたことがある。
答えはあまりに簡単だった。「描くしかないよ。寝ても覚めても描くしかない。描かないやつはうまくなるわけがない」。

プログラムも同じで、うまくなろうと思ったら書くしかない。
最初は目的にもなしに書くことはできないから、まず写経する。それだけでも十分意味がある。
写経を繰り返して、一通りのプログラムの構造を学び、プログラム勘をまず鍛える。

次に、自分の表現したいことをプログラムで表現する。設計して、実装して、失敗して、再設計して、また実装する。

その繰り返しでしか、上達する道はない。

英語やドイツ語だと、いくら書き取りしても、自己採点する自分が勘違いをしたまま永久に気づかないということはあり得る。
しかし、プログラムは違う。コンピュータは書いたとおりにしか動かない。もし自分の思い通りにならないことがあるのだとすれば、それはプログラムか設計のどちらか、もしくは両方が間違っているのである。

結局のところ、人間は体育会系的な反復練習から逃れることはできない。
スーパーのレジ打ちだって製品企画だって同じだ。

企画を上達したければたくさん企画を立てなければならない。実行して、失敗して、再挑戦して、それを繰り返す。
企画がなかなか上達できないのは、そもそもそのチャンスが少ないからだ。

広告代理店の企画マンが有利なのは、日々膨大な企画を書くチャンスに恵まれているからである。
普通はそんなチャンスは滅多にない。

ビジネスプランも同じで、やはり反復がものをいう。
反復のための写経というのはそれほど効果的であり、要は頭の筋トレのようなものだ。すぐに成果はでないかもしれないが、確実にやればやるほど本人の力になるのである。

 

WirelessWire Weekly

おすすめ記事と編集部のお知らせをお送りします。(毎週月曜日配信)

登録はこちら

清水 亮(しみず・りょう)

新潟県長岡市生まれ。1990年代よりプログラマーとしてゲーム業界、モバイル業界などで数社の立ち上げに関わる。現在も現役のプログラマーとして日夜AI開発に情熱を捧げている。

RELATED TAG