👓

1~2年目のエンジニア向けにキャリアや勉強方法について話したこと

2022/04/15に公開

オフィスアワーで1~2年目のweb/モバイルエンジニア向けに今後のキャリアや勉強方法について話す機会があった。形式としてはLTのような形ではなく、質問をいくつかもらいそれに都度答える形で進んだ。LTのような1対多の発表よりインタラクティブに相手に合った受け答えができるので良い形式だなと思った。

自分としてはキャリアについて偉そうに語れる立場ではないが、そこそこの刺さる話はできたと思うので今後のためにも要点をまとめておくことにする。

Q. エンジニアとしてのキャリア・技術遍歴を教えて!

自分は正直働いた会社は2社しかない。

  • 2012~2014 大手 Web メディアサイトの開発
  • 2014~現在 起業

技術遍歴。偉そうに語れるようなものではないことがお分かりいただけるだろう...

  • 大学 4 年くらいの頃に WordPress あたりから始まり PHP や Javascript を触る
  • 新卒入社先でも PHP。FW は Codeigniter とか使ってた。インフラはオンプレ。今思えばクソコードを量産していたので本当に申し訳なかった...
  • 起業後は未経験だったものの、当時みんな使ってた Rails + AWS で構築。何もわからんすぎて地獄を見ることに...
    • そもそもあらゆる技術について何も分かってなかったが、やるしかない状況だったので都度独自で学習してきた感じ

Q. これをやったら強くなった、技術力が伸びたと感じた事例はある?

そもそも強さとは何か

  • 職業エンジニアとしての強さとは何か
  • 全知全能・わからないことが何もない ≒ 自分の力で全て何とかできる力
    • 例)
      • OOO を実装してほしいと言われた -> このくらいの工数であれを使えば実装できるなと思いつける
      • XXX というエラーが出た -> ドキュメントのあの辺りを見ればわかりそう・あの辺りのソースコード読めばわかりそう、とあたりがつけられる。

どこまで強くなれば良いのか

  • とはいえ IT 技術は膨大。あらゆる領域で全知全能になることは途方もなく一部の天才以外には無理。
  • 人間の人生は短いのでどこまで力があれば強さと言っていいのか?
    • 自分の中である程度目星をつけた方が良い
    • さもなくば永遠に無能というコンプレックスを抱えながら生きていくことに...
  • そもそもなぜ強さが必要?という話もある
    • 将来への漠然とした不安。業務上で困ることが多い。など。

強さの基準を

  • まずはどういう状態が強いと言えるか決める
  • おすすめは「人に教えられるかどうか」、これをまずは基準にして考える
    • 人に教えられる ≒ 身についている、使える
  • 例えば、今使っている技術(言語・フレームワーク・ツール・仕事等々)の中で人に教えられるものはどれだけあるだろうか?

強くなるためには...

  • 人に教えられるように学ぶ
    • 1: 全体像を掴む
    • 2: ゴールを決める(どうなったら成功か)
    • 3: どこからどこまで学ぶか決める(範囲を決めないと終わらない)
    • 4: 手を動かす
    • 5: その中でわからないことやできないことを逐一調べたり聞いたりして潰す。
      • 可能な限りメモを取っておくと便利
    • 6: ブログや LT などでアウトプットする
  • 具体例: ブロックチェーンについて学んだ時の話
    • 1: Blockchain + (overview|tutorial|complete guide)とかで検索して手当たり次第に読む
    • 2: NFT を自分で作れるようになることを目標にする(1 で調べた時に NFT が話題になってた)
    • 3: NFT を自分で発行するために必要な関連技術のみ学ぶ。それ以外は一旦無視。
    • 4: Ethereum などの公式 Docs や野良の How to 記事などを読んで実装してみる
    • 5: うまくいかないことが大量に出てくるのでそれらを潰していく
    • 6: NFT を自分で作れるようになったことをブログや LT などで話す
  • これで「NFT を自分で作れるようになること」に関しては最低でも自分の言葉で人に教えられるようになった

技術力を伸ばすには...

  • 人に教えることができない概念に出会ったら立ち止まる習慣
    • 普段の業務で出会う問題、エラーや謎の挙動などはチャンス
    • Stackoverflow からコピペしたら解決するかもしれないけど、5 分でいいから"何故"を調べる
    • 仕組みや原因がわからないと人に教えられる知見にならない = 技術力に結びつかない
  • 人に教えることができない概念に出会う機会を増やす
    • 仕事・本・記事・GitHub の OSS など、興味に応じて未開拓分野に手を伸ばすことをやめない
    • ある程度経験を積んで何でもできるようになってくるとここが減りがち
  • 変わらない土台の技術を学ぶ
    • この辺の土台が朧げでも頭に入っていると深い理解が必要になった時に役に立つ
    • CPU・OS・ネットワーク・データベース・アルゴリズム・設計技術など CS の学部レベルでやる内容
      • 基本情報処理試験の内容はベースラインの目安
      • その他おすすめの学習サイトや書籍が必要なら別途聞いてもらえれば合いそうなやつを教えられます
        • 間違ってもはてブでバズってる CTO が選ぶ書籍まとめ等から購入しない
          • すでに自転車に乗れる人間は自転車に乗れなかった時の自分を覚えていない
          • 自分のレベルにあった書籍を読まないと読みきれないし身にならない
          • 頭の良い人は初手で名著から初めても良いとは思いますが万人にはおすすめはしない

強みやバリューを出せる所、またその強みを認識した瞬間や、それをどうやって強みとしていったか?

  • 大前提として、今まで自分なりに取り組んできたことや経験は全て強みになり得る
    • 自分が興味のある分野、時間を費やしても飽きない分野があればそれに時間を使えば良い
    • そういうものがない場合、仕事に打ち込むだけでも十分。その際、何が課題で自分はそれをどう解決しようとしているかを考えながら取り組むと常に自分がやっていることへの解像度が上がるので身になりやすい。
  • 人と違う部分が強みになる
    • 自分の場合は新卒後に割とすぐに起業をした。それによって強制的に CTO 的な立場で物事を判断しないといけなくなった。
    • 会社的にも技術的にも完璧ではないにせよゼロから作ることができる(面倒臭いのであんまやりたくなさそうなこと含めて経験がある)というのが強み
      • ゼロから会社が成長していく過程で資金調達、採用、組織化などを経験できた。
  • 強みやバリューが実感できるのは結局のところ転職する時
    • オススメの方法としては転職する気はなくとも、まずは Findy や転職ドラフトで履歴書を作るとよい
      • 自分が今出来ることや身についたスキルなどが整理ができる
    • スカウトが送られてきたり、年収 XXX 万円でのオファーなどがくるので自分の今の市場価値がわかる
      • その額を得られている技能やスキル(評価されているポイント)が今の強み
      • 実際にガチで転職しちゃう人もいそうだけど、そのくらい力のある人じゃないといても意味ないと思う。彼らを転職させないような待遇作りをすれば良い。

仕事をする上で大事にしているモットーや考え方

  • No と言わない
    • エンジニアが"出来ない"と言ったらそのプロダクトや機能の実現はそこで不可能になる。それくらいエンジニアの"出来ない"という言葉には重みがある。
    • 実現が技術的に「大変」か「大変じゃないか」で判断するのではなく、それがどのくらい必要なものなのかをちゃんと聞き出して問い詰めてから見極める
      • これがちゃんと出来ず依頼を聞くだけの状態になってるプロダクト開発はコミュニケーション不全なので改善するべき
        • まぁでも組織の構造を改善するのは気合と体力がいるので転職した方が楽という身も蓋もない話はある
  • 健康に気をつける
    • エンジニアは集中力という MP を消費しながら問題を解決する職業
    • 健康でない(腰痛・視力低下・腹痛・不眠・痔・その他集中を阻害する疾患持ちの状態)は状態異常を抱えながら冒険する勇者みたいなものなので不利すぎる
    • 健康である今は夢の中にいると思え、病気になった瞬間に夢から醒めて後悔するぞ!!!

好きな言語や技術分野はある?

  • 飽きっぽい性格でこの技術が好きというのはあまりない
  • 自分のアイデアを web サービスやモバイルアプリにして形にするのが好き
    • そういう意味では (Flutter|Next.js|Rails) + (Firebase|Supabase|AWS) が楽なので使うことが多い
    • あんまり尖ったことしてない...

今一番ハマっていることは?(趣味でも仕事でも)

  • 設計関連
    • ソフトウェアの骨組みを考えることができるスキルは知識だけでなく経験も必要であり簡単ではない
      • ベストプラクティスはあれど組織の都合が絡むので"これ"という答えはなく最善案は常にケースバイケース
    • が、身につけられるとどの業界でも使えるので汎用性がある。何より考えるのは面白い。
  • Blockchain 関連
    • 正直まだ Blockchain がどう社会的にユニークで意味のあるユースケースを作れるか不明な部分は多いので模索してるところ
    • とりあえず市場だけはできている状態
    • 刻一刻と新しい情報が上がってくるので飽きない。自分が趣味として追うのには適している。
  • ハロプロ
    • 江端妃咲

参考文献

Discussion