プログラミング学習は「覚える」のではなく「アイデア」を増やそう

プログラミングの講師をやっていると、初学者の方から「新しいことが多すぎて覚えられない」という悩みをよく聞きます。

私も社会人になってからプログラミング学習を始めた身として、これはとても理解できる悩みです。今までパソコンというとせいぜいネットで調べてパワポで資料作成くらい、という状況からのプログラマー入門だと、変数や条件分岐、繰り返しやポインタなど、初めて知る単語や考え方が多すぎて覚えきれない、という体験を私もしました。

しかもこの研修の先に現場配属と実務が待っているのかと思うと、「こんな入門的なことも覚えられないのにこの先やっていけるのか・・?」という焦りや不安が襲ってくることも理解できます。

しかし、実際に社会人になってから10年間、様々な現場で様々なサービスを開発してきた今振り返ってみると、この「覚えられない」という悩みは的外れであると私は考えています。

おそらく「覚えられない」という悩みの根底には「できるプログラマーは何も見ないでプログラムが書ける」という先入観があるのではないかと思います。実際にそのように考えている初学者の方と何人も話をしてきました。

しかし、これは大きな誤解です。むしろ「できるプログラマー」ほどたくさん調べます。場合によってはif文やfor文といったいわゆる「初級」で学ぶような内容でも調べます。その理由をここから書いていきます。

「何も見ないで書く」行為には大きなリスクが伴う

大前提として、技術は進歩します。これはプログラミング言語そのものにとっても例外ではなく、ほとんどの言語は定期的に言語自体のバージョンアップを行い、仕様変更や機能追加が発生します

言語の仕様変更については JavaScript などはとても良い例でしょう。何年か前は変数宣言には var を、関数の定義には function を、という具合に書いていましたが、今は変数宣言は let や const、関数の定義は関数式やアロー演算子を使うのが標準的です。

一度覚えた書き方を使い続けると、いつの間にかそれが「古い」書き方になってしまい、それによってプログラムが意図通りに動作しなかったり、他のプログラマーにとって分かりづらいコードになってしまったり、といったリスクが発生します。

また、「覚えた」内容自体が間違っている可能性もゼロではありません。特に一次情報ではないところから仕入れた内容は分かりやすさなどのために意図的に情報を間引いていたり、特定の状況でのみ使えるような書き方をしているものも少なくありません。そのような内容を「覚えて」使いまわしてしまうと、最初に書いたときはうまく動いたけれど、別の場所で同じように書いたらバグが発生した、ということも珍しくありません。

他にも、例えば Java で覚えた内容と Ruby で覚えた内容を混同してしまい、今 Java を書いているのに Ruby の場合を思い浮かべながら用意されたクラスやメソッドを使ってしまう、というミスも起こり得ます。(実際私もそれで失敗した経験があります)

いずれにしても、一度「覚えた」内容を信じて使い続けることは、システム開発において不具合や開発効率の低下などのリスクのある行為であることを理解する必要があります。

調べることで「より良いプログラム」が書けるようになる

プログラミングはたった1つの「正解」なプログラムを答える作業ではありません。目の前にある実装したい機能を実現するために自分で手順を考え、その手順を表現するプログラムを考え、実際に書いて実行して結果を検証する、うまくいかなければ別の方法を考える、というのがプログラミングです。常に最適な書き方というものは存在しません

そのため、一度「覚えた」内容が頭の中にあったとしても、それが今回も最適な書き方とは限らないのです。例えばfor文ひとつをとっても今まで知らなかった別の書き方があるかもしれません。知っている関数よりも目の前の要件にぴったりな別の関数が用意されている場合もあるでしょう。そのような「別の方法」というのは自分の頭の中を探すだけでは絶対に見つからず、ドキュメントやブログなどを読むことで新しく発見できるものです。

「じゃあドキュメントの内容を全部覚えればいいじゃないか」と思う方もいるかもしれませんが、プログラマーが接する技術というのはプログラミング言語の他にも利用するライブラリやフレームワーク、動作するプラットフォーム(WindowsやMac OS、Android や iOSなどなど)、開発ツールなどなどとても多く、これらのドキュメントの内容を全て頭に入れることは不可能です(少なくとも私には)。

当然これらも上述した通りバージョンアップを繰り返して仕様が変わったり新機能が追加されたりしますので、全部覚えようと頑張っているそばから内容が変わっていきます。ということも考えても、「覚える」という行為が効果的でないことが伝わるのではないでしょうか。

「覚える」のではなく「アイデアの引き出しを増やす」

より優れたプログラマーになるために大事なのは「覚える」ことではないというのはここまでの説明した通りです。

ではどう勉強すれば良いのか、という話ですが、私は「アイデアの引き出しを増やす」ことを意識するのが良いと考えています。

「この場合はこう書く」ではなく、「この場合はこんなアイデアが使える」というように一歩抽象化した内容で頭に入れておき、必要になったときにそのアイデアを形にするための具体的な書き方を調べる、という方法です。

人は新しいことを覚えようとするとき、数字や記号など、細かければ細かい内容ほど覚えづらく、逆に多少曖昧でも言葉やイメージで説明されたものは頭に残りやすい傾向があります。

これを利用して、頭に残しておくのはアイデアまでにし、具体的な記号の書き方や関数名、キーワードなどは都度調べれば、無理に「覚える」必要がなくなります。

社会人にとっての成果は「カンニング禁止のテストで点数をとること」ではなく、「使えるものは全て使って最適な結論(プログラマーの場合はプログラム)を提示すること」です。そして、ここでいう「使えるもの」というのはググって見つけた情報、上司や先輩からのアドバイス、自分で蓄えたアイデア、なんでも構いません。

優れたプログラマーに必要な資質のひとつに「調べる力」がよく上げられるのもこうした理由です。

「都度調べる」 = 「勉強しない」 ではない!

ひとつ注意しなければならないのが、「じゃあその都度調べれば良いってことは勉強しなくても大丈夫ってことだよね?」という誤解です。

極端なものになると「プログラミングは調べれば答えが出てくるから勉強しなくても大丈夫」というような話題も目にしますが、当然そんなことはありません。

あくまで「暗記する」必要がないのであって、調べる種にするためのアイデアはひとつでも多く頭に入れておく必要があります。そのために日々テキストを読んだり他のプログラマーの書いたブログを読んだり、公式ドキュメントに目を通したりする必要がある、ということです。日々勉強(というよりは情報収集)はいつになっても必要です。

まとめ

プログラマーにとって、初学者・上級者に関係なく「覚える」ことの重要度はそれほど高くありません。むしろ、「覚える」ことに頼ってしまうと無用な不具合を発生させたり、より品質の高いプログラムを書く機会を失ったりするリスクすらあります。

「覚えきれない」ことに不安を感じている方は、考え方を変えて細かな書き方を「覚える」ことをやめ、「引き出しを増やす」感覚で一つ一つの学習要素を身につけていくと良いでしょう。具体的にプログラムを書く際にどれだけ素早くテキストやドキュメントの必要な箇所を参照できるか、というのをひとつの成長の指標にしても良いかもしれません。

大事なのはアイデアを増やすことで、その都度機能を実現するためのより良い方法を新しく見つけることができることだと思います。

この記事が気に入ったらサポートをしてみませんか?