プログラミング学習のはじめ方
入門者が同じところで止まる理由
書いたコードを実行したら、赤い英語の塊が出てきた。学習が止まりやすいのはこの瞬間です。しかも止まる場所は人によってばらばらではなく、だいたい同じところに集まっています。
エラーが出た瞬間、手が止まる
たとえば、こういう表示が出ます。
プレーンテキスト
Traceback (most recent call last):
File "main.py", line 3, in <module>
print(mesage)
NameError: name 'mesage' is not definedこれを英文として頭から読もうとすると、知らない単語が並んでいて、どこから手をつけるか分かりません。そのまま画面を閉じてしまうと、次に同じものが出たときも、また閉じることになります。
止まっているのは文法が難しいからではなく、出てきたものを読む順番を知らないからです。
読むのは、種類と場所の二か所だけ
この表示で見るところは二か所しかありません。
一つは最終行です。先頭にある NameError が種類で、「その名前は用意されていない」という意味です。うしろに mesage と、問題になった名前まで書いてあります。
もう一つはその上の行です。どのファイルの何行目かが書かれていて、実際にその行のコードも一緒に表示されています。
この二つを合わせると、三行目の mesage が message の打ち間違いだと見当がつきます。エラーは失敗を知らせる通知ではなく、止まった場所を指している行です。冒頭の図解で、どの行が何を伝えているかを一つずつ確かめられます。
一つだけ、先に知っておくと楽なことがあります。行番号が指す行に、必ず原因があるとは限りません。たとえば括弧を閉じ忘れた場合、コンピュータは次の行まで読み進めてから「おかしい」と判断するので、その次の行の番号が出ます。指された行に何も見つからないときは、その一つ上を見ます。これを知らないと、何も間違っていない行を延々とにらむことになります。
種類の名前も、慣れると分類として役に立ちます。名前が見つからない、書き方が文法として成立していない、数と文字を混ぜて計算しようとした。初めのうちに出会う種類はそれほど多くなく、同じものに何度も出会うので、暗記しようとしなくても残ります。
「Hello, World」の次が思いつかない
もう一つの止まり方は、エラーとは逆で、うまく動いたのに続きが出てこない場合です。文字は表示できた。でも自分が普段使っているアプリとの距離が遠すぎて、これが何につながるのか分からない。
この距離は、規模を上げても縮みません。縮むのは、自分のデータを入れたときです。教材の「田中さん」を自分の名前にする。練習用の果物のリストを、自分のかばんの中身に置き換える。
合計を計算する練習も、架空の商品より、今月自分が買ったものの値段でやるほうが手が動きます。結果が自分に関係のあるものになると、「ここに日付も出したい」といった次の一手が自分から出てきます。
作りたいものが思いつかないのは、想像力が足りないからではありません。題材が他人のものだからです。
学習が止まるのはこの二か所です。読む順番を知らずにエラーの前で止まるか、動いたのに自分と関係のない題材のまま続きが出てこないか。どちらも、才能や向き不向きの話ではありません。止まる場所が決まっているなら、次に何をするかも先に決めておけます。
復習ミニクイズ
プログラミング学習の挫折率は90%以上と言われていますが、学習を継続するために最も推奨されている「考え方」はどれですか?