概要
初めまして
著者は「未経験からエンジニアを目指す方」・「駆け出しエンジニア」向けにキャリア相談やスキルアップ支援を行うTechVistaというサービスを運営しております。
大手企業での営業経験があり、かつ現在はエンジニアという異色のキャリアを持つ
著者の強みである「ソフトスキル」について発信していきたいと思い投稿を始めました。
記念すべき第一弾は「良いエンジニアは先に手を動かさない」です。
エンジニア歴4年目になる今でも、業務を最大効率で進めるため大事にしている考え方で、
業務生産性の向上・職場での評価アップにもつながるのではないかと思っています。
Qiitaに記事を投稿するのは初めてなので適切ではない表現等があるかもしれません。
何かございましたらコメント頂けますと幸いです。。。
「ソフトスキル」と「ハードスキル」について
そもそも、上記2つの違いは何かについて考えてみる
つまり、
ハードスキル:プログラミングスキル等の特定の分野でのみ求められる技術的なスキル
ソフトスキル:コミュニケーション力等の様々な業務において土台となるスキル
一般的にエンジニアといえば「ハードスキル」の方が重視されがちですが、
AIが進化していくこれからの時代においては「ソフトスキル」の高さが
エンジニアの価値を決めるのではないかと著者は考えています。
(AIの台頭により、人間にしかできないことを求められるようになるため)
もちろん配属される現場によって違いはありますが、著者の経験上ではソフトスキルの重要性や教育に関して力を入れている現場は少ないなと感じております。
(正社員として自社開発をやってる会社はこの辺の教育がしっかりしている印象)
業務の理想の進め方を登山で例える
これから本題に入っていく前に、エンジニア業務の理想の進め方についての
イメージを持って頂くため、登山を例にして説明しようと思います。
(登山を例に挙げたのは単純に自分の中で分かりやすかったからですw)
(著者は美術の成績が2のため、絵心が全くございません。ご容赦くださいw)
シチュエーションとして、これから上記の図にある山頂を目指して登山をします。
そして、登山の目標が「最短でかつ、最小効率で頂上まで登ること」であったとします。
その場合、目標達成にまず必要なのは「どのルートで登るかを考えること」になります。
実際に登山する場合、ルート選定についてはネットや本などでルート情報を調べていき、
- 「どうやら現在ルートBは閉鎖されてしまっているようだ」
- 「ルートCは山頂へは繋がっているものの、道がぐねぐねしていて分かりづらい上に登るのにとても時間がかかりそう」
などの情報をキャッチアップした上で、ルートAを登っていこう!と作戦を決めてから登り始めるはずです。
ここで重要なのは「どのルートで進むべきかを事前に決めてから登山する」ことです。
では上記を踏まえた上で、エンジニア業務はどう進めていくべきなのか考えていきます。
「良いエンジニアは先に手を動かさない」
例えば、「ソフトウェアを実装するにあたり、実装の方針にA・B・Cの3つがあるものの、考えても良く分からないしとりあえず方針Aで実装してみよう」といった感じで行き当たりばったりで進めたケースを想像してみましょう。
上記のケースには以下のようなリスクがあると考えられます。
-
手戻りの発生
- 仮に実装方針Aでは要件を満たせないことが判明した場合、また1から方針B or Cで進めていかなければならず、工数の大幅なロスが生じる。
- 開発工数は限りがあるため、手戻りの発生はスケジュールの遅延につながる。
- 仮に実装方針Aでは要件を満たせないことが判明した場合、また1から方針B or Cで進めていかなければならず、工数の大幅なロスが生じる。
※登山の例でいくと、
「とりあえずルートBで登り始めてみたが途中で閉鎖されているのを発見し、また最初の地点に戻ってルートA or Cで登り直す」というイメージ
-
実装要件の考慮漏れ
- 実装要件を正確に理解しないまま実装に進んでいる可能性があり、考慮すべき機能・非機能要件の漏れを引き起こす。
- 結果として要求されたものとは全く異なる成果物を開発してしまう可能性がある。
- 筆者の経験上、経験の浅いエンジニアが真っ先に手を動かして実装をしてしまうケースは、要件の理解が乏しい状態の見切り発車であることが多く、実装が行き詰まるパターンが多く見受けられる。
- 実装要件を正確に理解しないまま実装に進んでいる可能性があり、考慮すべき機能・非機能要件の漏れを引き起こす。
※登山の例でいくと、
そもそも「最短かつ最小効率で頂上まで」という目標を設定しないかつ、どのルートで進むべきかの選定をしないまま登り始め、「思った以上に道が険しくて登りきれない、どうしよう・・・」という状態になるイメージ
理想の進め方
上記で挙げたリスクを回避するためには、以下が重要だと思っています。
- 設計・開発など全ての業務において、業務のゴールと方向性を決めてから手を動かす。
- ゴール
- 要件・設計を正確に把握すること
- 方向性
- ゴール達成に向けた具体的な流れや実装方法を始めに考慮すること
- 工数・スケジュール・システムの制約から、できること・できないことを明確にする
- ゴール達成に向けた具体的な流れや実装方法を始めに考慮すること
- ゴール
山を登り始める前に「目標」と「目標達成のためのルート選択」を決めたのと同様、
業務でもゴール・方向性を明確にした上で、手を動かしていくことが重要です。
著者の場合、「ゴール」・「方向性」を決めるにあたって上司に、
「このタスクのゴール・方向性はこれであってますか?」と一次レビューをしてもらっていました。
業務のゴール・方向性が明確になるだけなく、上司や周囲のチームメンバーとの認識ズレもなくせることで、効率的に進めることができます。
最後に
今回お伝えした内容はアプリケーションエンジニアの著者が開発をする上で一番大事にしていることと言っても過言ではありません。
場合によってはとりあえず実装してみる方が良いパターンもあるかとは思いますが、その場合でも「ゴール・方向性を検討した上で現段階の情報だと判断しきれないのでとりあえず手を動かしてみる」という意思決定をすべきだと考えています。
本記事が皆さんのお役に立てれば幸いです
おまけ:「TechVista」のサービス紹介
我々が運営するTechVistaは、「これからエンジニアを目指す人」・「駆け出しエンジニア」向けに「何でも無料相談を」行っています!
元大手営業マンである著者の経験を以下し、本記事でも紹介した「ソフトスキル」についても支援を行っていきますので、ご興味ある方は以下のHPからお気軽にご連絡お待ちしております
【相談の具体例】
-
「これからエンジニアを目指す人」向け
- キャリアカウンセリング
- エンジニアになることで自分の目指したいキャリアが本当に実現できるか見極める
- エンジニア体験
- 簡単な演習を通し、自分がエンジニアに合っているかを見極める
- ポートフォリオ制作支援
- 未経験からエンジニアへ転職するために必要なポートフォリオ(制作課題)の作成
- ...etc
- キャリアカウンセリング
-
「駆け出しエンジニア」向け
- スキルアップ支援
- 講義や実践課題を通して、以下のスキルをより伸ばしたい人へのサポート
- アプリケーション
- プログラミング(PHP・TypeScript)
- フレームワーク(Laravel)
- プログラム設計
- オブジェクト指向
- クリーンコード
- REST API設計・開発
- インフラ
- 資格取得(LPIC・AWS系・CCNA)
- クラウドサービス(AWS・Azure)
- ...etc
- アプリケーション
- 講義や実践課題を通して、以下のスキルをより伸ばしたい人へのサポート
- スキルアップ支援