株式会社スマレジのエンジニアのyushiです。
今年はPHP25周年だそうで、JetBrainsがドラマチックな記念ページを作っていました。
https://www.jetbrains.com/ja-jp/lp/php-25/
長い年表を眺めながら、職業エンジニア4年目の僕はまだまだペーペーだなと改めて実感しました。
ペーペーついでに、今回はDeveloper RoadmapのBackend Developer編(https://roadmap.sh/backend)を辿りながら、自分に足りない知識を振り返ってみようと思います。
Developer Roadmapとは
エンジニアの学び道筋をまとめたドキュメントで、2017から毎年リリースされています。
エンジニアはどういう環境で何を作るかによって知識・技術が偏りがちで、基本と言えるようなものをすっ飛ばしてことが多いように思います。
そこで経験豊富なエンジニアたちが作ってくれたロードマップを拝借し、自分に不足しているものを見つけてみようと思います。
※ 長くなってしまったので、今回は途中までです。
Internet
"How does the internet work?" から始まり、HTTP、DNS、Browsers、Domain、hosting、などとWebの基本知識を問われています。
応用情報を取ったり、AWSを扱ったり種々の開発をする中で少しずつ学んできましたが、十分というには程遠い...。入り口にして、もっとも奥が深く勉強が難しいように感じます。
有名な書籍では、たとえばこの辺りでしょうか。
Basic Frontend Knowledge
前職では画面構造の単純な業務システムばかり作っていたため、今携わっているプロダクトのSaasらしい見栄えが良い画面は新鮮で、難しくも美しく感じます。
独学だと、作りながら学べるこの本がわかりやすかったです。
HTML5/CSS3モダンコーディング フロントエンドエンジニアが教える3つの本格レイアウト スタンダード・グリッド・シングルページレイアウトの作り方 (WEB Engineer’s Books)
- 作者:吉田 真麻
- 発売日: 2015/11/03
- メディア: 大型本
OS and General Knoledge
Linux自体は院生時代から触ることがあったけど、知識として勉強したり使いこなそうとしたことはないです。
シェルは、oh-my-zshが簡単に導入できてかつ使いやすく、おすすめです。https://github.com/ohmyzsh/ohmyzsh
Learn a Language
前職・現職共にPHPをよく書いています。
モックサーバには簡単に書けるNode.js(express)を導入してみたり...。
https://github.com/nek0meshi/express-mock-server-sample
Go/Rustは耳にすることがどんどん増えているようですし、そのうち触ってみたい。
Version Control Systems
Gitはstash, rebase (-i), reset, reflogあたりを使いこなせてくると、一気に開発が楽になる印象です。
Databases
ここ最近はテーブル設計やDBクエリまわりで悩むことが多かったです。
"N+1 Problem"だとかのアプリケーション側でのDB利用については、どういう本で勉強したらいいんだろう...。正規化とかSQLとかについて書かれている本はよく見かけるけれども。
NoSQLは、使ってみたい。
Learn about APIs
認証、難しい...。
Web Security Knowledge
OWASPって初めて聞いた...。
https://yamory.io/blog/about-owasp/
これを積ん読している。
Testing, CI/CD
今関わっているプロダクトでもテストコードを導入したいと(ぼんやり)考えています。デグレが怖くてコードに手を入れづらかったり、レビューに時間がかかっていたり、という問題が気にかかっている...。
Design and Development Principles
最近はDDDの入門書を読んだりもしましたが、実際のコードに落とし込むのはハードルがとても高く感じます...。
過去にiOSの実装のVIPERをなんちゃって導入しましたが、これは効果バツグンでした。
https://qiita.com/hicka04/items/09534b5daffec33b2bec
バックエンドだと、フレームワーク(Laravelとか)との兼ね合いがややこしかったりして、最適解がなかなか見つけられていないです。
まとめ
思った以上に長くなったので、今回は途中まで。