こんにちは、Pythonエンジニア育成推進協会 顧問理事の寺田です。私は試験の問題策定とコミュニティ連携を行う立場です。
最近、子どもがプログラミングの勉強をするから、自分自身も何かやらないといけないから、プログラミングが流行っているからといった理由からPythonを学びたいという人が増えています。
プログラミングにおいて、どこを学びのスタートにするか、ゴールにするかというのを決めるのはとても難しく、また、何ができるのか、どうすればできるのかというのが余計にわかりにくいと思います。
そこで今回は「プログラミングを学ぶ」ことについてお話したいと思います。
文法、構文、関数などの基礎を最初に学ぶ理由
プログラミングを学ぶ場合、環境づくり、基礎的な文法、制御構文というような順番で学んでいくことが多くなります。
例えば、「とりあえず●●と書きなさい」、「listにはこれが格納できる」、「この文字列を使うにはこういうメソッドがある」「データはこういう風に扱いなさい」というような話の流れですが、これはPythonに限らず、一般的にプログラミングを学ぶときにはたいていこういった順番になります。
ただ、この順番通りにやっていったときに、学ぶ側にしたらそれが何になるのかわからないということはよくある話で、学ぶ上でとても大事な話だなと思っています。
とはいえ、実のところこれは、プログラミングの世界に限った話ではなかったりします。
それこそ小中高で学ぶ算数・数学には関数やグラフ、連立方程式、サインコサイン、微分積分などがありますが、これらを学んでいる当時は何に使うのかわからないまま学んでいることが多く、テストや受験で必要だから学んでいるという程度のひとがほとんどだと思います。
実際、社会に出たときに必要とする知識にはあまり関係ないことが多くありますが、その一方で、実務的に数学の知識を使ったほうが楽になる仕事もあります。ただ、社会に出て実務で必要となったときに、それを学んですぐに身に着けることができるかと言えばそれもまた難しいでしょう。なぜなら算数・数学の基礎を順に学んでいくことで身につくものがほとんどだからです。これは言語を覚える上でも同様で、基本となる文字を学ばないと次に進めません。
プログラミングにおいてもやはり同様で、例えばデータ分析の世界では、Pythonの関数や条件式を使うことができますし、フレームワークを使うには関数やクラス、メソッドが必要です。また、pandasはPythonの基本構文や数学がわかっている前提で進められることがあります。つまり、Pythonやデータ分析において、基礎となる知識は非常に重要です。
もちろん必要となった時点で学ぶのもいいのですが、行って戻ってとなるためどうしても理解に時間がかかります。
結局のところ、基礎を知ってから学んでいく方が効率的で、理解しやすいことがほとんどであるため、教育の場では基礎となる部分から順番に学んでいくという方法が採られています。
「基礎」を覚えることの重要性
さて、今度は言語習得を例にお話してみたいと思います。
先に挙げたように、「基本」ができていれば、全ての文法を覚えていなくても、多少意味が分からないという事はあっても、ある一定の言葉を喋ったり、理解したり、文章を書くことはできます。
逆に言えば、ある一定の文法、主語、動詞、目的語というのはある程度のレベルまでは理解していないとつながりにくいとも言えます。
プログラミングもそれと似ていて、タプル(tuple)やリスト(list)、辞書(dict)といった単語や、難しい構文やその使い方が出てきます。基本を学んでいる時点ではよくわからなくても、知識として知っていればその先に進んだときにある程度そこで理解できますし、どこまでが基礎でどこからが応用なのか、どこまで戻って学べばいいかを把握しやすくなります。
結局、実践的な文法を一気に学ぶことはどうしても難しいのでなんだかんだ基本と応用を行ったり来たりすると思います。見たことのない表現を誰かが使っていれば、調べて、新しい仕組みを知り、理解をすすめていけばいいのです。
ただ、ある一定の本当の基礎力的なところは最初にやるとしても、どこかで一旦中断して、Webでもデータ分析でもRPA的なものでも何でもいいので、ひとつの物を作ってみましょう。そうすることで、この間ここで学んだことはこういう使い方をするのかという事が結び付けられますし、そういった手段があることを早めに知っておいてほしいのです。そうすることでより効率よく、より便利でわかりやすい、使いやすいものを作れるようになっていきます。
Python学習のコツ、くじけそうになったらなにか作ってみよう
大人になってから勉強していると、途中でくじけてしまうというのはよくあります。これはしょうがないことだと思います。
もし、気持ちがくじけてしまったら、一回、基礎的な勉強から離れて、あえて自分が作りたいものを作ってみるのも一つの手ではないかと思います。自分がやりたいことを実際にやりながら覚えていくのは最も身につけやすい方法です。
いろんなサンプルがあるサイトや本を見て、理解できなくても見様見真似でいいので、まずは一個作り上げてみましょう。その過程でわからない箇所を後からでもいいので調べていけば理解も進みます。
また、チュートリアルを最初からすべて理解するまではしなくても構いませんし、Web上にあふれているサンプルコードをすべて理解することは無理です。何度かプログラミングを繰り返していくうちに慣れてくれば想像が働いて意味が分かるようになってきますので焦らなくても大丈夫です。
勉強のゴールをどこに置くかは人それぞれで、どう学ぶかも人それぞれです。勉強の方法はたくさんありますし、どのレベルまで、どのように進めるのかも人それぞれです。
基礎を地道にガッツリ身に着けてから次に行く人もいれば、それが辛い人もいます。そうした人の場合は、基礎とモノを作るのを交互にやってみましょう。
また、この後に簡単にご紹介しますが、基礎試験の公式問題集が発刊されますので、問題を解きながら学習したいという方には良いのではないかと思います。
基礎試験公式問題集について
公式問題集は、これまで何度か要望を頂いていたものの、それなりの問題と解説をつけるとなると、人手などの課題があって取り掛かるには難しい面がありました。
今回、問題集の制作を検討するにあたって当協会の認定スクールである株式会社ビープラウドが執筆者として手を挙げてくれ、これまで積み重ねてきた信頼もあり、喜んでお任せすることにしました。もちろん、私自身も解説も含めた監修に入っています。
https://book.impress.co.jp/books/1122101079
試験はPythonのチュートリアルから出ていることもあり、これだけで理解しやすいという事はないとは思います。
ただ、公式問題集の解説を理解できるレベルになっていれば試験に合格できるものになっていますし、間違いを認識して改善しやすいものになっており、学びやすいと感じてもらえるのではないかと思っています。監修として入った私自身、いいまとまり方をしたと思っているのでぜひ読んで頂けるといいなと思っています。
さいごに
私自身、新しいものを学ぶときにはいろんな学び方をしています。
Pythonでいえばチュートリアルをちゃんとやりましたし、物を作りながら学習しました。ただ、流し読みで済ませた部分ももちろんあります。実際に手を動かしてみて、わからないところがあればチュートリアルに戻り、サンプルコードを調べと、ある一定のレベルに到達して本格的に作るステップを踏むまで、それなりの時間をかけて学習してきました。時には学んだばかりのことを、初心者から同じくらいのレベルの人を相手に教えながら理解を深めたこともあります。
新しい分野に詳しい人が周りにいればアドバイスを受けたり、質問したり、ナレッジの共有をしたりといろいろな手段を取ってきました。
ところで、人に教えるというのは、自分自身にとっても非常に大きな学びとなります。
ただ、教えるときに注意したいのは、自分自身が学習している中で感じる、「この順番で教わっておけばよかったと思う基礎的なもの」を相手に詰め込んでしまうということです。
「この順番でこれを知っておけば次に役立つ」というのは、「基礎であるこの部分を理解した先にそれがある」とことを理解した側だから言えるという状態なのです。つまり、その状態で話をした場合、相手は「聞いてみて雰囲気は分かったけど…」というような身にならない状態になることがよくあります。
どこまでを基礎として、どこからを応用にしていくかという順番やバランスは難しいということは知っておいて欲しいなと思います。
私自身は学生や企業にPython教育を行うことがありますが、その中では「クラス」と「オブジェクト指向」を最初にサラッと教えています。ですが、ライブラリの使いこなしなどの話をしていない状態なので、当然ほとんどの人がわからないと言いますが、まずは言葉だけでも知っておいて欲しいこと、そこに到達したら戻って学習して欲しいという意味を込めて最初に伝えています。
このやり方は教わる側に寄り添っているとは思っていませんが、カリキュラムのスケジュールが決まっており、大人数に講義式で教えるという形をとる以上、該当の箇所に到達したときにどうしても、ゼロから説明して戻ってといった時間を取りづらくなりますので、理解するのが苦しいだろうけども頑張って理解して欲しいと願いつつ、先に教えるという手段を取っています。
習得にはいろんなやり方がありますし、本や動画、講習会など、情報の取得方法もまたいろいろあります。
一つの方法や手段にこだわらずに、いろいろなパターンをやってみて、その中で自分に合ったものを見つけていってください。
その中で、資格試験の勉強を通じて学びを深め、そして試験に合格もすれば自信がつくと思います。
何にせよ、実践でも集中してやったからと言って、すべてわかるというものではありません。
わからないことがあっても恥ずかしいものではありませんので、ある一定の理解のもと、あいまいな部分を残しつつ、自分のやり方で学習を進めていくのが良いと思います。
教える側になるのもとても勉強になりますので、ぜひ仲間同士などで試してみてもらえればと思います。