（体験談あり）ホストシステムエンジニアのざっくりとまとめ


# システムエンジニアの仕事
IT業界の人手不足や営業からの転身など皆さんが興味がありそう、しかも仕事内容が分からない、という方に向けてエンジニアの中身を暴いてゆきます。
私自身、現在3年目となるシステムエンジニアのキャリアを努力して続けており、体験談を中心にまとめております。

システムエンジニアの仕事はこのフェーズでほぼ間違いがありません。
1. 設計書や仕様書を書く、もしくは書いてもらう。
2. 仕様通りにプログラムを作成する。
3. テストを入念に行い間違いなく動くのか検証する。

設計書や仕様書とは、作りたいシステムの材料と作り方が書いてあるプログラミング処理のレシピのようなものです。これを作れるとほかの人でもプログラミング知識があればレシピを参考にしてもらい理想のプログラムができ上がります。
料理人と一緒で、レシピが書ける人は料理をしたことがあり、包丁になれていたり出汁の取り方も経験があったり経験豊富なほうが有利に調理できるのです。
![arif-riyanto-G1N9kDHqBrQ-unsplash.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547305/5943b5e1-991e-c829-c36f-2401b3998b19.jpeg)
# システムエンジニアの役割分担とは？
エンジニアは基本チームを組み役割を割り振られます。私はC言語を使用するコード修正パートを担当しました。変更したいプログラムの修正箇所が大きく分けて3つあり、その一つを私が担当し、その他は適当にリーダーがメンバーに仕事を振ります。つまり、開発部隊の一人でした。
役割はほかにこのようなものがメインです。

1. プロジェクトマネージャー
2. プロジェクトリーダー
3. 開発部隊
4. インフラ環境整備部隊
5. システムメンテナンス部隊

## プロジェクトマネージャー
グループ全体の進捗を管理し、ユーザーから任された仕事を納期までに終わらせる役割。スケジュールを作成しチームのメンバーに役割分担をする。さらに皆が進捗をお互いに確認できるように週次の進捗会議を行うことがほとんどです。
## プロジェクトリーダー
グループの仕事を推進していくリーダーの役割を担う。メンバーに声を掛けたり指示を出し、マネージャーと密に動きグループ全体の納期を超過しないよう一番責任をもって動く役割。実際にはメンバーの進捗を聞き出したり、躓いていることや課題を解決する話し合いを展開する。
## 開発部隊
システムの変更や新たにシステムを作成する人たち。担当したのはここでした。C言語やJava,Pythonなど何か一つは最低限完璧に書けるといい役割です。
## インフラ環境整備部隊
開発環境を整える人たち。本番環境というお客さんが使うシステムが動く環境とは別に、開発用環境を用意したりメンテナンスを行う。開発用環境がないとぶっつけ本番でプログラムを開発することになり、極めて進捗に困難を極める。
失敗してもいいような場所づくりをし、入念にプログラムを作り上げ、最後に本番環境に移すのが普通。
さらに新たな本番環境を作り、プログラムをすべて移し替えるといった作業もあった。
イメージしやすいのは家のようなもので、引っ越し先の家が建っていないと家具など置けないようなものです。さらにコンセントの位置はどこにあるのか、どのくらい家具が置けるのか、引っ越しする距離はどのくらいあるのか、運ぶ手段はどうすればいいのか、などなど考えます。
## システムメンテナンス部隊
開発と異なる部隊で、今動かしているシステムの稼働率を調べたり、今後動かなくなるようなことはないか調査を行います。
過去にシステムのCPUの稼働率が許容範囲を超えたことがなかったかレポートを作成したり、物理メモリーなど買い替える必要があるか検討をしたりしていました。
![lex-sirikiat-FJJcMnsqk2g-unsplash.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547305/46abc989-62f2-3b04-6e4b-5e0678a04af4.jpeg)
# 社会人で初めに任された仕事内容とは？
C言語のプログラムのコード修正が初めに任命された仕事で、かなりハードルが高いお仕事でした。
タスクの概要は今思うとめちゃくちゃ簡単で、プロがやれば一瞬で終わっちゃうなと反省しています。:relaxed:
具体的に何をやっていたかというと、
**C言語で書かれているプログラムを詳細設計書に変更点が記されているのでその通りにコードを書き換える**
ことをやっていました。
最初はそもそもC言語の修正する対象となるプログラムコードってどこにあるの？詳細設計書って何？？と経験値が浅いことから少し苦労しました。
そこからやり遂げなくちゃ、と心を据え、A4用紙20枚にわたるフローチャート図を書き、修正点を見つけ出しました。これは参考にすべきでないやり方ですね・・・
うまいやり方はコードをさらっと読みフローを一度全体で描いてみることです。すると目星がつくのでそこを修正できないか考えてみるのです。

結論、見たことないプログラム言語コードを読み始めるとき、**最初は深読みせず全体のマッピングを素早く行うこと**です。見通しが良くなり気持ちも楽になります。
#ホストシステムの開発で重要だった能力って何？
現場を体験してみて、重要な能力は3つありました。
1. 何らかのプログラム言語が自力で書ける、もしくは読めること
2. できない仕事でも食らいつく忍耐力
3. 仲間を想いチームワークを高める能力

個人の能力のほかに、仲間意識も結構重要です。
アフリカ人の長距離移住する民族の言い伝えではこんなものがあります。「**急ぎたければひとりで行け。遠くへ行くならみんなと行け。**」
素晴らしい考えで好きです！
エンジニアのチームワークの重要さが垣間見えてきますね。
##何らかのプログラム言語が自力で書ける、もしくは読めること
現場では変更の要件に従いプログラムを読んだり書き換えたりしなければなりませんでした。さらにあまりなれていない言語だったのです。しかし、このような未経験のプログラム言語が使われていたとしても過去に得意としていたプログラム言語があれば臨機応変に対応ができます。

例えばC言語の場合、配列や変数の考え方、関数、クラスなど様々な処理が用意されています。その処理を駆使していくのですが、言語がC言語からPython に変わったとしてもとても似ていてすぐに読めるようになるのです。
つまり、**何か一つ一本の高い武器になる木を育てていれば、より簡単に横に木の枝をはやすことができる**のです。
日本語が堪能であれば英語を聞いたときに？？となったとしても、何が主語や述語なのかさえわかってしまえば雰囲気が伝わるのと一緒です。日本語を使えてよかったな、と思える瞬間でもありますよね！
##できない仕事でも食らいつく忍耐力
職場ではできることとできないことが当然のように溢れており、プライドが高い人や完璧主義な人はとても戸惑うかもしれません。私はまさに完璧主義の思いが強い人間で、将来の目標は全知全能の神様になる、と豪語していた時期もあるほどでした。私のような高すぎる目標を持つ人は目の前の任された仕事に少しでもできない部分が含まれていると、挫折感や恥を感じてしまいます。
そんな時、2つの考え方がとても役に立ちました。

**1. やりぬく力
2. 成長マインドセット**

やりぬく力とは、ここでは「辛くても投げ出したくても最後までやり遂げること」を指しています。やり遂げることが癖になると次第に力が付き、辛い局面でもあきらめない忍耐力が身につきます。すぐあきらめてしまう人や職が長く続かない人に多い傾向ですよね。

成長マインドセットとは、自分には今はこの仕事は難しいけど、努力次第で何とかなる、何とかして見せる、と簡単にあきらめず将来を前向きにとらえている考え方を指します。このマインドセットを持っていると無理難題な局面でも打開策は絶対にあるはずだ、とかこの辛いことを乗り越えれば価値がとても大きく、あきらめられない！と前向きな考えになります。

以上の2つの考え方を持つことで、日常茶飯事な高き壁を乗り越えてゆき、次第に成長できる環境がシステムエンジニアの醍醐味です。
##仲間を想いチームワークを高める能力
作業はグループの人たちやさまざまな人たちが連携し助け合い完了へと向かいます。そのため一匹狼で周りと距離を置いてしまうと雰囲気を悪くしたりチームの効率を下げることになります。
実際にリーダーの引っ張る力が足りていない中、プロジェクトがめちゃくちゃ進まなくなることが結構ありました。しかし、控えめなリーダーであることはその人のキャラであるとチームの皆が認識し、個人同士でやる気を出しプロジェクトを進めていく場面が多々ありました。他人の短所や長所を理解しておき、自分から動き始めることでチームのためにもなるため、まとめると以下の2つが重要です。 

1. 短所を責めず活かすポジティブシンキング
2. 自ら動き出す主体性

# 能力を高めるために俺たちができること
職場では自由に学習するなどの時間がほとんどありません。しかも締め切りが迫るスケジュール感になると心に余裕がなくなります。
つまり、勤務時間とは自分ができうることをアウトプットする時間であることが多いのです。

そんな中、エンジニアとして個の能力を高めていかないと昇給や成長を感じることができず自分の首や仲間に還元できるものがなくなってゆきます。また、使わなくなったスキルは次第に錆びていきメンテナンスを怠ると痛い目を見ます。
では、いつ勉強したのかというと、帰宅後、もしくは休日を使ってプログラム言語や資格勉強をしておりました。
勤務中もコーディング、休日もコーディングとなると同じ作業に飽き飽きしてしまい、支障をきたすかも？と思うかもしれませんが、勉強して少しでもスキルが前進すると世界がまるで違うように思え、やる気がわいてくるのです。
子供のころ、友達と自転車で遠くの大きな公園に遊びに行っていたのですが、ドリフトやウィリーをさらっと披露する友達をみて、空き時間にめちゃくちゃ自転車に乗ったことを思い出します。ウィリーには腕力が必要であることに気づき、腕立てやバトミントンに顔を出していると、ウィリーができるようになり、一層友達とのサイクリングが楽しくなり、自信を持つことができたのです。
少しでもトレーニングを積めば絶対に成長するので、勤務以外での学習はエンジニアにとって必須なことです。
#システムエンジニアで生き抜いていく秘訣とは？
基本、システムエンジニアは冷たく静かな人たちが多いです。この人たちを論理的な人と表現することが多いです。
私はこのような人を苦手としており、愛がないな、機械みたいな人だな、と感じてしまいます。
しかし、否定ばかりできず、指示を忠実に聞いて作業をする人たちなので、私はとても尊敬しています。

システムエンジニアはシステムをただただ作っているようなイメージが多いかもしれません。中にはお金がもらえればそれでいいや。というエンジニアも数多くいます。しかしなにか成果を出さないと仕事を続けることが困難になり、首を切られちゃいます。
実際に働いたエンジニアを見てここをやっとけばとりあえず生き抜けるな、と思ったポイントは**任された業務を期限内に終わらすこと**です。
ここまでに終わらせてね、という期限はプロジェクトマネージャーが設定します。その期限を守らないとチーム全体の進捗を止めてしまったり納期に間に合わなくなってしまうのです。また、納期を守れない場合は技術不足とこちらが責められてしまい、かなりプライドが傷つきまい、とても痛い目を見ます。

また、おしゃべりがいくらうまくてもタスクをゴールまで持っていけないと**いる意味がないね**、と言われてしまう結果主義な職種なのです。
特に、成果を出していれば文句も言われないので最低限仕上げるべきものを把握することも大切です。

まとめると、生き抜くためにはプロジェクトで必要なものを期限までに作ること、これに尽きます。
#まとめ
最初の職場で感じたシステムエンジニアにおける大切な能力、考え方、働き方、振る舞いを体験談を交えて述べてみました。
どんな人たちがエンジニアとして働いているのかなど、実際に触れあってみたり、一緒に仕事をするとなるほど、確かに、と思うはずです。
転職でシステムエンジニアになってみたいな、とかシステムエンジニアってどんな仕事なんだろう？と思った方に少しでもためになればいいなと願っております。
もしも一緒にシステムエンジニアとして働くことがあってもなくても、IT業界を盛り上げてゆきましょう:clap: