インフラエンジニアとしてある程度の経験がつくと、その後のキャリアもインフラエンジニアとして過ごしていくか、新しい領域に行くか考えることがあります。
元々はシステムエンジニア自体はアプリケーションを開発するエンジニアを主に指していたこともあり、システムエンジニアとして就業して間もないころは「思っていたSEと違う」と思った人もいるでしょう。
以前、インフラエンジニアがプログラムをかけた方が良い理由を紹介してみました。
しかしながら、インフラエンジニアが本格的なプログラミング言語を覚えて開発するにはやはり壁があります。
また、プログラマに転身しても環境や作業内容の違いに苦痛が伴うかもしれません。
そんなプログラマとインフラエンジニアの違いについても紹介してみました。
そこで今回は、インフラエンジニアがプログラマとして活躍できるまでに時間がかかる、中々出来ない理由について紹介していきたいと思います。
また、その克服するための助言も少し書いていきたいと思います。
インフラエンジニアがプログラムに感じる壁
インタプリタのように簡単ではない
インフラエンジニアでもいわゆる「スクリプト」を作成できるエンジニアはたくさんいます。
Windowsであればバッチ・VBScript、Unixであればシェルスクリプトです。
他にもTeratermマクロなどインフラエンジニアはサーバ作業の自動化やネットワーク作業の自動化をするのにスクリプトを書けないと実現できません。
また、技術者としての評価としてもスクリプト作成が出来ないと少なくとも「ただのエンジニア」程度の評価にしかなりません。
インタプリタ型は簡易的なコーディングで動作するのでその書き方に慣れている事が多いです。
バッチでもシェルスクリプトでも「echo」で文字列を画面に簡単に標準出力出来ます。
また、「if」や「for」なども処理もWebで調べれば簡単にやりたいことを実現できるでしょう。
特にシェルスクリプトでは顕著ですが、普段の日常作業で使用しているコマンドをそのままスクリプトに出来るので、コマンドベースで技術力があれば簡単にスクリプトは作成できるようになります。
しかし、静的コンパイル型のプログラミング言語はそこまで簡単ではありません。
C#であれば名前空間、そして変数の定義、クラスやオブジェクトなど事前に知っておかないと実行すら出来ない事が多いでしょう。
PHPのようにインタプリタ型ですとまだ扱いやすいですが、Webベースの仕事でなければ使う機会がないかもしれません。
クライアントデバイス向けのプログラミング言語を学習しようとすると、どうても静的コンパイル型を学習する必要があります。
インフラエンジニアがプログラミング言語を習得するためにはこのプログラミングの仕組みとルールを頭に叩き込む以外ありません。
インフラ概念とは大きくかい離しているので、正直ベースですがインフラエンジニアの業務からプログラミングの概念を簡単に学習する事は出来ません。
本気で覚えたい人は、変数や型、コンパイラなど基礎的な部分からきちんと覚えていきましょう。
そもそもIDEが分からない
プログラミングを本格的に実施するには、当然のことながら統合開発環境(IDE)の使い方が分かりません。
また、名前は知っていてもいざ使おうと思っても中々使えないインフラエンジニアは多いのではないでしょうか。
代表的なIDEであるEclipseも種類や使用する言語について、どこから手を出して良いか分からない人が多いと思います。
唯一、MicrosoftのVisual Studioであれば「C#」「C++」などを開発したいと思っていると思うので言語については迷う必要はないかもしれません。
ライブラリや実行環境を整えるまでに時間がかかって億劫になるインフラエンジニアは多いと思います。
一度慣れてしまえば、そんなに難しい事ではないのですがPATHを通していないせいでコンパイルエラーになったり、ライブラリが足りずにWebからコピペしたコードが動かなかったりして躓く事が多いでしょう。
また、初歩的なミスで躓いたとしてもエラーの解析などはインフラの領域とは全然違います。
このように最初の段階でたくさん躓く事が多く諦めてしまう人の方が多いと思います。
ですが、これは技術者として若かったころと一緒でトライ&エラーで覚えていくのが良いと思います。
確かにITのスキルや技術がついてきてはいますが、知らない技術は知らない技術です。
個人的に、先ほど述べた基礎知識の叩き込みをしてすぐにコーディングする事をお勧めします。
成果物が出来上がるまでに時間がかかる
インフラエンジニアとプログラマでは仕事の規模感で大きく成果を出すまでに差があります。
これに関してはインフラエンジニアの方が早く成果を出せる仕事が多いと思います。
今の時代だと所謂「アジャイル開発」で短いスパンで継続的に開発していくスタイルも多いのでしょうが、それでも数ヶ月単位だと思います。
しかし、インフラエンジニアであれば1日で終わらせることが出来る仕事も多いです。
ネットワーク機器でもサーバ機器でも、設定値が決まっているもしくは決定権があれば数台程度は8時間で十分に構築できます。
これは知識があればあるほど早く、そして実際に設計レベルの業務をこなすインフラエンジニアにとっては数台の機器構築は何一つ問題ないです。
しかし開発は人前に出せるレベルにするには相応の時間がかかります。
簡単なアプリケーションであっても脆弱性の対応やセキュリティ面を万全に対策し、バグの確認など少なくともよほどの低品質でも良いアプリでない限り1日、2日で高品質なアプリケーションを開発するのは難しいでしょう。
最後に
インフラエンジニアが感じるプログラムへの苦手意識について書いてきました。
私自身、インフラエンジニアをメインにアプリケーションまで簡単に触る事が出来ますが、それでもコンパイル型の言語は未だに苦手です。
しかし、デスクトップアプリケーションなど、動作するレベルまでコーディング出来ると達成感があるのが開発業務の特徴だと感じます。
インフラもプログラム慣れですが、プログラムは人の価値観などが反映されるのが大きな違いでしょう。
しかし、Unix/Linuxを代表にインフラエンジニアが普段触れているものもプログラムで構成されていて、OSSの動作などにgccなどのコンパイラやラブリラリも必要です。
普段からプログラムで動いている事を意識しながら作業に取り組むとよりプログラミングへの壁は少なくなっていくかもしれません。