2019年4月でシステムエンジニア歴が丸6年になる筆者。
今回はシステムエンジニアを目指す人や、システムエンジニアになることが決まった人に、システムエンジニアの勉強について簡単に紹介します。
巷で言われているように、システムエンジニアは常に勉強しなければやっていけない職種です。
逆に、勉強さえできれば意外と楽に稼げる職種だと感じています。
システムエンジニアはなぜ勉強しなければならないか
システムエンジニアが勉強しなければならない理由は大きく2つあると考えています。
- 最新技術を取り入れた開発ができなくなる
- 適切な技術選択、システム設計ができず、デスマーチを生み出す
最新技術を取り入れた開発ができなくなる
最新技術を取り入れようと思ったら、勉強して最新技術を覚えるのは当然です。
最近だと、機械学習やAIといった分野が大きく進化し、各企業でAIを用いた製品開発、生産性向上を目指しています。
では、大学などで機械学習やAIを習ってきていないリーマンエンジニアが、機械学習やAIを使った開発をするにはどうすればよいかというと、勉強するしかありません。
機械学習やAIを使うには、プログラミング言語としてはpython、数学としては線形代数や微分が知識として必要になります。
私も2016年までpythonなんて存在も知らなかったし、線形代数や微分もすっかり忘れてしまっていましたが、機械学習は今後必須になるという予感がしたため、必死に勉強しました。
おかげで社内でディープラーニングを活用したシステム開発に携われ、給料もあがりました。
仮に今私の会社が倒産しても、機械学習のシステムが組めるといえば、今後数年は職に困ることはないでしょう。
逆に、pythonや線形代数、微分を勉強するのがめんどくさい人は機械学習エンジニアにはなれません。
そういう人にはどういう仕事が回ってくるかというと、レガシー技術で作られたシステムのメンテナンスです。
私の会社でも、私がpythonを使ってAIエンジンを作っている隣で、エクセルマクロの修正を一生懸命行っている人がいます。
エクセルマクロを100%否定するわけではありませんが、次につながる仕事ではないのは明らかですよね。私だったらモチベーションがあがりません。
エンジニアとして最先端の技術を扱いたいのなら、勉強は必須なのです。
適切な技術選択、システム設計ができず、デスマーチを生み出す
担当するシステムによって最適な技術というのはある程度決まってきます。
例えば、機械学習を取り入れたシステムを作るのにプログラミング言語としてエクセルマクロやC言語を選択する人はいませんよね。
これはすごく極端な例ですが、不勉強で知識がない人は、自分の知っている知識でしかシステム開発ができないため、あながち間違った例ではありません。
特に大企業になると、「全員が扱えるように」という理由で、あえて低レベルな技術を選択することすらあります。
私の会社だと、データを蓄積するシステムを作るのに、「RDBは専門知識がないと扱えない」という理由で、データをすべてcsvファイルで蓄積するというシステムが実際に存在します。
愚の骨頂とはこのことかと思いましたが、この話を聞いた瞬間にこのシステムの担当者とはかかわるのをやめようと心に決めました(笑)
また、大規模システムの開発になってくると、テストフェーズでバグが収まらずデスマーチ化するという話をよく聞きます。
大規模システムになればなるほど細かい単位での単体テストが結合テストが重要になります。
そのテストを実現するためにはシステムの機能を細かく分割するための設計テクニックが必要になりますが、例えばオブジェクト指向設計と呼ばれる設計手法はそういった設計テクニックの一例であり、世界中で採用されているため実績がありノウハウもインターネット上に散在しています。
そのオブジェクト指向を勉強せず、我流で設計したシステムは細かい単位でのテストが十分に行えず、バグが頻発しデスマーチになりがちです。
また我流の設計手法を次の担当者に引き継ぐのも難しいため、時が流れるごとにアンタッチャブルなシステムになっていきます。
一方でオブジェクト指向のような世界的に認知され広まっている設計手法であれば、次の担当者にオブジェクト指向の知識があればシステムの理解も容易になるでしょう。
オブジェクト指向だけでなく、デザインパターンと呼ばれる手法や、GUIアプリであればMVCモデル、MVVMモデルが有名ですね。
適切な技術選択、適切なシステム設計を行うためには、勉強が不可欠なのです。
勉強して得したこと
上述したようにシステムエンジニアは勉強が必須です。
にも関わらず、日本のシステムエンジニアは勉強しない人がたくさんいます。
知識がなくても知識がないなりの仕事を回してもらっているのです。
年功序列の企業だとそれでも給料が上がっていくので、勉強する必要が見いだせないのかもしれません。日本社会の悪しき部分だと感じています。
しかし、そのような環境でも勉強して知識を得るとよいことがあります。
それは、勉強しない人に比べて明らかに仕事ができるようになるので、出世が早くなるし、仕事も楽にできます。
また、知識がつき同僚や上司から頼られるようになってくれば、まず配置転換などがなくなります。
システムエンジニアとして成果が出ないと、次に回されがちな職種は営業です。特に客先に営業に行くときにシステムに詳しい人間が重宝されるようです。
私は、営業マンとして人と話して成果を出すくらいなら、システムエンジニアとして勉強して知識をつけて成果を出すほうが簡単だと考えているので、配置転換されないためにも勉強を続けています。
まとめ
システムエンジニアに勉強が必須な理由を紹介していきました。
勉強が必須にも関わらず、勉強しないシステムエンジニアがたくさんいるので、日本の将来が不安になる一方、勉強している自分としては優位な環境になりつつあり、微妙な心境の今日この頃です。
以上!!
コメント