Open6

コンピュータサイエンス(低レイヤ)を学んで良かった体験を集める

熊木熊木

https://qiita.com/kotobuki5991/items/d07731f84e7c75493897
この記事をすぐ理解できた。

  • シングルスレッド(OS)
  • インメモリキャッシュとは(コンピュータアーキテクチャ)
  • データ構造と計算量(アルゴリズム)
  • ノンブロッキングI/O(OS)
  • ソケット

を一定理解していないと、RedisではCPUがネックにならないからシングルスレッドでいい、という話が理解できなかったと思う。

熊木熊木

今の所感じるメリット

  • エンジニアとして恥ずかしくなくなる(?)
  • あらゆる技術書や技術系記事・技術系スライドを見るときの理解度、キャッチアップ力が全く違う
  • どこのレイヤーで問題・ボトルネックになってるのかが理解しやすくなった

その他

  • IT技術は広大で、レベルがあがるにつれてWEB系の技術以外も扱うケースが増えてきた
熊木熊木
  • 技術に対して、根本から理解できることによって楽しいと感じることも増えた気がする。
  • まったく内部事情を知らないサービスに対しても、多分こういう実装・仕組みになってるのかなぁと想像・予想できるようになった
  • DatadogのダッシュボードなりCloudwatch metricsなりを見て、システムの状況を想像できるようになった。メトリクスが変化したときには、「あの変更があったから、こういう仕組みで変化したのでは」みたいな仮説を立てるのがうまくなった
熊木熊木
  • 今まではよく分からない技術が出てきたときに、「コンピュータサイエンスや基本的なことを学んでないから、俺には分からないのかもな」という半分諦めが入っていた。今ではそういう言い訳ができないので理解を頑張るようになった。また、分からないときでも少なくともコンピュータサイエンスへの理解が乏しいためかどうかの切り分けが可能となった。
熊木熊木

視点

コンピュータサイエンスに投下した時間を、より上のレイヤーの技術の習得に投下した場合と比較して、エンジニアとしての技術力や市場価値がどうなのかという視点は本当は大事そう。
例えばAWSだったりGoだったりその他実務で使ってる技術などに投下した方が良い、って思う人はいると思う。後悔は特にしてないが。

実務経験で通じて得られる知識であれば、実務経験で得る方が効率が良いというのはある。
一方で、コンピュータサイエンスは実務経験よりは独習した方が良いという考え。
実務経験を通じて、コンピュータサイエンスを理解しやすくなることはあっても、体系的に知識を整理することはおそらく難しい。
また、大学生も学んでいるようなことであり、実務経験がなくても独習が可能なものである。

熊木熊木

なんとなく思ってるが言語化できてないこと
ジュニアエンジニア -> シニアエンジニアになっていくためには、より抽象的な意思決定/上流の意思決定ができるようにならなくてはならない
意思決定の精度をあげるには、以下のように原理を理解していると強い場面がありそう

  • そもそも原理的に出来る/出来ないを判断できる必要がある
  • おそらくああゆう仕組みを使うから時間がかかる/かからないみたいな見積もりができる