2017年末にVBAの本を買い、
2018年3月から本格的にPythonを勉強し始めて、
2018年7月からフリーランスのプログラマーとして客先常駐しているryota@i2AAと申します。
今年で35歳です。
文系大学卒業してます。
大学では情報系の授業はありませんでした(たぶん…)。
仕事でプログラミングをしたことはありませんでしたが、
今では依頼されたツールを2つ作ったのちにリファクタリングをしたり、
機械学習のオペレーション(開発ではない)をしたり、
という日々を送ってます。
まだまだプログラマーとしてのレベルは低いんですが、
アリアハンを出発してレーベぐらいにはいるんじゃないかなと思い、
アリアハンにいる間にもっとこんなことしとけばよかったな、
逆にこれはしなくてもよかったな、
ということを整理整頓しようと思います。
##しておけばよかったこと
インプット重視の勉強だったので、もっと最初からアウトプット重視でいけばよかったな、と思います。
特に最初は
「コードの書き方を知ろう」
「文法を覚えよう」
「forの使い方とは…ifの使い方とは…」
という、お勉強からスタートしてしまいがちです。
でも、それを単体で覚えてもなかなか使える知識にはなりません。
なので、最初から何かを開発することをおすすめします。
もちろんいきなりサービスを開発するのは難しいので、
本に書いてあるサンプルツールとかWebにあるチュートリアルとかを丸写しでいいと思います。
文法単体で覚えるよりも、そういった完成系がイメージできるものを自分で作ってみることで、
自然と文法も覚えるようになってきます。
英語でいうと単語や文法の勉強じゃなくて会話から始めてみよう、という感じです。
やりながら足りないところを文法の勉強で補う、という流れがいいと思います。
##しなくてよかったこと
プログラミングを学び始めたての頃は、
「自分の頭で考える」
という時間はいらないな、と思います。
まずはパクることから徹底的にやった方がいいです。
僕はパクるのが苦手で、UIをどうするかとか、
どういったロジックでコードを書いたらいいかとか、
いちいち自分で考えてました。
でも引き出しが少なく、中に入ってる情報も少ないのに、
そこで考えてもいいものができるわけがないです。
最初はいろんなところからパクってきて、
作りながら引き出しを増やして中身を満たしていけばいいんです。
材料がないと料理ができないので、まずは材料を増やしていきましょう。
材料が豊富になってきたら、自分の頭で考えられるようになってくるので。
ひとりでうんうん唸ってる時間は、最初は無駄です。
##しておいてよかったこと
「まず受注した」ということ。
これはめっちゃ大事やな、と思います。
プログラミングに限らず、仕事全般に言えると思うんですが、
「勉強してレベルが上がったら仕事をもらおう」
と思いがちです。
しかし、最もレベルが上がるのは、実際に納品しないといけない状況になってから、なんですよね。
なので、勉強してから受注、ではなくて、
受注してから勉強、が一番いいパターンです。
お客さんからしたら、納期までに期待している品質のものが納品されたらいいわけですから。
間に合わせればいいわけです。
そうすれば、
「三日坊主で終わった」
「何を勉強すればいいかわからない」
「一人で勉強してもモチベーションが続かない」
という初心者にありがちな挫折理由が通用しないので、
続けるしかない、というわけです。
最初は無料とか格安とかでいいので、
「誰かに何かを納品する」
という状況を最初に作ってしまいましょう。
##これからしようと思うこと
最近は「勉強法を勉強する」ということにハマってまして、
その中でも科学的に正しいとされている勉強法をいくつか紹介したいと思います。
最初の2つは、勉強に対するスタンスです。
1. 能動的に勉強する
2. 誰かに教えるつもりで勉強する
テキストを何度も読み返す、
言われたことをただこなす、
といった受け身の姿勢では、情報が頭に入ってこないし、
入ったとしても記憶として定着しません。
なので、能動的に取り組む必要があります。
興味のある分野を勉強する、
必要なツールを作る、
教えてもらったことや本に書いてあることにツッコミを入れてみる、
などなど。
学んだことをアウトプットする、というのも能動的な姿勢だと思います。
また、能動的な姿勢をもつのに一番いいのは、
誰かに教える、または教えるつもりで学ぶ、
ということです。
ただ単に自分のためにインプットするよりも、
誰かのためにアウトプットするという前提があった方が、
勉強効率が高まります。
僕の場合、友達の中で一番プログラミングが苦手そうな機械音痴な友達に教えるなら…という前提で勉強してます。
次の2つはもう少し具体的な手法です。
3.分散学習とインターリーブ
4.検索学習
同じ内容を続けて勉強する(集中学習)よりも、
同じカテゴリーで似てるけどちょっと違う勉強をし(インターリーブ)、
時間をあけて復習する(分散学習)、という方法です。
たとえば
「3時間かけてPythonのWebスクレイピングを勉強した」
ということよりも、
「PythonのWebスクレイピングを1時間、基本的な文法を1時間、JSONファイルの操作を1時間勉強した」
の方がいい、ということです。
また、復習は毎日やっても効果が薄いので、
一定期間おいた方が長期的に見て定着率が高くなります。
7~10日ごとに復習する方がいいという説と、
1回目:1~2日後
2回目:7日後
3回目:16日後
4回目:35日後
5回目:62日後
という間隔で復習する方がいいという説があります。
どちらも効果があったみたいですが、共通しているのは
「忘れかけたころに、思い出そうとする過程が記憶力を強化する」
ということです。
覚えているうちに覚えていることを確認しても、脳に負荷がかかりにくいんです。
ちょっと忘れかけているときに、
「えっと…あれ…なんやっけ…あ!そうそう!こういうことや!」
という負荷のかかり具合が、脳の強化には最適である、ということです(検索学習)。
なので、同じことを毎日ずっとやるよりも、ちょっとずつ変化させて適当なタイミングでもう一度やってみる、ということを意識してみてください。
ということで、いろんな角度からプログラミングの勉強法についてまとめてみました。
コードの書き方とか本の選び方とか、という勉強法はよく見るんですが、
ちょっと違った視点での勉強法もあった方がいいんじゃないかなと思い、まとめてみました。
ざっくりまとめたのでわかりにくいところもあるかもしれませんが、
コメントやご指摘いただけたら加筆・修正します!
一緒に勉強がんばりましょうー!