その本の「はじめに」には、著者の「伝えたいこと」がギュッと詰め込まれています。この連載では毎日、おすすめ本の「はじめに」と「目次」をご紹介します。今日は中野博幸さんの 『エラーで学ぶScratch まちがいを見つけてプログラミング初心者から抜け出そう』 です。
【はじめに ~脱写経で脱初心者を果たそう~】
プログラミングは孤独で地道な作業です。自分が作成したプログラムが、まったく動いてくれない、あるいは思い通りに動かないということは日常茶飯事です。
このうまく動かない状況を、プログラムにバグがあるといったり、プログラムにエラーが発生しているといったりします。プログラムがうまく動かないことをバグ、英語で虫(BUG)といいます。この「バグ」といういい方はプログラミングをするユーザーがどうすることもできないシステム設計上の問題点を含んでいることもあるため、この本では、プログラムがうまく動かない状態を「エラー」と呼ぶことにします。
今までのプログラミングを学ぶ書籍では、さまざまなサンプルプログラムを示し、それを実際に自分で入力してみて動かすというのがほとんどでした。これをプログラミングの世界では「写経」と呼んだりします。サンプルプログラムを自分で入力して動かすというのはプログラミングを学ぶ上でよい方法です。しかしそれだけでは、最終的に自分で考えたプログラムがうまく動かないときに、なかなかその原因がわからず途方に暮れてしまうことが多いのです。
本書では、よくある「エラー」をあらかじめ含むプログラムを示して、その原因を考え、エラーを修正することを通して、より深くプログラミングを学ぶことを目的としています。エラーが発生する原因は複数あり、その原因を学ぶことはプログラミングを学ぶ上でとても役に立ちます。
プログラミング環境として、小学校や中学校で多く用いられている「Scratch」を取り上げます。Scratchは、ブロックを組み合わせてプログラム(コード)を作成できます。そのため、命令の入力まちがいや文法まちがいなどが発生しにくいプログラミング環境です。その反面、他のプログラミング環境のようにエラーメッセージが表示されないことから、うまく動かない原因が逆にわかりにくいともいえます。
エラーの原因を学ぶことは、プログラミング学習における学習者の思考過程を考えるヒントになります。うまくできない学習者への解決の見通しを示す上でも有効だと思います。
各問題の最後に注意すべき点をポイントとしてまとめましたので、参考にしてください。また、すべてではありませんが、各問題に発展課題を用意しました。エラーを修正するだけでなく、元のプログラムをさらに改良することでより深く学ぶことができます。
エラー状態、言い換えれば、うまく動かない状況を乗り越えた先に、プログラミング初心者から中級者への道が見えてくると信じています。
2022年 夏 中野 博幸
良質な問題で適切な試行錯誤を体験しよう
東北大学大学院情報科学研究科/東京学芸大学大学院教育学研究科 教授
堀田龍也
年配の世代には「プログラミングは難しい」と感じられていることでしょう。無理もありません。年配の世代が初めてパソコンに触った頃は、プログラムと言えば英語と数学の間のややこしそうな、とても日常生活とはかけ離れている専門的なものに見えていたはずですから。
この数十年の間に、プログラミングの世界は大きく進化しました。世界中の多くの人たちに利用しやすいようにプログラミング言語が改良されました。パソコンの性能が上がり、ビジュアルなプログラミング言語が実装されるようになり、すぐに実行結果を確認することができるようになりました。さらにインターネットの普及によって、いろんな人が作成した便利なプログラミングのモジュールが、ネット上で共有されるようになりました。
これらの変化によって、プログラミングは庶民的なものになり、同時に「1からプログラミングする」ということも少なくなりました。むしろ他の人が作成したプログラムを「読む」ことを通して、作成者の意図や工夫を理解し、それを自分のプログラム作成に役立てるスキルが重視されるようになりました。小学校段階からScratchなどのプログラミング言語に親しむ時代になりました。
この数十年の間に進展したのは、プログラミングだけではありません。「学ぶ」ということについても考え方が大きく変化しました。今ではネット検索によって断片的な知識が得られる時代です。それらを組み合わせ、自分の考えにつなげていく学び方が推奨されるようになりました。
プログラムには「エラー」がつきものです。エラーの原因を考え、修正のための試行錯誤を繰り返すことになります。この過程で「よく考える」ことになります。そうやって鍛えられた思考力は、別のプログラムを作成する際にも転移し、応用されます。それがプログラミング的思考です。
そのためには、良質な問題による適切な試行錯誤の体験が重要です。既存の教科に良質な参考書や問題集が存在するように、プログラミングにも良質な試行錯誤を提供する書籍が存在するといい――それが本書の存在価値です。エラーを修正していく過程でプログラミング的思考を鍛え、組み合わせ、自分の考えにつなげ、さらに改良を加えて、プログラミングの世界の楽しさを味わってください。
Scratchは簡単だけど難しい
青山学院大学大学院 社会情報学研究科 特任教授
阿部和広
Scratchを使うと、子供や初心者でも視覚的なブロックを並べるだけで簡単にプログラミングできると言われています。これはまちがいではありません。キーボード入力がほとんど必要なく、打ちまちがいによる構文エラー(syntaxerror)が発生しないこと、あらかじめ文法や命令を憶えておく必要がないことは、プログラミングに対する心理的、技術的なハードルを大幅に下げました。
私は、Scratchを使った子供向けのワークショップや学校での授業を15年ほど行っていますが、文字を読んでその言葉の意味がわかるなら、まったくの未経験者であっても、ゲームやアニメなどのオリジナル作品を1~2時間で作ることができます。
しかし、その様子を見ていると、中には手が止まったり、考え込んだりしている子がいます。話を聞くと、自分では正しいと思ってブロックを組み立てたのに期待した動きをしない、つまり、バグに遭遇したようです。
Scratchはエラーが起こらないはずなのにおかしいと思われるかもしれませんが、Scratchが防いでくれるのは、前述の構文エラーだけです。意味エラー(semantic error)については、ほとんど何も助けてくれません。そして、困ったことに、厄介なバグは意味エラーによって発生します。
Scratchは、そのポップな見た目や自然言語(日本語)による表記にだまされそうになりますが、個々のスクリプトのレイヤーで見ると、構造化はされているものの、古くはFORTRANやBASICと同じく手続きに基づくプログラミング言語です。これは、曖昧で融通の効く人の気持ちではなく、厳密で頑固な計算機の論理にしたがって動くことを意味します。
このことに気づいて計算機の側に寄り添わない限り、バグはなくなりません。プログラマーの警句に「プログラムは、思った通りではなく、書いた通りに動く」というものがありますが、まさにそれです。
本書は、人と計算機の間のディスコミュニケーションを解消し、理解する助けとなるものです。本書で「問題」と呼ばれているのは会話の例であり、「エラー」とはそこで生じた誤解に他なりません。
Scratchでも、他の言語でも、簡単な問題は簡単で、難しい問題は難しく、それを記述する言語が簡単であることとは独立です。まずは本書をクリアして、「本当に難しい問題」に臨みましょう。
【本書の使い方】
本書には、51個の「問題」とその「解答と説明」があります。「問題」は原則として1ページに1問で、その裏のページに「解答と説明」があります。プログラム(コード)が長い「問題」については、「問題」と「解答と説明」それぞれが見開き2ページとなっています。
「問題」には、エラー(まちがい)が含まれます。そのエラーを見つけて、想定した動作をするように修正してください。エラーの内容あるいは難易度を考慮して問題を並べていますので、まずは番号順(No.1~No.50)に学んでいくことをお勧めします。
「問題」ページ下部のリンクおよびQRコードにより、Scratchのサイトにアクセスしてコードの実際の動作を確認できます。「緑の旗」をクリックして「問題」あるいは修正後の「解答」の動作を確認してみましょう。「解説」の最後にはエラーの少ないプログラムを作成するためのポイントを記しているので、参考にしてください。
「問題」によっては、さらなる「発展課題」も用意しました。基本となる問題を参考にしながら、プログラムを発展させてみましょう。
【目次】