小学校のプログラミング教育の目的が、プログラマーの育成ではないことは承知しているが、それでもプログラマーやSE(システムエンジニア)の仕事を知っておくことは無意味ではあるまい。
なぜなら、生徒のなかの何名かはプログラマーになりたいと思うかもしれないし、また中にはプログラミングに関して天才的な能力を発揮する子供がいるかもしれないからである。
そこで、日本におけるプログラマーやSE(システムエンジニア)の仕事を紹介しておこうと思うのだが、最初に知っておいて頂きたいことがある。
それは、IT業界には大きく2つのドメイン(領域)があるということである。
一つは、エンタープライズ系と呼ばれる業界であり、いま一つはWeb系と呼ばれる業界である。(そのほかに、組み込み系などの分類(仕事の領域)があるが、ここでは割愛する)
エンタープライズ系とは、主に企業の基幹システムを構築する仕事であり、ITベンダーと呼ばれるメーカー(IBMやユニシス、富士通、日立、NEC、東芝など)が主に請負でシステムを開発する。企業の基幹システムとは、例えば銀行のシステムや証券会社のシステム、小売業のPOSシステム、会計システムや給与システム、人事システムなどである。
銀行のATMから入出金や振替を行うためのシステム、証券会社で株を売買するシステム、などを思い浮かべて頂ければよい。
一方のWeb系は、例えばスマホのアプリやゲームソフトなどを思い浮かべて頂きたい。
私はエンタープライズ系の経験しかないので、Web系については書籍から得た情報を紹介したいと思う。エンタープライズ系におけるプログラマーやSEの仕事は、工業製品を開発するのに似ている。
できるだけ標準化を図ることを心掛け、ドキュメントも決められたものをきっちりと作成しなければならない。個人の創造力や独自性を発揮する場面は少ない。アイデアや創造力を求められるのは主に上流工程であり、下流工程である詳細設計や製造工程(プログラミングやテストの段階)では、(誰が作っても同じになるくらい)規約や標準に従って作ることが求められる。
没個性的であるが、これはプログラムを保守していくうえで重要なことである。
エンタープライズ系では新しい技術を導入することに対して慎重である。Web系の人たちからみると非常に保守的に映るだろう。
しかしこれには訳がある。多くの基幹系システムでは、システムの開発スピードよりも、正確性と堅牢性が求められる。
例えば、ATMからお金を引き出している最中に回線障害が発生したとする。ATMからまだお金が引き出せていないのに、口座情報では引き落としが完了していたとしたら客は怒るだろう。
証券会社のシステムで誤って株を発注してしまったとき、取り消しが全くできないと企業に大きな損害が発生する(このような事故は実際に起きている)。
このように、処理の正確さと障害に対する堅牢さ(トランザクション処理の保証)は必須の要件である。であるから、採用する技術も枯れたもの(長く使われることでソフトウェアのバグがなくなっているもの)を採用する傾向にある。
新しい技術を導入する場合でも、事前の調査、検証はもとより、ベンダーの技術サポートが受けられるか、などが慎重に吟味される。
エンタープライズ系の企業で仕事をするときの問題点は、プログラマーよりもSEの方が上にみられてきたことと、多重下請け問題があることである。
多重下請けとは、IT業界がベンダーを頂点にして、1次下請け企業、2次下請け企業、・・・とピラミッド型の階層構造になっていることである(建設業などでもほぼ同じ構造がみられる)。
この構造でシステム開発の仕事をする場合、ベンダーは主にプロジェクト管理や上流工程を担当し、実際のモノづくり(プログラム開発やテスト)は下請け企業が担当するケースがほとんどである。
一般的に賃金も下請けの下部構造にいくほど安くなる(悪く言えば、管理費用という名目で上部構造がピンハネしている)。
このような業界構造も影響して、プログラマーよりもSE、SEよりもプロジェクトマネージャーの方が職種も賃金も上ということになってしまった。従って、キャリアパスも(多くの場合)プログラマー → SE → プロジェクトマネージャ、というようになっている。実際にプログラムを開発し、テストするプログラマーがいなければ物事は何も進まないわけだから、ある意味これはおかしな話である。
もうひとつエンタープライズ系の特徴として、巨大なプロジェクトが多いということがあげられる。
大きなプロジェクトでは、SEやプログラマーを大量に集めなければならない。人を大量に集めれば、そこにはベテランだけでなく新入社員と同等レベルの人も沢山さんくることになる。(プロフェッショナルなベテランだけを集めるなんてことはほぼ不可能だ)
そういうこともあって、プログラム開発は工業製品のようにできるだけ標準化を推し進めなければならない。そうでなくては、出来の良いプログラムと、素人が作ったようなプログラムが混在して、品質を保てなくなる。
次にネット系のプログラマーを紹介していく。参考にしたのは、「文系でも知っておきたいプログラミングとプログラマーのこと」(清水亮 ダイヤモンド社)という書籍である。
この本で描かれているプログラマーは、おそらくネット系のプログラマーであり、且つ、プロフェッショナル意識の高い職業プログラマーである。
職業プログラマーのファッションとして、短パンやクロックス(crocs)のサンダルなどが、イラストを交えて面白おかしく紹介されている。エンタープライズ系ではこのようなファッションは見かけない。また、職業プログラマーと呼ばれるような人もごく少数だと思う(少なくともベンダーにはほとんどいない)。
この書籍でもエンタープライズ系のSEが少しだけ登場するが、誤解されている部分が少なからずある。
Web系のプログラマーと、エンタープライズ系のプログラマーとの違いを端的に表したのが以下の文章だろう。
「プログラミングとは”まったく新しい何か”を作り出す行為なのです」
ここには、クリエーターとしての要素が多くあるように感じる。エンタープライズ系では先ほど紹介したように、(特に下流工程では)クリエーター的要素はあまりない。
プログラマーに関する以下の文章は著者の思い入れも含んでいると思われる。
「プログラマーとは職業を意味する言葉ではありません。・・・・プログラマーは生き様のひとつです。プログラミングという現代の魔法に魅了された人々をプログラマーと呼ぶのです」
プログラミングが好きで、クリエイティブな仕事をしたいと思っている人を称してプログラマーだといっている。
しかしこのような熱意とスキルを持った人がそんなに沢山いるわけではない。この点はエンタープライズ系と同じようだ。
「世の中には無数のプログラマーがいますが、その大半は優秀でないプログラマーです」
本書には、プログラマーの性格や気質に関しての記述があるが、少々誇張し過ぎているように思う。
「プログラマーという人種はなんて気難しい人たちなんだろう」
「人嫌いなのかと思ったら、たまに話をしたそうにこっちを見てくる」
「プログラマーの生態を知って上手にコミュニケーションを取ることが重要です」
「プログラマーが働く時間は圧倒的に夜です」
本書ではエンタープライズ系のSE(システムエンジニア)についても記載されている箇所があるので、その点も紹介しておく。
「デスマーチを本気で恐れているのはSEの方です。SEがデスマーチに陥りがちなのは、彼らが担当するシステムが、まさに銀行や病院といった”基幹システム”であるからで、”きちんと終わらせなければならない”という宿命を背負っているからです。しかも本業によって十分な資金があるため、いつまでたっても終わらないのです」
本業によって資金があるのはユーザ企業(この例でいえば銀行)であって、それを請け負っているベンダーは請け負った金額のなかでシステムを完成させなければならないから十分な資金などない。(さらに付け加えるなら、昨今はマイナス金利政策の影響で銀行をはじめ金融機関は資金的に厳しくなっている)
またデスマーチに陥る原因は「十分な資金があるため」ではない。
多くの場合、要求仕様の一部が未確定であったり、曖昧だったり、要求仕様の間に矛盾があったりするからである。
そしてその責任は、ユーザ企業の側にあるケースと、ベンダー側にあるケースとがあり、最近は訴訟にまで発展するケースが少なからず存在する。
「職業プログラマーは三度の飯よりプログラミングが好きでないと続けられないのに対し、SEはアフター5やプライベートも充実させたまま仕事として続けられる」
これもかなり誇張された表現のように思われる。エンタープライズ系のSEであっても一般的に残業や休出が多い。
実際、IT業界はながらく新3K(「きつい、帰れない、厳しい」または「きつい、給料が安い、帰れない」)といわれ就職では敬遠される傾向にあった。
以上、エンタープライズ系とWeb系のプログラマー、SEの仕事を紹介してみたが、少々マイナス面を強調し過ぎたかもしれない。
プラス面ももちろんある。例えば、自分たちが作ったシステムが世の中の役に立っているという達成感を実感できるとか、常に新しい技術を習得するために向上心を持っていられる、・・・など。
しかし、プログラミングを教えるのであれば、良い面ばかりでなく、この業界には負の側面もあることを認識しておいた方が良いと思う。
|
ディスカッション
コメント一覧
まだ、コメントがありません