人は忘れる生き物
先日記したプログラミングについての記事において、私の場合は目的とするプログラムを作ったらそれで満足してしばらくプログラミングから離れてしまうという事を、VB、Javascript、PHP、C#、Pythonと繰り返している訳で何度やってもまた初級レベルから必要に応じて再学習(短期では済むものの)しなくてはならない事に触れました。
仕事としてプログラミングに接しているわけではないので仕方ないと自分なりに結論づけているものの、実に無駄が多いということは自覚しています。
余談ですが、TVをほとんど観ない私が唯一録画して観ている番組があります。「ライオンのグータッチ」という番組なのですが、第一線で活躍した経験のあるアスリートが、まだ芽の出ていないスポーツ少年少女の所に出向いて指導をする番組です。(既に突出している少年少女を指導する番組もある様ですがそちらには興味がありません)
私自信も幼少期は少年野球をやっていましたが、やはり指導者の影響力は強いもので、教わった事を繰り返して感覚的なものを掴んだら一気に伸びることを経験しています。そういうところがこの番組の面白さで胸アツな気持ちにさせてくれるので気に入っています。
何事も反復練習が必要
子供の頃は何をやっても基礎練習ばかりで楽しくないというのは、誰でも経験していることだと思います。スポーツもランニングしたり、腕立て、腹筋をしたりして基礎体力をトレーニングします。かなり昔のことなので正確なところは記憶していませんが、当時は友達(チームメイト)と楽しく野球ができればいいと思っていました。
中学校に入ってソフトボール。この頃になると体格差がかなり影響する様になり、手の大きさのハンディもあり私の手では大きなソフトボールを握るのが難しくなりました。同級生でも手の大きい奴は思いっきり投げられるので速いボールが投げられます。私の場合はボールを持つ手に力が入るので速いボールはなかなか投げられませんでした。
きっとこの辺りで基礎(生まれ持った体格差を含め)の積み重ねに差が生じてきたんだと思います。レギュラーになる為に努力しなくてはならないという現実的な厳しさも当然生じてきます。小柄だった同級生が急に成長して追い抜かれたり。それでも割と真面目に少年野球には取り組んでいたので技術的なものは負けてはいなかったのでギリギリレギュラーで使われる程度でした。
大人になって社会人として揉まれて生きてきた結果、気づいたことは基礎はやはり繰り返し行うことが重要だということです。そして無意識にできるレベルに達すれば応用力をより効率的に使える様になるということです。基礎を完全に自分のものにしていないと少し離れると抜け落ちてしまいます。まさに私の付け焼き刃的なプログラミング学習(目的のプログラムが完成したらやらなくなるので)と同じことです。いつまでも初学者向けの資料を参照している様では効率が悪くて捗りません。これはスポーツにも同じことが言えるし何事にも共通していると思います。
プログラミング基礎は人それぞれ
何事も基礎が大切だということに触れましたが、プログラミングはちょっと違う部分があります。もちろん変数の扱いやループ処理等の基礎はどの様なプログラミングにも必要なので基礎知識として身につける必要があります。しかし、目標としているプログラムの仕様によっては、何から何まで身につける必要はありません。
プログラミングの学習は、覚えたスキルを使ってできることを繰り返し、また応用して色々なプログラムを作ってみるという発展的な繰り返し学習で上達して行けます。その時に足りない知識を学習してまたそれを使って更に発展的なものを作る。この段階的なステップを踏みながら学習して行くことで良く使う手法がどんどん身についていきます。1回切りで使わなくなった知識は私と同様に抜け落ちてしまうでしょう。
この様にして反復するしかありません。写経の様に同じものを繰り返し作れるという忍耐力があるなら別ですが・・
ネットでレッスンが効果的
最近はプログラミングスキルを身につける動画レッスン(基礎)が沢山あり、鮮度の高いスキルを身につけられるので、下手に古い書籍を手に入れて学習するより動画やネットで学習した方が効率が良いと思います。なぜならプログラミング言語はどんどん進化していく為、古いバージョンの知識は使えなくなっていくからです。
また、ライブラリの充実によりスクラッチから書き起こす必要のあった処理がライブラリを呼び出して使い方を簡単に調べるだけで処理を済ませられることも多いです。Pythonはこのライブラリが充実しているので少ないスキルで目的を達成できることもあり、初学者には向いているプログラミング言語だと思います。
「Pythonで○○をする」というタイトルのレッスンが沢山みつかります。興味のあるお題を探し出してその手法をやってみる。全部理解出来なくても繰り返し使っている内になんとなくわかってきて、いつの間にか理解出来ているという事も多々あります。
Pythonをオススメする理由
先述の通りライブラリが充実していることが個人的にはPythonを選んでいる理由の一つです。少ない基礎スキルだけでライブラリを使えば目的とするプログラムが作れてしまいます。これは目標を掲げることがまだ苦手な初学者にとってはかなりのメリットです。
特にWebスクレイピングの手法を身につけるお題がオススメです。なぜならネット上には多種多様の情報があり、自分が興味を持っている情報にアクセスし、それらの情報から欲しいものを自分なりに取得できるからです。
限定的なお題の場合、そこに興味を持てなければモチベーションも保てませんし、より発展的な事に挑戦することが出来ません。つまり繰り返し学習が出来ないのでモチベーションが下がって離れた期間で抜け落ちてしまいます。
沢山のデータを扱うのが好きな人はライブラリ(Pandasなど)を使って色々な解析をすると面白いでしょう。最初はExcelの方が便利だと思うかも知れませんが、慣れてくるとPython+Pandasの凄さを実感するでしょう。こなるとプログラミングの醍醐味を肌で感じ取れる様になります。(別にそれほど難しいことではありません)
どんどん繰り返そう
動画レッスン等で基礎スキルを身につけたら、自分の興味をもつお題を考え出してどんどん作ってみるのがオススメです。いきなり複雑で難しい事に挑戦するよりもシンプルな結果が得られるところから初めて完成させ、それを元により複雑な事に挑戦して行くと、繰り返し練習となります。プログラムで言えばバージョンアップです。
覚えたスキルを何度も何度も繰り返す内に、参考資料を確認しなおす手間が減っていきます。そうすることによって身に付いて行き時間が経っても忘れなくなります。そこまでやっておくと効率が全然違うのでもうひと頑張りすれば身につくというレベルまで頑張る努力が必要です。
レッスン動画のオススメ
個人的には、レッスン動画は洗練されているものよりも、動画を作成した人の手順や癖が読み取れるものが好みです。有料レッスンは無駄を削ぎ落として(録画・編集で洗練させている)しまっているので、書籍を読んでいるものと大差ないと感じます。
YouTube等でプログラミングを紹介してくれている動画の中には、洗練されていなくて遠回りしている手順が動画に含まれていたり、エラーが出ている様子を動画にそのまま残してくれているものがあります。自分も同じエラーを起こす可能性が高いし、エラーが生じた場合の対処方法(調べ方)を学習できて非常に効率が良いです。個人的にはこういうところが「価値ある情報」だと思っているので、お金を払って100点満点な動画レッスンを見るより役立ってしまうというのがなんとも面白いというか時代の変化なのだなと思います。
手際の悪いコーディングをしている人の動画を見ると、自分ならこうするなぁとか、ただ観ているだけでなく考えが働きます。そういうところが価値ある情報だと私は評価しています。人の失敗をみて学習するというのは昔から同じですしそれが歴史だからです。
最後に
つまりプログラミング学習において100点満点をいきなり目指す必要はないと思います。100点満点を目標とするから途中で挫折するのだと思います。バグが残ろうが、例外処理が不十分だろうが、動いて結果が得られれば合格点だと思います。その後、自分で不具合を修正したり、例外処理を加えていくことがプログラムのバージョンアップ、つまり自分自身のバージョンアップだと思うのです。誰にでも個人差や習得期間の差があります。
たしか、小学校か中学校でプログラミング学習が必修科目になったと聞きます。プログラミングに100点満点は無いと思いますので、学校で点数をつけるのは難しいだろうなぁと思いますが、相変わらず学校は模範的な回答を生徒に要求するのだろうか?と思っています。寸分違わず同じプログラミングのコードを要求するのかも知れません。もしその様な教え方であれば、きっとプログラミング科目は失敗するだろうと思いますし、ついていけない子供が沢山生まれるでしょう。
プログラミングを学校で教えるなら、個人個人の考え方を評価する柔軟性が教える教師には求められると思います。正しい結果を得る為には色々な道(考え方)があるからです。算数の授業なんかよりずっと教師に求められる教えるスキルは高いですね。どうなることだろうか・・と思います。
コメント