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

「エンジニアを目指してるけど、エンジニアとして優秀な人ってどんな人?」
「今プログラミングを勉強してるけど、優秀なエンジニアになるにはどうしたらいいの?」
このように思っているのではないでしょうか?
エンジニアを目指す上で、どのようなスキルを身につければ優秀と言われるようになるのか、気になりますよね。
この記事の記事を読むことによって、以下のようなことが分かります。

・(僕の体験談)現場でどのようなエンジニアが求められているか?
・(結論)優秀なエンジニアに求められるもの
・そのほか、優秀なエンジニアの特徴
・優秀なエンジニアになるための方法
この記事は僕自身のエンジニア経験、そしてプロジェクトマネージャーとして現場でいろいろなエンジニアを見てきた経験をまとめています。
最後まで読むことで、具体的に優秀なエンジニアに求められる要素を知ることができます。
「プログラミングができること」なんて平凡な結論ではありません。
「現場でリアルに求められているスキル」をまとめているので、あなたの参考になること間違いなし!です。
最後までしっかり読んで、優秀なエンジニアを目指してくださいね。
[結論]優秀なエンジニアは、プログラミングスキル以上に、社会人としての基礎スキルが重要
![[結論]優秀なエンジニアは、プログラミングスキル以上に、社会人としての基礎スキルが重要](https://www.mame-blog.site/wp-content/uploads/2022/01/characters-of-excellent-engineer02-1024x682.jpg)
まずは結論です。
優秀なエンジニアは、プログラミングスキルも重要ですが、それ以上に社会人としての基礎スキルが優れている人のことを指します。
特に日本では、エンジニアであっても高いレベルの社会人としての基礎スキルを求められる傾向にあります。
逆に言うと、プログラミングスキルがイマイチでも、社会人としての基礎スキルが他の人よりも優れていれば十分に優秀なエンジニアになることができます。
ここでいう「社会人としての基礎スキル」とは具体的に、以下のようなものになります。

・コミュニケーション能力が優れている
・事業的に必要なことを理解している
・視野が広く、関係者の立場も理解しつつ提案することができる
・周りの人を巻き込みつつ仕事を進めることができる
・ゴチャゴチャした状況の整理を整理することができる
こういったスキルは、現在の流れが早くなってきている現在において、会社や事業が成果をあげるために重要なものです。
この記事の後半では、これらの「社会人としての基礎スキル」が具体的に現場でどのように生かされたのか?そして、それを習得するための方法に関しても説明しているので、気になる場合は是非読んでみてください。
[この記事の信頼性]現場では、どのような人が優秀だと思われているのか?
![[この記事の信頼性]現場では、どのような人が優秀だと思われているのか?](https://www.mame-blog.site/wp-content/uploads/2022/01/characters-of-excellent-engineer03-1024x682.jpg)
細かい内容の説明に入る前に、僕が見てきた現場では、どのような人が優秀なエンジニアと考えられているのか?を説明します。
ケース1: 新規事業の開発プロジェクトで、与えられた仕事しかしないエンジニアAさん
僕は今、IT企業でPMをやっており、多くのエンジニアと一緒に働いています。
担当は新規事業のシステムの開発で、とにかく毎日時間がない状態で仕事をしています。
新規事業のシステム開発は、ほぼゼロからの開発です。
そのため、毎日、非常に多くのやることが押し寄せてきます。
その上、新規事業という特性上、いつ潰れてもおかしくないのが普通であるため、「とにかく誰でもいいからプロジェクトを進めてほしい」という思いで仕事をしています。
僕自身も毎日夜11時くらいまで残業をして何とかプロジェクトマネージャーの業務をこなしている、という状態です。
そんな新規事業プロジェクトにおいて、以下のような人と仕事をしたことがあります。
この人をAさんとしましょう。
・エンジニアとして最低限のことしかやらない
・プロジェクトを推進するのとは、あまり関係のない仕事をしたがる
・仕様(プログラムがどう動くか?を決めること)は企画担当者が決めるべき、というスタンス
・少しでも仕様に問題があると文句を言う
こういう人って、「エンジニアとして優秀」なのでしょうか?
プログラミングスキル的に問題がないため、「優秀」ということはできるでしょう。
ただ、僕(プロジェクトマネージャー)からすると、
・仕様は企画担当者が決めるべき、というスタンス
・少しでも仕様に問題があると文句を言う
こういう特徴を持っているAさんは、非常にやりづらい相手でした。
PMの立場からすると、

「とにかく時間がないんだからプロジェクトに関係することをやってくれればいいのに・・・」
「仕様が決まっていないことが分かっているのであれば、仕様を決める手伝いをしてくれればいいのに・・・」
なんて思ってしまうわけです。
もちろん、僕のコミュニケーションが上手くなかったり、力不足な部分は大いにあるでしょう。
とはいえ、プロジェクトの推進は共同作業です。
特に新規事業の場合はきちんとした役割も決まってなかったりするので、誰が何をやってでも前に進める必要があります。
そういう観点からすると、「エンジニアとしてちょっとやりづらい相手だな」と思っていました。
僕の例では新規事業の話だけを取り上げました。
ただ、現在、どの企業・どのプロジェクトでも競合他社との競争が激化していますし、時代のスピードも早くなってきています。
そんな中、「エンジニアとしての仕事をする」だけではなく、「プロジェクトを推進するためにアクションを起こせる」ようなエンジニアは、どこに行っても優秀と言えるでしょう。
ケース2: 既存事業開発プロジェクトで、業務委託先の会社にいたエンジニアBさん
続いて、違う例をご紹介します。
この人をBさんとしましょう。
このBさんは、僕が転職前、メーカーで働いているときに一緒に仕事をしたエンジニアです。
そのときは既存事業のシステム開発を、業務委託を受けている会社にお願いしていました。
僕はそのときもPMのような仕事でした。
このBさんのスキルは、こんな感じです。
・エンジニアとして設計が特別できるわけではない
・委託元⇔委託先という役割を超えて、起きている問題や残件の整理をやってくれる
・他のメンバーがどうやったら働きやすいか?を考えてくれる
この話の流れから予想できるかとは思いますが、僕(プロジェクトマネージャー)から見て、この2人を比べたときに優秀だと思うのは、圧倒的にBさんです。
他のエンジニアから見ても、一緒に仕事をやりやすいのはBさんでしょう。
システム開発は、基本的にチームプレイです。
そのチームを円滑に回すためには、潤滑油のような人も必要です。
チーム全体がうまく機能するためにはどうしたらいいか?と考えられる潤滑油のような人は、「優秀だな、一緒に仕事をしたいな」と思われます。
Bさんのような仕事ができる人は、
・プロジェクト全体がどうなっているか?どこに問題があるか?の視野が広い
・気づいた問題点をきちんと伝えられるコミュニケーション力がある
このような特徴をもっています。
Bさんのような人と一緒に仕事をすると、プロジェクトマネージャーの仕事が減りますし、見えていなかったプロジェクトのリスクにも気がつくことができます。
また、他のエンジニアもプログラミングに集中できるようになるため、チーム全体の成果が上がります。
この記事は、こういった僕の過去の経験を踏まえて書いているので、信ぴょう性はあると思っていただいてよいでしょう。
優秀なエンジニアの6つの特徴

まずは、僕が優秀だと思うエンジニアの6つの特徴を説明します。
エンジニアとしてのスキルが優れている
最初のポイントは、エンジニアとしてのスキルが優れていることです。
今プログラミングを勉強していたりエンジニアを目指しているあなたにとって、これは分かりやすいポイントではないでしょうか?
エンジニアとして優秀であるためには、
・データ構造やIDの管理方法などのソフトウェアの設計ができること
・基本的なITリテラシーが備わっていること
・他の人とプロジェクトを推進する基本的なスキルが備わっていること
このあたりが最低限備わっていれば、問題ないでしょう。
もちろん、そのどれもが磨くべきスキルではありますが、トップレベルでなくても問題ありません。
他の人と同じくらいのスキルを身につけることができれば、少なくとも日本の会社では十分です。
プログラミングでトップレベルを目指すよりは、次以降で説明する社会人としての基礎スキルも併せて磨いた方が、「優秀だ」と思われる可能性は上がるでしょう。

「エンジニアについてもう少し詳しく知りたい!」
という場合は、以下の記事も読んでみてください。
コミュニケーション能力が優れている
2つ目のポイントは、他の人とのコミュニケーション能力が優れていることです。
コミュニケーション能力とは具体的には、
・他の人が気づいていない問題点やリスクなどを伝えることができる
・プロジェクトを推進するための立ち振舞いができる
など、「聞く・伝える」よりも広い意味でのコミュニケーション能力となります。
ソフトウェアの開発プロジェクトでは、数多くの立場の違う人とのやりとりが発生します。

・企画担当
・プロジェクトマネージャー
・マーケティング
・ビジネス担当
こういった関係者のいずれも違う立場・違うバックボーンであるため、あなたのエンジニアの喋っている内容が伝わらないことが多々あります。
そんな時でも、相手に伝わるような内容や粒度、前提を説明できるだけで、あなたは「一緒に仕事をするのが非常に楽なエンジニア」と思われること間違いなしです。
具体的には、「システムのxxxに不具合があります!」というエンジニアの用語を使うのではなく、「不具合があり、リリースのスケジュールがx日遅れます」という共通語を使うなどの工夫をすることにより、企画担当者などの関係者から

「このエンジニアは非常に優秀だ・・・!他のエンジニアと比べて言っていることが分かりやすい!」
と感動されること間違いなしです。
ちなみに僕の体感ですが、実際に働いているエンジニアのうちで、このようなコミュニケーションができている人は、全体のうち2割以下くらいです。
ですので、もしあなたが他の関係者が理解しやすい説明ができればそれだけでエンジニアとしてトップ20%に入ることができます。
事業的に必要なことを理解している
既存事業にしても新規事業にしても、エンジニアは事業やサービスの開発に貢献する必要があります。
言い換えると、プログラミングをするのは手段であり、「事業目標を達成すること」がゴールです。
このゴールを意識することによって、
・どこに注力して、どこは手を抜いたらいいか?が分かる
というようなメリットがあります。
事業的に必要なことを理解していないエンジニアは、プログラミングのことだけを考えており、プロジェクト内の他の関係者と会話が成立しなかったりします。
エンジニアの役割はもちろんプログラミングをすることがメインなのは当然ですが、それだけを考えているとダメなのです。
事業的に何を優先すべきか?その内容次第では、「システム的にイマイチな実装だけど、今はスピードを優先しよう」という判断ができるのが、優秀なエンジニアの要素の1つです。
これも僕の体感値ですが、「エンジニアとしての完璧性を多少犠牲にしても事業貢献をするための行動がとれる」という人も、全体のうち2割くらいだと思います。
視野が広く、関係者の立場も理解しつつ提案することができる

優秀なエンジニアは、PM(プロジェクトマネージャー、プロダクトマネージャー)やマーケティングや営業の立場を理解することができます。
もちろんエンジニアはPMやマーケティングなどの専門ではないので、その全てを理解することはできないでしょう。
ただ、少なくともPM、マーケティングなどの関係者が何をやりたいのか?何に困っているのか?」を汲み取ることができます。
その上で、エンジニアとしてできる対策を提案します。
具体的には、

「このスケジュールで全ての機能を実装するのは難しいですが、xxxの機能を無くせば間に合うかもしれません」
「マーケティング的にやりたいことを完璧に実装すると間に合いません。ただ、見た目だけでよければ暫定的なプロトタイプで見せる(=完璧な実装をしない)のはどうでしょう?」
こういった提案をすることができます。
エンジニアがこれらの提案をすることができれば、プロジェクトが一気に加速したり、効率が爆上がりします。
もしあなたがこういった提案をするスキルを身につけることができれば、プログラマーとしてだけではなく、プロジェクトマネージャーなど、よりソフトウェア開発の上流工程も担当できるようになる可能性が上がります。
周りの人を巻き込みつつ仕事を進めることができる
1つ目の項目でも説明しましたが、よほど小さいプロジェクトでない限りは、エンジニア1人で何かを完結することはできません。
場合によって、営業がいたり、企画担当や他のエンジニアなど、様々な人が登場します。
プロジェクトを円滑に進めるためには、そんな周りの人たちとうまく連携しつつ仕事を進める必要があります。
特に、エンジニアとしてやりたいことを推進するためには、そういった関係者を巻き込んでいく必要があります。
例えば以下のような感じです。
・開発するアイテムが多すぎるため、開発の優先度を相談したい
・新しいシステムが完成したのでマーケティング活動を行い、告知を行いたい
このいずれも、エンジニアだけでは完結できないものばかりです。
エンジニアとして優秀と呼ばれる人には、言われたものを作るだけでなく、一番最適な進め方はなにか?それをどのように進めるか?というところまで考えています。
僕がプロジェクトマネージャーをやっていて、「この人優秀だな」と思うエンジニアは、
・その中の優先度を(そのエンジニアなりに)並べて
・決められた期日内でどこまでなら対応できそうか?の見積もりをして、
・プロジェクトマネージャーや関係者と相談できる
という人です。
こういう優秀なエンジニアがいると、プロジェクト内の他の関係者の仕事量を一気に減らすことができます。
ゴチャゴチャした状況の整理をすることができる

特に、プロジェクトが立ち上がった直後や開発を開始した直後は、まだ「どのように開発をしていくか?」というルールが決まっていなかったりします。
例えば以下のようなものが決まっていないことでしょう。
・ミーティングはどのような頻度で行うのか?
・プロジェクトの開発方針は何か?(スケジュール優先か?品質優先か?)
こういうゴチャゴチャした状態の場合、いきなりエンジニアが開発ができることは稀です。
それよりも、開発を始めるための準備を進める必要があります。
優秀なエンジニアは、こういったゴチャついた状況の整理を、エンジニアの観点からすることができます。

優秀なエンジニアになるための方法

それでは最後に、あなたが優秀なエンジニアになるための方法を説明します。
Step1: プログラミングなど基本的なスキルを身につける
まずはエンジニアの基礎となるプログラミングのスキルを身につけましょう。
この記事では、エンジニアとして活躍するためにはプログラミング以外のスキルが重要というお話をしてきましたが、その基礎となるのはプログラミングのスキルです。
どんなに社会人としての基礎スキルが高くてもプログラミングが全くできないエンジニアは活躍できないからです。
具体的なプログラミングスキルを身につける方法は、以下の記事を読んでみてください。
Step2: プログラミングスクールでエンジニアとして必要なスキルを身につける
この記事で説明している通り、エンジニアとして活躍するためには、プログラミングスキル以外に、社会人の基礎スキルも必要となります。
具体的には、
・他の人とプロジェクトを推進するスキル (gitやタスク管理の方法など)
・不具合の修正スキル (デバッグツールの使い方や効率のいい不具合修正方法の調べ方など)
こういった様々なものを知っておく必要があります。
これらのエンジニアとして必要なスキルは、なかなか独学だけだと身につけづらいのが特徴です。
そんなときにオススメするのがプログラミングスクールです。
プログラミングスクールの中には、プログラミングの訓練だけではなく、そのほかエンジニアとして活躍するために必要なスキルを身につけたり訓練をしてくれるところもあります。
もしあなたが、これらのスキルに不安を持っている場合、プログラミングスクールに通ってみることをオススメします。
プログラミングスクールに通うことで、こういった必要なスキルを一気に習得することができます。
以下の記事に、あなたの目的や状況に合わせて、オススメのプログラミングスクールを一覧でまとめました。
もし興味があれば、この記事も読んでみてください。
Step3: 今やっている仕事の中で、コミュニケーション能力など必要なスキルを身につける

あなたが今エンジニアではない仕事をしていたとしても、社会人としての基礎スキルを磨くことはできます。
具体的には、
・あなたの周りで仕事が滞留している場所はないか?
・他の人にかけ合うことで、仕事の効率が上がらないか?
このように考えることで、社会人としての基礎スキルを向上させることができます。
エンジニアを昔からやってきた人は、目の前のプログラミングなどの作業に没頭してしまうために、こういったスキルが不十分な場合もあります。
そんな人と比べて、あなたは他の仕事で社会人としての基礎スキルを伸ばすことができます。
プログラミングのスキルという意味では、一朝一夕でそういった凄腕エンジニアに勝つことはできないかもしれません。
ただ、社会人としての基礎スキルまで含めて総合力で勝負することにより、十分戦うことができるようになります。
Step4: エンジニアになった後も、「あなたの立場(エンジニア)が、何をするとプロジェクトが前に進むか?」を考える
実際に仕事をすると、どうしても目の前の作業に忙殺されがちです。
そんな中であっても、「プロジェクトのどこに問題があって、その問題にどのように手を打つとよいか?」を考えるクセをつけておくとよいでしょう。
エンジニアとしての価値を高めるには、プログラミングスキルを向上させていくのはもちろんです。
ただ、それと同時にプロジェクト全体のことを考えられるスキルがあると、あなたの市場価値は一気に上がります。
プログラミングもできるし、プロジェクト全体の舵取りもできる・・・これが、現時点で最強のエンジニアです。
難しいかもしれませんが、是非、トライしてみてください。
[最後に]プログラミングスキル+社会人としての基礎スキルで優秀なエンジニアに!
![[最後に]プログラミングスキル+社会人としての基礎スキルで優秀なエンジニアに](https://www.mame-blog.site/wp-content/uploads/2022/01/characters-of-excellent-engineer09-1024x682.jpg)
この記事では、優秀なエンジニアの特徴を説明してきました。
ここまで読んでくださったあなたは、優秀なエンジニアとして活躍するために必要なスキルや資質を理解いただけたのではないでしょうか?
あなたがこれからプログラミングの勉強や、社会人としての基礎スキルを身につけてエンジニアとして活躍できる日をお祈りしております。
この記事は以上です。
ここまで読んでくださりありがとうございました!
コメント