はたして3ヶ月でエンジニアになれるのか

December 18, 2019
「未経験でも3ヶ月でエンジニアに!!」という売り文句のプログラミングスクールの広告を見ることも珍しくありませんが、はたして3ヶ月でエンジニアになれるのか?という疑問について自分の考えをまとめました。
本記事は、LITALICO Engineers Advent Calendar 2019の19日目の記事です。

私は現在株式会社LITALICOのエンジニアマネージャとして働いていますが、学生までは半導体物性やセンサデバイスの開発など、ハードウェア分野の専攻だったので、現職につくまではプログラミングを実務で書いたことは一度もなく、プログラミング未経験からソフトウェアエンジニアになりました。

プログラミング経験やソフトウェア工学の専門知識を全く持っていない状態で、エンジニアとして採用されたのは当時素直に嬉しかったのですが、実は入社してからしばらく自分の「エンジニア」という肩書には常に違和感がありました。

そもそもエンジニアとはなにか

エンジニアと言っても様々な種類や業界によって様々な定義や解釈がされていますが、技術従事者の国際的な区分は以下の3つに定義されます。

  • エンジニア

    • 高度な専門知識の応用と構想力を中核能力とする工学技術者
  • テクノロジスト

    • エンジニア・テクニシャンの中間的な性格を持つ技術者
  • テクニシャン

    • 熟練技能を中核能力とする技能者

それぞれの大まかな特徴とをまとめると以下のようになります。

特徴エンジニアテクノロジストテクニシャン
問題複雑で簡単な解が無いやや複雑だが対処法が存在している実務で随時発生し、標準の解決方法がある
仕事の範囲広いやや広い狭い
必要知識レベル深い工学技術や抽象思考原理の知識限定的原理の理解、実務知識やスキル
革新性工学技術原理の新規の創造的な活用革新的方法で新材料、方法、工程の活用他に問題を起こさないで限定的技術問題の解決
主な仕事設計・開発・計画計画・管理・実施製造・保守・各種作業

冒頭で挙げた「未経験でも3ヶ月でエンジニアになれる!」という謳い文句のプログラミングスクールでは、Rubyなどのプログラミング言語を使用したWebアプリケーションの構築方法などを学び、実際に動作するアプリケーションを制作するなど、スキルや技能を獲得するカリキュラムがほとんどです。しかし上記の技術従事者の区分でいうとそれはテクニシャンを養成するプログラムにほかなりません。

そのため国際区分に則って考えると、「3ヶ月でテクニシャン(見習い)になれる!」という意味であれば問題ありませんが、「未経験でも3ヶ月でエンジニアになれる!!」というのはいささか誇大広告と言わざるを得ないと言えます。プログラミングスキルを習得することと、エンジニアになるというのは全くの別問題なのです。

このエンジニアとテクニシャンの違いの違いは、JABEEが提唱する技術者教育認定制度が目指すもの新・技術者になるということで詳しく書かれているので興味がある方は見てみてください。

ハードウェアとソフトウェアにおけるエンジニアの違い

ハードウェアとソフトウェアでは製品開発のプロセスが異るため、技術従事者に求められる役割が大きく異なります。

ハードウェアでは、製品開発の一般的なプロセスはざっくりと以下のようになります。

  1. 製品企画
  2. 試作品の設計・開発
  3. 原価計算・調達
  4. 試作製造
  5. 品質テスト
  6. 本生産

これらすべての工程を同一人物がこなすのは現実的ではないので、製品の設計・開発をするエンジニア、製造管理をするテクノロジスト、実際に製造や作業を行うテクニシャンや作業員、など各工程別に完全に分業するのが一般的です。

そのためハードウェアの製品開発の現場ではエンジニアが製造過程の作業を実務上行うことはまずありません。それは、製造を実行することと製品の設計・開発をすることでは根本的に求められる資質や能力が異なるからです。

一方ソフトウェアの製品開発は、製造プロセスが存在しないため設計・計画・実装・テストの役割を分業する必要性は必ずしもありません。設計と実装の業務が表裏一体のため、同一人物がエンジニアのロールもテクニシャンのロールも同時にこなすことがありえます。

実際に現職ではそれらの開発プロセス内の業務を分業して行うのではなく、開発者は設計から実装、テスト、デプロイまで一気通貫で行います。この場合、エンジニアとテクニシャンの境目は個々人の業務内容で明確に分類できるすることが難しく、またあえてその区分けを明文化しなければならない積極的な理由がありません。

その結果、IT業界(特にWeb系)においては技術従事者をひとまとめに「エンジニア」と呼ばれる事が多いのではと考えています。実際に自分がエンジニアなのかテクニシャンなのかを意識して働いている人は自分が接した人間ベースではほとんどいませんでした。

以上のことから、IT業界内で広く知れ渡った「エンジニア」という認識においては「未経験でも3ヶ月でエンジニアになれる」は限定的には可能なのかもしれません。もうちょっと言うと、IT業界において「エンジニア」の肩書を得るだけであれば3ヶ月もあれば十分とも言えるかもしれません。

エンジニアになるハードルが低いということ

エンジニアになるハードルが低いことは、それ単体で見ると喜ばしいことのように思います。理系離れという言葉が言われるようになって久しいですが、他の多くの科学技術分野は、高校生の時の文理選択と大学の学部選びによってほぼ決定されてしまいます。実際に、JABEE(日本技術者教育認定機構)においても、エンジニアの基礎教育期間は4年以上の専門教育(いわゆる学士)を必要とするとされています。

そのため多くの技術的な産業において、就職のタイミングで未経験からエンジニアを志すという選択肢そのものがほぼありえないのです(少なくとも3ヶ月というスパンでは)。

その点ITエンジニアは未経験からチャレンジがしやすいという点において、他の科学技術分野に比べてキャリアの選択自由度が高いということは素晴らしい特徴だと思います。

逆に言うと、プログラミングスキルを習得しているだけのテクニシャンと、高度な専門知識の応用と構想力を中核能力とするエンジニアが区別されずに同じ労働市場で戦わなければいけないという残酷な側面もあります。

エンジニアの肩書を得たとしても、ビジネスにおいてエンジニアに求められる役割を全うできなければ、せっかくエンジニアになっても思ったような仕事につけず、技術の流行り廃りによって自分の市場価値が左右され、最悪キャリア的に詰むリスクがあります。これまでエンジニアの採用面接を100人以上行ってきましたが、実際に多くの方がその壁にぶち当たり、市場価値と現収入が釣り合わなくなった結果転職活動に苦しんでいました。

未経験からエンジニアになるのはやはり難しいのか

社内では私も含め、未経験からエンジニアとして入社して活躍している事例はたくさんあります。その点で言っても全く不可能では無いと言えると思います。しかし、どの事例をとってみても簡単な道のりではありませんでした。

私はビジネスにおいてエンジニアに求められるものを以下のように定義しています。

「複雑かつ未踏のビジネス上の問題に対して知識や技術を応用して創造的に解決すること」

上記を成し遂げるために、私がエンジニアとして特に重要だと感じる素養は以下の4つで、それぞれ一朝一夕で身につけられるものではありません。

  • 高度な専門知識と技能
  • 問題解決能力
  • コラボレーション能力
  • 高い倫理観

高度な専門知識と技能

ソフトウェアエンジニアにとって、専門知識と技能は武器です。 プログラミング言語の習得、設計技法、プロジェクト管理の手法などの技能面の習熟はもちろん、コンピューターやブラウザの動作原理、ネットワークがつながる仕組み、データ構造とアルゴリズム、統計、情報数学など基礎的な知識の習熟など非常に多岐に渡ります。

それだけではなく、自身が置かれているドメインの知識や、財務や労務、組織などビジネスを取り巻く人・モノ・金・情報といった経営資源についての知識もまたエンジニアの武器になります。

これらすべての分野の習熟は不可能ですが、エンジニアとして常に自分の武器を磨き上げる習慣を持ち続けられるかが、様々なビジネス上の問題に対して活躍できるか否かを 実際に私や未経験で入社したエンジニアの部下も、入社から一日も欠かさない位のレベルで新しいスキル・知識獲得のために勉強し、おそらく累計100冊以上は分野問わず専門書を読んでいると思います。

問題解決能力

武器も正しく使えなければ意味がありません。

P・F・ドラッカーの残した名言に、

間違った問題への正しい答えほど始末に負えないものはない。

というものがあります。 技術者はとかく解決策に意識が向かい問題設定自体を軽視する傾向がありますが、本当にビジネスをグロースさせる問題解決を行おうとすれば、適切な問題設定こそが最も重要と言っても過言ではありません。

この力は、要求や仕様どおりにシステムを構築する過程では身につきません。今置かれているビジネス上の現状とゴールについて明確かつ事実情報に基づき把握し、現状とゴールの間に存在するギャップや不確実性を解消するための最重要な問題を設定した上で、解決方法を考えるクセを付けなければなりません。そしてその立てた仮説を検証するサイクルを繰り返すことで少しずつ磨き上げられる能力なのです。

もしエンジニアを志しているが、仮説を立てて実験的に検証するプロセスが働いている職場で許されないのであれば、職場の環境を変えるように周囲を巻き込むか、もしかすると転職を考えたほうが良いのかもしれません。

コラボレーション能力

創造的な解決方法はたった一人では中々生まれません。前述のようにエンジニアが習得するべき知識や技能は多岐に渡り、一人ですべての分野をカバーすることは出来ません。異なる専門分野の人間と協調して解決方法を構築する必要があります。

またステークホルダーの利害を理解した上で、三方良しを生み出せなければプロジェクトの途中でちゃぶ台返しが起こったり、そもそも予算が確保できなくてプロジェクトが頓挫などが発生してしまいます。せっかく正しい問いの設定が出来ても、優れたコラボレーションを引き出せなければ意味がなくなってしまうのです。

エンジニアはその責務的に、関わる人間や影響を与えるステークホルダーが多くなる事が多いので、イメージと裏腹に高度なビジネスコミュニケーションやリーダーシップが要求されることが多いのです。

高い倫理観

エンジニアは、性質上自分の行動によって影響を受ける対象範囲が非常に広くなりやすいのと、専門家ゆえに、不正や間違いを他の職業の人間が見抜くことは非常に難しいため、自身の行動に対して高い倫理観と強い責任が伴います。

個人情報の漏洩などのセキュリティ面における問題や、障害発生時の顧客や消費者に対して発生する損害、サービス利用者間のトラブルやそれによって引き起こされる人命リスクなど、

エンジニアが作ったシステムのひとつひとつが、上記の致命的な問題を引き起こす可能性があるというリスクを負っています。ミスを防ぐという防衛的な視点も重要ですが、問題を認識したときに正しく屹然と対処することもまた重要です。多くの技術的な問題が、リスクや問題を認識して履いたがそれらを否認し続けた事によって引き起こされているのです。

この辺りの話は理工学系の大学の出身の方であれば「技術者倫理」という科目を履修していていればイメージが持ちやすいかもしれません。チャレンジャー号事件など、有名な技術的な問題によって引き起こされた事件の事例研究がテーマの科目で、技術者倫理とリスクマネジメントなど、書籍もありますので気になる方は一度読んでみてください。

上記の4つ以外にももちろんエンジニアとして大切な素養はたくさんありますし、これらすべてを完璧に実現出来る人はほとんどいないと言っても過言ではありません。しかし、エンジニアという職業は、知識やスキルを持っていればそれで終わりという職業では無いことは間違いありません。それ故に奥が深く、決して簡単になれるような職業ではなく、だからこそやりがいと面白さのある仕事だなと思っています。

おわりに

完全に私見丸出しの記事になってしまいましたが、IT業界で一般に言われているエンジニア像とその性質、工学の世界、ビジネスの世界で求められるエンジニアとしての役割や素養について普段考えていたことを整理するいい機会になりました。

とりあえず色々振り返って、個人的に「3ヶ月でエンジニアになれる!」というフレーズは口が裂けても言えないかなぁという感想を持ちました。

次回は@hikariiiiiiiiさんのがなにか書くみたいです。お楽しみに!