プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

今の時代「写経」する人なんて、いないんじゃないの!?

(現在は)ソースコードを「写経」する意義もあまりないと思う。

あるブログが「写経には効果がない」という趣旨のことを書いていて「何を言ってるんだ?」と思いじっくり読んでみたら、彼の言う写経は「動くとわかってる10000行のコードを何も思考せず作業として書き写すこと」を指しているようだった。「そんなわけないじゃん」と笑ってから「もしかして世の中は写経をそういう捉えてるのか?」と不安になった。

プログラミング学習手段としての写経について - 西尾泰和のはてなダイアリー

そっか。最近よく聞く「写経」って言葉になんか違和感を感じていたんだけど、そういうことか。「ソースコードを何も考えずに書き写す」ってニュアンスがあるのね。

確かに言葉が良くないんだな。ぼくの知る「ソースコードを書き写す作業」ってのはそんなイメージじゃないんだ。なんて言うかな。「スポーツの練習で何のための練習か分からなかったけど、後になって意味がわかった」みたいな感じかな。ごめん、よく分からないよね(笑)

ぼくの知る「写経」ってのは

30年以上前「打ち込み」って呼ばれてたと思う。まだPC-8001やMZ-80Kなど8ビットマイコンが全盛の時代は、インターネットやパソコン通信はもちろん、フロッピーディスクやCD-ROMすらなくて、ソフトウェア(主にゲーム)はもっぱら雑誌に掲載されたソースコードを見ながら対象のマイコンに入力し、実行するのが一般的だった。

要はマイコンでゲームをやりたかったんだ。それだけだと「写経」って言われてることと変わらないと思う。特に16進のダンプリストの打ち込みなんかは単純作業で、写経にすらなってなかった。でも当時はBASICで書かれたものも多くて、それだとちょっと違うんだな。

BASICリストを入力していると

入力間違いがどうしても起こる。そうすると、必然的にデバッグになる。多くは入力ミスをチェックする作業なんだけど、数をこなすと、だんだん書いてある意味が分かるようになってくる。

なぜなら、最初は「書き写す」だけだとしても、リストを見て一文字ずつ入力しているわけだから、なんとなく意味が推測できるようになってくるんだ。特にBASICは直感的に分かりやすいからね。

まず、REMはコメントだから入力する必要はないと分かる。デモ画面用のDATA分なんかは「まあなくていいか」と削ったり、ゲームキャラクタを別のパターンに変えて遊んだり、ということを始めるわけ。

で、さらに慣れてくると、ゲームバランスをいじれるようになってくる。「NPは残機数みたいだから、ちょっと増やそうか」とか「面が進んだ時のレベルアップがキツイから、ちょっと緩やかにしようか」とかね。まあ大抵いじり過ぎてゲームバランス壊して飽きるんだけど(笑)

もっと進むと、今度は「自分でゲームを作ってみよう」ってことになる。まあ自分で考えたゲームってのは自分が思ってるほど面白くない(笑)ので、アーケードゲームの移植とかになる。当時はマイコンでも再現可能なアーケードゲームが多かったのも、よかったと思う。

まあそんな感じで、最初は単なる入力作業だったのが、自然とプログラミングの世界へ入っていけることが多かったんだよ。ソフトウェアの敷居も低かったし、いろんな意味で打ち込みをすることの利点があったんだ。

今は

ゲームっていうと、なんかシロウトにはとても作れないイメージがあるよね。もちろんソースコードが公開されてることは少ないし、あったとしてもそれを入力する人なんていない。入力したとしても、そのソースコードはプログラミング初心者に理解できるようなものじゃないだろう。

そもそもプリントアウトされたものを入力する機会なんて、ほとんどない。大体はネットのコードを「コピペ」するだろう。書籍に書かれたソースコードだって、ウェブサイトに公開されてることが多い。それがなかったら、書籍に書かれた長いリストを入力なんてする?しないよね。

つまり

実際には今の時代「写経」する人なんて、いないんじゃないの!?って思う。写経する意義もあまりない気がする。

「写経がいい」と言う人は、たぶん昔「打ち込み」をしてその良さを理解しているから、薦めているんじゃないかと思うんだけど、今は苦行にしか感じられないんじゃないかな。特にプログラマの素質がある人は面倒くさがり屋さんが多いから、そんな面倒なことしないと思うよ :)

しかもそうやって入力するプログラムは大抵学習目的のサンプルコードなわけだから、動いた時の喜びもほとんどないし、ゲームみたいに「ここ変えてみようかな」なんて思わないと思う。動いて「ふーん」でオシマイ。

今の時代に「写経」をしたとしても、昔の「打ち込み」で得られたような体験は得られないんじゃないのかな。それよりenchant.jsSmall Basicみたいに、手軽に始められて、実際に体験して覚えていくやり方の方がいいと思うよ。