システムエンジニア(SE)ってどんな職業?
「システムエンジニア:SE」という職業は日本固有種らしい。
「SEとは」で調べてみると「要求仕様や基本設計などの上流工程を行う」のような定義が散見される。そして、詳細設計・コーディングなど開発プロセスの下流工程はプログラマのお仕事なのだそうだ。
「未経験者がプログラマからスキルアップしてSEを目指す」なんて言葉もみられる。
コンピューターと言えば汎用機やミニコンだったころ、疑似言語風の文章やなんちゃらチャートで表現された設計書の内容(というより関数そのものだが)を、人海戦術でプログラミング言語に翻訳、紙のコーディングシートにコードを手書きしていた。カードにパンチする。なんて工程もあった。
PC上でテキストエディタでコードを作り、電子データとして磁気媒体に保存できるようになっても、しばらく設計とコーディングを分けていたようである。
この場合、確かに設計までの作業と、後者(コーダー)の作業の質は違っていると言えよう。
コーダーの視野は狭い、ソフトウェアが何を成すのかを意識しなくてもよい。コーダーの力量は、プログラミング言語の理解と変換スピード、書き上げたコード量で測られていた。(本当にそうなのか?まあ、いいや)
SEとプログラマの分類はこのあたりに起源がありそうだ。
「コーダー」のイメージを「プログラマ」という言葉に引き継がせ、低い職能として定着させてしまったらしい。結果、「プログラマ」の定義が海外での定義と大きく乖離しているように思う。
それぞれのスキルに制限をかける職能分離が、多重請負などの業界商習慣の歪み要因の1つになっているように感じる。
ライブラリやミドルウェア、フレームワーク、プラットフォームは高機能化し、プログラミング言語の抽象度がどんどん上がっている。
現在のコード1行はかつての言語の数百・数千行にも匹敵するかもしれない。
アジャイル開発プロセスへも対応しなければならない。仕様策定・設計とプログラミングの担当を分けるようなことをしていては非効率極まりない。
とうにSEとプログラマの区別をつける仕事の仕方など通用しなくなっていると思わないだろうか。
(ちなみに、社会インフラを支えるような大規模・複雑・ミッションクリティカルなど特殊なシステムは例外にさせてほしい。
このようなシステムは、伝統的なウォーターフォールプロセスなどを適用し、上流・下流と働きを分けた方がいいこともあるかもしれない。)
今、日本独自の「SE」がどのようなものなのか、自分は答えを持たない。輪郭がハッキリ見えない。
しかし、この業界にはSEの立場を利用しコードを書きたがらない・書けない者が、ユーザーとプログラマの間に「エンジニア」の肩書をもって存在している。「エンジニア」なんですか?と首をひねるようなタスクしかこなさなくてもである。
多重請負構造のプロジェクトであれば、プログラマの何倍も層をなしていることも珍しくないだろう。
彼らの生産性は果たしてどれぐらいなのか、海外より低いと言われている生産性に少なからず関係しているのではないか。
コードを書いた人間は常に失敗のリスクを背負う。
書いた人間が特定できないような仕事はない。不具合を作りこめば必ず作った人が特定され失敗の理由・原因を追究される。
SEとして中間層にいる者には、このコードを書くことをかたくなに拒み。徹底的にリスク回避しようとする者も少なくない。
海外では、IT業界やコンピューターサイエンスで結果を残そうとする人ほど、積極的にコードを書いている印象だ。
そもそもコンピューターサイエンスの学位や実務経験など、プログラマという職につくためのハードルも高い。
比べて日本はどうだったろうか、コードを理解すること・書くことを避けてきた者が、この業界の技術部門の中枢にいるのなら笑えない冗談でしかない。
まだ、駆け出しだったころ、UNIXを開発したケン・トンプソンが「自分の職業はプログラマです」と自己紹介していることを知る。
彼に遠く及ばないが、自分も「プログラマのはしくれです」と自己紹介するようにしている。
この記事が気に入ったらサポートをしてみませんか?