最近いろいろ迷走して何を学べばいいのかわからなくなってきていた。技術書読んでいても、今自分が学ぶべきことはこれなのだろうかと考えてしまって、あまり手につかなかったりした。そこで今の自分のスキルの棚卸しと今後どういう方向性でスキルを身に着け、何をするべきか考えることにした。ある対象を学ぶにあたって、自分の現在の能力を客観視し適切な段階を踏んで学ばないと努力が実を結ぶことはないと自分は考えている。掛け算もできないのに微分積分を学ぼうとするのは無謀だろう。英語を学びなおしたいと考えている人がいて、Be動詞からきちんと学びなおそうとする人を自分は馬鹿にしない。Abramov先生の「2018年の段階で私が知らないこと」を参考に、現時点でできること・あまりできていないが努力・意識していること・できないことをありのままに書くことにした。複数のModelにまたがる処理はServiceクラスを作る、少数の大きなクラスより小さなクラスをたくさん作るようにしテストしやすいクラスを作るなどを意識して実装するようにしている。数億件のレコードが保存されるテーブルの運用経験を通して、パフォーマンスのボトルネックはDBのIOから発生することを身をもって知ったDB設計の変更は影響範囲が広いためアプリケーションの設計の変更よりも難しく、DBの設計がアプリケーションにとって最も重要だと学んだテーブルの正規化(第3正規形まで)、将来的に何件のデータが入る可能性があるのか、どういうクエリが発行されるのか、どのカラムにインデックスを貼るべきか、パーティション分割するかなどSQLアンチパターンに当てはまらないようなテーブル設計ができるERMasterというツールを使用してER図を作ることができる基本的なクエリの発行はできる。BY,EXISTS,INとかはざっと思いつくただDB構築にあたってのメモリ・ディスクサイズの見積もりなどはできないOS・MySQLレベルのチューニングはできないインフラさくらVPS・さくらのクラウドを使用したサーバ構築はできるシンプルで簡単なインフラ構成なら設計(draw.ioで構成図を作成している)、Terraformによるインフラ作成の自動化はできるサーバの構築・セットアップ(CentOS)は一応できるが、障害時のための高可用性を考慮した設計や負荷が高まったときにロードバランサーを用いてサーバを割り振る、CDNを使う、などの知識や経験はないまたネットワークについてはほとんど何も知らないLinuxの最低限のコマンド操作はできるが知識は浅い。使っていて思い出せるのは、cd,ls,grep,ll,top,sar,ps,vi,touch,mkdir,rm,cat,head,tailくらい。