僕がプログラミングを始める人に、「言語なんて何でもいいのだ」という理由

TOC

  1. プログラミングを学習するときに大切なこと
  2. 自分の作りたいものを形にしていく過程で、思考法を習得していく
  3. プログラミングができるというのは、写経して正しく実行できる能力ではない
  4. まとめ

こんにちは。shundroid です。
夏休みが終わりに近づいてきました。

この夏にプログラミングを始めようという友達がいて、
どのようにプログラミングを教えるのが効率的なのか、
改めて色々考える機会がありました。

そこで思ったことを今回は書きたいと思います。

プログラミングを学習するときに大切なこと

よく「Python がおすすめだ」とか「Unity できるやつかっこいい」とかいう言葉を聞くことが多いのですが、
僕はこれらの意見はプログラミングを始めるにあたってはそれほど関係ないと思っています。

これらの意見の根拠で、例えば「構文が簡略だ」というのであれば、僕は Scratch をおすすめすればいいじゃない、と思います。

また、「Python は深層学習などに強いから」というのもよく聞きますが、
果たしてプログラミングを始めた初心者は、本当にAIや深層学習の仕組みを理解し、自分で構築するレベルまで達するのでしょうか。

「プログラミングをやったことがある」と言う人たちでも、
サンプルコードを写して実行してできただけ、あるいは小規模なアプリを作っただけ、ということもあります。

これらの人たちは、本当に Python を学ぶことのメリットを享受できているのでしょうか。

他にも、「今流行だから」というのもよく聞きますが、流行はよく変わります。
流行に乗って選んだ言語でプログラミングを始めた人たちがその思考法を習得したころには、
もう流行はその言語ではなくなっているかもしれません。

だから、僕は、誰かが「この言語がいいぞ」などということは、そこまで重要なことではないのだと思います。

本当に大事なのは、プログラミングを通じて、自分が何を作りたいか ということです。

ゲームが作りたいわけではないのに Unity をおすすめするのは適していません。

スマホ向けアプリを作りたいなら、Java か Swift かを学んでみる、
自分が人工知能を作ってみたいなら Python を初めてみる、
Web サービスを作ってみたいなら HTML+CSS+JS を学んでみる、など。

プログラミングは 目的ではなく手段 なのです。
プログラミングを始めるにあたって、まず何を作るかを決めるのではなく、
言語を選び始める、というのは、僕は適切な手順ではないと思います。
言語ありきでプログラミングをしてはいけないと思います。
その意味で、僕は「言語なんて何でもいいのだ」と言っているのです。

自分の作りたいものを形にしていく過程で、思考法を習得していく

先ほど「プログラミングは目的ではなく手段」だと書きました。
これは、プログラミングを学んでいく姿勢にもつながります。

例えば、変数や関数の概念や構文について、座学のようにネット上の記事を読んで理解したり、
ネット上のサンプルコードをコピペして動かしたりしているだけでは、
実際に思考法を身に着け、応用していく力には結びつかないと思っています。

「プログラミングって何なのか知りたい」という人で、割とそのような人がいるかもしれないのですが、
そのような学習方法をとっていると、進捗が生まれないか、あるいは挫折します。
また時間が空いて、ちょっとプログラミングしてみよっかなと思ったときに、忘れていたりします。

そこで、自分の作りたいものを開発しながら、プログラミングの基盤となる思考法を習得していく方法が、
最も効率の良い方法だと考えています。

もちろん、最初から壮大なアプリを作るわけではありません。
まずクイズアプリや Todo アプリなど、こういうのも作れるのだということを提示して、
それを自分なりにカスタマイズしながら製作していくうちに、プログラミングの「勘」がついていくものだと思います。

実際、僕も様々なアプリを製作していきながら、プログラミングを学んできました。
そこで学んだベースとなる考え方は、今も生きていると感じています。

プログラミングができるというのは、写経して正しく実行できる能力ではない

さて、少し話題が変わりますが、「プログラミングができる」と名乗っていいのは、
どれくらいのレベルの人以上だと思いますか?

  1. Hello, world! が実行できる
  2. ネット上のサンプルコードをもとに、簡単なアプリを作れる
  3. 他人のサンプルをカスタマイズして、機能を追加したりできる
  4. 自分でアプリを設計して、中規模程度のアプリを作れる
  5. 有名なデザインパターンを駆使して、可読性やパフォーマンスの高いアプリの開発を目指せる
  6. 自分でアーキテクチャを組み立て、大規模なアプリを開発・運用できる
  7. それ以上

人それぞれだと思いますが、僕は 3. 以上だと思います。
「自分の考えているものを形にするプロセス」がプログラミングです。
1. 2. にはそのプロセスは含まれていないと思います。

誰かが書いたコードをコピペするのは誰だってできます。
それで正しく動いたとしても、そこには自分のクリエイティビティは入っていません。

何かを初めて自分の力で作れるようになった時、プログラミングができるようになったと言うのだと思います。

まとめ

今まで僕は、小学生から大学院生、また社会人など、
色々な人とプログラミングをさせていただきました。

その中でお互いの持っている知識や考えていることを伝え合ったりする機会もありました。

今回このように友達にプログラミングを本格的に教えるということを通じて、
そこで考えていたことを明確にすることができ、

「教える」ということは本当に自分自身にも学びをもたらすのだと分かりました。

ご意見・ご感想などありましたら下のコメント欄にお書きください。

※今回はやけにまじめですね。これで終わります。