


「コミュニケーション能力」が重要?
どのような人にソフトウェアエンジニアの適性があるかというのは、よく聞かれる話です。例えば、次のような人が向いているといわれます。
- コミュニケーション能力がある人
- 学習意欲が高い人
何も間違ってはいませんが、こういう意見はあまり本質をとらえているとはいえないでしょう。なぜなら、コミュニケーションしなくていい仕事なんて、ほとんどありません。コミュニケーションや学習は、なにも「ソフトウェアエンジニアだから必要」というわけではないからです。

本当に必要な能力とは
では、ソフトウェアエンジニアにとって本当に必要な能力とは何でしょう?それは、設計力と実装力(コーディング技術)です。
一見当たり前のことを言っているようですが、それぞれの能力をもう少し噛み砕いて言うと、以下のようになるでしょう。ソフトウェア開発に携わる以上、これらの能力は欠かせません。
- 設計力:全体を俯瞰して大雑把に把握する力
- 実装力:細部までキッチリと作り上げる力


大雑把にしかできない人は、たくさんのバグに悩まされることになるでしょう。細部しか見ていない人は、筋の通った作り方がなかなかできません。
そのため、2つの能力はどちらも必要で、バランスをとることが重要なのです。
とはいえ、ここでやっかいな問題が1つあります。それは、「体力を使えばプログラムは完成する」という事実です。高度な設計や明確なコーディングができなくても、実は体力だけでなんとかなってしまうことも多いんですよね。
なかには、残業代さえもらえれば構わないという人もいるかもしれません。でも、体力勝負ばかりでは、予定通りに開発を進めることは難しいでしょう。たとえ納期に間に合ったとしても、品質はグチャグチャかもしれません。

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

