自分の勉強法が最短距離だったかはわかりません。もしかしたら、ずいぶんとまわり道をしていたかもしれないし、もっとスマートなやり方があった気もします。だけど今思い返すと「やってよかった」というのが本音です。自分からアクションを起こさないと何もはじまらないとうフレーズ、これは本当にそう思います。
この5年間すごく苦労しながらも頑張りました。今も全力疾走中です。5年間というのは私がオンラインプログラミングスクールに申し込んだ日から外資系IT企業に転職するまでの期間です。（今はもうちょっと時間経ってます。） こんなこと誰が想像できただろうか… 受講当時は地獄（←自己紹介をご覧ください）から抜け出すことしか考えてなかったんです。
今回の記事では、スクール卒業後の学習で苦労したことを中心に書いてみます。今のようにプログラミングスクールが流行り出す前に受講していてそれから5年以上経った人の状況ってあまりネットに転がってないと思います。これって実はかなり貴重なんじゃないか…と思ったり。（人生を賭けた実験台 笑）
この記事の内容は？
## 前提：私が利用したプログラミングスクール
私が受講したのはオンラインプログラミングスクールのコードキャンプです。画面越しにマンツーマンでレッスンをしてくれます。コースはマスターコースでした。今だとWebマスターコースというのが近いと思います。（めちゃくちゃカリキュラムはパワーアップしていると思います。）
HTML/CSS、JavaScript、PHP/MySQLを学習しました。ここでWebプログラミングの基礎を学びました。仕事をしながら受講できたのはかなり奇跡。全然プライベートの時間がなかったのですが、オンライン学習で効率的に学べました。
## プログラミングスクール卒業後の学習で苦労したこと
### Windowsだと効率が悪かった（注：当時の話です）
今はもうMacだろうがWindowsだろうが、スムーズに開発（プログラミング）できる感覚があります。が、前はそうでもなくて、特に初心者にはきつかったです。今みたいにWndowsにWSLもなかったですし。
受講当時はWindowsを使っていました。レッスンはWeb上のブラウザでプログラムを実行するためそんなに自分のPCを意識せずに進めることができました。卒業後は当然自分自身で学習を進めることになります。
書籍を買ったり、ネットを参考にしてプログラムを実行するわけですがどうもエラーになる。というか、プログラムを実行する開発環境自体がちゃんとつくれない。笑
書籍やネットはMacの使用を前提にしていることが多くて、Windowsだと結構な頻度で学習が止まってしまう。なので思い切ってMacを買いました。
今でもメインのマシンはMacです。
### 書籍・ネット・動画の通りにやっても動かない
単純に書籍・ネット・動画のプログラムコードが間違っていることもありますが、自分のケアレスミスで動かないこともしばしば。なんで動かないんだろ…とエラーメッセージと格闘する日々。でもこれでエラー時のアクションとり方を学べた気がします。エラーメッセージでググる、公式リファレンスをちゃんと確認することの大切さがわかりました。海外サイトのほうが情報が多いから頑張って読むと解決につながることが多い、なんてことを発見しました。経験のある人にとっては常識ですよね。全然知りませんでした。エラーログはある意味宝の山でした。
お金はなかったですが、時間を消費するほうが将来への不安が増して怖かったので、スクール卒業後はとにかく気になる書籍・動画があれば買いまくりました。1箇所でも役に立ちそうだと思えば躊躇せず。購入しても全然意味がなくて失敗もたくさんしました。本当に当時はお財布的に厳しかったですが、今は結果的にそこでかかった費用は回収できています。これが積極的な自己投資なんだなあと思い知らされます。
ちなみに、書籍は基本的は電子書籍で買います。動画はUdemyが多いです。Udemyで購入した動画は100を超えていました。ほとんどセール時に購入してます）
### CLIがよくわからない、Linuxがよくわからない
コマンドラインインタフェース (CLI: Command line interface) の勉強はしてこなかったので結構ハードルが高かったです。書籍を見ながら「これであってるのかな…」という感じで実行していきながら1つ1つのコマンドの動きを覚えていきました。
ローカルのファイル操作すら難しいというド初心者… SSHなんかは馴染みがないので仕組みの理解から… 学習を進めていくと、UbuntuやCentOSのLinuxのサーバーを立てて、コマンドで設定したりということもしたのですが、ホント難しかったです。環境構築って最初は敷居が高いですね。
が、今ではCLI操作がラクで仕方がありません。マウスでちょこちょこ設定するほうが面倒な場面も。バッチファイルを作って一連の操作をまとめて自動化できたときの爽快感はすごいです。
ローカルではshでもbashでもなくzshにしてます。最近はWindowを使うことが少ないのであっちのコマンドは忘れてきました。今はWSLがありますので、わりと簡単にLinuxシェルコマンドが使えるから忘れても良さそうです。私の場合は…
### Gitが怖い
何が起きているかわからない、なんか怖い。というのが最初の印象です。これ実行したらこれまで書いたコードふっとんだりしないかな、と謎の不安。
Gitは自分の書いたソースコードをバージョン管理できる仕組みです。2021年04月時点ですが、私の受講していたコードキャンプにログインして確認したところ、マイページにGit (GitLab)の簡単な説明が追加されているようです。
プログラミング初心者が早い段階で「Gitというものがある」ということを認識するのは、それだけでも十分価値があると思います。本格的に使い出すと最初は戸惑う部分も多いので、最初はあまり深い入りしなくてもいい部分かなと。焦らず学習を進めるべきです。チーム開発でも使いますので、業務では最終的には必須かと思います。
### タイピング精度が悪い
プログラミング初心者だった私にとっては、どうやったら短時間で経験を積んでいくかが重要になりました。例えば同い年で大学の頃からプログラミングに触れている人と比べると圧倒的に経験の量が違います。どうすればこの差を埋めることができるだろうか？ その解決策のひとつとして、私はとりあえずインプット・アウトプットのスピード、つまり生産性は最大まで上げておく必要があると考えました。そこで、タイピングにもメスを入れました。
当時はかなり我流な指の運び方でタイプミスも多く、時間を無駄にしていました。打ち方を矯正して、タイプミスを減らしスピードもアップさせて生産性を上げようという作戦に出ました。ググって指の運び方を調べて、ホームポジションからのきれいなタイプ方法を知りました。その後はオンラインのタイピングサービスを利用して、ひたすらスコアアップを目指しました。ある程度短期集中で習得できたと思います。日々の作業も効率的にできるようになったはず。矯正は短期集中で指に覚え込ませるのがよいと学びました。
このタイミングでキーボードをHHKBにしました。家電量販店で触ってみて打鍵感が気に入りました。自宅と職場で同じキーボードを使うようにしています。打ち間違いを減らしたかったんです。なのでHHKBは2台購入しました。このキーボードは結構なお値段がするため当時はとんでもなく痛い出費でしたが、これが大正解。有線モデルからBluetoothモデルに買い直したりしながらもうかれこれ数年HHKBです。
どこでも同じ感覚で打てるのは精神的によいです。きっとどんなキーボードでもある程度使いこなせちゃう人もいるんでしょうが、私は不器用なのできっと混乱してしまう。なのでどこでも同じキーボードを使うようにしてます。（ついでにマウスも。さらに言うとモニタ解像度も合わせてます）
### サーバー系の理解が難しい
若干上で触れたCLIとかぶりますが、サーバーに慣れるまでは本当に時間がかかりました。ローカルの仮想環境で試行錯誤したり、お手軽なレンタルサーバーからからはじめて制限があることに煩わしさを感じて色々できるVPSを契約したり…と色々やりました。
権限がやややこしい、ネットワークの設定が難しい、というか何もかも全然ピンとこない。笑 踏み台サーバーって何だ？ みんなが持ってるであろう常識すらなかったです。はじめてなので当然ですが、こういうことなんですよね、経験がないというのは。ここは1つ1つ壁にぶち当たって体に覚えさせていくしかない気がしてとにかくコマンドを打っては結果を確認、の繰り返しでした。
あーだこーだとサーバーをいじり倒す日々。何も前にすすまず2,3日消費したりするなんてこともあり、とても時間をかけましたが、この経験は重要だったと思います。
### クラウド系がわからない
クラウドをがんがん学んでいくのは卒業から結構時間が経過してからでした。AWS、GCP、Azureなどの便利さに衝撃を受けました。先ほど触れたサーバー系の学習ほんと基礎になり役に立ちました。こんなに時間のかかったサーバーの設定が数クリックでできてしまうのか！とびっくりしました。VPCなどのネットワークの設定のところとかは結構ハマりましたが、結局パターン化されてるので慣れてしまばクラウドのありがたさが身にしみます。私の場合はシステム構成図をちゃんと絵で書くと理解が進みました。
クラウドサービスは新しいサービス・機能がどんどん追加されていきキャッチアップが大変そうだと思いきや、実は基本となるサービスはそんなに多くなくて、それさえ抑えておけばなんとなるという印象です。
やっているとクラウドの設定すら面倒（設定の再現性の確保という意味）になってきて、結局今はインフラをコードで記述するということをしています。これは本当にすごい。
### Dockerがとっつきにくい
最初はとっつきにくいDocker。ほんとによくわからなかった。どこでも同じ開発環境が手に入るというのはすごく便利なんですが理解するには時間がかかりました。Dockerはもっと早く手を出してもよかったなと思いますが、他も色々勉強していたのでそんな時間はなかったかもしれません。経験の少ない初心者が時間をドーピングして経験を最大限積むにはDockerはうってつけだと感じました。
例えばアプリケーションを作るときは、コアとなるアプリケーションコードに集中できますし、ローカルでは動くのに本番サーバーでは動かない！なんてことも少ないです。変なところで時間を浪費せず、最終アウトプットを目にすることができました。ML等の分析環境構築でも大活躍。
Dockerには仕事でもプライベートでもめちゃくちゃお世話になっていて、大分前にトライアンドエラーを繰り返しながら作ったdocker composeのファイルが優秀すぎていろんな場面で流用しまくってます。ほんと素晴らしい技術です。
クラウドと同様でDockerを学習する際も「ペンで絵にする」というのが役にたちました。経験のある人はDockerfieを見ただけである程度イメージできるんでしょうが、ポートが複雑だったりコンテナが多かったり依存関係もあったりで、私は原始的な「絵」で理解するようにしてました。
### データベース系、特にSQLに馴染みがなさすぎてつらかった
アプリケーションを作ったり、データ分析を行うにはデータベースが不可欠です。ですがSQLがむずかしい。笑
SELECTはわかるんですが、GROUP BYになるともうわからない。DISTINCTってなんだ？ JOINはどういうわけか想定した結果にならない。 WINDOW関数にいたっては存在すら認識できていませんでした。
今ではSQLがめちゃくちゃラクです。DBの仕組みによって若干書き方に違いはありますが、基本的な書き方・考え方は同じですので、どんな場面でも同じようにDB操作ができるSQLは汎用性が高いです。ラッパーを使うことも多いですが、裏で動いているのはSQLになりますのでちゃんと理解しておいたほうが良いですね。特にエラー調査には役立ちます。PyhonのPandasのdataframeなんかはSQLに似た書き方ができる関数もありますのでSQLは重要です。
プログラミングでループのように順次実行する考え方でデータベース（SQL）に突撃すると、テーブルをがちゃがちゃくっつけて目的を達成しにいくSQLの思想を理解するには頭の整理が必要になるかもしれません。私はそうでした。基本的に考え方が違います。
リレーショナルデータベースのときはそんなに気にしないのですが、ビッグデータ向けのデータベースを扱うときはパフォーマンスチューニングも大事になります。めちゃくちゃ時間のかかっていたクエリの実行時間が驚異的に短縮できることもあって、狙い通りになったときはかなり気持ちいいです。
この辺は慣れるまでが大変ですが慣れちゃうと面白いですね。
### 未知の領域の学習をどうするか問題
「意味ない！無駄だ！」と言われることも多い「資格」も私にとっては役立ちました。とにかく経験がないので、新領域を学ぶときはものすごい時間がかかります。ネットで断片的な情報を集めたりしては時間がかかりすぎる感覚がありました。
そのため、さっとその分野の情報を仕入れるには資格学習はうってつけだと思ってます。この5年でいくつか取得しました。期限を決めて本気で学習するのでとっても効率的にその領域を把握することができました。基礎をそこで習得しておくと、その後の学習が進めやすかったです。
棚ぼた的な効用として、スキルの証明にも使えました。本来はこの使い方ですよね。転職の際にアピールのネタにできます。例えば面接の会話の中で資格保有を全面に押し出すのはあまり有効だとは思いませんが、触れられればさらっと当時のエピソードも交えつつ返す、ということができれば相手に「なるほど、自己研鑽を行える人か」というくらいに思ってもらえると思います。それで100点だと思いました。それ以上は求めてはいけない気がしてます。
この資格学習、残念ながら私も勉強していた当時は「そんなの意味ないから〜」と小馬鹿にされることもありました。でもこれは自分との戦いだと考え、とくに反論することもせず学習に専念しました。結果、今は予想以上のステージで仕事できていますので、資格を取得することに意味があるのかないのかは「人による」のだと思います。二元論ではないんだと。
## さいごに
思いつくままに「プログラミングスクール卒業後の学習で苦労したこと」を書いてみました。もっとある気がしますので、思いついたら追加していこうと思います。プログラミングスクール卒業生は今も学習することをやめず、もがきながらも頑張っています。