エンジニアは誰でもなれるは嘘!?エンジニアに必要な素養4選

Webエンジニアのryochaです。

今回は、エンジニアには誰でもなれるのかという話と、エンジニアになる上で必要な要素を話したいと思います。

エンジニアは誰でもなれる?

巷ではよくプログラミングは誰でも習得でき、何歳からでもエンジニアになれるという宣伝が、未経験の界隈には飛び交っています。そういった方達を対象とした、高額なスクールの広告を見て入会し、実際にはエンジニアになれずに挫折する人が後をたたないです。この事からも分かると思いますが、そもそも本当にエンジニアは誰でもなれるのでしょうか?

この答えはNoです。何故なら、プログラミングは習得出来ても、エンジニアになれるとは限らないからです。プログラミングの習得は誰でも出来ます。しかし、それが出来たところで、スタート地点ですらなく、エンジニアの道ははるかに険しいです。

元々私は未経験からエンジニアになりました。エンジニアになる前も独学でプログラミングはやっており、プログラミングで独自アルゴリズムを実装したり、マッチングアプリのようなものもアルバイトで開発していたので、どんな仕事もこなせる自信がありました。ですが、いざエンジニアとして現場に入ると、そのスキルは未経験同然で、全くエンジニアとしては役立たない素人でした。プログラミングが出来る != エンジニアとして仕事が出来るという事に、この時初めて気づいたのです。

また、現場には開発チームならではのルールがあり、独学の時にやっていた自分の独自のやり方やコードの書き方は、チームの最適解にそぐわないという事が基本です。例えば、独学で書いてたコードが、綺麗で保守性の高いコードとして認定されるのは難しく、現場では数々の指摘を受け、元々自分の中でOKだった基準はことごとく打ち砕かれます。それは当然、現場レベルの経験をしていないのだから、誰でもそうです。

 このような背景もあり、一概にプログラミングをやるからエンジニアになれるというのは、なかなか難しいというのが現状です。

では、エンジニアになる上で重要な素養は何かという話を、私が思う4つ紹介していきます。

1. コミュニケーション能力

これは、いわゆるトーク力や営業スキルのようなものではなく、正しくは、「いかにコミュニケーションを測れるか」というスキルになります。エンジニアになれば、お客様や企画営業の方からタスクが降りてきて、そのタスクをこなすというのが主な流れになると思います。そこで、タスクに対してしっかり基本設計、詳細設計を行い、問題ないかを確認する力が重要になります。ここで、自分の想い込んだものをそのまま実装してしまい、指摘されて手戻りがあるというのは非常に多いです。この手戻りをなくすために、常に確認し続けられる事が、とても重要なのです。これはエンジニアリング以外の仕事においてもよく取り上げられますが、まさに、どの職種においてもこの確認不足による手戻りは、共通する課題なんじゃないかと思います。なのでまずは、ここの確認漏れをしっかりなくすように努める必要があります。

2.サービス志向

ここで大前提として、Webサイトなどの複雑な技術が絡むものは、正解がないというのがあります。例えば、Todoリストの項目を追加、編集したいという要望があった時に、それらを1ページ内で一括で追加も編集もできるようにするというやり方ももあれば、別ページで追加も編集も出来るようにするというやり方もあると思います。それで、どちらのやり方が正しいかというのは、特に決まっていません。こういった時に考えるべき事は、どういった対象のユーザーがいて、そのユーザーはどのような使い方を好むかといった傾向です。常にユーザー目線に立ち、ユーザーの挙動を考える必要があります。そこでまずは、実際のサービスを見てみて、そのサービスがどのようなUIになっているかという調査をします。その調査に基づき、自分がベストだと思ったUIの提示および提案ができるという事が、まさにエンジニアにとっては重要です。また、実際に機能をリリースした後も、そのサービスを使ってみて、おかしい点はないかといったことをこまめにチェックできるというのも重要です。こういった通常の動作確認は皆行いますが、更に踏み込んで、不具合や不便な点がないかという事を常に考え続けられるというのも、重要です。

3. 技術や効率を探求する力

エンジニアであれば、自動化という話はよく聞くと思います。この自動化も、エンジニアの効率性を重視するという観点で生み出されるものが多いです。普段の業務でも、コードを書く事が多いといえど、ルーティーンのワークになってる単調な作業も多くなって来ます。例えば、同じシェルのコマンドを多く打ったり、エクセルファイルの同じ場所を毎回参照してコードの中に記載したりなどです。このような作業も効率化しようと思えば出来ますし、そういったところに常に視点を向けるのが大事です。

 自動化以外にも、ソースコードのリファクタリングも、効率化につながる部分になると思います。冗長なコードは弊害しか生まず、作業において大きなリスクになるのです。冒頭でお話しした、保守性の高いコードを書く事や、チーム体制が重要という話も、この部分に紐づくものになります。

 また、技術を学び続けるという姿勢も重要です。日々新しい技術が生まれ続けてますが、この背景にも、効率性などを重視したエンジニアの動きがあって生み出されてるものなので、これらをキャッチアップして業務に取り入れれば、生産性も上がる事が多いからです。古いレガシーな技術に取り残されていくと、サービスのメンテナンスもしづらくなり、本来集中するコーディングの部分以外に時間を取られるようになって来ます。そのようなことで生産性が下がるのは、機会損失とも言えるので、このモダンな技術を考え、取り入れていくという姿勢が大事です。ただし、モダンな技術をなんでも取り入れれば良いかと言いうとそうではありません。技術を取り入れない背景としては、単に知られてないという場合もありますが、それ以上に、料金面だったり、動いてるサービスのいろんな影響箇所があり、取り入れるリスクが大きいからです。なので、デメリットを押さえた上で、取り入れるメリットを提示できるまでに落とし込めるというのが、このモダンな技術を探求する上では一歩踏み込んだ、重要な思考になります。

自走力

自分自身で仮説を立てて、解決していくという問題解決力、すなわち自走する力が大切です。この要素が欠けていると、分からないことは何でもすぐに聞こうという発想が生まれ、現場でこれをやってしまうと、エンジニアから嫌われ、場合によっては試用期間で切られる可能性もあります。本来エンジニアというのは、分からない事を自分で仮説を立て、解決や、何かの答えを導く必要があるのに、その導くべき答えを、人に聞こうとする姿勢が、そもそもエンジニアの方向性とは真逆なのです。プログラミングスクールなどでは、分からないことをすぐに聞けるような環境が用意されており、一見早く成長が出来るように思いがちですが、実際は真逆です。プログラミングスクールでできるようになるのはあくまでプログラミングまでで、冒頭に挙げた、プログラマーからエンジニアに上がるためのスキルは身に付きません。また、プログラマーになるにしても、たった1日2〜8時間程度の学習を半年続けた人が、現場で1日8時間以上を1年以上やってる人のレベルに到達するのは到底難しいです。そして、プログラミングスクールに通うのは、人にすぐに聞くという癖が身についてしまい、エンジニアとして働く上で、いきなり現場に立ってゼロからプログラミングをやる人に比べても、マイナスがある分不利になり得ます。自走力をつけるためには、なるべく人に聞かず解決するようにしましょう。とはいえ、ググりながらいきなり解決は難しいので、最初はteratailなどの無料質問掲示板を使って質問したり、分からないところだけスポットでお金を払って誰かに力を借りるといった事をやって、挫折を防ぎつつ、自走力を磨くのが良いと思います。

まとめ

いかがだったでしょうか?
今回お話しした4つの要素は、未経験だから必ずしも持っていないという事はありません。未経験でも、自走力のある人はいるからです。そういう方は伸び代も早いです。逆に、エンジニアの人でも、これらの要素を全て持ち合わせてはいない人はいます。
上記のスキルは、一部の天才を除けば、皆最初から持ち合わせておらず、実務を通して養っていく必要があります。なので、ポートフォリオ作成に拘っているエンジニア志望の方は、同時並行で実務をやらせてもらえるようなサポートも行ってもらった方がいいです。

私のコミュニティでは、月額3000円で、技術的な質問がいくつか出来て、実務的な案件にもチャレンジ出来るコミュニティのプランを用意しております。転職や、その後の服その後の案件獲得に向けてのアドバイスも行っています。もし何をすれば良いか分からない方は、ぜひ一度ご相談ください。

 また、上記の要素だけあれば良いという訳ではなく、現場によっても必要とされるスキルは異なるので、必要なスキルはこれ以外にもあるかと思います。皆さんの、他にこんなスキルが必要と思ったものがあれば、是非ともコメントお待ちしております!