riki.dev
Published on

自学

Authors
  • avatar
    Name
    Riki "Remicck" Kawai
    Twitter
    @Ricckn

自分はCSの学位も持っていない経済学部卒のソフトウェアエンジニア。
この辺は若干のコンプレックスもありつつ、ある程度できるようになったのは

  • 持ち前の好奇心
  • 謎の自信
  • 会社での経験
  • 自学した経験

だと思っている。

学習と環境

そもそもの話として「IT系」という範囲が広すぎて、自分がどの範囲まで詳しくなるかというのは結構会社(というか環境)に影響されがちだと思う。

たとえばWeb系のエンジニアをやっていたとして、HTML,CSS,JSの範囲だけでいい人もいれば、JSはReact.jsとかReduxとかも把握する必要がある人もいる。
小さいSI会社に入ったりすると、PHPやMySQLなどのバックエンドのコードを書く必要もあるし、さらに言えばWebサーバーに関する知識も必要になるケースがある。これは完全に環境の影響だと思っている。

以下は環境がその人のキャリアをある程度決めつける例として、業務でやってる範囲だけで全体的な学習ができていないことから、たとえばCSSの指定方法とかがほとんどわからん、みたいな人がいてびっくりした。
具体的には、Tailwind cssを使っていたから生のCSSがかけないとか、React.jsで開発してたからjQueryの$エイリアスの存在を知らないとか。

既存のコードベースで学ぶと、設計部分が疎かになって表面的に動きがおなじになるようなコードしかかけなくなっている極端な例を見たところ。

当たり前だと思っているけど「エンジニア」と名乗るからには「設計する」という行為をしっかりと行う必要があると思っている。
jQueryの$がわからない、という例はまぁそりゃ触らなければ知らないのは当たり前なんだけど、JSがどういうものか理解していればちょっと調べるとすぐわかるレベルのこと。
「既存のコードを指示通り修正すること」だけをやっていると体系的に学べていなくてリファレンスを読んでもあまり理解できないなどの弊害がすごい出ていた。

というか、そもそも理屈を理解しないでコピペと感で値をいれるだけの作業は、プログラミングでこそあれ、エンジニアリングではないよなぁと。
ちょうどGitHubのCo-Pilotを試しているところなんだけど、AIにまず脅かされるのはこのプログラミングの部分で、たしかにCo-Pilotを使ってるとそうなるかもなと思ってくる。

話は脱線したけど、つまり業務(環境)によって得られる経験だけではある部分に特化してしまって自身の成長に悪影響を及ぼしてしまう。
会社がここを体系的に教えることが大事だけども、エンジニア自身がジョブホッパー的な動き方を望んでいるようにも見えるので、会社として学習させるインセンティブがすごく下がっているようにも感じる。

だって、3,4年くらいで転職したくなるしそういう人も多いよね?
そうなると元からデキる人だけを取っちゃうよねと、尚さら自分で学習できる人が優位になる。

インフラエンジニアは楽?

Twitterでそんな感じの記事を見たけども、インフラエンジニアはここ数年(だけではないけど)かなりガラッと変わってきていて学習が必要な分野だと思っている。

簡単にあげるのであれば

  • インフラがオンプレ→クラウド、もしくはオンプレ+クラウドの構成になって各種クラウドの知識も必要になった
  • コンテナー時代なのでそれらの管理も行う必要があり、完全に新規で覚える必要がある
  • コードベースでインフラを記述するようになっているのでAnsibleやChef、Dockerfileなどの記述を覚える必要がある

等々、かなりダイナミックに変わりつつ、もともと求められていたネットワークの知識や耐障害姓周りも知らなくてはいけない印象。

ソフトウェアエンジニアと比較して

ちょうど知り合いと話していた内容として、「ソフトウェアエンジニアとインフラエンジニア、どちらが業務内で学習できるか」という話。

切り口が色々あると思うんだけど、完全素人のインフラエンジニアに任せられることは指示書通りに作業を行うことだけだから学習機会が乏しい、ソフトウェアエンジニアはより実践的なコードを書かせられるから学習させられる、という話があってなるほどなぁと思った。

インフラエンジニアになる人って新卒の場合は研修から育ててもらえると思うんだけど、中途でインフラエンジニアやりたい!ってなった場合ある程度知識ないとなかなか任せづらいポジションではあるかと。
そうなると作業者としてしか認められなくて、成長機会が失われるのはわかるなぁと思いつつ、やっぱしこの辺はある程度自分でも学習しないといけないことになるんだろう。

もちろん、長期間雇用されていてくれることが明確であるならば会社も教育するインセンティブがあるが、上でも書いたけどそういう感じに見えないんだよねぇ・・・。

語弊があるかもしれないがアメリカ的と言うか、スキルで食っていくならば自学は必須だろうし、今でこそインフラ系はAWSとかで簡単に自分の環境が得られるからやりやすいなぁと思っている。

自分の場合

「持ち前の好奇心」と書いたけど、これが結構良かったと思っていて

  • 自宅サーバーをやってみたり
  • そこでBlogを運営してみたり
  • Apacheのコンフィグを変更したら起動しなくなって、バックアップを取り忘れたから深夜に1時間以上作業したり
  • ときには諦めて翌日復旧させたり
  • 計画停電でサーバーの役割を満たさないからVPSに移行したり
  • AWSに移行したり
  • コンテナー化したり
  • 監視で突然死んで対応したり

これらのお陰で地味にサーバー系の知識は身についたし、業務にかなり生きている。

好奇心がないと、勉強でサーバーを建てようとしても何を建てるか???で躓いちゃう。
やりたいことがあって、これが好奇心ドリブンで、解決手段としてインフラ構築とかして学んでいくと色々早いと実感している。ちょっと前だとMinecraftサーバーの運用なんか良かったけど。

自学の強要

会社としてエンジニアリングチームのマネージャーとして、自学せよと強要するのは違うと思いつつ、自分のために自学することは今後のキャリアのためにも重要だと考えている。
というかキャリアを少しでも考えると、環境から得られる学習インプットだとやっぱし足りないなぁというのが実感。これは会社によるとも思うけどうちみたいな小さい会社だと無理かな。

本当は仕事のことばかりではなく人生全体としてどうあるべきかを考えるのがキャリア論だと思うけど、30代くらいである程度好きに転職できるスキルがない人はまずその選択肢をとれるように学習するのがいいかなぁ。