初心者は長いコードを読む事を苦労する。技術書やプログラミング言語のチュートリアルを読めるようになることはエンジニア育成にとって重要だが、いきなり初心者に求めても挫折しがちである。ここでは、「(序盤は)コードを読ませないプログラミング学習」を提案したいと思う。
よくあるプログラミング言語の教科書の問題点
プログラミング言語のチュートリアルや技術書なら、とりあえず”Hello world!”を出力し、その後、データ型や演算子などの定義や計算の仕方などがツラツラと書かれ、次に条件分岐やループなど基本的なアルゴリズムを実現するための方法が説明される。そして、それらをまとめる構造体やクラスといった風に、微細な部分から抽象化するための構造へと話が展開される。これは市販の分かりやすいと評判の入門書でも基本的には変わらない。
“Hello world!”の出力は良い。とりあえず細部は気にせず「文字列を出力するための方法」を学べるからだ。しかし、その後が初心者には絶望的に良くない。データ型や演算子などが次々と出てきて、ループでも幾つもの書き方が紹介され、初心者はそれら全てを「何となく分かった気」になる。
その後、基本構文やデータ型が消化不良のまま構造体などの話に入った時、インスタンスの参照などの概念に戸惑う。この時、テキストに出てくるサンプルコードは、これまでの学習内容を前提としており、長くなりがちである。
あるクラスや構造体のインスタンスを作り、そのメソッドを使うだけであるならば、大抵の高級言語なら、普通の書き方をすれば2行(インスタンス生成&メソッド呼び出し)で済む。しかし、サンプルコードで定義されているメソッドには長いコードが記述されているのだ。そこには、それまでに学習した演算子や条件分岐などが駆使されている。それらを全て読むことができれば、力がついているという事を確かめられる。
では、力がついていない人はどうなるか。メソッドの中に書かれているコードを、テキストの前の部分を読み返しながら1行1行読み進めることに注力するわけだ。すると、「インスタンスを作ってメソッドを呼ぶだけの簡単な演習問題」ですら解けないわけだ。
初心者に炎上処理を求める
開発者の立場で見れば、基本的に他人が作ったコードなんて読まない。読むのはドキュメントであり、あるクラスについてなら「何をするクラスなのか」「どんなフィールドやメソッドがあるのか」「メソッドはどんな働きをするのか」が分かれば使うことができる。開発現場で他人が作ったコードを読まなければならないような羽目になった時というのは、ドキュメントに不備があって使い方が意味不明であったり、そもそも他人が作ったコードにバグがあったりするなど、面倒な状況だけである。言うなれば、プロジェクトが炎上している状態だ。
標準的なプログラミングのテキストを初心者が読み進めていくと、まだよく分かっていない状態で炎上処理を求めるような事態になる。勿論、指導する立場としては「細かい所をいきなり読む必要は無い」「大枠から理解すべきだ」と言うことができる。しかし、どうしても初心者は少し長いコードを見ると、上から順番に全て理解しようとしてしまう。
いきなりAPIの使い方から始める
そうなるくらいなら、”Hello world!”や加減乗除ができるようになったら、とりあえずデータ型や構文などは置いておいて、言語に標準的に搭載されているAPI(時刻や標準入力など)の使い方を教えるべきだろう。詳細には触れず、使い方を覚えるだけなら初心者も苦労しないし、打ち慣れる事もできる。
乱数APIでも使えば面白いし、そこから条件分岐に入れば、処理ごとに結果も変わってイメージがしやすい。
それから初めて、条件分岐の時に使った演算子や数値について触れ、その意味や種類について学習していく方がとっつきやすいだろう。この時に、標準APIを使って占いでも作るクラスを定義しても良いだろう。
こうすれば、各々のサンプルコードに出てくるコードは数行で済む。いきなり長いコードを読ませることはないし、初心者でもいきなり沢山のことができる。
ゲームのように覚える
何故、このような事を提案するかと言えば、プログラミングの世界で主流の、細かい仕様をいきなり覚えるという方法が、一般世界から見れば特異的だからだ。
例えば格ゲーをするのなら、まずは基本的な移動やパンチなどの操作に加え、よく使う投げ技など幾つかの代表的なコンボだけを「動かしながら覚える」だろう。そして、下手なりにCPUと闘って慣れていくわけだ。それから更に上達するのであれば、細かい挙動やコンボキャンセルなどを調べていく必要があるが、ゲームを始めていきなり全ての仕様を読み込むようなプレーヤーは少数派のはずだ。
それが、プログラミング言語学習だと、慣れた技術者がやっている学習方法をそのまま押し付けるわけだ。すると、覚えられるものも覚えられないし、何よりもいきなり定義ばかり続くのは面白くない。勿論、その方法でもいきなりどんどん習得できるエンジニアの卵も存在するが、それはゲームを開始していきなりゲームの攻略本を熟読する稀有なプレーヤーと同じである。
大多数の人にとっては、まずはゲームをやってみるというように、簡単に動かせるものを動かしてみるべきだ。ある程度打ち慣れ、メソッドの呼び方などに慣れてから、はじめて仕様に入った方が良いのではないか。