ソフトウェアエンジニアに必要なこと

ユキ先輩、良いソフトウェアエンジニアになるためには、どんな能力が必要なんでしょうか。やっぱり「コミュニケーション能力」ですか?
そうねぇ、「コミュニケーション能力」も大事だけど、ちょっと本質的じゃないわね。
え、そうなんですか!?

「コミュニケーション能力」が重要?

どのような人にソフトウェアエンジニアの適性があるかというのは、よく聞かれる話です。例えば、次のような人が向いているといわれます。

  • コミュニケーション能力がある人
  • 学習意欲が高い人

何も間違ってはいませんが、こういう意見はあまり本質をとらえているとはいえないでしょう。なぜなら、コミュニケーションしなくていい仕事なんて、ほとんどありません。コミュニケーションや学習は、なにも「ソフトウェアエンジニアだから必要」というわけではないからです。

そっか。コミュニケーションが重要なのは、僕たちに限った話じゃないですね。

本当に必要な能力とは

では、ソフトウェアエンジニアにとって本当に必要な能力とは何でしょう?それは、設計力実装力(コーディング技術)です。

一見当たり前のことを言っているようですが、それぞれの能力をもう少し噛み砕いて言うと、以下のようになるでしょう。ソフトウェア開発に携わる以上、これらの能力は欠かせません。

  • 設計力:全体を俯瞰して大雑把に把握する力
  • 実装力:細部までキッチリと作り上げる力

うーん。こう説明されると、なんだかこの2つは相反する能力のように見えますけど……。
そのとおりよ。大切なのは、状況に応じて2つの能力のバランスをとることなの。

大雑把にしかできない人は、たくさんのバグに悩まされることになるでしょう。細部しか見ていない人は、筋の通った作り方がなかなかできません。

そのため、2つの能力はどちらも必要で、バランスをとることが重要なのです。

とはいえ、ここでやっかいな問題が1つあります。それは、「体力を使えばプログラムは完成する」という事実です。高度な設計や明確なコーディングができなくても、実は体力だけでなんとかなってしまうことも多いんですよね。

なかには、残業代さえもらえれば構わないという人もいるかもしれません。でも、体力勝負ばかりでは、予定通りに開発を進めることは難しいでしょう。たとえ納期に間に合ったとしても、品質はグチャグチャかもしれません。

ここがポイント!
ソフトウェアエンジニアには、設計力と実装力のバランスをとることが大切です。

体力勝負だけで作り上げたプログラムは、自分でもよく理解できていないことが多いものです。あとから修正や機能追加をしなければならなくなったときに初めて「この作り方ではダメだ」と気付く人もいるでしょう。

でも、うまくバランスをとるには、どうしたらいいんでしょうか?
それには、メンテナンスを最優先に考えて設計や実装を行うといいわよ。