良いエンジニアになるための方法:エンジニアが身に付けておくべき「考え方」と「視点」

当連載では未経験者からシステムエンジニアになるために必要な業界知識やエンジニアの仕事内容などを解説しています。これまでにも多くの記事を投稿していますので、もしよかったら過去のアーカイブなどを併せて確認してもらえると、よりエンジニアに対する知識が深まるのではないかと思います。

エンジニアという仕事は専門的な知識を持ってITスキルを提供するというのが一般的です。これは「」でも解説しています。今回はそこから一歩進んで、案件で「結果の出せるエンジニア」になる方法について解説します。エンジニアといえば「スキルが高ければOK」みたいな風潮がありますが、私はそれだけではないと感じています。

この記事では信頼される、また必要とされるエンジニアになるための考え方などを解説していきたいと思います。重要なのは「どのような価値を提供できるか」という点と「プログラミングスキルが高い、イコール、良いエンジニアとは限らない」という点になります。

エンジニアとプログラミング

まずはエンジニアにプログラミングスキルが必要なのかを考えてみます。結論は「必要だけど、物凄い高いスキルは求められない」と考えています。エンジニアとプログラマーは厳密に言うと「違う分野の仕事」をするスペシャリストです。エンジニアとプログラマーの違いについては、以下の記事で紹介してるので読んでみてください。

とはいえ、実際の現場ではエンジニアとプログラマーの境目はあまりなく、エンジニア兼プログラマーというのが一般的です。筆者も自分でアプリケーションを設計して、実装し、テストを実施するという感じでシステム開発を行っています。

そういう環境が一般的なので、良いエンジニアには「高いスキル」が求められるのではないかと思うかもしれません。しかしながら、実際のところは「案件の実装が出来れば十分」というのが現状です。「物凄い技術」よりも「決まったことを実装できるスキル」というのが重要です。最先端のスキルよりも最低限のスキルが必要です。

ビジネスの基本は「価値提供」

少しエンジニアとプログラミングの関係から離れて、一般的なビジネスの話をします。ビジネスでお金をもらうにはどうすればいいか?という点ですが、これはシンプルに「価値提供」になります。あなたが持っていないサービスを提供するから、お金がもらえるということになります。ドラッガーは「現代の経営」という本で、事業について以下のように語っています。

企業が自ら生み出していると考えるものが、重要なのではない。顧客が買っていると考えるもの、価値を考えるものが重要である。それらのものが、事業が何であり、何を生み出すかを規定し、事業が成功するか否かを決定する。

顧客にとって「価値あるもの」がサービスであり、その「価値」を提供するからこそ事業は成功する、という考え方です。これをエンジニアになぞらえて考えてみると、「顧客の問題をITを活用したソリューションで解決し、業務改善や新規事業を手助けする。」になるんじゃないかと思います。

システム開発を突き詰ると要は顧客の問題解決であり、顧客のボトルネックをIT技術で解決するのが使命になります。エンジニアの価値は「問題解決」なのです。要するに、エンジニアの仕事はソフトウェアを開発して顧客を満足させることです。業務の効率化であったり、不可能だったものを可能にするといったことが根底にあります。

一種の問題解決を通して、顧客に価値を与えることが求められる仕事です。そんな視点から、もう少しエンジニアの仕事を眺めてみましょう。そうすると「高いスキルレベル」が必ずしも「良いエンジニア」に繋がるとは限らないことが分かります。

「高い技術」の落とし穴

エンジニアのビジネスにある「根底」部分について考えてみましたが、個人的に「高いスキル」を持っていたほうがオトクだとは思っています。少なくともIT技術を扱う上で、スキルはあったほうが強いからです。できれば高い技術力は持っておきたいし、そのために勉強も欠かさないようにしています。

ですが、本当に「高いスキル」は重要なのかというと、実はそうでもないと考えます。

エンジニアの中には、技術ばかりを追い求めて、肝心の顧客への提供価値を見誤っている可能性があるからです。例えば、面白そうな技術を実装してみたいがために無駄な機能を作って工数を圧迫してしまう。使ってみたいライブラリを組み込もうとして余計に分かりづらくなる。思考が実装に偏りすぎて顧客が必要とする設計書が書けていない。などなど。

技術レベルを高く追い求め過ぎると「エンジニアとして必要なのか?」と思う場合がよくよくあるのです。エンジニアとして働く以上、それはあんまりよろしくないと思います。筆者は「技術」はあくまでも「顧客に価値を与えるための一つのツールでしかない」という視点が重要だと思っています。これまで議題に挙げてきた「スキルが高い、イコール良いエンジニア」という図式の中には、残念ながら「顧客に提供できる価値」は含まれていません。

価値提供がビジネスの基本である以上、「良いエンジニアは顧客に価値を提供できる存在」でなければならないのです。エンジニアとして「必要」だと感じるのは、単にスキルへの探究心のみではなく、スキルを使った顧客への「提供価値」だということです。

真に求められるエンジニア

真に求められるエンジニアとは、一体どんなスキルを持ったエンジニアなのかを考えたいと思います。筆者はシステム開発の機能単位でのリーダーを経験してるので、プログラマーとしての視点・エンジニアとしての視点からみていきます。

まずはじめに思い浮かぶのは、エンジニアとして「説明能力」があるかどうかです。エンジニアとして備えておきたい能力は、ロジックに沿って物事を考えられるスキルです。そしてキチンと相手に説明できる能力です。エンジニアはコミュニケーションとかけ離れたイメージがありますが、エンジニアとして頑張っていくには、コミュニケーション能力がものすごく大事になります。

また、業務遂行能力もすごく重要になりますね。エンジニアはしばしばきつい状況に陥ります。仕様もわからない、実装方法もわからない、更にはスケジュールも足りない。そんか状況下でも諦めずに業務を遂行する根気強さが求められます。期限に遅れることはあっても、逃げ出さない強さが必要です。

顧客の要望を顕在化して、きちんと抽象化して、適切な工数で仕上げること。時には遅延するとしても、仕事を放り出さずに粘り強く取り組めること。

このあたりができると、エンジニアとして周りから認められるようになりますね。一方、プログラマー側からみた良いエンジニアの条件は、プログラマーを観察して、チームを引っ張っていける存在であることが重要です。話しやすいこと、耳を傾けること、プログラマーが困っているときにヒントを出せる存在であること。このあたりができると、プログラマーから信頼されるエンジニアになれます。

そうしたベースのある上で「スキル」を持っていると、いわゆる「スーパーエンジニア」になれると思います。独りよがりな技術だけでなく、周りを引っ張りながら、チームを、開発現場をリードできる人こそが「凄腕エンジニア」なんだと思います。単にスキルが高いから、とはいえ顧客に歩み寄れず、独りよがりな考えで突き進んでしまい、周りを引っ張れないエンジニアは、周囲からの協力も得られずに、少しづつ孤立していく可能性があるので注意するべきです。

価値を提供するから「良いエンジニア」である

色々と書いてきました。内容を簡単にまとめるとエンジニアは単にスキルが高いだけではダメだということです。スキルを活かして、周囲にどんな価値を提供できるのか、という点を突き詰めることこそが「良いエンジニア」の出発地点だと思っています。

「価値提供」という概念が根底にあって、その上で「スキル」が求められることを忘れてはなりません。独りよがりにならずに周りを引っ張り、顧客にとって、またチームにとって「信頼できるエンジニア」になることが重要です。顧客に良い顔をするだけでなく、チームにとって「一緒に働きたい」と思われる存在、チームを鼓舞する存在。そんな人こそが「良いエンジニア」の定義なんじゃないかと思います。

技術職である以上、プログラミングのスキルを求めることは重要です。その上で、「プログラミングスキルを超えて求められる」エンジニアであることが「結果を出せる」ということです。プログラミング以外でも価値を提供できる存在になることが、究極的なエンジニアの目標であると個人的には考えています。