現代において、技術力の高いエンジニアとは何を指すのだろうか?
ふとそんなことを疑問に思った。
もちろん人によって意見は様々であるし、分野によっても異なるだろう。
ソフトウェアエンジニアとしての技術力とは何か、現代に必要な力とは何か、私の中で一つの結論が出たのでそれを書いてみる。
目次
ITエンジニアの技術力とは、”組み合わせる力”である
現代のIT業界は、様々なサービスで溢れている。
参入企業は年々増加し、競争は激化。ものすごいスピードで進化発展しているのは皆承知の通り。
ITとは無縁だった業界も、いまやITとタッグを組んで○○テックというテクノロジーを生み出している。
農業・教育・不動産・金融・交通・医療・政治・流通…ありとあらゆる分野がもはやITなしでは成り立たない世の中である。
我々が少し考えて思いつくような新しいサービスは、すでにどこかの会社がやっているのが実情だ。
ただモノを作るだけでは売れない。先行者に勝てない。そんな時代である。
技術を組み合わせた「ポケモンGo」
数年前に登場し、全世界で話題となったポケモンGo。
始めてプレイしたときは、まるでポケモンが現実の世界にいるような驚きをプレイヤーたちに与えてくれた。
今もなお多くのファンがプレイを楽しんでいる、スマホゲームとしては空前のヒット作品だ。
そんなポケモンGoには、実は目新しい技術は使われていない。
プレイヤーが動き回るフィールドはGoogleマップと位置情報(GPS)で実現しているし、
ポケモンを捕まえる画面はAR技術(拡張現実)を用いている。
カメラで背景画像を取得し、スマホの各種センサーで傾きなどを検知して描写している。
つまりは既存技術の組み合わせである。
組み合わせることで、我々が驚くような全く新しいサービスを生み出したのだ。
ポケモンGoがリリースされたのは2016年。今から約5年前だ。
その当時から、ポケモンGoはITエンジニアに希望と夢を与えてくれた。
技術の掛け合わせでこんなにも素晴らしいサービスを生み出せるのだから。
思えば、この頃から企業間の “協業” という概念が活性化してきたようにも思う。
各企業は対立しているだけじゃ戦えない時代だ。
各々のいい所をお互いに出しあって協力すれば、自社だけでは実現できない全く新しい価値のあるサービスが生み出せるのである。
コードをバリバリ書ける”だけ”のエンジニアは優秀か?
ひと昔前までのエンジニアの技術力と言えば、“コーディング力” を指すことが多かった。
要は一日で何ステップ書けるかというものである。(多ければ多い方がいい)
以前はソフトウェア開発にかかる開発費はステップ数(コードの行数)に比例していくものが主流だった。
ソフトウェアを外注する場合、開発元はステップ数で開発費を算出する。
つまりはコードを書けば書くほどお金が貰えるのだ。
ということはコードを人よりもバリバリ書けるエンジニアは紛れもなく優秀ということになりそうであるが、残念ながら今の時代は通用しなくなった。
なぜなら今は便利なフレームワークやAPI、クラウドサービスというものがかなりある。
今まで自力で1,000ステップ書いてたコードが、たったの数行で済む時代になったのだ。
「自力でたくさんコードを書くのでその分お金ちょーだい」 では、他社に仕事を取られてしまうだろう。
つまりはコードをバリバリ書ける”だけ”ではダメなのだ。
車輪の再開発は今の時代にそぐわない
車輪の再開発という言葉がある。
「すでに世間一般に広く受け入れられ、確立されている技術や解決法を用いずに、再びイチから作ること」
という意味であるが、
これは先ほど書いた、便利なフレームワークがあるのに自力で膨大なコードを書こうとする行為のことである。
車輪の再開発が起こる原因としては主に3つある。
- すでにそういった技術があることを知らない
- 知っているが、意図的に利用しない
- 自身の勉強のために、同じものを作ろうとする
3番目は勉強のためなので問題はないし、2番目はリスクを避けるための行為として選択されることがある。
フレームワークやAPIに知財的なリスクがあることが分かっていたり、クラウドサービスの場合はサービス自体が終了してしまうリスクがあるからだ。
しかし、1番目の「知らない」は致命的である。
いくらコードをバリバリ書けても、そういったフレームワークやサービスがあることを「知らない」のは、無駄なコードを無駄な時間をかけて書いていることに他ならない。
無駄なコードを書くことによってプログラム全体がスパゲッティコード化(複雑化)してしまう恐れがあるし、なによりバグを生んでしまうリスクが非常に高い。
世の中の技術を「知らない」または「知ろうとしない」エンジニアは危険なのだ。
競合他社がひしめく中、スピードも昔以上に求められている。
そんな中で車輪の再開発をしている余裕のある企業はほとんどないだろう。
優秀なエンジニアというのは、ただコードが書ける能力を持っているというわけではなく、
- 世の中の技術を広く認知し、
- 時には適切に技術を取り入れて、
- 組み合わせることによって新しい価値を生み出せる
これができるエンジニアこそが “技術力のあるエンジニア” というのではないだろうか。
何をすべきか・何を習得すべきか
エンジニアにとってコーディング力を磨くことはもちろん大切である。
エンジニアである以上、コードを書くのが仕事である点は間違いないからだ。
しかし、いかに簡潔に・いかに時間をかけずにモノを作れるかという点のほうが現代においては重要である。
そういう意味では、エンジニアがすべきことは “世の中を知ること” である。
- IT業界はもちろん、他業界の動向にも関心を持つ
- クラウドサービスに日常的に触れてみる
- 実践の機会を増やす(手と頭を動かす)
- 社外セミナーや展示会に参加する
- 最新の書籍やYouTubeなどを活用する
- TwitterやQiita、技術系ブログなどで現役エンジニアと繋がる
特に一番最後の、SNSなどでコミュニケーションを取ることは非常に大切である。
TwitterやQiita、Developers IOなどは最新の情報収集に適しているツールだ。
Twitterではセミナーや展示会などをリアルタイムで実況してくれる人もいる。
そういった情報に日々触れるようにしておけば、おのずと技術力は向上していくだろう。