【義務教育でプログラミング必須化ショック!】最も普及しているjavaのもつ3つの秘密からわかるIT業界の歴史
javaは今、一番利用されているプログラミング言語です。
とはいえ、javaはプログラミング言語としての歴史はそれほど長くありません。
それこそ、javaは消える言語だ、といわれていた時期もありました。
しかし、なぜ、javaがここまで利用されるようになったのでしょうか。
java 人気の秘密をjavaの3つの特徴から解き明かしていきます。
javaエンジニアがどれだけ他のITエンジニアに比べて優位性が高いか、実感してください。
異なるシステム間で動く
まず、java登場にはそれなりに理由があります。
まずはその原因とそしてその結果としてjavaが誕生した経緯を述べます。
結果としてjavaが備わったメリットとデメリットを
・顧客側とプログラマ側に共通するメリット
・顧客側メリット
・プログラマ側メリット・デメリット
をそれぞれ紹介します。
Java誕生前夜
1960年代、初期のシステム開発はハードウェアを作っている会社=ハードウェア・ベンダーが提供するコンピュータシステムごとにプログラミング言語やデータベースが異なっていました。使う人とコンピュータのやりとりもアセンブラと呼ばれる言語でした。この言語はコンピュータの記憶領域にアドレスをつけて、値を保存し、アドレスを指定して値を取り出したり、四則演算程度の簡単な演算ができる程度でした。研究者たちだけが使っていたため汎用性を考える必要がなかったんです。
しかし、徐々に研究もすすんでくると使う人が増えてきました。しかし、当時のプログラミング言語はパンチで穴をあけて動きを確認する必要があったため、量産するには程遠い仕様でした。
60年代初頭IBMは商用システムを販売し始めました。導入する会社がまだまだ少ないですが、多くの人がそれぞれ同じような処理をするプログラムをそれぞれ個別につくるのは非効率です。
共通する処理や言語をといういつする動きがでてきました。
そこで、UNIXという誰でも使える基本ソフトウェアといわれるOSが登場しました。そのOS専用に開発されたCという言語が浸透しはじめたのが1970年代にはいってからでした。
しかし、まだまだ普及が進んでいないため、依然として各社ベンダーごとに仕様が異なるプラットフォームと言語でシステムとデータの共有ができませんでした。1980年代に基本ソフトウェアOSの開発が多くされてきた。その中でmicrosoftがUNIXを改良したパーソナル仕様の基本ソフトとなるms-dosをIBM社PCに搭載し、各ベンダーに配布するライセンス方式で発売を開始しています。
このころにはC言語は汎用性が高いとされ、最も普及したプログラミング言語となっていました。C言語はANSI規格があり、各社はその仕様に沿ってそれぞれのシステムに適応させてカスタマイズできました。しかし、アセンブラの名残もあり、直接記憶領域を操作する仕様もそのまま残存しているが故に多くの問題を引き起こしています。その中の一つに、初心者には非常に難しく、それがためにC言語習得を挫折する人が多くでてしまっています。
Java誕生
過去のプログラミング言語はその管理が難しいことから大規模システム開発には不向きでした。そして、直接記憶領域を操作できる融通の高さから多くの不具合とトラブルを引き起こしました。
これらの失敗を克服するための仕様が盛り込まれたプログラミング言語です。
共通するメリット
多様なシステムに載るプログラミング言語であり、異なるプラットフォームで動くことから、多様なニーズに一貫して応えることができます。そのため、以下のシステムをつくることができる言語です。
・WEBサービス開発
・業務システム開発(WEB、PC双方)
・PCアプリ開発
・Androidアプリ開発
javaでシステムを導入する顧客への2つのメリット
・基幹システムに強い
基幹システムとは企業の中枢機能ともいえる機能をもっている。例えば、販売系の会社であれば、販売管理、在庫管理、経理、財務、法務、人事など、それぞれ会社の部門ごとにお金、もの、時間、人の管理システムものが必要になります。また、製造業ではものをつくるため、資材管理、入出庫管理、生産管理というものがあります。
過去動いていた言語は小さい数値の演算で誤差が生じていました。そのため、金額計算や生産管理における非常に小さな数値演算に誤差が生じにくい仕様になっています。
・セキュリティに強い
前述のとおり、アセンブラの名残もあり、直接記憶領域を操作する仕様もそのまま残存していました。そして、この仕様が今でも根深い問題を引き起こしています。
記憶領域を直接操作するため、システムとして不安定になる状況をつくれば、タイミングによって出現する不具合がでます。このような経緯からUNIXからの既存システム不具合も多く、未だに修正されていないため、過去のOSをベースに作成されたシステムはその脆弱性を攻撃され、情報が漏えいで社会的信用にかかわる自体がおきています。また、家電製品や自動車にも搭載されているため、人命にかかわる事故にもつながっていることもありました。
その反省があり、javaは直接記憶領域を動かす機能がなくしました。そして、外部アクセスを明確にコントロールできる仕様にとなったのです。
javaプログラマの2つのメリット
・いろんなシステム開発の経験が積める
上述のように、様々なシステムで動くため、javaエンジニアということで、他の業種や新しいサービスの立ち上げ時にかかわるなど、様々なスキルアップのチャンスに恵まれます。
また、AndroidはLinuxベースのシステムですから、基底部分はCやC++という言語で記述されています。これらの言語での不具合もjava側で吸収することができます。
・処理が難しいアルゴリズムや通信のライブラリが豊富
様々な開発工数を削減するフレームワークが数多く存在します。また、データベースや通信モジュールのライブラリが存在しているため、開発コストが低く抑えられます。そして、様々なシステムで稼働して検証されたライブラリは不具合が発見されやすいです。そのため深刻な不具合は早期段階で修正されいるため、安定した稼働が見込めます。
プログラマの2つのデメリット
・初心者には技術的に難しい
結局、『オブジェクト指向』にのっとった設計力がないとjavaの強みを発揮したプログラミングができません。オブジェクト指向設計をマスターしているのは比較的若い世代が多いです。
この『オブジェクト指向設計』は『構造化設計』と比較して習得が難しいため、熟練エンジニアの設計スタイルを習得しずらいため、技術継承が行われにくいという現象がおこってしまっています。
製造業が経験した3DCAD導入による技術の空洞化が『オブジェクト指向設計』でソフトウェアにもおこっているといえます。
過去のプログラミング言語の「反省」
なぜ、炎上プロジェクトが多発したのでしょうか。
プログラミング言語の『管理が難しい』、『オブジェクト指向』という意味を深堀りします。
過去の言語は「管理」が難しかった
元々、少数人数でのシステム開発をしており、互いによく知っていた内容である場合はおこならいことです。
が、大規模開発の場合、多くの人が参画します。
互いに情報共有するには不向きだったといえます。
たくさんのプログラムから同じ共通の関数を読む場合、いったいどのプログラムと関係しているのか把握するのが非常に難しくなります。
そのため、単独でプログラムでデバックをしてしまった場合、不具合を修正したがために他のプログラムで不具合を招くことも多々ありました。
では、同じ処理を分割して記述することにした場合、修正したこの場所で別の不具合が出た場合、修正する箇所が増えるため修正し忘れという問題も発生してきます。
開発工数を削減する言語仕様~オブジェクト指向の導入
オブジェクト指向によるシステム開発は、全プログラムに共通する処理を洗い出し、それを一つのクラスにまとめます。
そして、変更されない箇所と頻繁に変更される箇所を洗い出します。
そして変更される箇所についてプログラムを記述する言語です。
従って同じ処理を何度も書くことがなくなるため、開発工数が削減されます。
また、変更される箇所が特定されているため、プログラムの記述に個人差が出る場所が特定されるため不具合の特定がしやすくなります。
過去の「いいところ」も残している
幅広いシステムに対応するためには、その仕様に合わせることができなければ対応できません。
特に、プログラムで用いる『変数の型』でシステムの記憶領域がどれだけ占有されるかが決まります。
組込システムと呼ばれるシステムは一次記憶領域が小さいため、巨大な領域をとるとプログラムが動きが悪くなり、
下手すると動かないがために事故を起こしてしまうこともあります。
そのため、過去利用されていた多様な変数の型を継承しています。
時代の「変化」を抱擁する
多様なシステム要件にこらえられる言語としてjavaは技術革新をし続けています。
これだけ対応した言語はjavaを置いてほかにはないでしょう。
オブジェクト指向を用いた設計で共通して使うことのできるデザインパターンを考案したケント・ベック氏は「変化を抱擁せよ」という名言を残しています。
これは生物学者「ダーウィン」は著書「種の起源」で「生き残ることのできる生物の種族は最も優れた生態能力を持った種族ではなく環境の変化に対応できる種族である」にも通じるものがあります。
勿論、javaはAIや機械学習といったライブラリが少ないです。
javaだけではなく、あなたが生き残るためにはあなた自身もjava以外の言語を習得するという変化を抱擁する必要もあるといえます。
javaは一番「求人」が多い
案件数が圧倒的に多いのがjavaです。
既存の基幹システムのリプレースはjavaを用いていることが多いため、今後も継続的に仕事があることが見込めます。
また、Android がjavaを採用していることから、Android javaを用いたアプリケーションやミドルウェア開発案件は今後も安定してあるといえます。
javaエンジニアの単価・年収の比較
FindJobやstandbyでの単価はあまり高くありません。
これは案件数も多く、すでにjavaエンジニアが多いためといえます。
paizaによると経験言語ランキング(3年以上の経験)はjavaエンジニアがトップです。
http://www.find-job.net/income/skill-3-33/
https://jp.stanby.com/media/programming_ranking/
しかし、大規模システムで多く使われているjavaは統率できるプロジェクトマネージャがまだまだ不足しています。
そのため、careercoverなど高額求人サイトではプロジェクトマネージャクラスの年収は1000万円を超えるものが多く存在しています。
Android javaエンジニアは在宅ワークができる-「東京」に住む必要がない
最近、多くなってきている在宅ワーク。
javaの大規模開発では在宅はできませんが、Android Java案件であれば在宅ワークを実現します。
実際、crowdworksでは数多くの案件が提供されています。
まとめ
javaエンジニアになると、あなたの「夢」は叶いやすくなる
同じエンジニアでもjavaエンジニアは身の振り先が多いのは事実です。
あなたのエンジニア・キャリアに『javaエンジニア』を選択肢に入れることの優位性を選択肢にあることの将来性を理解していただき、一人でも多く『java使い(エンジニア)』を目指してください。
しかし、processingという開発環境も用い改善は試みてはいるもののjavaはAIや機械学習といった技術にキャッチアップができていないです。
後継の候補としてはRuby、Pythonといった言語が有望視されています。javaに固執せず、あなた自身が変化に対応することを心にとめておいてください。
javaエンジニアとしてのキャリアからエンジニアとしてのキャリアを常に考え、幸せなエンジニアライフをおくってください。
トラックバックURL
https://aiefumi.wp-x.jp/2017/03/06/%e3%80%90%e7%be%a9%e5%8b%99%e6%95%99%e8%82%b2%e3%81%a7%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e5%bf%85%e9%a0%88%e5%8c%96%e3%82%b7%e3%83%a7%e3%83%83%e3%82%af%ef%bc%81%e3%80%91/trackback/