Reactの共同開発者であるDan Abramovが「俺はなんでも知ってるわけじゃない」として書いたブログがある。
「あれも知らない、これも知らない」という調子で書かれているのだが、じゃぁ(本人が専門分野だと言っているReactやJavaScript、忘れかけているけど昔やっていたC#は除くとして)どれくらいのことは「知っている」のだろう? ウォーターフォール型プロセスで開発するエンタープライズアプリケーションのビジネスロジック開発チームに所属していたとしたら、どういうことができるんだろうか?というのを想像してみた。
まぁJavaScriptやReactのそれこそエキスパートなので、他言語でも「平均的プログラマ以前」みたいなレベルになることはないと思うのだが、それにしてもこれだけのことができる人がビジネスロジックの開発者全体の中にどれくらいいるんだろう?
- Unix commands and Bash:
ls
やcd
はふつうに実行でき、実行したい処理の実現方法は調べられる(man
は使えてるのか不明)。単純な内容であればシェルスクリプトを書ける。パイプも使えるので、コマンド間の連携のために都度テンポラリファイルを作るような変なスクリプトを書いてくることはないだろう。 - Low-level languages: Cでポインタを使った簡単なプログラムが読み書きできる(これは任意サイズの多次元配列が扱えるるということなので結構大きい。)。
malloc
は使えない。入出力用のデータ領域が引数で渡されてくるような関数なら書けそう。 - Networking stack: IPアドレスというものがあること、DNSでホスト名称とIPアドレスを対応させていることは分かっている。「ブラウザのアドレスバーにURLを入力したときに何が起こるか」の最初の部分は分かっているので、「なんか開発環境がインターネットに繋がらないんです」みたいなことは言ってこないだろう。
- Containers: これについては特に知識はなさそう。
- Serverless: これについては特に知識はなさそう。
- Microservices: これについては特に知識はなさそうだが、むしろ「多数のAPI間の相互呼び出しなだけでしょ?」ということを理解しており、利点も欠点もあるだろうと考えている(過度な期待を持っていない)点に好感が持てる。
- Python: 不明瞭な点が多いが「数年間使っていた」ということなので、パッケージ管理には
pip
コマンドを使うというくらいは知っているのでは? - Node backends: DBMSへのアクセスはしたことがないが、Expressを使って単純なサーバを作ったことはある。開発環境の構築を一部お願いするくらいはできそう。
- Native platforms: Objective Cを触ったことがあるということなのでMac上でのiOS向け開発環境について多少は知っていると思われる。JavaはC#からの類推で行ける範囲なら大丈夫そうという程度なので、簡単なビジネスロジックの読み書きはできるだろうが、開発環境の構築とかは逆に難しいかも。
- Algorithms: バブルソート、クイックソート、グラフの走査(おそらく深さ優先とか幅優先とか)程度の複雑さの処理を手書きできるので、業務色のない共通的な処理も書けそう。「二重ループにすると計算量はO(n2)」ということが理解できているので、計算量が爆上がりするような処理を書いてくる心配もしなくてよさそう。
- Functional languages: Clojure、Elm、OCamlのコードを何とかでも読むことはできる(これだけでもちょっとすごいのでは?)
- Functional terminology: MapReduceの概念を分かっているので、MapReduceを使っている箇所で「何に困っていてどうしたいのか」は理解できる(MapReduce?何それ?という人、いっぱいいるのでは?)。
- Modern CSS: FlexboxとかGridを使っていない、モダンでないCSSなら書ける。
- CSS Methodologies: 上記と同様で、生のCSSなら書ける。
- SCSS / Sass: 上記と同様で、生のCSSなら書ける。
- CORS: 特に知識はなさそうだが、少なくともCORSという制約があること、HTTPヘッダに設定をする必要があるということは分かっている(つまり、何が原因でCORSのエラーが起こっているのか分からず、アプリケーションのコードに変に手を入れたりする心配はない)。
- HTTPS / SSL: これについては「暗号化している」という以上の知識はなさそう。
- GraphQL: クエリを読める!
- Sockets: これについては特に知識はなさそうだが、(WebSocketかそれとも生のSocketsかは分からないが)リクエスト/レスポンスというモデル以外に通信の方法があるということは知っている。
- Streams: Rx Observablesは分かる。
- Electron: これについては特に知識はなさそう。
- TypeScript: 読めるけど書けない。
- Deployment and devops: FTPでのファイル送受信、OSのプロセスに関する理解や、プロセスを
kill
コマンドで強制終了させる方法は分かる。ps aux
でkill
する対象のPIDを調べたりもできそう。 - Graphics: これについては特に知識はなさそう。