プログラミング学習の本質
こんにちは。あなたが共有してくれたブログ記事、プログラミングに暗記力は不要。これ、結構、考えさせられますよね。
ええ、そうですね。プログラミング学習というと、どうしても覚えるってイメージおりますからね。
ですよね。この記事の筆者は、学ぶ人が覚えるって言葉を使うことに、ちょっと違和感があると。
はい。
今回は、なぜそう感じるのか、そして、じゃあ、プログラミング習得に本当に大切なことって何なのか、その辺りを探っていきたいなと思ってます。
いいですね。掘り下げていきましょう。
まず、この記事で筆者が気になった点として挙げているのが、学生さんのアンケートにあった、しっかり覚えようと思いますっていう言葉だそうで。
ああ、はいはい。
もしこれが、なんていうか、単語の暗記みたいに文字通り、記憶することを指しているんだとしたら、それはプログラミングの本質とはちょっと違うんじゃないかって指摘してますね。
ええ、そこが一番のポイントかもしれませんね。
この記事で強調されているのは、プログラミングっていうのは、以前に覚えたコードをそのまま打ち出す、そういう作業じゃなくて、
ある目的を達成するために、どういう処理を組み合わせるか、新しく設計していく、そういう創造的な活動なんだということなんです。
設計ですか。なるほど。ただコードを打つんじゃなくて、その全段階というか。
そうですそうです。全体の構造を考えるというか。例えば、筆者はこれを小説を書くことに例えてるんですよね。
へえ、小説ですか?
へえ、小説家だって暗記した文章をただ並べているわけじゃないですよね。新しい物語をその場で生み出していく。
ああ、なるほど。それは分かりやすいですね。じゃあプログラマーも目の前の課題に対してどう解決するか、その設計図みたいなものを頭の中で作って、それをコードに落とし込んでいくと?
まさにそういうイメージです。
だから漢字や言葉が分からなければ辞書を引くのと同じで、プログラミングの細かい書き方とか、そういうのはその都度調べればいいじゃないかっていうスタンスなんですね。
おっしゃる通りです。もし以前と全く同じプログラムが必要なら、それこそコピー&ペーストすれば済む話ですからね。
確かに。
だから学習で本当に大事なのは個々の命令を記憶することそのものじゃなくて、むしろどういう組み方をすればどんなことができるのかとか、どういう書き方なら後で読みやすいか、問題が起きにくいかとか、あるいはなるべく効率の良い手順は何かといった、もっと基本的な考え方、原事原則を学み取ることなんだと強調されていますね。
うーん、でも例えば基本的な文法、イフ文とかフォ文とか、そういうのまで毎回調べてたらちょっと非効率な気もするんですが、そのあたりはどうなんでしょう?
それはもちろんそうですね。頻繁に使う基本的な公文なんかは、やっていくうちに自然と身についていきますよ。それは小説家が基本的な語彙とか文法を知っているのと同じで。
なるほど。
ただ問題なのは、学習の目標を暗記すること自体に置いてしまうことなんです。そうすると本来もっと大事なはずの、どうやって問題を解決するかっていう、その思考力のトレーニングの方がおろそかになりがちじゃないですか。
学習のアプローチ
あーなるほど。目的と手段が入れ替わっちゃうみたいな。
そうそうそういうことです。筆者が心配しているのは多分そこなんじゃないかなと。
確かに記事にもプログラミング暗記力で検索しても、やっぱり暗記は不要で、それより論理的思考力が大事だっていう意見が多いって書かれてましたね。
この論理的思考力っていうのは、プログラミングにおいては具体的にどういう力になるんですか?
そうですね。例えば何か複雑な問題があったときに、それを一つ一つの小さなステップに分解していく力とか、あるいは条件によって処理をどう分けるか、その分岐を考えたり。
あとは書いたコードが思った通りに動かないときに、どこに原因があるのか、順序立てて特定していく力とか。
あーデバッグですね。
そうですそうです。まさに問題解決の土台になる力ですよね。だからプログラマーの本当の価値っていうのは、記憶容量の大きさとかじゃなくて、この設計する力とか、論理的に考える力にあるんだということなんです。
うーん、深いですね。そうなると、私たち学習する側としては、どこに力を入れて勉強していくべきか、ちょっと考えさせられますね。
ええ。
筆者も最後に、くれぐれも力の入れ所を間違わないようにしてほしいって念をしてますし。
そうなんですよ。これはあなた自身にも問いかけたいですね。プログラミングを学ぶ上で、どこに一番フォーカスしたいですか?設計する面白さなのか、それともロジックを組み立てるところなのか。
というわけで、今回の話から見えてきたのは、プログラミング学習においては、単に情報を暗記するんじゃなくて、それをどう活用して問題を解決するか。その設計力とか、論理的思考力を養うことの方が、はるかに重要そうだということですね。
ええ、まさに。そこで最後に、あなたに一つ考えてみてほしい問いかけがあります。
はい。
もし、プログラミングが単なる記憶じゃなくて設計だとするならば、あなたが今学んでいる他の分野、まあ仕事のスキルでも趣味でも何でもいいんですが、そこでは覚えることと、理解して応用したり設計したりすることのバランスってどうなっていますかね?
ああ、他の分野にも当てはめて考えてみる。
そうなんです。もしかしたら、無意識のうちに覚えることに偏りすぎていて、もっと大事な応用力とか、想像力とか、そういう部分を見過ごしている分野があるかもしれないなと。
なるほど。それはちょっとハッとさせられる視点ですね。
ええ。ぜひ一度、ご自身の学習方法なんかを振り返る、そんなきっかけにしてもらえたら嬉しいですね。
はい。ぜひ考えてみてください。