一応エンジニアを名乗ってはいるものの、まったくもって技術に自信がない、という人はかなり多いでしょう。極端に言えばSIerに在籍している場合それがデフォルトかもしれません。
というのもSIerでは特定の技術のみを使いまわすケースが多く、場合によっては何十年も前の技術を使いまわしており、ある程度慣れたら身に付くのは業務知識だけ、といったことも多いでしょう。
実際私が過去に所属していたプロジェクトはそういった感じでした。このような環境から、どういったスキルを身に付けるべきかを解説します。
業務知識を身に付ける
参考URL
https://pixabay.com/
特にSIerに当てはまる話ですが、昇進すればするほどプログラミングスキルよりも業務知識が重要になります。なぜなら、プログラミングやテストといった下流工程よりも要件定義、基本設計、といった上流工程に携わることが多くなるからです。
開発の流れを図式化しておくと、以下のようになります。
要件定義→基本設計→詳細設計→プログラミング→テスト
例外もありますが、だいたい上記のような流れで開発が進められます。そして会社員だと上流工程ほどベテラン社員が担当する傾向にあります。上流工程はプログラムを書くのではなく顧客から話を聞いてそれを仕様に落とし込むのが仕事なので、ITスキルというよりは使っているシステムに詳しくなることと顧客の業務を正確に把握することが重要です。
業務システムは最新技術を導入して冒険するようなことはないので、幅広くスキルをキャッチアップする必要はあまりありません。SIerでずっとやっていくのであれば、技術に自信がなくても業務知識を身に付けることで活躍できます。
コミュニケーションスキルを磨く
ひとことにコミュニケーションスキルと言ってもいろいろあるかと思いますが、ここで言うコミュニケ―ションスキルは網羅的に含んでいます。具体的には、メール作成、電話、ドキュメント作成、プレゼンテーション、人当たりの良さ、すべてを含んでのコミュニケーションスキルです。
ITスキル自体が中途半端であっても、コミュニケーションスキルを磨けば営業やコンサルで活躍できる機会が増えます。フリーランスや転職してそういった職種を目指すのも一つの手でしょう。
技術力よりも人との関わりが重要になるため、プログラミングがさほどできなくても問題ありません。逆に言えば、プログラミングスキルが高くても人との連携がうまくできないと営業やコンサルは勤まりません。
今までの技術的な経験を活かし、さらにコミュニケーションスキルを磨き、それらを武器に仕事していく戦略もあります。
技術力を高める
参考URL
https://pixabay.com/
現状技術に自信がないのであれば、シンプルに技術の勉強をするという考え方もできます。というよりもこれがもっとも一般的な考えではないでしょうか。技術力を高めれば技術に自信を持てます。
非常に単純明快な方法です。具体的に勉強する内容は自身のない技術内容によります。今業務で扱っている技術についての自信がないのであれば、その部分の勉強をします。言語やフレームワークが同じ環境を個人のパソコンにも入れてみて、似たようなロジックを書いて練習するのが良いかと思います。
業務用システムはステップ数が多いのですべてを真似するのは到底無理なのですが、断片的に真似ることは可能でしょう。そのシステム独自の仕様がよくわからない場合は、技術というよりは業務知識の範疇です。
業務知識がシステム内に反映されているので、それがわからない場合はソースコードと仕様書を照らし合わせながら理解していく必要があります。ただし規模の大きいシステムだと誰しもすべてを把握できているわけではないので、断片的に理解しつつ徐々に知っている範囲を広げていくしかないかと思います。
仕様書の量も膨大で、古いシステムだとすべての仕様書がそろっていないケースもあります。自分の担当部分に関連する部分は必ず把握しなければなりませんが、それ以外の部分については割り切ることも必要でしょう。
次に、業務に必要な技術はカバーしているものの、根本的な部分で技術力に自信がない、といったエンジニアも多いでしょう。SIerではそのシステムに関係する技術のみをひたすら繰り返すことになるため、最新技術を全然知らない、最新技術どころか研修で勉強した基礎知識とプロジェクトで使う技術しか知らない、といった状況に陥りがちです。
こういったエンジニアは数多いので、自分だけがおかしいと自信をなくする必要はないと思います。そうは言っても特定の技術のみに特化するのは危険で、たとえばプロジェクトを外れる、転職する、といった際に困ります。
業務に必要な技術力があるなら自信をなくす必要はありませんが、個人でWeb開発などには取り組むことをおすすめします。余裕があれば受託開発やアプリのリリースなどにチャレンジしても良いですし、時間がない場合も最新技術には目を向けておいた方が良いです。
現状技術に自信がなくても技術が嫌いではないのなら、ぜひ自分でもプログラミングの勉強をしてください。そうすることでフリーランスや転職といった選択肢も見えてきますし、今の仕事にも役立つはずです。
個人でも何か作ってみることが特に重要で、それによってスキルは格段に向上します。プロジェクトでは役割分担することが多いため、特に若手のうちは全体が見えないまま同じような部品を作り続ける場合がほとんどです。
そうすると、一応仕事はできているけれどよくわからないままやっているので技術に自信がなくなります。もちろん自分の担当部分については理解して作業しているはずですが、全体が見えないとシステム開発している実感もなければ技術力が身に付いている実感もないでしょう。
私自身最初にプロジェクトに配属されたときは既存のコードや仕様に従って担当部分の作業を行ってはいるものの、全体のロジックはよくわからない、使っているクラスの機能も誰かが作ったものだからただそれを利用しているだけ、といった状況でした。
一応プログラミングの基礎は身に付くのですが、それ以降は流れ作業のようにクラスオブジェクトを作ったり仕様に従って業務に必要なデータやコードを書き換えたりといったプログラミングというよりは業務のためにデータを書き換えているに近い作業でした。
それでも難しさはあるのですが、プログラミングの難しさというよりは業務知識や仕様がよくわからないという難しさです。作業ができてもできなくてもこのままだと技術に自信を持つことはできないため、個人で開発に取り組むことが重要です。
ゲームが好きな人ならゲームでも良いですし、何かVBAのツールでも作ってみたい人はそういったものからでも問題ありません。また最近は個人で開発案件の受注もできるため、チャレンジしてみるのも良いでしょう。
私の場合もSIerで技術に自信がない状態でしたが、個人で受注するようになり、ある程度技術力が身に付き、そのままフリーランスになりました。技術力が高いというわけではありませんが、個人での開発に取り組めば全体を理解したうえで作業するためプログラミングをしている実感が湧きます。
今は技術に自信がないが今後技術力を高めていきたい、という人は個人で開発にチャレンジするのがおすすめです。そもそも技術に関心がないという人は、上で紹介したように業務知識を身に付けて上流工程を目指す、コミュニケーションスキルを磨いて営業やコンサルといった道も模索する、などが考えられます。
どうしてもIT業界内で自分の希望職種やポジションが見つからないのであれば、他の業界で新たな可能性にチャレンジするのも一つの手でしょう。実際、飲食や介護といったまったくの別業界に転職する人や、税理士資格を取得してIT業界に強い税理士事務所に転職するような人もいました。
なるべくなら今までのスキルを活かした仕事の方がコストパフォーマンスが良いのですが、まったくの別業界・職種に転職したからといって今までのスキルが無駄になるわけではありません。
IT業界で培ったITスキルや論理的思考力、集中力などはどの業界・職種でも役立つはずなので、今までのスキルを活かすことと同時に、自ら可能性を狭めてしまわないことも重要です。