IT業界の進歩は早すぎ--とあるプログラマーのつぶやき

## はじめに ##

この記事はIT業界に入ろうと思う人にこの業界の難しさ、よほど覚悟がない限りIT業界に入らない方がいい理由を説明します。
長い間にこの業界に働いている人にとってはただの愚痴かもしれませんが、ご意見をいただければ感謝いたします。

私はプログラマーです。これから10年目に入ります。
次の一年間は知識面の拡張と止めて、古くて腐ったスキルを刷新、整理したいと思います。

## テクノロジー系 ##

### 開発言語 ###

   * Python 3.4 -> 3.8

    約1年前、私は「Python 3.4」より、Pythonの勉強を始めました。今でも勉強しつつ、「3.7」まで着きました。もうすぐ「3.8」のリリースの日が来ますが、追いついていこうと思います。

   * C++ 03 -> 20

   約9年前、私は「C++ 03」より、C++の勉強をしました。来年にC++20がリリースになるので、契機として勉強し直します。

   * C# 2.0 -> 8.0

   約9年前、私は「C# 2.0」より、C#の勉強をし、いくつかのプロジェクトに参加しました。今でもC#が一番得意な言語と思っていました。今の最新版は「8.0」で、ニュースで来年に「.NET 5」もリリースだそうです。「一番得意」ということばを名実相伴えるように勉強します。

   * J2SE 5.0 -> Java SE 13

   約6年前、私は「J2SE 5.0」より、Javaの勉強をはじめました。数年間のプロジェクト経験、Oracle Java SE 8 Gold資格まで取得しました。しかし、今の最新版は「Java SE 13」でした。追いつくことは難しい。かといって、やめることもいけません。時間がある時に勉強します。

   * ECMAScript 5 -> ECMAScript 2019 (ECMAScript 10)

   約6年前、私は「ECMAScript 5」より、Javascriptの勉強をしました。今の最新版は「ECMAScript 2019(ECMAScript 10)」でした。これから時間がある時に勉強します。
   Javascriptの特別なところは近年フレームワークがたくさん作られました。自分はjQueryだけがよく知っていますが、「bootstrap」のような総合てきなもの、「angularjs」や「react」などブラウザ側のフレームワークが流行っているようです。ウェブプロジェクトに参加しましたが、メインはサーバ側とは言え、フロントエンドの知識が少ないのは恥ずかしい。どこかで時間を作って勉強しようと思います。

   * bash 4.2 -> 5.0

   今年、私は「bash 4.2」より、bashの作り方を勉強しました。残念ながら、今はすでに「5.0」になっています。さすがに追いつかないので、もうちょっと時間を経てから勉強しましょう。

   * PowerShell 5.0 -> 7.0

   今年、「PowerShell 5.0」より、PowerShellを勉強しました。しかし、今年中「PowerShell 7.0」をリリースの情報がありました。これから時間がある時に勉強します。

   * VBA 11.0 -> 16.0

   約7年前、「VBA 11.0(Excel 2003)」を勉強しました。今の最新版は「VBA 16.0(Excel 2019)」になっています。とは言え、Pythonで同等の機能ができるので、切り捨てます。

   * VB6 -> サポート終了

   約10年前、「VB6」を勉強しました。2008年にマイクロソフトはサポート終了したので、今後はもう使う道がないと思います。切り捨てます。

   * Visual Basic .NET (7.0) -> Visual Basic 2017 (15.8)

   約8年前、私は「Visual Basic .NET (7.0)」を勉強しました。今の最新版は「Visual Basic 2017 (15.8)」になっています。これからVB.NETのプロジェクトにもあると思いますが、興味がないので切り捨てます。

   * C 89 -> 17

   約10年前、大学時代で「C 89」を勉強しました。今の最新版は「C 17」になっています。組み込みシステムの開発はもうしないと思います。切り捨てます。

   * Delphi 6 -> Delphi 10.3 Rio

   約3年前、とあるプロジェクトのために「Delphi 6」を勉強しました。今の最新版は「Delphi 10.3 Rio」になっています。興味がないので切り捨てます。

### プラットフォーム ###


   * Windows 95 -> Windows 10

   Windowsは仕事に常に使われるので、特に刷新の必要はありません。

   * Radhat Linux / CentOs 6.5 -> Radhat Linux / CentOs 7.5

   今年のプロジェクトで使用したので、最新版を勉強しました。もうちょっと拡張してLPIC2まで勉強しようと思います。

   * Android 4 -> Android 10

   約6年前、「Android 4」の開発を勉強しました。しかし、今の「Android 10」とは全く別物と言えます。一から勉強になるでしょう。個人にとって優先度はやや低めなので、後回しにします。

### ミドルウェア ###

   * django 2.2 -> django 3.0

   今年、趣味としてdjangoを勉強しています。「django 3.0」のpreview版は既に存在なので、これからリリースとなるでしょう。その時にまた勉強しようと思います。

   * nginx 0.8 -> nginx 1.16

   約6年前、「nginx 0.8」の開発を勉強しました。その後は放置しました。今の最新版「nginx 1.16」と何が変わったかさえわかりません。時間があったら確認します。

   * Tomcat 6 -> Tomcat 9

   約7年前、「Tomcat 6」のプロジェクトに参加したことがあります。3年前、とある「Tomcat 7」のプロジェクトに参加して、試験用サーバの管理担当になりました。技術があると言われるため、わからないといけないと思って、ソースコードを読みました。深いところまで理解したと思っていた。今「Tomcat 9」と結構変わるみたいので、これから時間がある時に勉強します。

   * Apache HTTP Server 2.2 -> Apache HTTP Server 2.4

   約7年前、「Apache HTTP Server 2.2」のプロジェクトに参加しました。知識が不足なので、設定ファイルは全然わかりませんでした。最近サーバ設定の勉強を進めんでいて、「Apache HTTP Server 2.4」の設定は必須になっています。どこかのタイミングで勉強しようと思います。

   * .Net Core 1.0 -> .Net Core 3.0

   約3年前、「.Net Core 1.0」の開発を勉強しました。来年「.NET 5」がリリースので、それと同時に勉強しようと思います。

### データベース ###

   * Oracle Database 11g -> Oracle Database 19c

   約5年前、「Oracle Database 11g」の複数のプロジェクトに参加して、今まで使っています。よく使われるから、知識が足りないと笑われるかもと思って、今年に「ORACLE MASTER Gold Oracle Database 12c」を取得しました。ところで、最新版は「19c」になってしまい、さらに勉強しないといけないと思います。

   * SQL Server 2008 R2 -> SQL Server 2019

   約8年前、「SQL Server 2008 R2」の複数のプロジェクトに参加したことがあります。3年ぐらいの使用歴があって、DBの構造やロックの仕組みやインデックスの速さなど、個人的には十分だと思っていた。最近の数年間は使っていません。ニュースを見ると、もう「SQL Server 2019」になっています。根本的な変更があるそうで、一から勉強になるでしょう。マイクロソフトの認定資格もあるので、勉強の道しるべとして進めようと思います。

   * PostgreSql 9.0 -> 11

   約7年前、「PostgreSql 9.0」を勉強したことがあります。その時はSQLのSCURDはできますが、サーバ管理はまったくできません。最近「PostgreSql 11」はリリースしました。ちゅうとVirtualBoxでLinuxサーバの作り方が知ったので、きちんと勉強しようと思います。

   * MySql 5.5 -> MySql 8.0

   約6年前、「MySql 5.5」を使用するプロジェクトに参加したことがあります。最近の数年間は使ってません。検索してみたら最新版は「MySql 8.0」になっています。時間があるときにこれも抑えておこうと思います。

### その他 ###

   * OpenCV 3.0 -> OpenCV 4.1

   今年趣味で「OpenCV 3.0」の勉強を始めました。もともと知識不足なので、バージョン差分を含めて一から勉強しようと思います。

   * TensorFlow 1.0 -> TensorFlow 1.13

   TensorFlowが公表した時に勉強をはじめましたが、いろいろあってながなが進みませんでした。
   今度こそ何とかしないと、と思いながら、「DNN、CNN、RNN」って何みたいな基本のところからスタートします。

   * UML 1.5 -> UML 2.5.1

   個人的には最新のUMLは複雑すぎて、プログラミング言語みたいになっています。様子を見って考えようと思います。

* 数学

   大学時代に高等数学、線形代数、統計学のセットを2年間学びました。社会人になった以来、使う場面がながながないからだんだん忘れ去ってしまいました。
   最近人工知能に興味があり、数式を使うたびにその重要性を痛感しました。未来を向けに、思い出せるように勉強しようと思います。

* セキュリティ

   最近、ウィルスやワームの話はほとんどありませんでした。代わりに、ランサムウェアがよくニュースになります。
   つまり、昔学んだセキュリティ対策はもう足りない。IPAのサイトは最新セキュリティニュースと対策があります。
   そして、情報処理安全確保支援士試験を参加して、系統的に勉強した方がいいかもしれません。

## マネジメント系、ストラテジー系 ##

3年前、応用情報技術試験(AP)のために、知識勉強をしました。内容は以下のIPAサイトで細かく記載されています。
[IPA 試験要綱・シラバスなど](https://www.jitec.ipa.go.jp/1_04hanni_sukiru/_index_hanni_skill.html)

変更履歴を見ると、AP合格時点と比べて結構変わりました。
今後のキャリアを考えて、差分だけではなく、もっと詳しく勉強する必要があります。
情報技術者試験のプロジェクトマネージャー、ITストラテジストも取って置きたい。

## 終わりに ##

ここまで読む方に感謝いたします。IT業界の平均給料は全業界平均より多いですが、その分難しさも平均より上回るかと思います。「35才定年説」はこの難しさに負ける人のことだと思います。これを知って、それでもやりたいと思われる方であれば、きっとこの難しさを乗り越えて活躍できるでしょう。