システムエンジニアに必要なスキル

システムエンジニアの役割は要件定義・設計・実装まで及ぶ為、多種多様のスキルが求められます。
それらのスキルは「技術力」「コミュニケーション能力」「論理的思考能力」の3つに分類して考える事ができます。

技術力

ソフトウェア開発では最終的にプログラム(ソースコード)を記述しなくてはアプリケーションが完成しません。
また、プログラミング言語を習得しているだけでは不十分であり、周辺技術(データベース・フレームワークミドルウェアなど)に関する知識もなければ設計を行えません。
要件定義の段階でも技術力がなければ実現可能かどうかの判断もできません。
また、技術力は継続して勉強しなくてはならなりません。
ソフトウェア業界では技術が日進月歩で進んでおり、今年トレンドであった技術が数年後には既に過去のものとなっている事も珍しい事ではありません。
常に業界の動向に気を配り、新しい事にチャレンジしていなければ技術力は相対的に低下していくのです。


技術力だけしかないSEでは問題があるという話はよく耳にします。
これは間違っていないのですが、技術力がないSEと技術力だけしかないSEを選ぶとしたならば後者の方が重宝されるのは言うまでもないことでしょう。
技術力のないSEはそれだけで罪です。

コミュニケーション能力

ソフトウェア業界ではアプリケーションを開発するのはです。
開発の規模は大きいものもあれば小さいものもありますが、1人で開発することはありません。
開発を行うグループはチームと呼ばれ、お互いに協力しながら1つのアプリケーションを開発します。
したがって、人とのコミュニケーションは避けて通れません。


ここで言うコミュニケーション能力とはチーム内で仲良くやれるか、という意味ではありません。
当然ながら仲良く(楽しく気持ちよく)仕事を行えれば良いのですが、チームは仲良しグループとは異なります。
その目的はアプリケーションを開発することであり、時には人間として嫌いな人とチームを組む事もあります。
ところが、本当に優秀な人とチームを組んだならば、相手の人間性はコミュニケーションの弊害にはなりません。
むしろ、人間性はとても好感の持てる好きな人であっても、仕事では同じチームにはなりたくない人も存在します。
勿論、チームでもチーム外でも上手くやれればベストですが、より重要なのはチームの中で上手くやれる能力です。


開発チームで必要なコミュニケーションと言っても様々な事があります。
それは技術的なコミュニケーションであったり、スケジュールなどの非技術的なコミュニケーションであったりします。
しかし、開発に必要なコミュニケーションに限るのであれば、どれだけ無礼な言い回しで馬鹿にしたような態度で言われたとしても、相手に伝わるかどうかが重要なのです。
リーダーが致命的な設計ミスを犯していたとして、人間関係にヒビを入れたくないという理由で誰もそれを正そうとしないよりは、無礼な言い方であってもそれを指摘して修正する方が良いのです。
勿論、そこで気持ちよく相手に伝えられる事、ミスを指摘するのはタブーである空気を作らない事も重要です。
つまり、コミュニケーション能力とは開発チームの中で意思疎通を行う能力です。

論理的思考能力

論理的思考は近年、ロジカルシンキングと呼ばれる形で話題になっているスキルです。
論理的に考えるという事だけで反射的に拒否反応を起こしてしまう人もいるようですが、システムエンジニアにとって論理的思考は最も重要で基本的なスキルと考えることができます。
物事を論理的に考えることができないと、プログラミング言語の習得であっても「書けるけどよく理解できていない」状態となります。
すると、同じような作業を繰り返し行う事はできるのですが、ちょっとした応用であっても対応することができません。
また、論理的な考えができないと、「なにが解らないのか自分でも理解できず、相手にも伝えることができない」事になります。
これではコミュニケーションにより意思疎通できるはずがありません(相手がエスパーであれば、自分がなにを理解できていないのかを推測できるかもしれません)。


この論理的思考能力は天才が持つ特殊な能力ではなく、訓練によって確実に習得できるスキルです。
論理的に解決することは難しくとも、論理的に考えることは難しい事ではありません。
しかし、簡単に身に付くものではなく習得には長い時間と努力が必要になります。
もし、論理的に考えたくないのであるならば、システムエンジニアは向いていないと言わざるを得ません。
論理的に考えるということがシステムエンジニアの仕事です。