ベテランエンジニアが語る|優れたエンジニアの条件

近年、IT市場の拡大により国内のエンジニア需要が大幅に増加しています。

この記事を読んでくださっているあなたもエンジニアかもしれませんし、もしくは企業の採用担当者様でしょうか?

エンジニアの採用に際して「優秀なエンジニアを見極められるのだろうか」と不安に思う採用担当者も多いと思いますが、そもそも「優れたエンジニア」とはどんなエンジニアなのでしょうか?

今回の記事では、海外のエンジニアリングに関する記事から
優れたエンジニアの条件を和訳し紹介します。

海外引用:What Makes a Good Software Engineer? Programming by Coincidence

優れたエンジニアとは

優れたエンジニアの条件をあげていきますが、

簡潔に述べると優れたエンジニアとは、コードを書くだけでなく、価値のあるソフトウェアを構築、提供、出荷するために必要なその他のことにも精通している人のことです。企業が利益を生み出すのを助け、会社から信頼されているということも大切です。

偶然に頼らない。理解してコーディングしていること

Programming by Coincidence というフレーズがあります。

直訳すると、偶然によるプログラミングです。

どういう意味かというと、自分が何をしているか、スニペットまたはアプリケーションがどのように働くかを理解せずにコーディングを書いている状況を指します。

一見、正常に動作し、すべての目的を解決しているように見えますが、

偶然によるプログラミングで書かれたものは、ある日突然、正常に動作しなくなるかもしれません。

そして、長い時間を費やして修正しようとしても直すことは困難です。

修正できない理由は簡単で、そもそも最初からなぜそれがそのように機能するかを知らなかったからです。

優れたエンジニアになるためには、そのような偶然によるプログラミングを避ける必要があります。

いくつかその方法を紹介します。

偶然によるプログラミングを避ける方法

思い込みをしない。確実な事実に基づいていない思い込みは、後で問題につながります。仮定に基づいてコードを書くのではなく、証明できるように心がけましょう。

常に全体像を意識する。自分が何を今しているかを把握しましょう。

コードを頻繁にテストする。新しく追加する機能にユニットテストを実施します。そうすることで予想される動作と実際の動作を比較できます。ユニットテストでは、テスト対象となるプログラムが小さいため不具合を見つけやすい、また、プログラムを作成してすぐにテストを行うため、検証をスムーズに行えるという利点があります。

リファクタリングするチャンスを逃さない。リファクタリングとは、ソフトウェア開発において、プログラムの動作や振る舞いを変えることなく、内部の設計や構造を見直し、コードを書き換えたり書き直したりすることを言います。

リファクタリングをすることによって、コードが煩雑になるのを防ぎ、結果的には将来のトラブルが減ります。例えば、コードが煩雑だとプログラムの仕組みがわかりにくいので少し変えたつもりが、別の部分で意図しない大きな変化が起きる可能性があります。

また、リファクタリングによってコードがシンプルになっていると、理解しやすいので引き継ぎの手間も減り、またトラブル時の対応も速くなります。

好奇心を持ち続けていること

優れたエンジニアになるためには好奇心を持ち続けていることが大切です。

最先端のプログラミングに関する情報を常にチェックし、ついていく必要があります。

例えば、

  • ツールとエディター
  • オペレーティングシステム
  • コードが実行されるソフトウェア
  • プログラミング言語自体
  • 使用するフレームワーク

これらは常に新しいバージョンが公開されたり、変化しているので、好奇心を持ち続け情報を取り込む必要があります。

物を作ることが好きであること

優れたエンジニアは自分の仕事を楽しんでいます。 具体的には、ものを作るという感覚を楽しんでいます。

ものを作るというこの感覚は、家具作りや彫刻などを連想させるかもしれません。

エンジニアが作るものの多くは、物理的な世界には存在しませんが、優れたエンジニアは自分のソフトウェアに手を加え、調整し、完成させ続けなければならないという強い意欲を持っています。実際に触れることは出来ませんが、彫刻家が作品を作り終わった時と同じように、ソフトウェアが完成したときには、達成感と誇りを感じるでしょう。

持続力・忍耐力があること

プログラミングを習い始めたばかりの頃は、モチベーションも高く、

“hello world”と書きながら、新しく学ぶことを楽しんでいるでしょう。

しかし、プログラミングの世界に足を踏み入れると、壁にぶつかることも沢山あります。

・コードがどうしてもコンパイルされず、Googleの助けを借りても原因がわからない。
・バグがどうしても消えない。
・開発環境のどこかがクラッシュして、コードを書くことすらできない。

なんてことが起こると思います。

重要なのは、優れたソフトウェアエンジニアは、このような挫折が避けられないことを理解しているということです。 また、それを克服するために努力します。

プログラミングに負けない「粘り強さ」が大切です。

フィードバックループを意識する

フィードバックループを意識するとはどういうことか説明するために例を紹介します。

・検定試験などテストを受けることを想像してください。試験監督がそれをどこかに郵送し、採点され、6週間後に結果が届きます。

・同じテストをコンピュータで受けたとしましょう。 テストが終わると、すぐにあなたのスコアが表示されます。

例1は長くて緩いフィードバックループ、例2はタイトなフィードバックループです。

優れたソフトウェアエンジニアは、開発中のフィードバックループを常にタイトにするように努めます。

“コードを書いて、それを実行して何をするかを確認する"ループです。

より効率的になるようにフィードバックループを強化しようとする姿勢が、優れたエンジニアになるために重要です。

ツールを使いこなす

ツールを使いこなすというのは、タイトなフィードバックループと密接な関係があります。ツールを使いこなすことでフィードバックループを向上させられるからです。

ソフトウェア開発では、思った以上に多くのツールを使います。

・実際にコードを書くための各種エディタ(IDE)

・ソフトウェアのバージョンを管理するためのソース管理ツール

・作業内容を把握するためのコラボレーションツール

・不具合を発見するためのデバッグツール

・アプリのパフォーマンスが良いのか、遅いのかを教えてくれるパフォーマンスプロファイラー

など多くのツールを使用します。今例に挙げたより、実際にはもっとたくさんあります。

自分が使っているツールについて積極的に学んで、最大限に活用することが重要です。使いこなせるようになれば仕事がより効率的になります。

コードだけでなくビジネス、商品にも気を掛ける

コードが正常に動作していても、それを使う人にとってそのソフトウェアが有用でなければ、それは本当の意味で機能していないことになります。その有用性を理解し、測定するには、「C++入門」の本には載っていないスキルが必要です。

優れたエンジニアは、コードを超えて考えます。 ソフトウェアのユーザーのことを考え、自分の決断がチームや会社、そしてアプリを取り巻く広い世界に与える影響を考えるのです。

怠けるタイミングを知っている

優秀なエンジニアが仕事をしないとか、二日酔いで会社に来て一日中Twitterを眺めているという意味ではありません。

朝からデータ入力をするのは大変だし、つまらない。 顧客記録を1つのデータベースから別のデータベースにコピーするのも大変な作業で、しかも退屈です。

しかし、優秀なソフトウェアエンジニアは、ただダラダラと仕事をするのではなく、自分のスキルをどうしたら生かすことが出来るか考えます。自分のスキルを使ってどうすればプロセスを自動化できるかを考え、コンピュータにそれをさせるのです。

重要なのは、優れたソフトウェアエンジニアは怠けるタイミングを知っていて、自動化できそうな作業や、タスクをより効率的にする方法を常に探しているということです。

態度が良い

優れたエンジニアに限った話ではありませんが、態度が良いというのは非常に重要です。

仲間や同僚に対して我慢できないような態度をとる人が一人でもいるとチームとして働くのが難しくなります。これではビジネスになりません。

逆に、態度が良い親切な人がいれば、チームや組織全体にいい影響を与え、生産性を向上させます。

技術も大切ですが、それと同じくらいにチームとして一緒に働けるかということが大切です。

優れたエンジニアは、親切で協力的、一緒に仕事をしている人たちをより良くしようとする傾向があります。

プログラミングが得意であること

プログラミング言語は、Python・Java・JavaScript・C#・PHP・R言語などのメジャーな言語に加えて、200種類以上存在すると言われています。

優れたエンジニアになるために、数えきれないほどのプログラミング言語を習得したり、Stack Overflow (プログラミングに特化した質問サイト)でランキング上位になる必要もありませんが、

プログラミングが得意であるということは欠かせません。

優れたエンジニアになりたいのであれば、プログラミングを学ぶことを決めたら早い段階で取り組み始め、常に学び続けることが大切です。必ずしも学位を取得すべきというわけではなく、ブートキャンプに参加するのもいいですし、独学で学び始めることも可能です。どんな状況でプログラミングを学んでいるにしても、練習あるのみです。

まとめ

今回の記事では優れたエンジニアの条件をご紹介しました。

どうでしたか、あなたは優れたエンジニアの条件に当てはまりましたか?

もし、当てはまっていなくても、優れたエンジニアになるためにすべきことが分かったと思います。

最初から無理をせずに出来そうな項目から意識していきましょう。