Pythonの学習コストが低いという話

Pythonは学習コストが低いと言われていますね。それについて考えてみましたが、次のようなところに落ちつきました。

- 学習コストを気にする初心者は軽量言語へ
- 初心者ほど、作りたい方向で決めるべき
- 機械学習がやりたいということならPythonは良さそう
- そうでないなら適した他の言語へ

以下にだらだらと説明していきます。

## 前提

学習コストというのは、「初心者がプログラミングを始めるにあたって」という前提があると思います。すでに他の言語でプログラミングをやってきた人に対して考えるようなことではないですよね。経験者はコストなど気にせずやりたいようにやれば良いし、そういう力があるはずです。

しかし、マジな初心者(コマンドも打ったことがなければ、タイピングも人差し指)というレベルで考えると、別の学習に関するコストが高くて、純度が低い結果になる気がしませんか。(しかしこういったことを考える場合、純度は低い方が正確な場合もある)

そして多分学習コスト云々を気にする人は、ざっくり方向性は見えていても、具体的に何を作りたいかは決まっていない人たちだと思います。カーネルをなんとかしたい、みたいな人は、学習コストなんか気にせず作り始めていると思うので、想定しません。

## 確認内容

### まずはググってみた

こんな情報がありました。雑ですが、今回何を考えるかにあたって参考にしました。

- [プログラミング初心者がPythonを始めるべき3つの理由](http://programming-study.com/technology/python-recommend/)
- [2016年の人気プログラム言語10種を徹底比較！気になる年収や求人、学習難易度まで](https://toiroha.jp/article/detail/59434)
- [【徹底比較】初心者におすすめのプログラミング言語10選](http://programming-study.com/trouble/begginer-language/)

### Pythonの特徴一覧

- 文法がシンプル
- 汎用的
- 実行速度が遅い
- 日本ではマイナー

下記、考えていきます。

#### 文法がシンプル

簡単なのは初心者には大事ですね。コードの量が少なくて済むみたいな話もありますが、初心者が時間を使うのはタイピングではなく理解です。同じことをやるときのコードの行数や変数の数が少ないのであれば、初心者が覚えるべきことも少なくなり、理解により多くのエネルギーを費やすことができます。この辺は、軽量言語であればだいたい同じでしょう。

構文が見やすいというのもポイントです。どうせインデントの事であとで怒られるのですから、インデント強制なのは良いと思います。caseが無いという特徴もありますが、Pythonで入門した後に他の言語でcaseを使うと、最高に便利だという気分になれるので、Pythonで入門すると後の楽しみが増えます。

まとめ：**学習コストを気にするなら軽量言語**

#### 実行速度が遅い

これを初心者が気にする必要はないでしょう。スクリプト言語で入り、しかも初心者が作るものであれば大差ないです。

むしろ作るものを選ぶという点では、実行時間がめちゃくちゃ長いものを初心者が作るのは、学習という観点ではよくないでしょう。何かを作らないと楽しく無いとは思いますが、基礎構文の理解は避けられないので、小さなものを作って動作を理解していくのが優先です。難しいものを実装するために色々なところからコピペでパッチワークして、結局やってることは画面を眺めるだけとなってしまうのは避けましょう。

まとめ：**気にしないで良い**

#### 汎用的

何にでも使えるから、何がしたいか決まっていない人にオススメ、と様々な記事に書かれていますが、これはどうかと思います。**作りたいものがないのにプログラムを覚えるというのはかなり酷**な話です。やりたいことがあって、それにあった言語を選ぶ(WEBをやりたいからPHPといった具合)になるのが通常の流れです。基礎構文は絶対学習すべきですが、それだけだと使えるようにはなりません。英文法だけ覚えても英語を喋れる気がしないのと一緒です。

ただ、様々なライブラリが充実していて、数学系、機械学習系、raspberry pi、WEBといった感じでやりたいことが決まっていれば、それを受け止めてくれるだけのポテンシャルはあります。

まとめ：**やりたいことがあるなら、Pythonでもできる**

#### 日本ではマイナー

本当か？という感じがしますが、他のメジャーな言語と比べればマイナーです。マイナーなのは致命的です。わからないことをどうやって調べれば良いかわからず、初心者の独習がはかどらない、誰かに聞こうとしても教えてくれる人はいない、ということです。基礎構文ならネットで検索する程度で学習できるでしょう。ネット上でプログラミングを学習できるサービスを活用すれば、十分学習できます。しかし、作りたいものを実現するには、初心者にはちょっと厳しいのかな、と思います。機械学習は比較的情報があふれているので、機械学習がやりたいなら良い(諸説あります)のではないでしょうか。

勉強会も少ないな、と個人的には感じていて、このあたりは同じ軽量言語のPerl、PHP、JSといったあたりに、2016年時点ではかなわないでしょう。仕事でもあまり使われていない気がします。WEBアプリがやりたい人・スマホアプリが作りたい人等はおとなしく別の言語に行った方が楽しく学習できると思います。また、教育機関で使われているという噂を聞きましたが、言語を選ぼうとしている初心者には関係無いですよね。

余談ではありますが、英語を学ぶ機会と捉えて前向きに対応できるのであれば、これはとても学習効率が良いです。どのような言語も、結局英語でやっていく能力が必要になってくるので、最初から英語で頑張るのは効率が良いかもしれません。英語がわからない場合、それはプログラミングの学習コストなのかという疑問もあります。

まとめ：**機械学習なら最適**

#### C言語やJavaとかと比べてどうなのか

どうなんでしょうね。いつかはやった方が良いし楽しいと思いますが、入門に最適かどうかは怪しいと思います。言語の性質は置いておいて、歴史ある言語の弊害は、**素晴らしい先人の知恵が蓄えられると同時に、ゆるふわな情報はさらに蓄えられていて**、初心者には判別がつかないし、つまり学習コストが高いと言えます。Pythonは比較的情報が少ないというのが、逆に強みになってしまっています。

コンパイル言語は確かに動かし始めたら早いですが、コンパイルが終わるまでが辛いですよね。初心者には厳しい学習コストだと思います。文法も、やることが多くて、これも初心者は理解ではないことにエネルギーを費やさないといけない。これから始めるなら、軽量言語で良いと思います。

まとめ：**CやJavaは後回し、いつかやりたくなったらやろう**

#### HTML/CSSとかと比べてどうなのか

なぜか比較対象に挙がることが多いので、考えます。これらはWEBをやりたい人には必須の技能です。やらなくて済むツールが結構揃ってきているという意見もありますが、それはわかっている人向けのものです。ですから、WEBをやりたいならまずHTMLは学習しましょう。でも、それはプログラミングの学習コストの話ではないですよね。HTMLを覚えるコストを払っても、他のプログラミング言語を覚えるコストが下がるわけではありません。

まとめ：**学習コストという話には当てはまらない**

## まとめ

- 初心者には軽量言語が楽、おとなしく甘えよう
- 速さは初心者には関係無い
- やりたいことベースで考えないとつらい
- Pythonならなんでもできる
- でも、適した言語の方が学びやすい
- 機械学習ならPython
- 情報量が多いのも実は結構つらい

ということで、学習コストで学ぶプログラミング言語を選ぶような人は、ある程度やりたいことに合わせた上で、軽量言語でやっていくのが良いと思います。