どうも!なしざわです!
業務用ソフトウェアを開発するプログラマ・エンジニアに転職して半年ちょっと経過したので、経験したことや感想をまとめてみたいと思います!
私は前職の幹部自衛官を辞めて、官公庁向けのソフトウェアを開発する受託自社内開発企業で働いています。ですから、Web系企業ではなく業務用ソフトウェアの開発を専門にしている受託系企業への転職や就職を考えている方の参考になるはずです。
転職する前はJavaとC言語を9ヶ月ほど独学で勉強していました!
入社後の1ヶ月半は新人研修として、コンピュータの基礎やアルゴリズム、C言語による簡単なプログラム作成を学びました。
その時の記事はこちらにまとめてあります!
【詳細】ソフトウェア会社の新人研修~未経験者でもついていけた?~
今回は、研修後に実務で開発に関わるようになってからの感想や身に付いたスキルについてまとめていきます。
まずは率直な感想についてまとめたあとで、スキルについて紹介していきます!
率直な感想:大変だけど、辛くはない!
実務で開発に関わるようになってからの感想ですが、「すごく大変だけど、辛くはない」です。
大変な理由は、現場で求められるスキルや知識が圧倒的に不足していたことに加えて、自分で考えて開発をし、問題に対処する必要があったからです。
辛いと感じない理由は、達成感と自分の成長を日々感じることが出来ていたからです。
プログラミング言語以外のスキルや知識が圧倒的に不足していた
独学で9ヶ月(基本情報処理技術者の学習も含めれば1年)ほど学習していましたが、現場で必要とされるスキルや知識は圧倒的に不足していました。
転職前は「プログラミング言語が使えるようになれば開発が出来るようになる」と考えていましたが、実際にソフトウェアを開発するにはプログラミング言語以外の知識がとても重要でした。
Linux(CentOS)で構築しているサーバーのとあるプロセスを作成するのが自分に任せられたタスクでしたが、そもそもLinuxやサーバー構築に関する知識がほとんどなかったので非常に厳しかったです。笑
土日や仕事終わりにはとにかく勉強して、分からないことは先輩社員の方に質問していました。
ネットワークとVM(仮想マシン)に対する知識がなかったのも実務をする上では大きな障害でした。
なしざわさん、こんな感じで使えるようにしておいて!
調べながらやれば、たぶん使えると思うから。
分かりました!やってみます。
(調べれば出来るらしいから大丈夫だろ...)
出来た?問題なさそう?
すみません、上手く繋がりません。
こんな感じで「何をするにも問題にぶつかる」ような状況でしたね。笑
頼まれたことをスムーズに実行できることのほうが少なかったかもしれないです...
なかなか開発に貢献できない状態がとても申し訳ないと感じていました。
自分で考えて開発し、問題はなるべく自己解決する
この状況は大変ですが、駆け出しのエンジニアやプログラマにとっては幸運です。
未経験からの転職だと運用や保守、テストといった工程しか担当させてもらえない場合もあります。その点、新規開発のサーバー構築に携わらせてもらえる状況は非常に恵まれていました。
ただ、当たり前ですが、自分に任されたタスクはたとえ新人でも責任をもって「動くプログラム」を作成する必要があります。
スキルも知識も乏しい新人にとっては結構なプレッシャーです。納期も意識して開発しないといけません。
OJTといっても先輩社員がずっと面倒を見てくれるわけではない
OJTということで、フォローしてくれる先輩社員がいますが、全ての面倒をみてくれるわけではないです。
何らかのエラーや問題は基本的に自己解決できることが望ましいです。(もちろん、その解決方法に致命的な問題を含んでいないことが前提ですが。)
先輩自身も業務をしているため、その人の時間を無駄に奪わないような配慮が必要です。
最低限、自分で仮説を立てて実証してみて、「恐らくここが原因だろう」くらいまではエラーや問題を分析しなければなりません。
状況によっては「何が理由か全く見当がつかない」ということもありました。新人にとっては、問題の仮設を立てるだけでも一苦労です。
「もう少し教えてくれたり、指示が丁寧でもいいのに...」と思うことは結構ある
正直言うと、「最初の半年間くらいはもう少し丁寧に教えてくれよ・・・」と思うことは結構ありました。笑
でも、いろいろなエンジニアのブログやSNSを見る限り、やっぱり「自分で成長してく、自走できるようになる」という文化が非常に強いみたいですね!
質問しても嫌な顔しないで教えてくれる先輩社員がいるだけでも、恵まれている環境だと思うようになりました。
「達成感」と「成長」を実感できるから辛くならない
分からないこと、上手く処理できないことばかりで大変でも、「辛い、辞めたい」と全く思わないのは「達成感」と「成長」を得ることが出来るからです。
なかなか思い通りに処理できなかったことが上手くいった時には、ガッツポーズしたくなるくらいうれしいです。笑
エラーになる → 調べる・質問する → エラーが出なくなったが思った通りに処理できない → 仮説を立てて処理を変えて実行
こんな感じでひたすらトライ&エラーを繰り返して、ようやく思い通りに処理が出来るのでうれしいですよね!
また、大変でも諦めずに調べて実行していると確実に成長を実感できます。1ヶ月前の自分のコードを見てみると、「なんでこんないらない処理書いてるんだろう?」と思うことがたくさんあります。
ちょっと前までは先輩社員から頼まれても「そもそも何のことを言っているのかよく分からない」という状況だったのが、気づけば「あぁ、プロセスの設定ファイルを変更してほしいのか」と具体的に理解できるようになってきます。
1番の達成感はクライアントに納品してユーザーに使ってもらえた時
新人の私が作成したのは、サーバーで複数あるうちのプロセスの一部ですが、実機に導入して無事に稼働できた時には1番「達成感」を感じられました。
自分の作成したのもが形となってユーザーに届いた時ですね!「これで行政職員の方の負担が少し減ったのかなぁ」とか考えていました。笑
もともと「官公庁のシステム化が遅い」と感じたことが転職のひとつの理由だったので、自分の手でシステム化に貢献できたのはうれしかったです!
感想については以上です!
もし、自分の成長を実感できず、達成感や楽しみを見い出せないような業務内容なら、この半年間は大変で辛いだけのものだったでしょう。
半年間で身に付いたスキル・知識
ここから半年間で身に付いたスキルについてざっくり紹介していきます!
この順番でまとめていきます。
1.プログラミング言語
2.スキル・知識
1.プログラミング言語
入社から半年間で私が使用した言語です。
・C/C++
・Windowsプログラミング
・シェルスクリプト
・VBA・マクロ(libreoffice)
C/C++
1番使用した言語です。C言語と言えば、習得難易度が高いことで有名です。
私は独学で勉強していましたが、実務で使用しているプログラムのソースコードを初めて見た時は唖然としました。
「んっ?なんだこれ?全然分からないww」
研修とはレベルが違いましたね。笑
構造体とポインタについて一生懸命に学習してトライ&エラーをしまくることでなんとか実務でも通用するレベルまでこれたと思います。
Windowsプログラミング
簡単なウィンドウとダイアログボックスを作成するのに使いました。現在は業務用ソフトウェアでもブラウザで動かすのがほとんどなので、今後使用することはあまりないと思います。
独学でHTML、CSS、JavaScriptも学習したんですが、Windowsプログラミングは遥かに難しいです。というか、めんどくさいです。笑
シェルスクリプト
サーバーがLinuxだったので、使用頻度はめちゃくちゃ高かったです。
学習コストはかなり低くてC/C++に比べてすぐにある程度使えるようになりました。ちょっとした処理を実行する際にも使えるので、Linux環境での開発では重宝しています。
VBA・マクロ(libreoffice)
libreofficeというMicrosoft Officeに似たオープンソースのソフトがあります。
そのソフトをLinuxサーバーで起動して集計したデータを自動でCSVとPDFに出力するというプロセスを作成する際に使用しました。
VBA・マクロは何らかのプログラミング言語を習得している人なら割とすぐに使えるようになると思います。
まぁ、Excelを極めるなら奥が深いと思いますが、今のところそこまで必要ありませんでした。
2.スキル・知識
スキル・知識って書こうとすると結構難しいですね。笑
ざっくり分けるとこんな感じです。
1.ソフトウェアを構成するファイルとその関係
2.ネットワークの基本的な知識
3.Linuxサーバーの構築
1.ソフトウェアを構成するファイルとその関係
独学で学習していた頃はソースコードとincludeファイル、実行ファイルくらいしか知りませんでした。
しかし、実際の開発ではこれにLib(ライブラリ)とDLL(dllファイル)の知識が必要になってきます。
初めの頃は、これらがどう関係しているのか全く理解できていませんでした。
プロジェクトに変更を加えたり、他の関数を呼び出すと毎回「ビルドできません。」って言われてキレそうでした。笑
2.ネットワークの基本的な知識
ネットワークについては難しくて現在も勉強中です。しかし、TCP/IPの基本くらいは理解できたことで「通信エラー」についても自力で対応できるようになってきました。
また、プロジェクトによってはVMをコピーして使用することがあるのですが、その時にもIPアドレスを割り振ったりできるようになったことで先輩社員に頼らなくても済むようになりましたね。
3.Linuxサーバーの構築
Linux(CentOS)でのサーバー構築に関する知識がこの半年間での1番の収穫かもしれません。
ただ、複数あるサーバー機能のうちのほんの一部しか経験していないし、理解もまだまだ浅いです。
LinuxというOSの基本、コマンド、シェルスクリプトでの処理を理解して使えるようになっただけでも、半年前と比べたらかなり成長できたと思います。
半年間ではまだまだ駆け出しレベル
この半年間は休日も自分なりに勉強を続けてきましたが、まだまだエンジニア・プログラマとしては駆け出しレベルです。
自分の成長速度が遅いだけかもしれませんが、エンジニア・プログラマとして成熟するには2年~3年くらいはかかりそうですね!
駆け出しのエンジニア・プログラマの方は一緒に頑張りましょう!
読んで頂きありがとうございました。
コメント