ソフトウェアエンジニアとして働いているので、すごいソフトウェアエンジニアがどんな人かについて軽く考えてみる。
ソフトウェアエンジニア とは
IT系のエンジニアの職種の呼び方ははいろいろあって何が何だかさっぱりわからない。正確には会社によってポジションの呼び方が変わっているので、呼び方によってどんな仕事か決めつけるべきではない。
ここではソフトウェアエンジニアとは、プログラミングをしてサービスを作る仕事のこととする。
ソフトウェアエンジニアでない人
プログラミングを全くしない人はここではソフトウェアエンジニアとは呼ばない。
すごいソフトウェアエンジニアとは
ちゃんと定義するのは難しそうなので、すごいソフトウェアエンジニアの要素としてありそうなことを書いてみる。
プロジェクトを成功させる人
プロジェクトを成功させることができればすごいソフトウェアエンジニアである。これは当たり前のことで、どんな人がプロジェクトを成功させることができるのかを考える必要がある。
早く完成させられる人
どんないクオリティーが高いサービスを作ることができても完成まで10年かかるのではそのサービスが売れることはないだろう。ソフトウェアサービスはいかに早く価値のあるものを作れるかが大事である。
プロジェクトの全体を見られる人
プロジェクトの一つの機能を実装できるのは最低限のエンジニアとしての能力だと思う。しかし、プロジェクト全体を見てコードを書くことができる人は少ない。ポジションにもよるが、すごいソフトウェアエンジニアには全体を見た上での設計ができる必要がある。
コードレビューができる
プロジェクトの方針や技術的なことなどレビューができると技術的に高いエンジニアと言えるだろう。
このとき相手が気持ちよく修正できたり、相手の技術能力を向上させることができるとさらに良いエンジニアと言えるだろう。
チームの士気を上げられる
チームの士気を上げるのはプロジェクトマネージャーの仕事であるが、士気を下げるようなメンバーがいるとプロジェクトを成功させるのは難しくなるだろう。
開発力だけが高く一人で全てをやる人よりは、チームの士気をあげ全員がオーナーシップを持って開発できるようなチームを作れる人の方がすごいエンジニアだ。
メンバーからよく質問される
他のメンバーから質問されるエンジニアはかなりすごいエンジニアと言えるだろう。技術的に信頼されていて、コミュニケーション能力が高いことは間違いない。質問者の技術が向上するような回答ができるようになれば本物である。
トレンド技術を理解しプロジェクトにあった技術を選べる
ソフトウェアの技術はどんどん変わる。トレンドをしっかり追って、その上でプロジェクトにあった技術を選ぶことができればプロジェクトが成功する可能性は上がるだろう。
既存のコードを読んで理解できる
オープンソースにコントリビュートしたいとき、どれくらいの時間がかかるだろうか?コードを読んで理解し、自分がやりたいことを実装してPull Requestを出すまでに1日でできればスーパーエンジニアだ。なるべく短い時間でできたほうが技術力は高いと言えるだろう。
すごいエンジニアの未来
エンジニアとしてキャリアを積むとその先どうなるのか?
スペシャリストになる
会社員やフリーで、誰かが作りたいサービスを作るのがスペシャリストの仕事になる。規模が大きなプロジェクトだったり、スタートアップでスピードが大切だったりすれば十分な報酬をもらいながら仕事ができるだろう。
マネージャーになる
会社で出世するとマネージャーになったり人を監督する立場になることがある。マネージャーになるとたまにコードレビューをすることはあるかもしれないが、コードを書く時間は減って、チームの士気を高めてプロジェクトを成功させることが仕事になる。
自分が作りたいサービスを作る
自分で開発ができてアイディアがあれば、サービスを自分で作ることができる。個人開発のままでも、軌道に乗ったら人を雇うのもいいだろう。より大きなサービスにしていくには社長になって従業員を雇うなどマネジメント能力や経営力も必要になる。
サービスをスケールさせないのであれば個人での開発だけでも十分かもしれない。
すごくないエンジニア
すごいエンジニアがどんな人かを考えるために、逆にすごくないエンジニアについても考えてみる。
思い描いた機能を実装できない
ソフトウェアエンジニアとして思い描いた機能を実現する能力は最低限必要だ。他の人の要望の場合はそれが実現可能かどうかを判断する能力も必要である。
今のチームで実現が難しいのか、技術的に不可能なのかもちゃんと見分けられないと一人前とは言えないだろう。
誰もその人と話したくないエンジニア
チーム開発をする上で最低限のコミュニケーションは必要になる。メッセージの返信が一週間後だったり、話すたびにモチベーションが下がる人とは誰も話したくない。働く上で仕事仲間が気持ちよくコミュニケーションできる程度のコミュニケーション能力がないとすごくないエンジニアだ。
誰もメンテナンスできないコードを書く
プログラミングをしていると、自分が一ヶ月前に書いたコードがさっぱりわからなくなることがある。誰が呼んでもやっていることを理解しメンテナンスできる状態に仕上げる能力は必須だ。
見積もりが検討外れ
一日でできると思った機能追加が一ヶ月経っても終わらないエンジニアはダメエンジニアだ。見積もりを正確に行うことは難しいが、全くの検討外れではどうしようもない。ある程度は正確に見積もれないとすごいエンジニアとは言えないだろう。
終わりに
ソフトウェアエンジニアとして働く上でどんな人がすごいソフトウェアエンジニアなのか簡単に考えてみた。あとから思いついたことや気づいたことがあれば加筆したり修正することもあるかもしれない。
すごいエンジニアや自分が将来なりたい像を想像するのは難しいが、なんとなくでも考えておくと少しずつ理想形が見えてくるのではないかと思う。近くに自分が尊敬できる人がいれば、その人の尊敬できる部分を盗んでいくのが良いだろう。
Comments