エンジニアはこれが大変!【現場のエンジニアの苦労を赤裸々に告白】

エンジニアはこれが大変!【現場のエンジニアの苦労を赤裸々に告白】 エンジニアの紹介
エンジニアはこれが大変!【現場のエンジニアの苦労を赤裸々に告白】

こんにちは。

この記事を読んでいるあなたは、

「エンジニアの仕事で大変なことって何だろう?」
「プログラミングの作業以外に、エンジニアってどのあたりが大変なんだろう?」

このように思っていませんか?

「エンジニアの仕事で大変なのは、プログラミングの作業だ!」

と思っているあなた、それは大間違いです。
実は、エンジニアが苦労しているのはプログラミングの作業以外の方が大きかったりします。

そこでこの記事では、以下のような内容を紹介します。

この記事を読んでわかること
・僕のまわりのエンジニアが大変に思っている具体例
・プログラミング以外の、エンジニアが大変に思う場合8選

この記事を最後まで読むことで、プログラミング以外の、本当にエンジニアの仕事で大変なことを理解できます。
特にこれからエンジニアを目指す人にとっては、エンジニアの仕事内容をリアルにイメージできるようになるので、絶対に読んでいだたきたい内容となっています。

  1. [体験談]僕のまわりにいる、現役エンジニアの働き方の実態
    1. 複数の開発プロジェクトが並行で動いているので、1つのプロジェクトに集中することはできない
    2. 仕事の大部分はチーム外の人とのやりとりなので、プログラミングをする時間はほとんどない。
    3. チーム開発ができるのはもちろん、タスクやスケジュール管理など幅広い知識が要求される
    4. 業務委託のエンジニアの管理をするのは当たり前!?
  2. [前提]エンジニアとはどんな仕事か?
  3. 現場のエンジニアが大変だと思っていること8選
    1. 複数のプロジェクトをかけもちになる
    2. マネジメントとかやったことない&やりたくないのに、業務委託で参画している人のマネジメントをする必要がある。
    3. 他の人が書いたソースコードを読んで、そこに修正を加える必要がある
    4. クライアントやビジネス担当者や企画担当者の発言に振り回される
    5. 常にミーティングをしており、作業をする時間がない
    6. ドメインの知識(クライアントのシステムや業界のこと)を理解してないと辛い
    7. 法改正やプラットフォームのアップデート振り回され、プログラミングをする時間がとれない
    8. 仕事の進め方が合わない人と一緒に仕事をする
  4. これからエンジニアを目指すあなたが気をつけておくべきこと
    1. エンジニアの仕事が、プログラミングだけだと思い込まないこと
    2. 今やっている仕事や学校などで、できる限り汎用的で広いスキルを身につけておく
    3. プログラミングや、その他必要なスキルを最短時間で習得できるように努力する
  5. [最後に]エンジニアはいろいろと大変だけど、スキルが身につくこと間違いなし

[体験談]僕のまわりにいる、現役エンジニアの働き方の実態

[体験談]僕のまわりにいる、現役エンジニアの働き方の実態

それではまず、僕のまわりにいるエンジニアがどのようなところで大変だと思っているのか?の具体例を紹介したいと思います。

複数の開発プロジェクトが並行で動いているので、1つのプロジェクトに集中することはできない

僕の務めている会社では、いくつものWebサービスなどを開発しています。

所属するエンジニアの数よりも、圧倒的に多いプロジェクトが同時並行で走っています。
平均すると、1人のエンジニアが2つ〜3つのプロジェクトを掛け持ちしているような状態です。

・毎日複数のプロジェクトのミーティングに参加し、
・毎日複数のプロジェクトの関係者から、いろいろな仕事の依頼が舞い込む

こんな状態になっています。

あまりにも仕事量が多すぎて、プロジェクト間でエンジニアの取り合いが起きています。

場合によっては、他のプロジェクトのメンバーからは、「そのプロジェクトにそんなにエンジニアが必要なの?」なんて言われることもあります。
また、過去には少しだけエンジニアに余裕ができた瞬間に、エンジニアがいつの間にか他のプロジェクトにとられていた、なんてこともありました。

そのくらい、エンジニアは引っ張りだこですし、1人のエンジニアで複数のプロジェクトに対応する必要があります

こんな状態なので、エンジニアの仕事の様子を見ていると、1つの物事をじっくり考えるというよりは、

・できる限り早く検討をする
・特にプログラミングなど自分でなくてもいい作業は、できる限り早く他の人に依頼して、自分がプロジェクトのボトルネックにならないようにする
・システムの方向性に大きな影響を及ぼす部分は力を入れるものの、あまり重要でない部分はできる限り力を抜く 

というような工夫をしていたりします。

プログラミングの作業をじっくりやる・・・という状態からは程遠く、優秀なエンジニアであればあるほど、毎日の仕事が戦争のような忙しさです。

仕事の大部分はチーム外の人とのやりとりなので、プログラミングをする時間はほとんどない。

優秀なエンジニアは、システム開発のリーダー的な役割であることが多いため、プログラミングの作

業ではなく、チーム内外の人とのやりとりが仕事のメインになります。

一般に言われる、事業や企画担当者との今後の開発アイテムのすり合わせを行う必要があるのはもちろんです。

また、他の部署や会社全体のエンジニアリソースの配分に関しての打ち合わせに駆り出されることもあります。
そこでは、「何故これだけのエンジニアリソースが必要なのか?」を説明させられたり、課長や部長でもないのに、管理職のような仕事をしている人もいます。

ちょっと変わったところでは、金融系のシステムを構築する場合、ほとんどのケースでクライアントから「セキュリティチェックシート」というものを埋めるよう要求されます。
Excelで50〜200項目くらいを1つずつ埋める必要があるのですが、こんな作業もエンジニアがやっていたりします。
埋め終わった後は、クライアントとその詳細に関する議論を行うこともあり、チーム外とのやりとりは非常に手間がかかる作業になります。

こうやってチーム外の人とのやりとりをした結果、プログラミングをする時間はほぼとれなくなってしまいます

チーム開発ができるのはもちろん、タスクやスケジュール管理など幅広い知識が要求される

チーム開発ができるのはもちろん、タスクやスケジュール管理など幅広い知識が要求される

僕の会社のエンジニアに求められるのは、

・プログラミングをする
・チーム開発をする
・不具合修正をする
・ミーティングに参加して、自分のタスクに関する説明をする

という、一般的にエンジニアに求められるものだけではありません。
上記のようなもの以外にも、

・他の人の書いたソースコードをレビューする
・今週中にやるべきタスクの整理をしたり、どのプロジェクトにどれくらいの時間の作業が必要そうか?の見積もりをする。
・その見積もりを踏まえて、プロジェクトマネージャーに何をどこまでできるか?などの説明をする必要がある。

こういった、タスクやスケジュールを管理する仕事もたくさんこなす必要があります。

僕と一緒に働いているエンジニアもこういった仕事をしており、

・システムのアーキテクチャを決めたり、
・この2週間でどのくらいまで開発ができそうか?
・どのあたりにリスクがありそうか?

といったポイントを、精力的にこなしています。

本当に、エンジニアにはプログラミング以外にも幅広い知識とスキルが要求されるのです。

業務委託のエンジニアの管理をするのは当たり前!?

1つ前のものと似ていますが、特に社員エンジニアが不足している企業(現在の日本のほとんど全てと言ってもいいかもしれません)は、業務委託として月単位で人を拡充していることがあります。

これは僕が所属している会社も例外ではありません。
社員エンジニアの採用は時間がかかりますし、慎重に見極められる傾向にあるため、なかなか人を増やせないのが原因です。

一方で、プロジェクトはたくさんの数があるため、その場をしのぐために業務委託の人に仕事をお願いすることになります。

そして、日本の現在の雇用方法では、プロジェクトがなくなったからと言って簡単に首を切れないのも1つの理由です。

僕の会社では、社員と業務委託のエンジニアの割合が、およそ1:2から1:3くらいです。
そのくらい、業務委託のエンジニアは多いのです。

そんな業務委託のエンジニアですが、社員ではないのもあり、プロジェクトの方針を決めたり、大きい決定をするための裁量がありません。
そのため、事あるごとに、社員エンジニア出ていって方針を決めたり、業務委託のエンジニアのタスク管理を行う必要があります。

業務委託のエンジニアがいると、社員のエンジニアは「他の人の仕事の内容を管理して、方向性の指示をする」ような、管理職のような仕事をする必要があります。

エンジニアになる人の中には、一定数、「あまり人の管理とかがしたくないからエンジニアになった」という人もいます。
そういう人は、エンジニアになった挙げ句、やりたくない人の管理をさせられてしまうのですから、本当に大変です。

[前提]エンジニアとはどんな仕事か?

[前提]エンジニアとはどんな仕事か?

この記事では、「プログラミングの作業以外で、エンジニアが大変なこと」をまとめています。

・エンジニアとは何か?
・エンジニアのプログラミング作業でつらいところは何か?

こういった情報は、別の記事にまとめています。

もし、

「エンジニアってどんな仕事なんだろう?」
「プログラミングの作業でつらいのってどんなとこ?」

こんな疑問点がある場合は、以下の記事を読んでみてください。

現場のエンジニアが大変だと思っていること8選

現場のエンジニアが大変だと思っていること8選

続いて、現場のエンジニアが大変だと思っていることを具体的に説明していきます。

複数のプロジェクトをかけもちになる

体験談のところでも説明したとおり、特に優秀なエンジニアであればあるほど、複数のプロジェクトを掛け持ちすることになります。

新人やあまり優秀でない人が1つのプロジェクトを専任で見ることが多い一方で、優秀なエンジニアの場合、3つくらいのプロジェクトを並行で進めることがあります。

当たり前のことですが、担当するプロジェクトの数が増えれば増えるほど、1つのプロジェクトにじっくりと腰を据えて進めることができなくなります。

1つあたりのプロジェクトにかけられる時間が少なくなるのはもちろんですし、ほぼ同時並行で複数プロジェクトの内容を進めるため、瞬間的に頭を切り替えたり、新しい難しさが発生します。

その上、複数のプロジェクトを掛け持ちしていると、同時にプロジェクトの山場が来ることがあります。

もちろん作業のスケジュールを調整できる場合はしますが、それができない場合は、エンジニアが夜遅くまで仕事をしてカバーする必要がある、なんてこともあります。

マネジメントとかやったことない&やりたくないのに、業務委託で参画している人のマネジメントをする必要がある。

エンジニアを目指す人の多くは、あまりマネジメントに興味がなかったり、やりたくなかったりします。

「一人で黙々と作業ができるだろう」と思ってエンジニアになる人も多いですよね。

もちろんエンジニアになりたての頃は一人で作業をする時間が長いでしょう。
ただ、少しずつ経験とスキルを積んで一人での作業が楽しくなってくると、業務委託で参画している人の管理などをやる必要が出てきたりします。

元々人の管理をしたくなくてエンジニアを目指しているのに、優秀になった結果、他の人の管理をする必要が出てくるのは何とも皮肉な話です。

他の人が書いたソースコードを読んで、そこに修正を加える必要がある

他の人が書いたソースコードを読んで、そこに修正を加える必要がある

エンジニアは、基本的にチームでの作業が必要となります。

特にプロジェクトの規模が大きくなったり、プロジェクトの立ち上げから時間が経ったりすると、どうしても他の人が書いたソースコード(プログラム)を読む必要が出てきます。

それがシンプルな箇所であればパッと見ただけで対応の方針が思いついたりするので問題ありません。
もし複雑な箇所であったとしても、しっかりとしたドキュメントが残されていれば、それを読むことによって対応方針を考えることもできるでしょう。

一方、実際の開発プロジェクトでは、あまりドキュメントが残されていなかったり、残されていたとしても情報が古かったりします。

僕の感覚だと、8割〜9割くらいの割合でまともなドキュメントが残っていません。

なので、エンジニアは修正が必要そうな箇所のソースコードを自分で読み、修正の方針を考える必要があります。

他の人が書いたプログラムは、どのような意図があったのか?がわからないため、これが非常に重労働かつ難易度の高い作業になります。
理解するまでに時間がかかるのはもちろんですし、修正の方向性が合っているかが分からないまま進める必要があります。

その結果、場合によっては修正の内容が間違っており、不具合が起きることもあります。

エンジニアにとっては、

「他の人が書いたプログラムなんて知らないよ。エラーが起きたのも自分のせいじゃないよ」

と言いたいところですが、なかなかそんな言い訳はできません。
不具合が起こったら、全て自分の責任として修正をする必要があります。

クライアントやビジネス担当者や企画担当者の発言に振り回される

エンジニアの作業はビジネスや営業、企画担当者の思いつきの発言に振り回されることもあります。

というか、かなりの確率で振り回されます。

ビジネスや営業担当がお客さんからのコメントを要件として、そのままエンジニアに依頼してくることもありますし、企画担当者が思いつきで新しい企画案の提案をしてくることもあります。

彼らは良かれと思って提案をしているのですが、それをエンジニアが受け止めなければならず、実際、エンジニアとしては、「やめてくれ・・・」というのが本心でしょう。

プロジェクトマネージャーやスクラムマスターなどの人が、エンジニアにお願いしたいタスクの順番をコントロールしてくれることもあります。

常にミーティングをしており、作業をする時間がない

これまでにも説明した通り、特に優秀なエンジニアであればあるほど、複数のプロジェクトを掛け持ちしています。

各プロジェクトでは、

・定例会議
・情報共有会議
・新機能に関する会議
・不具合が起きたときの対策会議 

などなど、いろいろな会議が実施されます。

もちろんプロジェクトの内容や状況にもよりますが、1つのプロジェクトごとに、1日1〜2個のミーティングが実施されるのが平均的なように思います。

つまり、3つのプロジェクトを掛け持ちしていると、1日あたり3〜6個のミーティングに参加する必要があります。
全てのミーティングが1時間だとすると、ミーティングだけで毎日最大6時間もかかってしまいます。

さらに、飛んでくるメールやSlackのメッセージを処理するのに1時間かかる場合、1日で7時間くらい、プログラミングの作業以外で占めてしまいます。

これくらい、エンジニアがプログラミングなどの作業にかけられる時間が少ないことがあります。

残された1時間で成果を出すのは、もちろん非常に大変です。

ドメインの知識(クライアントのシステムや業界のこと)を理解してないと辛い

ドメインの知識(クライアントのシステムや業界のこと)を理解してないと辛い

エンジニアを希望する人が一番興味があるのは、システムやプログラミング自体のことでしょう。
例えば以下のようなポイントに興味があるエンジニアが多いのではないかと思います。

・いかに優れたシステムを考えられるか?
・いかに美しいプログラミングができるか?
・いかに最先端の技術を使えるか?

一方、実際のプロジェクトでは、こういった技術的な部分に限らず、「ドメイン」と呼ばれるお客さんとなる企業や、業界固有の知識も必要となることがほとんどです。

例えば、金融機関に納品するシステムを作る場合は、金融機関がどのようなシステムをどのような業務フローで使っているかを知っておく必要があります。
このドメインの知識がないと、作るシステムがどのような機能を満たすべきか?が分からず、期待したものを作れないことがあるためです。

結果的にお客さんから修正を依頼されて、手戻りが発生したりします。

具体的には、ドメインの知識を情報に、以下のようなシステムの要件を導きだすことがあります。

・1日あたり、どのくらいのアクセスがあるのか?
・お客さんはどのような使い方をするのか?
・データを保存するときのセキュリティはどのくらいのレベルを担保すべきか?

もちろんドメインの知識は、プロジェクトマネージャーやビジネス、営業担当から説明があることも多いです。
ただ、エンジニアも積極的に知識を習得しないと、本当に理想的なシステムを作ることはできません。

法改正やプラットフォームのアップデート振り回され、プログラミングをする時間がとれない

エンジニアの仕事は、新しい機能を追加したり不具合を修正するだけではありません。

法律の改正や、使っているプラットフォームのアップデートに追従するのも、大事な(そして大変な)仕事の1つです。

例えば個人情報を扱う場合、2022年4月に個人情報が改正され、新しく利用規約に同意してもらう必要がありました。
また、AndroidやiOS上で動くアプリを作る場合は、定期的にGoogleやAppleがリリースするAndroidやiOSのバージョンに追従する必要があります。

これらの作業は、新しい機能を追加するわけではないですし、どのような仕様にするといいか?の検討が大変だったりします。
正直、エンジニアとしては大変で面倒な作業となります。

仕事の進め方が合わない人と一緒に仕事をする

一言で「エンジニア」と言っても、実際はいろいろな人がいます。

・プログラムの内容にメチャクチャ細かい人
・方向性だけ合わせて、あとは自由にやりたい人
・頭の中で考えるのは得意だけど、それを他の人に説明するのが苦手な人

タイプの合わないエンジニア同士で仕事をするのは、予想以上に大変です。

複数のエンジニアが所属するプロジェクトでは、よく以下のようなポイントの認識がズレたり議論になったりします。

エンジニアの間で認識がズレたり議論になる箇所
・どのような進め方をするのか?
・どのタイミングでレビューを依頼するのか?
・プログラムの書き方はどこまでこだわるのか?
・どこまでドキュメントに残す必要があるのか?(ドキュメントに残すのは面倒なので嫌がるエンジニアは多い)

早く目の前の作業を進めないといけないのに、これらの議論が発生することにより、時間のロスになってしまいます。

これからエンジニアを目指すあなたが気をつけておくべきこと

これからエンジニアを目指すあなたが気をつけておくべきこと

それでは最後に、ここまでの内容を踏まえつつ、これからエンジニアを目指すあなたが気をつけるべきポイントを紹介します。

エンジニアの仕事が、プログラミングだけだと思い込まないこと

ここまで読んでくださったあなたであればすでにお気づきかとは思いますが、エンジニアの仕事は、プログラミング以外にもたくさんあります。
むしろ、プログラミングの作業以外の方が大変です。

なので、

「エンジニア = プログラミングをする人」

という理解でエンジニアになると、考えていた仕事と現実のギャップが大きく生まれてしまいます。

これからエンジニアを目指す人には、「エンジニア = プログラミングをする人」ではなく、「システム開発に関する全般を担当する人」という理解をしていただければと思います。

この記事でも紹介した通り、エンジニアはプログラミング以外にも、

・タスクの管理やスケジュールの管理
・他の人(業務委託の人など)の管理
・法律やプラットフォームの確認や、対策案の検討

などなど、様々な仕事をする必要があります。
エンジニアは、これらの数多くの業務を滞りなく進められるような、総合格闘技的なスキルが必要となります。

今やっている仕事や学校などで、できる限り汎用的で広いスキルを身につけておく

エンジニアは、コミュニケーション能力や論理的思考力など、汎用的で広いスキルが求められます。

これは比較的いろいろなところで言われていることかもしれません。

これからエンジニアになりたいと思っていろいろな記事や動画を調べている人にとっては、耳にタコができるくらい見ているし、聞いていることでしょう。
ただ、それくらい汎用的なスキルが重要なのです。

汎用的なスキルはエンジニアになる前であっても習得することができるので、今働いている会社や通っている学校で、意識的に磨いておくことをオススメします。

プログラミングや、その他必要なスキルを最短時間で習得できるように努力する

1つ前で説明したコミュニケーション能力や論理的思考力を磨きつつ・・・ですが、エンジニアとして必要なプログラミングやソフトウェア開発関連のスキルを身につける必要があります。

プログラミングを最短の時間で身につけるための方法は、以下の記事にまとめています。

この記事に沿って勉強することで、プログラミングのスキルをゼロから最短200時間で身につけることができます。
僕の実体験を踏まえて書いているので、この記事も是非読んでみていただければと思います。

一方で、ソフトウェアの設計やチーム開発のスキルは独学だとなかなか身につけることができません。
誰かに教わったり、エンジニアとして働いていく中で、他の人から盗んだりする必要があります。

とはいえ、エンジニア転職ではどうしても即戦力が求められてしまうので、未経験からだとそもそも面接が通らないというジレンマがあります。

そこでオススメなのが、プログラミングスクールに通い、必要なプログラミングやそのほか必要なソフトウェア設計やチーム開発のスキルを一気に身につける方法です。
プログラミングスクールであれば、エンジニアになる前にいろいろな知識を習得することができるため、これからエンジニアを目指す人にとっては最適な選択肢になります。

とはいえ、

「プログラミングスクールっていろいろな数があって、どれがいいかわからないよ」

と思う人もいるかもしれません。

そこで、僕のエンジニア経験も踏まえて、オススメのプログラミングスクールを以下の記事にまとめました。

この記事は、目的別にいろいろなプログラミングスクールをまとめているので、あなたの目指す方向にピッタリのものを見つけやすいかと思います。
これからエンジニアを目指すのであれば、是非こちらの記事も読んでみてくださいね!

[最後に]エンジニアはいろいろと大変だけど、スキルが身につくこと間違いなし

[最後に]エンジニアはいろいろと大変だけど、スキルが身につくこと間違いなし

この記事では、プログラミングの作業以外でエンジニアが大変なポイントを説明してきました。

現場のエンジニアが働く上で、どのような点が大変なのか?エンジニアが大変になってしまう理由が何か?などが伝わったのではないでしょうか。

ここまでまとめてきたように、エンジニアの仕事は決して楽ではありません。

ただ、大変な分、プログラミングやITリテラシーなど、いろいろな知識とスキルを身につけることができます
さらに、他の人のマネジメントや管理スキル、スケジュール管理スキルなど、他の仕事にも活かせる汎用的なスキルまで身につけることができます

こういう意味でも、エンジニアは非常にオススメの仕事といえますね。
もしあなたがこれからエンジニアを目指したいと思っているのであれば、是非とも頑張ってエンジニアになっていただきたいと思っています。

このブログではそんなあなたに向けて、僕自身のエンジニアの経験を活かしつつ、エンジニアやプログラミングに関する情報を発信しています。
もし興味があれば他の記事も読んでみてくださいね。

ここまで読んでくださり、ありがとうございました!
この記事は以上です。

コメント

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