中国ドラマに沼落ちした結果、中国語を聞き取れる&読めるようになるべく、昨年から中国語の勉強をちまちまと続けています(過去の記事その1、その2)。HSKという中国語検定の5級レベルを目指しているのですが、昨年の12月に受けたHSK3級はなんとか合格しました!(1級から6級まであり、6級がもっとも難しい)
1、2級のリスニングは、会話スピードもゆっくりで会話量も少ないため、難しくはありませんでした。しかし、3級から難易度がワンランク上がり、会話スピードが早くなり、会話量も多くなります。そのため、リスニング内容の理解が追いつかないな〜と思いシャドーイングを行ったのですが、「プログラミングの学習でシャドーイングのような効果が得られる方法はあるのか」と疑問が浮かびました。
そこで今回は、プログラミングの学習方法について考えてみました。
ここでいうシャドーイング(shadowing)は、「聞いた音声のあとを同じように発音して追いかける」という外国語を勉強する手法の1つです。
シャドーイングの大きな効果は、リスニング力の向上です。例えば次のような音声を聞いたとき、英語を学習したことがある人は、ほぼ一瞬で意味を理解できると思います。
Hi! My name is Hiroyuki Yamada. Please call me Hiro.
しかし、音声が長かったり、難しい単語や表現が使われたりすると、「XXXは〇〇って意味で……」と考えてしまい、1度聞いただけでは意味を理解するのが難しくなります。
シャドーイングは、「音声を聞く」「音声と同じように発音する」「音声の意味を考える」を同時に行って、聞いた音声をいかに早く理解するためのトレーニングだといえます。
とはいえ、これはレッスンを受けた講師の受け売りと、自分が体感した効果です。私の場合は、1つの会話文に対して、次の手順でシャドーイングをします。
講師や書籍によっては説明する手順が異なり、「書き写し」や「音声を聞かずに発音する」などの手順を挟む場合があります。それにより、リスニング力以外にも効果があるとされています。
何回も聞くと音声そのものを覚えてしまうので、私の場合は1日に同じ会話文を2回以上聞かないようにしています。
音声そのものを覚えてしまうと、暗唱のような状態になってしまい「聞いて→意味を理解しながら発音」という脳内のプロセスがなくなってしまうためです。外国語の学習でシャドーイングを取り入れる場合は、ご自身にあった方法を模索してください。
プログラミング学習を行う場合、まず基本的な文法を理解するところからはじめ、複数の文法を組み合わせた処理を作ってみる、という流れが一般的かと思います。その中で、ほとんどの方が写経を行うのではないでしょうか。
一般的な写経は、お経(経典)を書き写す(複写する)ことです。プログラミング学習でいう写経は、書籍などに掲載されているサンプルコードを書き写す(入力する)ことです。
プログラミング学習での写経は、次のような効果があります。
ただ、上記の効果を得るためには、気を付けなければならない点がいくつかあります。
書き写すだけでは、単なるタイピング練習になってしまいます。書きながらどのような文法を使っていて、実行するとどのような処理の流れになるのかを考えましょう。定義した変数にはどういった値が入るのか、定義した関数での処理などを考えながら書くことで、実際のプログラムを見たときに、どういった処理を行うプログラムなのかを理解するスキルの向上に役立ちます。
エラーが発生すると、エラーメッセージが表示されますが、基本的にはすべて英語で表示されるため、読むことを諦めてしまう人がいます。しかし、プログラムにエラーはつきもので、写経ではなく、何らかの機能を作るときなどよく発生します。ごく稀にサンプルコードそのものが間違っていることもありますが、写経の場合は入力ミス(タイプミス)が原因であることがほとんどです。翻訳ツールを利用しても構いませんので、エラーメッセージと向き合い、エラーの原因を突き止めましょう。
あらためて写経のメリットや注意点を考えてみましたが、基本文法の学習という側面が大きく、これだけで開発力を上げるのは難しいかもしれません。外国語学習のシャドーイングでリスニング力を向上させるように、プログラミング学習で開発力を上げるためには、ほかの手段が必要そうです。
もし、Webサイトを作りたい、ゲームを作りたいなど具体的に作りたいものがある方は、写経などで基礎文法を学んだあとは、作りたいものを作りながら開発力を磨くことをオススメします。しかし、プログラミングの学習自体が目標の方は、何を作ればいいのか戸惑ってしまうかもしれません。
シャドーイングでは、「聞いた音声のあとを同じように発音して追いかける」ことで、リスニング力の向上をはかります。音声を実際にある機能やコンテンツ(サービス)に置き換えて考えると、「ある機能と同じような機能を作ること (シャドウを作ること)」でシャドーイングと同じような効果が得られるのではないかと思いました。
Webサイトであれば、シンプルなものから大規模なものまで、多種多様なコンテンツがあります。HTML + CSS、JavaScript、Java、PHP、データベースなどを学習した方は、ご自身がよく使うコンテンツを真似てみてはどうでしょうか。
例えば……ですが、私は舞台のチケット争奪戦に参加するとき、Webサイトでより正確な時間をチェックします。こちらのように、所在地の時刻を表示するWebサイトであれば、HTML + JavaScriptで作れそうです。
また、TwitterのようなSNSサービスは、投稿内容をデータベースに保存させておく必要があります。テキストのみを投稿して、投稿した内容をタイムラインに表示する機能のみであれば、HTML + PHP(もしくはJavaやPythonなど) + データベースで再現できそうです。
ゲームを作る場合は、素材の準備が大変かもしれません。Unityであれば、assetstoreから無料の素材をダウンロードして使えるので、真似たいゲームを作るのに使えそうな素材を探してみるのも1つの手です。
プログラミングの学習方法について考えてみましたが、人それぞれにあった学習方法があると思いますので、自分が楽しく学べる方法をいろいろと試してみてください。私もHSK4級に向けて、コツコツと勉強していきたいと思います!(本当は昨年度中の取得を目指していましたが、知らない漢字をいっきに覚えるのは難しい……と思い、無理のないペースに変えました)
身近なコンテンツを真似てみるといっても、どうやって真似ればいいの?と思う方がいるかもしれません。そういった方は、具体的なコンテンツ例が掲載された書籍を手に取ってみてはいかがでしょうか。
HTML + PHP + MySQLで、名簿管理のWebアプリを作れる
インプレス『1週間でPHPの基礎が学べる本』
HTML + JavaScriptで、フォトギャラリーのWebアプリを作れる
インプレス『いちばんやさしいJavaScriptの教本』
Unity(C#)で3Dゲームを作れる
技術評論社『たった1日で基本が身に付く! Unity 超入門』
Pythonでアナログな2Dゲームを作れる
宝島社『野田クリスタルとあそぶ! PythonプログラミングBOOK』
プログラミングにおけるシャドーイングは、広いスコープで定義された変数と同じ名前の変数を狭いスコープで定義することです(クラスとそのクラスの中にあるメソッドで、同じ名前の変数を定義する)。英語講師に「シャドーイングをやりなさい」といわれたとき、こちらが思い浮かんだので、「???」となったのもいい思い出です。