はじめまして。
年収1000万、Web歴8年以上、プログラミング歴10年以上の中堅エンジニアです!
今回は僕がどのようにエンジニアとしての最前線にたどり着くために、
エンジニア駆け出しの頃に意識したのかポイントをご紹介します。
この記事で解決することは?
- エンジニアとして成長する方法を知りたい
- 今の仕事環境に悩んでいる、どういう環境が成長できるのか?知りたい
- 中堅エンジニアが普段仕事でどういうことをしているのか知りたい
この記事を読むと「明日からエンジニアとして成長していくにはどういうことを最初にすれば良いか」がわかります。
目次
- 1 【前提】私の経歴について
- 2 エンジニアなりたてで学ぶべきポイント・気をつけるポイント
- 3 【気をつけるポイント】Gitは必ず詰まっておこう
- 4 【学ぶべきポイント】チーム開発の仕事を意識して学ぶこと
- 5 【気をつけるポイント】小さなタスクをこなすよりそこそこ大きなタスクをこなすこと
- 6 【出来るエンジニアは必ずやる】エディターを常に改良し続ける
- 7 【エンジニア成長ポイント】Chromeデベロッパーツールを使いこなす
- 8 【気をつけるポイント】調べて10分程度で分からないことはすぐに先輩エンジニアに聞くこと
- 9 【学ぶべきポイント】コードレビューはしっかり受けること
- 10 【気をつけること】言語依存しない知識を身につけること
- 11 【エンジニアとしての成長ポイント】0→1のプロダクト開発は自分でやってみる
- 12 【気をつけるポイント】最初から技術スタック領域を線引しない
- 13 【常にエンジニアとしてやること】Twitterで情報収集すること
- 14 【常にエンジニアとしてやること】エンジニア市場の自分の立場を意識すること
【前提】私の経歴について
そもそも私は誰なのか?ということを知らないと中堅エンジニアと言われてもよくわからないと思うのでざっくり書くと
- 1500万UUのベンチャーにバックエンドとして就職
- 某超有名青R社に就職
- ベンチャー企業を立ち上げ
ざっくりこういう経歴です。ただ合間かなりの数の副業をやっているので、関わってきたプロダクトは20を超えます。
もっと知りたい方はこちらを参考にしてください
成長するWebエンジニアの成長過程とリアルな年収の話~中退から転職からの起業~
また副業に関してはこちらに収入まで公開しています。御覧ください
【収入公開】Webエンジニア3年目から6つの副業案件で稼いだ、稼ぐ方法公開
エンジニアなりたてで学ぶべきポイント・気をつけるポイント
ではここからエンジニアなりたてで学ぶべきポイントや気をつけるべきポイントを紹介していきます。
実際に私の成長過程で今を振り返って考えてみたことになります。
【気をつけるポイント】Gitは必ず詰まっておこう
まず必ずチーム開発をするとハマるポイントGitです(ちなみにGitに関してはこちらがわかりやすいです)。
例えばこの操作は出来ますか?
- コミットを一つ戻す
- 一つのファイルのコミットだけ戻す
- コミット文を変更する
必ず出来るようにすること
必ず一度は詰まるポイントなので詰まったときに徹底的に頭に入れておくこと!
Gitはチーム開発をすると必須なので絶対に使えるように家でも使ってみましょう。
【学ぶべきポイント】チーム開発の仕事を意識して学ぶこと
チーム開発を学ぶ理由
1人で開発しているだけだと気づけない、全体の開発の流れや使われている技術がわかるからです!
チーム開発で学べることを意識してキャッチアップしましょう
学べることの例
- プルリクエスト後どのようにマージされてデプロイされているのか?
- 開発環境、ステージング環境ってあるけど、どうやって構築されているの?違いはなに?
- ローカル環境の作り方、なぜそうやって作っているのか?
- 新規機能はどうやってテストしているのか?
そうすると開発の全体感がわかるようになり、一部の領域だけでなくフロント・バックエンド・インフラと全てできるようになっていきます。
また全体的に開発がわかるようになるとリードエンジニアや(リードエンジニア級の人にしか任せられない)障害対応、
起案時の設計などに関われるようになり更に成長機会を得られます。
【気をつけるポイント】小さなタスクをこなすよりそこそこ大きなタスクをこなすこと
小さなタスクより大きなタスクをこなした方が良い理由
小さなタスクだと一人で開発していても手に入れられる知識しか手に入らない。
大きなタスクをこなすことで開発の全体がわかるようになるから。
小さなタスクだけだとフロントのCSSを少し変更するだけ、バックエンドのドメインロジックを修正するだけなどになって得られる知識が少ないです。
例えば大きめのタスクをやると?
(例)新規ページの追加タスクをやった場合の学べること
- どこにページを追加するのか
- それのマークアップ
- RDBに作成するテーブル設計、追加するためのマイグレーション作成
- バックエンドのクラス設計
- テストコードを0から作る
- (大きめの機能になるので)リリースの手順書作成
- テスト仕様書の作成
ざっと書いてもこれだけあり、小さなタスクでは学べないことがたくさんあります。
積極的に大きめのタスクに関わっていくこと!
【出来るエンジニアは必ずやる】エディターを常に改良し続ける
エディターを改良し続ける理由
エディターはエンジニアにとっての商売道具。改良し続けることで日々の開発速度が格段に上がっていくから。
どの業種でも商売道具を大切に、常にブラッシュアップしていくことは当たり前ですよね。
エンジニアにとっての商売道具の一つとして、エディターになります。
エディターをブラッシュアップしていくことは開発速度を上げ、開発速度が上がると仕事の効率が上がり、最終的に出世や年収増に寄与します。
実装中に「不」を感じたらメモするか、その時点で改良する方法を探して改良しましょう!
例えばどういうときに改良すべきか?
- 全ファイルでグローバル変数名を置換出来ない
- ファイル保存時にlintがかからない
- ファイル検索出来ない
- 文字列検索出来ない
エディターに関しては以下の記事にまとめています。
最もよく使われるオススメエディター7選を10年以上のエンジニアが語る
【エンジニア成長ポイント】Chromeデベロッパーツールを使いこなす
Chromeデベロッパーツールを使いこなせたほうが良い理由
Webエンジニアの商売道具の一つ。Chromeデベロッパーツールはブラウザのパフォーマンスや
APIのリクエスト、クッキー、WebStorageの中身見るなどあらゆることが出来るWebエンジニア必須のツールであるから。
理由の通りChromeデベロッパーツールはWebエンジニアにとってとても重要なツールです。
最低限覚えてほしいChromeデベロッパーツールのポイントをまとめた以下の記事を読むと良いです
【動画あり】Chromeデベロッパーツールの5つのタブの実践的な使い方(最低限知っておいた方が良いこと)
【気をつけるポイント】調べて10分程度で分からないことはすぐに先輩エンジニアに聞くこと
分からないことはすぐに先輩エンジニアに聞く理由
開発が進まないと本人にとっても組織ににとっても時間のロスになるから。
調べて分からないことは、すぐに聞いたほうが良い。遠慮していると無駄に時間がかかってしまい、組織として開発が遅れることになる。
また世の中の一般的なことではなく、そのプロダクト特有のことかもしれないので、その場合は聞かないとそもそもわからないケースになる。
【学ぶべきポイント】コードレビューはしっかり受けること
コードレビューを必ず受けたほうが良い理由
コードレビューを受けることでエンジニアとしてコードが磨かれるから。また他の人のコーディング観点も入ってきて学びになるから。
初学者の頃コードレビューを受けて私自身かなり勉強なりました。
また自分では問題ないと思っていたことが、他のエンジニアに見てもらうと駄目なことがあったり、
もっと効率の良い書き方を教わったりとコーディングの勉強になりました。
せっかく組織に入って他のエンジニアと仕事をしているなら絶対にコードレビューは受けること。
【気をつけること】言語依存しない知識を身につけること
言語依存知識を身につけるべき理由
エンジニアリングの普遍的な知識をみにつけることで、言語が違ってもすぐに対応出来るようになるから。
Webエンジニアは人材の流動性が高い職業なので、3年くらいで転職して開発組織が変わったり、
転職しなくても別のプロダクトに移ったりするなどよくある。
そのときに言語が変わっても使える知識を身に着けておくとすぐにプロダクトに入っても対応できるようになる。
具体的には?
- クラス設計
- コードをする上でのベースの知識(メモリ管理,interfaceの使い方など)
- 良いコードの書き方(変数名を適切にする、ローカル変数の位置など、詳しくはこちらの記事を読むと良い)
出来るエンジニアは大体すぐに入っても対応出来る!
【エンジニアとしての成長ポイント】0→1のプロダクト開発は自分でやってみる
0→1のプロダクト開発をやるべき理由
プロダクト開発の初期の知識を身に付けるのは自分で全てを作って学ぶのが一番速いから。
なにかWebプロダクトを開発して公開するということをすると、チーム開発という観点は抜かして、プロダクトをインターネットに公開するまでの知識が身につく。
具体的には?
- フロント開発
- バックエンド開発(多くがフレームワークの知識が身につく)
- インフラ構築
- DNS周りの知識
- (ログの収集や障害時のアラートなど)
この辺の知識は仕事のプロジェクトによっては全く携わることの出来ない部分(例えばDNS周りとか)もあるので、
自分でやっておくと新しい技術習得はしやすいのと、エンジニアとしてのキャリアとしては勿論、
起業する時や副業で0→1開発するときにも活かせる。
【気をつけるポイント】最初から技術スタック領域を線引しない
最初から技術スタック領域を制限しない理由
駆け出しから技術スタック領域を線引してしまうとエンジニアキャリアとしての可能性が閉じてしまう。
また他の領域から別の領域に転用できる知識も多々あるのでそれが学べなくなってしまうから。
駆け出しエンジニアの時点で技術スタックの領域を定めるのは時期尚早なので、まずは色々と挑戦してみること。
私自身も最初はフロントエンドからやりたかったのだが、組織上の都合でバックエンドからやることになった。
思いの外バックエンドが性に合っていて、今ではバックエンド、インフラを中心に仕事をしている(勿論フロントもやっている)。
また他の領域の知見は時として別の領域でも役に立つことがあります。
例えば良い例が「設計」です。
バックエンドでのSRP(単一責任原則)を意識した設計はフロントエンドのコンポネント設計でも役に立つ。
駆け出しの頃はキャリアに線引はしないこと!
【常にエンジニアとしてやること】Twitterで情報収集すること
Twitterで情報収集をする理由
エンジニアリングの技術革新は速いので常にキャッチアップしていかないと市場に遅れてしまうから。
ソフトウェアエンジニアの技術革新はかなり速く、昨年当たり前だった技術が今では古い技術として使われなくなっているなんてことはよくある。
情報収集するなかで一番良いツールがTwitterになる。理由はTwitterは検索エンジンでは目にする機会が少ない最新技術情報がよく出回っているから。
なのでTwitterで多くのエンジニアをフォローしておくと良い。
ちなみに私のアカウントはこちら。ぜひフォローしておいてもらえるとありがたいです。
【常にエンジニアとしてやること】エンジニア市場の自分の立場を意識すること
Twitterで情報収集をする理由
常に自分が市場でどのくらいの価値があるのか把握するため。
どの職業でも需要がなくなったら職がなくなってしまう。
たとえエンジニアリングが好きでも市場で需要がなければ意味がない。
常に自分の市場での価値を意識するためにフリーランスの案件情報を見ると良い。
有名所としてレバテックフリーランスが良い。登録して実際にどの程度の案件を紹介してもらえるのかも見ることをオススメ!