システムエンジニアがきついと言われる4つの理由とそれでもおすすめできる2つの理由
2023.11.18

システムエンジニアは忙しく、また守秘義務の仕事も多い点から、具体的な仕事内容の情報が発信されにくく、外からその実態がわかりにくい職種といえます。


そのため、残業が多い、ストレスが高いなどネガティブな情報だけ目立ってしまい、システムエンジニアを志すべきかどうか躊躇してしまう方も少なくありません。


では、ほんとうのところはどうなのでしょうか?

システムエンジニア3年目の筆者(42歳)が、自身の体験も踏まえて解説します。



1.システムエンジニアの仕事とは?

システムエンジニアは、顧客の要望・要求をコンピューター上で動作するようにシステム設計する技術者です。


設計範囲は多岐にわたり、今ご覧いただいているWebシステム(WebサイトやWebアプリケーション)から、商業施設などによく設置されている自動体温測定システム、それから医療システムや教育システム、物流システムに自動運転システムなど私たちの身の回りの多くに関係します。


設計するシステム内容は、多くの場合、世の中に同じものが現存しない新しいシステム。
クライアントや社会の期待を背負って設計・開発に従事します。


新しいもの、といえば開発時における設計変更やトラブルが発生しやすいもの。

そして前例のない問題解決は、システムエンジニアへの負担となり、「きつい」という印象にもつながります。


しかし、本当に 「システムエンジニア == きつい」 だけでしょうか? 

次の章ではシステムエンジニアの働き方について掘り下げたいと思います。



2.システムエンジニアの働き方


代表的なシステムエンジニアの働き方を4つご紹介します。

客先常駐型エンジニアの場合

客先常駐型エンジニアは、人材派遣や受託開発企業で働くシステムエンジニアによくある働き方です。


取引先の企業に常駐して、システムの開発や保守を行います。

常駐期間は、数ヶ月間から1年程度が一般的です。

メリットは、客先で過ごす時間が多い点から、客先のメンバーから様々な刺激を受けられる点です。

コミュニケーションに長けた方は特に向いています。


デメリットとしては、時間の束縛と通勤が挙げらるでしょうか。

社内SEの場合

自動車メーカーなどの大企業以外だと、社内SEは幅広い分野の設計を任されることが多いです。


開発案件は数時間で終わるものから1年かかるようなビッグプロジェクトまで様々です。


メリットはお給料を頂きながら、幅広いジャンルの知識を学び、経験し、自己スキルに変換できることでしょう。


注意点は、社内といえどもクライアントである社内の方々から信用を得る必要がある点です。

信用を得るためには、成果物はもちろん、日々のコミュニケーションも重要な要素となります。

請負型エンジニアの場合

請負型は、受託開発企業やフリーランスにあてはまる働き方です。


案件ごとにシステム設計を行い、見積もり、受注、開発と進むパターン。開発期間は数時間から1年程度と案件ごとによって色々です。


やりたくない仕事は断れる、仕事を選んで開発できる点がメリットでしょう。


ただし、開発着手前に見積もりを行う点から、開発工数を誤ってしまうと開発側の負担が増え、きつい労働環境に陥る場合もあります。


自己完結する仕事でもあり、またクライアントの後工程にも影響するため、誰かのサポートを前提としたあまい設計ではなく、できるだけ正確な余裕を持った設計技術が求められる働き方になりますね。

運用・保守専門のエンジニア場合

休むことなく稼働するサーバーや病院、オンラインショッピング、物流システムなどで運用・保守専門のシステムエンジニアが活躍しています。


業務内容は、バグなどのトラブル発生時の緊急対応やソフト、システムのアップデートなどです。


業務に携わる期間は数ヶ月から数年と比較的長い点が特徴的です。


メリットとして、すでに動いているシステムであることから、開発リスク、プレッシャーは低い点が挙げられます。


ただ「止められないシステム」を守ための職種である以上、緊急時のプレッシャーはほかのどの職種よりきついでしょう。


昨今の複雑化するシステムから、一般的にはインシデント(トラブル)計画書を用意している現場がほとんどです。

そういった備えにより、安心できる一方、システムを熟知する努力は求められます。



3.システムエンジニアがきついと言われる4つの理由

代表的な4つの「きつい」をご紹介します。

納期が決まっており、残業や休日出勤をしなければならない場合がある

新規開発・改修・保守に関わらず、予算がある以上、納期が決まります。社内向け、受託開発関係なく、仕事に納期はつきものです。


当然最初は余裕を持った納期を設定し、開発に着手します。

しかし、開発を進める中で思った以上に進捗に時間がかかったり、想定外のことが発生したりすることはよくあります。


そうなると、当初に見積もった「納期」が厳しくなり、残業や休日出勤を強いられ、体力的にも精神的にもキツくなります。


しかし、あえて厳しいことをいうとその原因は、ご自身の計画や経験不足ではないでしょうか?


メンバーで開発している場合は、関係各位からプレッシャーがかかりキツく、しんどくなりますが、勉強代として自身のスキルアップに昇華できればいいと、筆者は思います。

仕事量に対して割安になる場合もある

主に請負型システムエンジニアで発生する事案で、予定より開発が難航した場合に労働に対する報酬が低くなる場合があります。


特に開発途中で変更や追加が生じ、それを最初の予算内で消化しないといけない、という場合に報酬、給料が当初よりも割安になってしまいます。


このような金銭的な要素は、営業時の折衝次第で良くも悪くもなります。


わかりにくいシステムの仕様などをわかりやすく伝え、折衝する技術もシステムエンジニアには必要といえるでしょう。

常に勉強しないといけない職業である

特に新規案件の開発に関わるシステムエンジニアは、勤勉である必要があります。

これは毎日何時間勉強するということではなく、業務の中で「?」となったときに、調べたり確認したりすることを普通にこなせるか、という点。


「まあいいか」「今は忙しい、後回し」ではなく、今確認し、短時間に正確な情報をキャッチアップする技術が必要です。


また分からないことに対して自分の知識で言い訳をするのではなく、問い合わせ窓口があれば電話やメールし確認、頼れるところがなければStack OverflowやGitHubなどのコミュニティで確認する行動力が必要です。


新しい技術トピックスは、電車やバスなどの待ち時間にチェックする程度で問題ないと思います。

クライアントワークのため、ストレスがかかる場合もある

特に新規開発に関わるシステムエンジニアの場合、クライアントの心境をよく理解する必要があります。


それはクライアントとしては、「本当に思ったものが出来上がるのか?」「この投資は成功するか?」という不安が完成まで常に付きまとい、ハイストレスになりやすいからです。


そのため開発側の都合だけでコミュニケーションをとると、クライアントの求める情報交換にならず、人間関係がこじれ、結果的に互いにストレスを感じてしまう場合もあります。


システムをうまくまとめる技術も必要ですが、人間関係をうまく維持する技術も必要といえるでしょう。



4.きついけどシステムエンジニアがおすすめな理由


きつく厳しいシステムエンジニア、なぜ私をはじめ多くの方が続けるのでしょうか?

主な理由を3点紹介します。

仕事にやりがいがある

新規開発、保守に限らずシステムエンジニアは責任が重い反面、やりがいも非常に大きい職種です。


新規開発の場合は、世の中にないものをクライアントとともに作り、またそのシステムで業務効率化、経営効率化に結びつけば、自身の費やした努力が報われ、達成感を得られます。


保守の場合も、事前に計画したとおりにシステム更新が完了すれば、「予定とおりに達成した感」を得られ、楽しくなります。緊急時の対応もスムーズにいけば、周りからの信頼が熱くなり、翌日からの出勤の足も軽くなるでしょう。


あくまで努力してうまくいった場合ですが、筆者の経験上、基本的にシステムエンジニアは単調ではない仕事なので、やりがいを感じやすい職種です。         

自分のスキルと経験次第で給料が高くなる

システムエンジニアの中でも経験豊富なシニアエンジニアになると、年収1,000万円越えも珍しくありません。


できることや経験したことが増えると、より複雑なより大きなプロジェクトに携われるようになります。


お金だけのために従事しているシステムエンジニアの方は少ないと思いますが、高い給料でいい暮らしができるようになれば、仕事へのモチベーションも上がりますね。


ほかの人にはできない、自分にしかできない技術や経験が増えれば、楽しいエンジニアライフとなるでしょう。



5.システムエンジニアに向いている人の3つの特徴

筆者は、以下の3点のうち、1つでも当てはまればシステムエンジニアに挑戦してみる価値はあると思います。

コミュニケーションを取るのが好き

システムエンジニアは、クライアントの要求を正確に聞き、設計し、プロダクトを作り上げる必要があります。


自分は大丈夫、この設計で問題ない、と思っていても、クライアントはそう思っていない、ということはよくあります。


文字や言葉だけのコミュニケーションに限らず、図や画像など相手本意になってどれだけ貢献できるか、というマインドも求められます。


成功するシステム開発は必ずといっていいほどコミュニケーションは良好です。


越境開発の場合は、より柔軟なコミュニケーションが求められますので、英語が得意な方は強みを活かせるかもしれませんね。

細かい作業やコツコツ作業が得意

一見するとプログラマに必要な要素と思えますが、システムエンジニアにも細かいコツコツ作業は求められます。


クライアントの要求を達成するための仕様や開発フローは、ひとつではありません、正解は複数あります。


どのライブラリやサーバー、プログラミング言語を使うべきか、それらをどのように構築、運用すればベストか。この確認作業は本当にテスト&トライであり、苦労する部分です。


根気強く、諦めず、ベストなシステム設計を作成できるか、という点がシステムエンジニアには求められます。


過去に諦めず頑張った成功経験があれば、システムエンジニアにむいている、といえるかも知れませんね。

情報を収集し的確に整理するのが得意

システムエンジニアは、課題や問題を解決するための方法をどれだけ知っているか、という点が重視されます。


そのためには幅広い正確な情報や確認する術が必要です。


日頃から「なんで?」「どうやって動いているんだろう」と疑問に持ち、可能な限り調べる努力を仕事・プライベート関係なくできることが必要です。


そのためにはバイアスにとらわれることなく、目や耳、鼻などの五感から入ってくる情報を素直に受け入れ、情報整理する。それができる柔軟な考え方を持っている人が向いていると思います。



6.システムエンジニアを目指すにはプログラミングの勉強が必須


コンピューター上でシステムを動かすためには、なんらかのプログラミング言語の知識が必要になります。


英語やドイツ語などと違い、プログラミング言語のよい点は、必ずしも完全に覚えなくてもいい、という点です。


今はプログラミングを書く「エディター」が、入力する文字の補完を自動でしてくれますし、構文を間違った際も何行目の何がダメなのか、などデバッグ機能が多くの言語で充実しています。


また一昔前はパソコンにプログラミング言語をインストールして、プログラムを実行する必要がありましたが、現在はパソコンにプログラミング言語がインストールされていなくても、ブラウザ上でJavaやPythonなどを試験的に実行することも可能です。


例をあげると、Programizやreplit.comなどのWebサービスが有名でしょう。


実際の開発で、システムエンジニアがプログラミングまでするかどうかは、案件によりますが、最低でも読める必要はあります。


はじめてプログラミングをされる方は、PythonやRubyなどの読み書きしやすい言語がいいかもしれません。


幅広いシステム案件をカバーしようと思うと、3〜5言語ぐらいは使える必要があるでしょう。


また実務では、フレームワークやライブラリ、サーバー周りの作法に従う必要があります。プログラミングはあくまで基礎スキルである点に留意しましょう。



7.システムエンジニアを独学で目指すときのロードマップ


システムエンジニアになるためのロードマップをご紹介します。

どのようなエンジニアになりたいか目的を決める

きつい、といわれるシステムエンジニアへの道、困難な時も乗り切れるだけのモチベーションが大事です。


なんのために、将来どうなりたいか、自分自身にコミットして、揺るぎない気持ちで進む必要があります。


私の場合は30歳半ばの時、渡航先のインドの電車内で若者の多くがスマホを操作していることから、これからの時代絶対ITだ、と一念発起。自分にコミットしてプログラミングの世界、システムエンジニアの世界に足を踏み入れました。


もし自身の中で目的が明確にならない場合は、システムエンジニアに決めることなく、色々調べたり試してみたりすることをお勧めします。


参考までに外国の方にはなりますが、システムエンジニアの1日を紹介されている動画がありましたのでご紹介します。


  ・https://www.youtube.com/watch?v=WAuL6aE4m5E

  ・https://www.youtube.com/watch?v=f2xYu5-Sp20


基本的にシステムエンジニアに関する情報は少なく、具体的にどんなエンジニアになりたいかイメージできない方も少なくないと思います。

そんな時は身の回りの家電やシステムを見て、「こんなものを作ってみたいな」「こんなサービスがあればもっと便利なのに」ということを考え、その仕組みについて調べてみると、自分のやりたいことが見えてくるかもしれませんね。

学ぶプログラミング言語を決める

プログラミング未経験の方であれば、どのプログラミング言語を最初に学ぶか決める必要があります。


業界によってよく使われるプログラミング言語、あまり使われないプログラミング言語と傾向がありますので、どの業界のシステムエンジニアで活躍したいか決まっている方は、下記リストをご参考ください。


  ・自動車やインフラ系 → プログラミング言語:JavaやC言語

  ・IoTや人工知能 → プログラミング言語:Python

  ・Webシステム → プログラミング言語:Java、Python、PHP、JavaScript etc

  ・iOS, Androidアプリ → プログラミング言語:Java、Kotlin、Swift、Dart

  ・社内エンジニア → プログラミング言語:Python、VBA、JavaScript


上記は目安ですが、JavaやPythonは広く使われていますね。


1つの言語でいろいろできるというのは、お得感を感じます。


ただ読みやすさ、書きやすさはJavaとPython、JavaScriptでは異なります。

3つの中ではPythonが比較的読み書きしやすく、プログラミング初心者むきといえるでしょう。

環境構築を行う【初心者の最初の難関】

プログラミングを行うためには、パソコンにプログラミング言語を実行するためのソフトウェアをインストールする必要があります。


インターネットでもプログラミング言語のインストール方法は紹介されていますが、うまくいく場合とうまくいかない場合があります。


うまくいかない場合は、パソコンにセキュリティソフトが入っていてブロックされる場合やインストール方法が古い場合など。


プログラムを書く前から環境構築できなく、時間を費やすとモチベーションが下がりますよね。


この辺りはノウハウが整っているプログラミングスクールやeラーニングなどが安心できるでしょう。

学習サイトを利用してプログラミングの基礎を学ぶ

たとえば「Python 特定の文字があるWordを検索」とGoogle検索するとそれらしいPythonでWordを検索するための記事が複数紹介されます。

また最近話題のChatGPTにおいては、ライブラリのインストールからコードまで紹介してくれます。


このようにやる気さえあれば自分のペースでプログラミングを学習することができます。


ただし、必ずしも書いてあるとおりに実行してうまくいくとは限りません。


うまくいかないとき、はじめのうちは頼れるところがないと数時間、数日間時間を費やしてしまうでしょう。


こうしたリスクを考えると、プログラミングスクールやeラーニングなど頼れるところがあると安心できますね。

実際にコードを書いて挙動を確認する

開発環境が整い、コーディングの教材が整ったら実際にプログラムを書き、実行できます。


はじめの内はコードを書くことに抵抗を感じると思います。

参考書で紹介されているコードをコピペして、実行、それでも十分です。


大切なことはそれをベースに、自分なりにアレンジしてみることです。


たとえば先ほどの「特定の文字があるWordを検索」で考えると、ChatGPTは1つのフォルダ内の検索方法しか教えてくれません。


Windowsの場合、Cドライブにある各フォルダ内すべてを対象に検索するとすればどうすればいいでしょうか?


そんなふうに参考書などで紹介されているコードを自分なりに、実践をイメージしてコーディングできるようになるとシステムエンジニアの道もひらけてくることでしょう。

学んだ知識で作れそうなものを決める

システムエンジニアに限らず「プログラム」で働く場合、何かしらのサンプルがあると就職、受注の際に役立ちます。


採用や発注側からすると、どんなふうにコードを書くか、どんな工夫ができるか、という点は確認できると安心です。


そのために身の回りの小さい課題に対してプログラムでアプローチをかけ、プロトタイプのアプリやシステムを作成、公開することをおすすめします。


YouTubeやSNS、GitHubやQiitaなどを通じて発信すれば、周りからの評価もあがり、自信にもつながります。


自分の考えたもの、作成したものを公開することに抵抗を感じられる方もいらっしゃいますが、自分自身の成長記録にもなります。


特に作りたいものがない場合は、書店などのITコーナーでプログラミング雑誌を手にしてみるとヒントがあるかも知れませんね。

フレームワークについて学ぶ

フレームワークは、Web界隈でよく聞き、よく使うソフトウェアになります。


たとえばプログラムのファイルを作成し、適当なフォルダに保存したとします。


人によってフォルダ構造は異なると思います。


Aさん /Users/MyApp/sample.py

Bさん /Users/B/MyApp/function/sample.py


チームで1つのアプリを開発したり、後任の人に開発をお願いしたりする場合、できるだけファイルの構造は整って規則性のある方が理解やメンテナンスははかどります。


またセキュリティやデータベースとの接続設定、拡張性など開発にはさまざまな要素が関係します。


こうした共通の規則性や開発スピード、セキュリティを担保するためのシステムがフレームワークです。


多くのフレームワークは無料で誰でもインストールして使用することができ、商用利用可能なものが多いです。


Web以外のロボットやインフラ系などは、フレームワークがないケースが多く、ライブラリ(特定の機能に特化したプログラミング群)を組み合わせて開発スピードを上げる方法が一般的ですね。


またこうしたフレームワークやライブラリを使うだけでなく、作ることもできれば、あなたはいっぱしのシステムエンジニアといえるでしょう。

実際にコードを書いて試行錯誤を繰り返す

1冊の参考書、1つのレッスンを完了したとき、具体的に次のステップをイメージできる方は少ないかも知れません。


プログラミング初心者で、1回で参考書を理解できる方は、恐らく少ないと思います。


理解が思うように進まないからといって、焦らないように注意いただきたいです。


参考書でうまく実行できなかったところをもう一度チャレンジしてみる、気になったセクションのコードをもう一度読み返してみる。


何回か繰り返して書いて、実行していく内に少しずつ理解がすすみ、4、5回目でコードを完全に理解できると思います。


初めは基礎的なものから取り組み、次第にレベルを上げて実践的なプログラムを扱っている参考書や教材に挑戦してみるステップをおすすめします。


その中で作ってみたいシステムが思いつけば、その開発に専念すればいいと思います。

思いつかない場合は、できるだけ多くのサンプルコードを書き、さまざまな処理ケースを体験することをおすすめします。


気づけばできることが増えている、成長した自分に気づき、システムエンジニアに近づいていることでしょう。


※掲載された社名、製品名は、各社の商標及び登録商標です。

この記事をシェア