プログラミングをどう学ぶべきなのか
一般に、何かを学ぶための方法を確立するのは、それを学ぶよりも難しいものです。 そして、プログラミングにおいてもそれは成り立つようです。 世間には様々なプログラミングの初学者向け講座が溢れており、私自身もよくそのお世話になっています。 一方で、講座一つで多くのことを理解できた試しはなく、結局は手も動かすことでようやく腑に落ちるものです。
座学と実践というのは車の両輪らしく、習得のためには程よい塩梅で両者を組み合わせる必要があるようです。 しかし、それがなかなか難しいものです。 人から教えてもらってばかりでは何もできないですが、自身で成し遂げることに執着しては物事は前に進みません。 この「程よい塩梅」が不明であるために、多くの学習方法がいまもなお試されているのでしょう。
そのような訳で、この記事では自身のプログラミングの習得経験を基に、この「塩梅」を少しでも顕にできないか試みたいと思います。
LLM 以前
ChatGPT のような LLM の登場前後で、自身のプログラミングの習得方法は少し変わりました。 そこで、話を LLM 前後に分けて考えてみたいと思います。
そもそも、私のプログラミング習得のモチベーションは「〇〇を作りたい」というところにあります。 〇〇はゲームやシミュレーション、ウェブサイトなどその時々なのですが、いずれにせよ、何かを作りたいという動機があります。
LLM 登場以前では、ネットで「〇〇 作り方」などと検索を行い、作る方法を調査していました。 様々な情報を比較し、自身がやりたいことに近い記事を一つ見定めます。 例えばゲームであれば、あるジャンルのミニゲームの作り方を、何らかの言語・ライブラリを用いて作成する方法が解説されているでしょう。
そういった記事を見つけたら、まずはとにかくそれを真似します。
例えば C++ であれば std
に関する話題など、どの言語においても色々と基礎があります。
しかし、とにかくそういう難しいことは考えずにコピー品を作ります。
真似をしていると、色々と不満がでてきます。 何しろ、初心者向けのチュートリアルですから、自分が考える完成品とは差があります。 例えば、チュートリアルではスコア計算が非常に単純でゲーム性がないかもしれません。 あるいは、出現するオブジェクトの種類が一種類だけかもしれません。 コピー品に対して、これらの不満を改善していきます。
改善を行うには、プログラミング言語の仕様を知る必要もあります。 ここで初めてプログラミング言語のドキュメントや、言語そのものの解説記事を探します。 関係する事項をネットで検索し、試してみるのです。
このサイクルを繰り返していくと、やがて自身の不満のスケールが大きくなっていきます。 「BGM を付けるにはどうするのか?」 「シーンを複数用意したい」 などなど⋯⋯
このサイクルを反復・拡大するというのが LLM 以前の私のプログラミング習得でした。 作成物の規模は徐々に大きくなり、プログラミングの知識も増えていくのでした。
LLM 以後
LLM が登場した後、情報収集・検索のソースとして LLM が大きな比率を占めるようになりました。 チュートリアルのみならず、そこそこの規模のコードも出力してくれるようになりました。
しかし、LLM 以前に行っていたサイクルは現在も続けています。 LLM の出力したコードをコピーし、LLM では及ばなかった部分の改善を行う、という要領です。 一つ一つの課題は大掛かりになりがちで、その分あれこれと考えたり学んだりする機会もあります。
必要こそが学習を促すのかもしれない
プログラミング習得の方法について書くつもりでしたが、プログラミング習得の動機についての説明のようにもなってしまいました。 これはすなわち、何かを作りたいという動機、必要こそが学習を促すということのあらわれかもしれません。
必要こそが学習の原動機となり、座学と実践の車輪を回すのかもしれません。
しかし、正直なところ、私はプログラミングの知識を体系的には学習していません。 プロ目線ではこの点をどのように考えるのか気になるところです。
最後に、LLM のプログラミングへの活用法は世間では目下の議論テーマです。 そのうち本記事では深堀りできなかったこの部分についても、感想を述べてみたいと考えております。