プログラミング技術はどこまで踏み込んで学ぶべき?

プログラミングを教えていて自分の中でずっと課題となっているのは、何をどこまで掘り下げて説明するべきか、です。

今、プログラミングの技術は昔に比べるとすごく便利になっています。

プログラミング言語は0と1だけの機械語から始まり、アセンブリ言語、高級言語、、、と徐々に進化してきました。

最近ではプログラミング言語と共にフレームワークと呼ばれる技術も充実してきました。フレームワークは、プログラムの半完成品のようなもので、少ない記述で簡単にプログラムを作成できるような技術です。
(Ruby on Rails, Laravel, Django, Spring Boot などがあります。)

フレームワークはしっかり学ぶべき?

フレームワークは慣れてしまうととても便利です。
プログラミング言語の知識すら細かく知らなくても、フレームワークの知識を覚えてしまえば、ある程度の規模のプログラムが簡単に作れてしまいます。

今、実際の現場での開発はフレームワークがほぼ必須の技術となっています。そのため、プログラマーとして現場でいち早く戦力となるためには、フレームワークについての技術を多く教えることが近道のような気もします。

ただ、私はプログラミング教室でプログラムを教える仕事をしていますが、正直フレームワークの教育にはさほど力を入れていません。軽く触れてみて、「こんな技術があるんだ、ふ~ん」ぐらいで良いと思っています。

フレームワークの教育に力を入れない理由は2つあります。

1つ目は、フレームワークの使い方に詳しくなったとしても、内部でどのような動作をしているのかを知らなければ、問題が起きた時に対処するのが難しいし、応用力もなかなか身に付かないと考えているから。

なので、フレームワークがどういう仕組みになっているのかは知っている限り細かく説明しますが、使い方に関してはさほど時間は割かないようにしています。

2つ目の理由は、現場で開発するにあたって習得せざるを得ないものを、あえてプログラミング教室で時間をかけて学習するのは時間がもったいないと思うからです。

プログラミング教室では、1日数時間、がっつり講師にプログラミングを教えてもらえる環境があります。
であれば、業務に入ってから習得に時間をかけるものを、あえてプログラミング教室で学習する利点はあまりないと考えます。
私の方針としては、重要だけど、自分から踏み込んで勉強しないと身に付かないような知識をたくさん身に付けてもらいたいと考えています。

ただし、実際に現場で働いているエンジニアの人は、就職してきた新人には早く戦力になってほしいと思うはずです。そうなると、直接役に立たない知識よりも、現場で使えるフレームワークの知識を身に付けてほしいと考えるような気がします。

講師がプログラミング学習者に教えたい技術と、開発現場の人が新人に早く身に付けてほしい技術。両者を一致させるのはなかなか難しい課題だと感じます。

どこまで深掘りするべきか

私はプログラミングを教える時、表面的な使い方に関する知識よりも、仕組みに関する知識を教えることに力を入れています。

それは、私自身が仕組みを知ることの方が楽しいというのもありますし、仕組みを知る方がエラーの解決など、問題解決において応用が効くと思っているから。

ただ、どこまで深掘りして学ぶべきかは難しいところ。

プログラミング言語を掘り下げていけば、アセンブリ言語や機械語までさかのぼれるわけですが、そこまで知っておく必要があるかというと、おそらくその必要はないと思います。(機械語やアセンブリについては私も詳しく知りません。。)

プログラミングをさらに突き詰めていけば、最終的には数学の理論になります。中学高校レベルの数学はプログラミングをする上では、教養として知っておいた方が良い気はしますが、コンピュータやプログラミングがどう動いているのかまで知っておいた方が良いのかは微妙なところです。

もちろん知っておいて損はないと思いますが、学習コストに見合うメリットが享受できるかは怪しいところ。

その技術は洗濯板か、それとも包丁か

技術をどこまでさかのぼって学ぶべきかを考えるときに、その技術が洗濯板か、それとも包丁なのかを考えると良いと思います。

洗濯板は洗濯機やコインランドリーの普及によりもはや使われることはないものです。今の時代に洗濯板による選択の仕方を学んだところで、その技術が役に立つことはないでしょう。

一方、包丁は、便利な調理器具が登場している今の時代でも、未だに料理をする際にはほぼ必須の調理器具です。

つまり、時代が進んで技術が発展したとき、洗濯板のように完全に不要になるものもあれば、包丁の様に残り続けるものもあるということ。

おそらく、プログラミングの技術に関しても同じようなことがいえるのではないか、と思っています。

・今の時代に機械語やアセンブリ言語について学ぶのは、洗濯板による洗濯の仕方を学ぶのに等しい。
・オブジェクト指向やアルゴリズムについて深く学ぶことは、料理人が包丁さばきの技術を身に付けるのに等しい。
・フレームワークの使い方に慣れるのは、ボタン操作で簡単に調理できる調理器具の使い方を覚えるのに等しい。

というのが現時点での私の考えです。

おそらく時代の流れとともに変わってくるものだと思いますが、何をどこまで学ぶのが最適なのか、何かを教える側である以上日々考えていく必要がありそうです。

サポートいただくとめちゃくちゃ喜びます。素敵なコンテンツを発信できるように使わせていただきます。