プログラミングを学ぶ上では、必ず押さえておきたいポイントがあります。
このポイントを知った上で勉強を進めるのと、知らない上で勉強を進めるのでは、勉強の効率に大きな違いが生まれます。
早速そのポイントについて見ていきましょう。
プログラミングの機能は、必要性から誕生している
これがポイントです。
言い換えると、専門用語の定義から理解しようとしない。ということです。
Pythonには、本当に多くの機能が備わっています。
そして、全ての機能は、コードを書く人が「この機能があった方が便利だな」と思た結果として生まれたのです。
といっても、これではなんとなくイメージがわきづらいと思いますので、色々な例を使いながら理解を深めていきましょう。
自動車の例で考える
自動車のマニュアルシフトとオートマチックの例で考えていきましょう。
マニュアルシフトとは、自転車の変速機のようなものです。今の車は自動的にギアを変えてくれますが、昔の車はほとんどがマニュアルシフトでした。
ここで、自動車を運転したことがない人がいたとしましょう。
この人に、オートマチックの説明をしたとします。
オートマチックの説明を受けた人は、その考え方については理解できるでしょう。
しかし、実際にマニュアルシフトとオートマチックの違いを理解するためには、両方の車を実際に運転する必要があるのです。
Pythonはオートマチックの言語
誤解を恐れずに言えば、Pythonはオートマチックの車のような言語です。
効率的にコードを書くことができるようにするため、多くの機能が備わっています。
しかし、その結果として、高度な概念を理解することが難しくなっている、というのが本当のところではないかと思います。
マニュアルを知らない人がオートマチックを理解するには?
車の例を使いながら、プログラミングを効率よく勉強するためのポイントについて理解していきましょう。
車の例で、オートマチックの理解を順序立てて整理するとこのようになります。
(下にいくにつれて、理解が深まっていきます。)
- 1 オートマチックという言葉の定義を知っている
- 2 実際にオートマチックの車を走らせてみる
- 3 オートマチックとマニュアルシフトの違いを知る
- 4 マニュアルシフトの車を運転してみる
これを、プログラミング言語に置き換えるとどうなるでしょうか。
- 1 抽象度が高い概念の定義を知っている
- 2 実際に高い概念のコードを書いてみる
- 3 低い概念と高い概念の違い(高い概念を使うと何が便利なのか)を知る
- 4 低い概念でコードを書いてみる
このように並べて書いてみると、イメージがわきやすいかと思います。
1と2の説明しかしていない場合が多い
核心に入っていきましょう。
プログラミングの勉強が効率的に進まない理由は、ネットなどにある情報が、1と2しか説明していない場合が多いからです。
その最たる例がクラスだと言えるでしょう。
クラスは抽象でインスタンスは具体。という説明を受けたことがあるかと思いますが、これは「抽象度が高い概念の定義」にあたります。もっと言うと、「クラスは抽象」というのはクラスの定義にもなっていません。
そして、その次にいきなりコードを書く、という流れになります。上記の順番では、2を実践するということです。
しかし、クラスがある場合とない場合で何が違うのか、その理由が分からないので、今何をしているのかが分からなくなってしまうのです。
ただ、理解を深めるために、C言語などの低級言語(抽象度が低い言語)でコードを書くのは時間がかかりすぎてしまいます。
だからこそ、抽象的な概念の必要性を学ぶことが重要なのです。
具体的な例で見ていこう
実際のプログラムで考えていきましょう。
関数という概念があります。関数とは複数のコードをまとめたものです。
関数な馴染みがある方も多いですので、分かりやすい概念ですが、それでも以下のように必要性を意識した方がイメージが湧きやすいのではないでしょうか。
関数は、同じコードを何回も書かなくて良くすることが目的
例えば、このような機能を実装する必要があるとします。
- 1 2つの数字を入力する
- 2 その2つの数字を足したもの、引いたもの、掛けたもの、割った結果を表示する
今回は、実際に上記の4(低水準のルールで実際にコードを書いてみる)を実行してみます。
上記のルールを、関数を使わないでコードとして書いてみましょう。
コードnum1 = 1
num2 = 2
result1 = num1 + num2
result2 = num1 - num2
result3 = num1 * num2
result4 = num1 / num2
num3 = 1
num4 = 2
result5 = num3 + num4
result6 = num3 - num4
result7 = num3 * num4
result8 = num1 / num4
・
・
とても長くて見づらいコードになってしまいました。
関数を使って書き換えてみます。
コードdef calc(a, b):
result1 = a + b
result2 = a - b
result3 = a * b
result4 = a / b
print(result1, result2, result3, result4)
num1 = calc(1, 2)
num2 = calc(3, 4)
コードが非常にすっきりとしました。
このように、抽象化された概念を使わないでコードを書いて見ると、その概念の素晴らしさがイメージできるかと思います。
このサイトでは、可能な限り必要性を伝えています
Pythonの学習をする上でのポイントをお伝えしてきました。
再度おさらいすると、抽象的な概念がでてきたとき、なぜそれがあると便利なのか考える。ということが効率的に学習を進める上でのポイントです。
そして、このサイトでは可能な限り「なぜこの機能があると便利なのか」という理由を伝えることを意識しています。
これからプログラミングを学ぶ方は、機能は必要性に応じて生まれた。という考え方から、それぞれの機能を紐解いていくと、理解が深まっていくでしょう。