エンジニア歴4年の私が2019年2月に知らないこと

エンジニアとして仕事を始めて4月で4年になるけど、相変わらずなんで動いてるのか分からないものが多い。
次の1年に何を学び、何は魔法で済ますのか、考えるきっかけにする。

ブラウザとサーバーの通信で何が起きているか

HTTPという書式に従った文字列が往復していることは知っている。その中身がメソッドやヘッダー、レスポンスコード、ボディなどからなることも知っている。
でも、TCPのレベルになると全然説明できない。通信を確立するために何往復かしてること、通信の中身をパケットと呼ばれる単位に分割してることは知ってる。でも、絵には描けない。

HTTPS

証明書によってクライアントとサーバーの本人確認らしいことをしていることは知っている。
どういう仕組みで…?今度AWSドメインとるからそこで学べるかも。野良HTTPSなるものもあるらしいけど、何が野良なの?

ネットワーク系のコマンド全般

多いよ…。

デーモンとは何か

サーバーの起動時に実行されるコマンドを登録しておくものということは知っている。でも、どんな仕組みでそれが起動するの? 起動時に実行されるものといえば、私にとってはdockerのエントリーポイント。見えないところではデーモンにお世話になっているんだろうか。
何かでちらっと見たけど、デーモンとコンテナには関係があるらしい。これも謎。

Linuxでは全てがファイル」の意味

すごく賢い設計だと誰かが褒めてたのを見たことがある。でも待って、「全て」って?
ラズパイにビデオを繋いだ時、その接続の設定でファイルパスみたいなのを入力した覚えはある。それがファイルって…逆にファイルじゃないって何?

シェルスクリプト

一応書ける。でも、
・IFの中身がよく分からない
・変数を参照するときに後ろから修飾できるやつ、多機能でよく分からない
・標準出力と標準エラー出力をつなぐやつ意味分からない
・関数とコマンドがどうやら違うものらしい
・サブプロセスがよく分からない
1つのことをやるのにやり方が多い気がする。それに、どこまで勉強すべきなの?

yield文、コレクション型とイテラブルって言われるもの

yeuldの解説はもう10回くらい目にしてる気がするし、サンプルコード書いた気もするけどよく分からない。
そもそも発音がパッと見で分からないので頭の中で考えるときにさえ自信が持てない。
コレクション型はJavaに配列とリストがたくさんあったのであんまり見たくない…

Docker

一応ビルドしてランすればいいことは知ってる。会社でも普通に使う。
でも、Dockerとdocker-composeで似たコマンドがたくさんあって、オプションにも規則性が見えないしいつまでも苦手感がある。
それから内部のDSLもよく分からない。ADDとCOPYの違いとか。

React Nativeの裏側と、ネイティブアプリが動く仕組み

なんだか怖そうで全然知らない。そもそも、アプリの上でJavaScriptが動く、というのがどういうことなのか…(これはブラウザにも言える)

Google Cloud Platform

会社のアカウントでみんながJupyter Notebookを使えるようにしたかったんだけど、アカウントと組織の関係がAWSと違うらしくて、1時間くらいやって諦めた。

まとめ

仕事中に分からないことが出てくることは普通にあるし、全部を調べてると仕事が進まない気持ちになることもある。
でも、放置してるとこうやって苦手意識になってしまう(進研ゼミみたいだ...)

やっぱり分からないことは徹底的に詰める気持ちが大事だなって思います。