新規事業を開発するために必要な知識をまとめた
こんにちは。株式会社プラハCEOの松原です。
弊社は主にスタートアップの新規事業に特化してデザイン・開発をするものづくり集団です。
最近改めて「プラハでエンジニアとして働く上で最低限必要なスキルって何よ?」という話になったのでリスト化してみました。
ついでにそれらにまつわる知識をうまくまとめてくれている情報源を追記しておくので、何かしらの学習素材として使っていただけると幸いです。
前提
前提として弊社が相手にしているスタートアップや新規事業の開発においては とにかく速く仮説検証し続けること が重要なので、継続的に機能改修しやすい柔らかなソフトウェアを作ることに重点が置かれています。他の事業であれば他のスキルが重視されますし、これらが新規事業の開発において絶対の指針だと言うつもりは全くないので
「あ〜新規事業の開発を主に手掛けているプラハっていう特定の会社(N=1)ではこんなスキルが求められてるんだな〜興味あるから情報源に目を通しておこ〜」
ぐらいの感覚でみていただけると幸いです・・・!
プラハという会社で開発者に最低限求められるハードスキル
フロントエンド
Reactを完全に理解している(ちょっとわかる)
- ロジックとプレゼンテーションを分離したり、フロントエンドでも責務を意識してコードが書ける
- 公式ブログを追っている
- その気になればフロントエンドのテストも書ける。ビジュアルリグレッションテストとかスナップショットテストもなんとなく知ってる
- Reactの公式ドキュメントは読了している。Advanced Guidesまで読んで全部理解してたらすごい!
例えばこんなワードがピンとくる、聞き覚えがある
- ハイドレーション、hooks、Controlled/Uncontrolled Component、Container/Presentational Component、再レンダリング、Context、Suspense、SWR、Recoil、Redux、メモ化、Storybook、webpack、Cypress、propsのバケツリレー、アトミックデザイン、tree shaking、Next.js、魂が震える
良さげなリソース
ブラウザの挙動が全くわからない(本当はちょっとだけわかる)
- ブラウザが裏でやってくれていることが全くわからない(本当はちょっとわかる)
- 何をすればLighthouseのスコアが悪化/改善するか完全に理解している(ちょっとわかる)
- ChromiumとかFirefoxのソースとか読んでたらマジすげぇ
例えばこんなワードがピンとくる、聞き覚えがある
- Lighthouse、TTI(Time To Interactive)、FCP(First Contentful Paint)、レンダリング、ブラウザキャッシュ、推測するな計測せよ、CDN、プリフェッチ、クッキー、samesite、Etag、CORS、Service Worker、3rd party cookie、HTTP/2(3)、阿部寛のHP
良さげなリソース
CSSを完全に理解している(ちょっとわかる)
- 普段使ってるサイトの大半は「こんなcssで再現できるだろうな〜」とイメージがつく
- 細かなプロパティは調べたり補完があれば思い出せるぐらい
- 神がかったアニメーションまで作れたら一生ついて行く
補足
フロントエンドの中でもcss周りの知識は変化が激しいのでこのリストも瞬く間に陳腐化するはず。悲しいけど・・・なのでcss-modules以降のリソースは暇があれば見て「この仕組みでどういう問題を解決しようとしていたのか?」と技術が誕生した背景に思いを馳せて、将来的に似た問題に直面した時にエッセンスを応用できる程度にしておけば良いのではないかと思ったり
良さげなリソース
バックエンド
テスタビリティの高いコードを書ける
- 「このクラス/階層/関数/etc...の責務って何?」って聞かれたら即答できる
- 実際にテストライブラリを使ってテストコードを書き慣れてる
- テストダブルの扱いに慣れている
- オニオンアーキテクチャ、ヘキサゴナルアーキテクチャ、クリーンアーキテクチャなど、何らかの思想を持った設計に基づいてコードを書ける
- DDD(ドメイン駆動設計)に基づいて現実世界の事象をモデリングして、コードに落とし込める
- 実際にDDD+何らかのアーキテクチャに基づいて商用サービスを開発してたらマジリスペクト
例えばこんなワードがピンとくる、聞き覚えがある
- DDD、ドメイン層、依存性の逆転、責務、境界づけられたコンテキスト、認証コンテキスト、テストダブル、依存性の方向、ルート集約、結果整合性、集約とトランザクション、CQS、DTO、値オブジェクト、単一責任、テストカバレッジの種類、実行時エラーを減らしたい、凝集度、テスト書いてないとかお前それXXの前でも言えんの?
良さげなリソース
- 松岡さんのブログ
- 松岡さんのGitHub QA集
- 成瀬さんのブログ
- IDDD本(実践ドメイン駆動設計)
- クリーンアーキテクチャ
- awesome-ddd
- ファウラー氏のブログ
- テスト駆動開発
- セキュアバイデザイン
- Game Programming Patterns ソフトウェア開発の問題解決メニュー
- JUnit実践入門
- GitLabのテスティングガイド
データベース
- 後々要件が変わってもそれほど大掛かりなマイグレーションが要らないデータベースを設計できる
- MySQLとかPostgreSQLは使う機能に関しては読了してる
- 既知のアンチパターンを知っていて避けてくれる
- 日頃見るものを無意識にDB設計に落とし込んで考えてたらすごい
例えばこんなワードがピンとくる、聞き覚えがある
- イミュータブルデータモデル、T字型ER、ヘッダディテール型、閉包テーブル、履歴テーブル、イベント系エンティティとリソース系エンティティ、駆動表と内部表、スロークエリ、EXPLAIN、トリガー、カバレッジインデックス、トランザクションレベル、カーディナリティ、B-tree、RLS(Row Level Security)、BigQuery、おい待て本番DBに分析クエリをかけるんじゃない
良さげなリソース
- 漢のコンピュータ道
- Use the index luke
- そーだいさんのブログ
- イミュータブルデータモデル
- SQLアンチパターン
- 楽々ERDレッスン
- 達人に学ぶDB設計徹底指南書
- 詳説データベース。入門には適さないので、ある程度扱い慣れてから知識の穴を埋めるために読むと良いかも
インフラ
簡単なクラウドインフラを構築できる
- AWSのElastic BeanstalkやGCPのGAE程度で捌ける基礎的なWEBアプリケーションのインフラを構築できる
- TerraformとかCloudformationでIaaC化できたら神
良さげなリソース
- AWSの公式。サービスごとに様々な解説本が出ていますが、ほとんどの内容はAWSの公式に書いてあるのでAWSに関して公式に勝るリソースはないと思います
- クラスメソッドのブログ
その他の基礎
TypeScriptを完全に理解している(ちょっとわかる)
背景の補足
新規事業ではフロントもバックもインフラも一人で素早く実装する必要が生じるため、フロントとバックの言語は基本的に同じものを使いたい(脳内のコンテキストスイッチを避けたり、モジュール毎に専任の担当者が生まれてしまう縦割り化を避けるため)
なので大体TS+ReactとTS+Node.jsの構成に落ち着くことが多いので、TSの基礎知識が求められる
良さげなリソース
セキュリティ
例えばこんなワードがピンとくる、聞き覚えがある
- CSRF、XSS、セッションハイジャック、認証と認可、クリックジャッキング、SQLインジェクション、CSPヘッダー、billion laughs攻撃、ヤベェevent-stream自分のプロジェクトにも入ってた、Log4j
良さげなリソース
開発手法
- 円滑に開発プロジェクトを遂行するためのツールや知識を持っていると炎上から身を守りやすくなって幸せだよ!
例えばこんなワードがピンとくる、聞き覚えがある
- スプリント、プランニングポーカー、ペアプロ、デプロイ頻度、MTTR(Mean Time To Recovery(Repair))、ベロシティ、TDD、レトロスペクティブ、インセプションデッキ、スパイク、納期も機能もFIXされたアジャイルという名の何か
良さげなリソース
知識を楽しむ
- 仕事に必須・緊急ではないかもしれないけど知的好奇心を刺激されるためオススメしてみる
良さげなリソース
- fukabori.fm
- ROLE MODEL
- texta.fm
- Real World HTTP
- プログラミングの基礎。OCamlを使って関数型の考え方を学びつつ地下鉄の最短経路ネットワーク問題を解いてみる
- 達人プログラマー。なんかこう、「自分たちが行っているのは作業ではない...職人の技だ!」みたいな、自分の仕事に誇りを持てる
- ハッカーと画家。なんかこう、「俺はコードを書いているのではない...これはアートだ!」みたいな、自分の仕事をクールでクリエイティブなものとして再定義できる
いっぱい挙げたけどさ
思いつくままに羅列してみましたが、恐らく沢山抜け漏れているので気付き次第どんどん追加していこうと思います。
そして列挙しておきながら何ですが、今の段階で全部知らなくてもこういう知識を楽しみながら学べる心・・・そう、学びたいと思う気持ち・・・それが何より美しく尊い・・・そうは思いませんか・・・?
えっ、全部ピンとくる?
そんな君は即・入社だ!!!大歓迎!!!
Discussion