27歳でCAE技術者からWebエンジニアに転職した理由

スポンサーリンク

対象読者

CAE技術者について、以下のようなことを知りたい方

  • 業務内容
  • 生き残るために必要なスキル
  • 将来性

結論

タイトルの通り、私はCAE技術者からWeb系エンジニアへと転職した。その理由を要約すると以下だ。

    1. CAEに要求される職人技の将来性がない
    2. プログラミングによる自動化スキルこそが生産性を決定する
    3. プログラミング技術を伸ばすのにCAE界隈は適していない

    私はもともとCAEよりもITに興味があって、力学や数値計算の勉強をそっちのけでプログラミングの勉強に時間を費やしてきた(私の経歴)。そんな偏見も込みの意見だということに注意していただきたい。

    だが、本記事はCAE技術者、ひいてはITを使用する職種にとって、ITの根幹にあるプログラミングこそが重要であることを示唆する。

    まずはCAEとは何かを論じ、CAEの性質上、プログラミングが重要となる理由を示す。

    CAEの概要

    CAE(Computational Aided Engineering)とは、高性能な機体・装置を作るための試行錯誤をコンピュータ上のシミュレーションにて行うことだ。実物を一々作って実験するのでは、

    • コストがかかりすぎる
    • 測定が難しい部分がある

    等の問題があり、それをコンピュータ上の計算によって(Computational)支援する(Aide)。これがCAEだ。

    高性能な機体条件を模索するという目的の性質上、CAEには以下のように膨大な作業量が要求される

    1. 計算条件を少しずつ変えて、大量ケースを計算し、
    2. それらの計算結果を比較・分析し、
    3. その分析結果を機体・装置の形状設計にフィードバックする

      以上が主なCAEの業務だ(より詳細な業務工程を知りたい方はこちら)。これらの作業には以下のように専門知識が要求される

      • 専用ソフトの使い方を運動神経に覚えさせること
      • (熱流体、材料)力学などの知識
      • 数値計算の知識

      しかし、実務上、これらの専門知識は必須ではない。

      専門知識は外注できる

      そもそも、CAEを必要とするモノづくり(航空機や車)は大規模な組織によって行われたりする。そのため、中央集権的な業務環境の中、CAE技術者は働くことになる。すなわち、決断するブレインと判断材料を提供する実務者(CAE技術者)に二分される

      ブレインは高学歴エリートであり、力学や数値計算、機体の知識に精通している。しかし、CAEの専門知識に欠ける。そこをアシストすることがCAE技術者に求められることだ。つまり、力学的・数値計算的な判断はブレインに任せることができる

      もちろん、力学や数値計算を自前で理解するに越したことはないし、CAE技術者として一人前になるためには避けて通れない道だ。CAEの条件設定のために力学・数値計算の知識が必要だ。

      だが、大量ケースの計算が目前にある状況では、独力での計算条件の設定やその結果の考察などよりも、大量な作業を捌けるCAE技術者の方が重宝されるそれを実現するために必要となるのが、プログラミングを駆使した自動化スキルだ

      CAE職人の厳しい未来

      しかし、現状ではCAEを完全自動化することは難しい。複雑形状に適合した計算格子は職人技でしか実現できず、CAE自動化のネックとなっている。だからこそ、必要悪としてCAE職人は重宝される。しかし、職人への道は避けるべきである

      職人技が完全自動化される未来

      職人依存から脱却するため、計算格子作成の自動化に関する研究開発が盛んに行われている。昨今のAI技術の発展により、ブレイクスルーが起き、格子職人はお払い箱になる未来が来るかもしれない。

      私も転職前の2年間ほどは、AIによるCAE自動化の研究開発を行っていた。今後はCAEツールを使いこなせることよりも、ツールを開発する側の方がより大きなウェイトを占めることは間違いない。

      格子作成のスペシャリストよりも、プログラミングできる人材が欲しい、という意見もあったほどだ。

      独立が難しい

      独り立ちして、CAE技術者として生きていくことも厳しい。なぜなら、以下のようにCAEには膨大なコストがかかるからだ。

      • 各種ツールのライセンス料は月額100万と高額になるものもある
      • シミュレーションも莫大な計算リソースを要する

      これらを個人で賄うのは難しく、何かしらの組織に属する以外に、CAEで食っていくことは難しそうだ。

      特定のツールを極めることのリスク

      CAE業務のほとんどは専用のソフトウェア(ツール)を用いての作業となる。それぞれのツールをゲームの操作のように使いこなせるようにならなければ、仕事にならない。

      • 手順
      • GUIの把握
      • 視点の操作
      • ショートカットキー

      など、いろいろ覚えなければならない。

      しかも、同じフェーズのツールにも様々な種類があり、職場によって使用するツールは異なる。基本的な考え方は同じだが、当然操作方法は異なる。

      1つのツールに習熟していることは、他の同種のツールを使う上で無駄にはならないが、その運動神経は使い続けていないと維持できない。仕事が変わると、その技能は失われてしまうので、より汎用的な技能であるプログラミングスキルの方が価値があるように思う。

      CAE界隈の低レベルなプログラミング技術

      ということで、CAE技術者の生産性にプログラミングスキルは大きく寄与する。

      しかし、以下の理由から、CAE界隈のプログラミング水準は低い。

      1. CAEの完全自動化は難しく、手作業でゴリ押しする風潮がある
      2. 過去の膨大なコードを再利用するために、古い言語Fortran90が使われ続けている
      3. 機密が多く、オープンでナウいソースコードに触れる機会が少ない

      自動化への低意識

      CAEは多数の職人集団によって行われる。彼らはツールに習熟しており、素早く成果物を作成できる。だから、プログラミングは必要に迫られて仕方なくやるものであり、自動化しようとする機運は低い。だって、不慣れなプログラミングに時間を割く代わりに職人技でチャチャっと仕上げられるのだから。

      自動化の余地を虎視眈々と見出し、明日の自分たちが少しでも楽になれるように投資(自動化ツール作成)を行うことの積み重ねが生産性向上に繋がる。

      1. 自動化によって浮いた時間
      2. その時間を勉強やさらなるツール作成に投資
      3. より時間が浮く

      という好循環が生まれ、生産性を指数関数的に向上させられるはずだ。だが、そのような気持ちを持つ職人は少ない。

      閉鎖的文化、古いプログラミングスキル

      ということで、自動化マンを志すとしよう。だが、その志はCAE界隈では厳しい道となる。理由2.と3.のように、閉鎖的な文化だからだ。

      閉鎖的だからこそ、自動化ツールは自分の業務効率化のためだけに作られがちである。だから、小規模で汚いものがCAE技術者ごとに点在しているのだ。

      ”汚い”というのは、読みにくく、変更や機能追加がしづらい、という意味だ。大規模だと、たちまち保守不能に陥るが、小規模ならば、汚く書いても問題になりにくい。だからこそ、低いプログラミングスキルでどうにかできてしまう。

      また、Fortran90のような古い言語は手続き型だ。現在、オブジェクト指向は必須なのに、古いプログラミングに縛られてしまっている。だから、最新のオープンソースのフレームワークやライブラリの扱いが分からず、手続き型で自作して対処しようとする。新しいプログラミングを取り込む文化が弱い。

      CAE技術者の最重要スキルはプログラミング

      膨大な作業量が求められるというCAEの性質上、職人技のみの対応には限界がある。だからこそ、専門知識よりも自動化が重要であり、職人技がどんどん不要になっていく未来が訪れる。

      今後生き残るためには、CAEのより上流、すなわち

      • CAE自体の自動化
      • CAEツールの開発

      のような業務スキルが大切になりそうだ。プログラミングスキルが今後の生き残りのために必要だと思う。

      • ブレインとしての地位を高めるという道もあるが、それは他のIT業界では通用しない
      • プログラミングを学ぶには環境が悪い

      だから私は最も汎用的なWebを扱う業界に移行と思った。

      著者の経歴

      私は以下の2点を理由に、プログラミングもCAEも分からない学部卒の状態から、航空宇宙関連のCAEエンジニアとして就職した。

      1. 物理や数学が好きだった
      2. ITに将来性を感じた

      そして、以下のような業務経験(古い順)を積んだ後、5年間の在籍期間を以って、Webエンジニアへと転職した。

      1. 某重工向けCAE業務
      2. 某重工向けコードの開発
      3. 某研究機関にて、AI関連の研究・開発

      最後の仕事「AIの研究・開発」は、単なるCAE技術者にとっては得難い経験で、将来性がある有望な立場にいられた。だが、転職した。

      appendix: CAEの工程の詳細

      上述のとおり、各工程において、

      • 専用ソフトの使い方を運動神経に覚えさせること
      • (熱流体、材料)力学などの知識

      などの専門知識が要求される。

      形状データ作成

      シミュレーションを行うためには、実機の形状をコンピュータ上で再現しなければならない。

      • 図面という2次元情報から3次元をイメージする能力
      • 方程式で表せる数学的な曲線で再現できない箇所は手作業で調整
      • ソフト間の互換性がない形状データが崩れたりしたときの修正
      • 機体への知識

      などの能力や作業が要求される。

      計算格子作成

      計算格子とは、形状データをベースとして、機体やその周りの空間を模擬したものだ。

      • 計算格子作成の難易度は形状データの複雑さに比例する
      • 計算格子の品質は次の工程に影響を及ぼす

      ため、最も職人技を要求される

      ソルバーによる計算

      ソルバーとは、運動法則をプログラムしたもので、シミュレーションを行う主役だ。計算格子と、計算条件を入力とし、シミュレーション結果を出力する。計算自体はあまり手間ではない。実行するだけだからだ。ただ、計算が上手く行かない場合、地獄を見る

      • 計算格子作成への手戻り
      • 計算モデル・条件の変更
      • 計算が上手くいくかどうかチェック(ある程度計算してからではいと分からないので、待ち時間が生じる)

      を繰り返さなければならず、かなりダルい。

      計算結果の可視化、解釈

      シミュレーション結果は、ただのバイナリデータとして吐き出されため、人間には理解不能だ。そこで、人間に解釈可能な情報を計算結果から取り出さなければならない。そのためには、

      • シミュレーションの目的
      • 力学への理解

      を元にどこに着眼べきかを判断しなければならない。そして可視化した結果を力学や数値計算の知識を基に分析し、性能向上のために機体形状をどのように修正すべきかフィードバックするのがこのフェーズの役目だ。

      コメント

      タイトルとURLをコピーしました