お菓子と紅茶と、時々IT

趣味のお菓子(作る方)と紅茶の話、そして今進めているIT(プログラミングなど)に関する勉強の記録。

効率的なプログラミング勉強法の模索

最近プログラミングやWebの勉強を本格的にやるようになって、

  • 最短で効率的に、スキルを身に着けるにはどう勉強を進めれば良いか?
  • いかにモチベーションを保つか
  • いかにプログラミングの勉強を仕組み化して習慣的に継続するか

といったことを日々考えるようになった。今はまだエンジニアとして就業していないけれど、いざ働き始めた時に実力が伴っていないと死活問題なので・・・。

 

よく「プログラミングを学ぶには、まずはコードを書くこと!」って言うけれど、なぜプログラミングの世界ではこの「写経」がオーソドックスな勉強方法としてまかり通っているのか、よく考えたら、というかよく考えなくても、謎だ。

だって受験勉強、学校のテスト対策では、この「写経」が時間的・労力的に非効率的なのは言わずもがなな話だからだ。

例えば教科書の文面をただ写経することがいかに非効率的か、想像がつかないか?少なくとも私は、そんなことして点数が伸びた試しがない。

 

ただし、教科書をひたすら読むという対策方法は、一定の効果を上げていた。

特に大学のセンター試験(当時)なんかは教科書の内容しか出ないので、とにかく教科書の片隅に書いてある備考を含め片っ端から読み通すという、それだけを何回も繰り返すだけで、特に暗記科目系(地理を除く地歴公民全般←地理だけは非常に苦手だった、化学など)は短期間で点が取れるようになった。最初は全ての内容が頭に入らなくとも、何度も何度も読めば、次第に教科書の内容が頭に入ってきて、最終的に教科書の内容を丸暗記できてさえすれば良い。

でもプログラミングにおいて読み流しは効果を発揮しない。少なくとも私は、プログラムの字面を追って実力がついたことがない。

こはいかに??

 

理由を考えてみた。答えはシンプルで、「プログラムは日本語じゃないから」これに尽きる気がした。

PHPでもJavaでも、プログラムの法則とか何にも知らずに、わからなくても無視して、ただアルファベットとか記号("{", "&", "(" etc...)を目で追うだけなら、そりゃ身にはつかんて。

一方でプログラミングではなぜ「写経」が「読み流し」よりも効力を発揮するのか、この理由も考えてみた。あくまで私の実体験に基づいた予測だが、「写経」している時の方が、「この括弧はどこからどこまでを括っているのかな〜」とか、「この変数は何を参照しているのかな〜」とか、単にアルファベットと記号を眺めている時よりも考えるようになるからなのでは?と思った。

写経をする→括弧とかアルファベットとか、一文字一文字打つ→各々の意味を考えるようになる

のではないか?

 

でも、「括弧とかアルファベットとか」のそれぞれの意味を考えるために、いちいちエディタでタイピングしなきゃダメかね?「写経」しなきゃダメかね?

だってタイピングって、「写経」って、疲れるし、何より時間も無駄だと思うの。もっと効率的な方法があるのでは?

理想は「読みながら、括弧とかアルファベットとかの意味を一つ一つ理解してゆくこと」ではないか?

 

そこで私が考えた勉強方法は

「プログラムに日本語訳を振りながら読むこと!!」

どこかの出版社が「振り仮名Python」なるパイソンの入門書を出していたと思うけど、パイソンならずなんらかのプログラミング言語フレームワークをマスターしたいのなら、心の中で日本語訳を振りながら読んで、ちゃんとプログラムのアルファベットや記号の意味を理解しながら読み進めるのは大事なことだと思う。

例えば、「この行は、この単語(変数・定数 など)何を意味しているか、エンジニアでもなんでもない人に説明できるか?」を自問しながら、プログラムを読み進める。わからなければ立ち止まって参考書の説明をもう一度読み返したり、ググって調べたりする。

その方が「写経」より時間も労力もかからないし、かつ「写経」よりも各々の単語や記号の意味をスルーせずに済むのでは?と思う。

 

という訳で、私は今「振り仮名ソースコードリーディング」なるものを進めている。

今読んでいるのはこの2冊

http:// https://www.amazon.co.jp/dp/4802611846/ref=cm_sw_em_r_mt_dp_U_g4V-Db1ARB4RC

http:// https://www.amazon.co.jp/dp/4802611846/ref=cm_sw_em_r_mt_dp_U_g4V-Db1ARB4RC

「リーダブルコード」の本は1回さらっと読んだのだがC++のコードがよくわからず、後半が特に理解度が浅いので、もう1回精読してみようと思っている。