プログラマとシステムエンジニアは根本的に業務が異なります。

業務が異なるので当然キャリアパスも違ってくるのですが、全く分離されている訳ではなくコーダーから繋がっています。

システムエンジニアはプログラマーを経験していた方が良いです。
業務内容が異なるという事は求められるスキルが違ってくる訳で、自分のキャリアパスを描く上で必要なスキルを知っておく必要があります。
本記事ではPGとSEで求められるスキルについて紹介します。
プログラマに求められるスキルとは
プログラマに求められる事とは、ズバリ「仕様書通りにシステムを動作させる」事です!
この求められている事を極めていく事がプログラマに求められるスキルになります。
極めていく方向性はQCDで考えるとわかりやすいと思います。
- Q=品質
- C=コスト
- D=納期
「より良く」「より安く」「より早く」
この3点の方向にプログラム能力を高めていく事が大切になります。
システム設計スキル
プログラマーとして高みを目指すのならシステム設計スキルは必須です。
システム設計はシステム全体の良し悪しを決定付けてしまう重要な要素です。
チーム全体の生産性、品質、保守性、拡張性・・・
これらシステムの将来を決めてしまうくらい重要です。
プログラマーとして高みに行けば行くほど、チーム全体、システム全体の行く末を決めてしまう程に重要な役割を担います。
アルゴリズム化スキル
アルゴリズム化スキルと言葉は多分無いと思います。勝手につくりました。
複雑な仕組みやルールも瞬時にアルゴリズム化出来る能力はプログラマに求められるスキルです。
ユーザーやSEは仕様書に記載されている内容を全て形にしてもらえると信じています。プログラマからすると時には無理難題が記載されている事があります。その期待にどれだけ応えられるのか?もプログラマーとして求められるスキルの一つと言えます。
みんなが無理と言うものをパパパッと仕上げてしまうプログラマーってカッコいいですよね。
とはいえ、なんでも「はいはい」と言うのはダメです。無理なら無理と言うスキルも求められます。
デバッグスキル
プログラマーにとってデバッグのスキルは必要不可欠です。

その重要性はコチラでも記載していますが、本当にデバッグ出来ないプログラマーに出会います。
デバッグを知らないと言う事はアルゴリズムが作れないと同義です。
プログラマーの仕事はコードを書いて終了ではありません。当然ミスもありますしデバッグが付いて回ります。そして、自分の書いたコードだけではなく他人が書いたコードのデバッグをする必要も出てきます。
直しているつもりが被害を拡大させる。それはチーム全体の効率も落ちますし、利用者に迷惑をかけています。プログラミング能力を磨きたければデバッグ能力を身に着けるのが近道です。
言語スキル
プログラミングをする上で言語はもちろん必須です。
言語仕様を知った上でその機能をフルで活用する事が重要です。知っていると知らないでは全然生産性が変わってきます。
ダメなプログラマーは何でもかんでも自分で作ろうとするプログラマーです。賢いプログラマーは機能をフル活用してコードの量を減らします。コード量が減るという事が品質が上がるのと同義です。
こういった品質、生産性の観点からも言語に精通している事を求められています。
システムエンジニア
システムエンジニアに求められる事とは、ズバリ「利用者の望むシステムを利用者に届ける」事です!
システムエンジニアは顧客の要望をシステム化する事が役割となります。要するにシステムの仕様を策定し、利用者に届ける事がシステムエンジニアの仕事になります。
予算の中でどこまで利用者を満足させる事が出来るか?どこまで利用者の望むシステムにする事が出来るか?を極めていく事がシステムエンジニアの求められるスキルとなります。
スケジュール管理スキル
プロジェクトは限られた予算の中で進行していきます。プロジェクトを進めるにあたり様々なリソースに予算を割り当てていく事になりますが、システム開発において一番大きな割合を占めるのは人的リソースですよね。
その最大に予算が割り当てられる事になる人的資源をどれだけ効率よく最大化した作業をしてもらうか?が一つ大きなスキルになってきます。
スケジュールをしっかりと管理出来るスキルが必要です。
要件定義スキル
利用者の望むものを届けるために、ちゃんとヒアリング出来るスキルは必須です。
ヒアリング能力はお客様の言っている事を「聞く」ではなく「聴く」能力です。
利用者が言っている事を理解して、本質を見つける能力が求められます。
利用者の望む真の姿はは利用者が気が付いていない事がほとんどです。
「こんなのが欲しい!」と言ってもよーーーーく話を聴くうちに全く違うものが必要だったケースがほとんどです。その本質を探れるのスキルが求められます。
提案スキル
伝える能力です。
先ほども言いましたが利用者が欲しいと思っているものの真の姿に利用者自身が気が付いていない事がほとんどです。
その本質を探し当てるまでは出来たとしても、なぜそうなのか?をシッカリと伝える事が出来なければ何の意味もありません。
しっかりと論理立って、かつ熱意のある提案と言うものが必要になってきます。
プロジェクトマネージメントスキル
利用者にシステムを届ける。それはプロジェクトを継続的に成功させる事ができてこそです。「継続的に」がポイントとなります。やはり、利用者にとって一番うれしい事は利用しているシステムが継続的に成長していく、タイムリーに望むものがリリースされる事です。
プロジェクトを継続的にするためには成功し続ける事が重要な要素となります。成功し続けるためには当然プロジェクト管理能力が必要となってきます。
プロジェクト管理能力が低いとこんなトラブルを起こしてしまいます。

共通
プログラマーとシステムエンジニアは業務が異り、キャリアパスも異なります。しかし、非常に似通った部分も多く共通的なスキルもあります。
お互いの仕事の境界線にあるものだったりするものです。この共通するスキルがあるからこそ、システムエンジニアはプログラマから実践しておくと良いに繋がります。
機能設計スキル
機能設計はシステムエンジニアだけが必要なスキルと言う訳ではありません。
当然、プログラマが勝手に機能設計をする訳にはいきませんが、実際に動作する物を一番最初に振れるのはプログラマです。動作検証をしながら「ん?」と言った疑問を感じて、システムエンジニアに報告する事も良いシステムを作る為には必要なスキルになります。
工数見積もりスキル
工数の見積はシステムエンジニア、プログラマー当然の事ながら当たり前に必要なスキルになります。
作業にどれくらい日数がかかるのかを見積もる能力は必須です。
テスト設計スキル
テスト設計も当然の事ながらプログラマー、システムエンジニア問わず必要なスキルとなります。
担当する工程でのテスト設計スキルが求められますが、品質担保の観点からテストに対してのスキル、知識は必要となります。
まとめ
どうですか?
こうしてみると道を極める為に数々のスキルを身に着け磨く必要がある事がわかります。
ただ一見複雑で難しく感じますが、役割と求められる事をしっかりと把握しておけば大丈夫です。
コメント