人生最後に学ぶプログラム言語とは？　(生涯給与３億円クラブに追いつきたい場合)

# 序　毎年、新しいプログラム言語を学んでますか？
javaアドベント・カレンダーの場をお借りしての、ポエムのお時間です。Javaは、数年前にAndroid案件で書いたことがあります。今どきのIDEの補完は偉大だね。
今日は、みんな大好き、どのプログラム言語を学ぶべきかというお話です。ただしアダルト（大人）版の。

さてさて、けっこうな年数を何かしらの言語でコードを書いている皆さん。当然のごとくJavaは学んだことかあり仕事でも書いたことがある、というか大抵Javaしか書かんといった方も多いのではないかと思われます。そんな皆さんは、どこかしこで言われているように、毎年新しい言語を学んでますか？
僕は毎年、中途半端に学んでいます。

しかし、たぶん、ですが、多くの皆さんにとって、年の数ほどに学ぶ価値のあるプログラム言語ってないのでは、と思います。特に、いい年したおっさんの場合、学ぶ価値がありそうなプログラム言語の数って、年の数の半分以下なのではと思われます。

Javaを学んだのは２３年前（JDK1.0の出た年）である私は、これまで、いくつの言語を学んだのだろうか？
私の場合、一応コードを書いたもので名前を覚えているものを列挙してみると:

```.py
>>> A="Basic,Z80,6809,C,C++,Object-Pascal,Java,Ruby,Perl,Scala,R,Go,Haskel,F#,Kotlin,Swift,Objective-C,Groovy,Python,Dart,Nim,Elm,Julia".split(",")
>>> len(A)
23
```
となる。覚えているものだけだと２３。あと数個はあるはずなので、年の数の半分は超えているかな。i386のアセンブラは挫折しましたが。あ、JavaScriptも書いていたのだった。。

さて、プログラミングスクールのSEOが効いてる昨今、『最初に学ぶべきプログラミング言語』の話はいくらでも目にするのだが、『人生最後に学ぶべきプログラム言語』の話はあまり目にしない（ボケ防止といった文脈で目にした事はあるが）。
ということで、誰かが書いてみるべきな気がする『人生最後に学ぶべきプログラム言語』、私の場合を書いておく。

我々は、長期的にはみな死んでいる（ケインズ）。ということで、数個プログラム言語を学んだくらいの方にも参考になるかも（...かなぁ？）。

人生後半とか最後とか言うと、年金経済学っぽいゼミで、赤ちゃんの多様性より、老人の多様性のほうがはるかに大きい、とか言うことを聞いたことを思い出される。大人の事情を抱えたりしている皆さんの人生はそれぞれだろうから、『人生最後に学ぶべきプログラム言語』はたぶん人それぞれ。


# 『人生最後に学ぶべきプログラム言語』、私の場合を無理やり三行で。
- 私は老後にあと数千万円は稼ぐ必要があるが、時間単価をあまり落としたくはない。
- ６０歳を超えても時間単価が良さそうなのは、プロマネか新人プログラミング教育の場。
- となるとJavaなのだが、Javaは老眼に辛そうなので、ほぼ互換であろうGroovy3.0をちきんと人生最後に学ぶプログラム言語としたい。

あくまで、2019年末時点での考え、ね。

## （付記）生涯給与３億円クラブに追いつきたいがために、もう一言語を学ぶ。
さて、私は、コードを書いてそれなりに稼いで、それなりに投資をして、老後を迎えたい。
それには定年まで務めた後に数千万円必要となる。

ということで、社会人としてコードを書くと、だいたいいくらくらい稼げるものなのだろうか？といったあたりの算段を少し書いておこう。

少し参考になる資料が以下の『生涯給料｢東京都トップ500社｣最新ランキング』だ。
https://toyokeizai.net/articles/-/313934?page=5
ずらずら並ぶ、名前は知っているであろう企業の中で注目していただきたいのは、生涯給料ジャスト３億円と推定されているＩＴ企業だ。キラキラなんたらのサイバーエージェント、英語公用語化がネタにされることが多い楽天といったあたり。
こうした企業に仮に新卒から定年まで勤め上げたくらいで正社員としての給与で３億円もらえる、と（...そんな人はごくごく少数だろうが）。フリーランスエンジニアで換算すると、その1+1/3倍である４億円を生涯で稼げればよし、といったところなのだろう。
私はそもそも新卒で就職してないし、途中でブラックな職場で壊れたりしているので、後半追い上げても正社員換算で2.5億円くらいしかいかない計算となる。すなわち、後、数千万円がほしいところ。

# なぜ、人生最後に学ぶのは《言語X》ではないのか？
## 人生最後に学ぶべきはrustでは？
私は社会人人生をおそらくscalaを書き続けて終えることとなる。
ScalaのようなJVM言語を学んでいると、時としてネイティブコンパイルできる言語がうらやましくなる。
特に現代風なrustは、なんかかっこよさそう。
...だが、下回りの言語であるrustを定年後のおっさんがガリガリ業務で書くのは、何か違う気がする。
（もちろん、そんなおっさんがいたらカッコいいが）
ということで、私の場合、年齢上の理由で却下。
あ、若い人はrustちゃんとやっておくと稼げると思うよ～

## 人生最後に学ぶべきはelmでは？
rustとは真逆と言えよう立ち位置のフロントエンド界隈言語elmにはかなり惹かれる。
（elmって何という人は、最初に[ここ](https://qiita.com/arowM/items/5ec5853298fc880353b7)を読むようにしよう。）
webフロントエンドに特化した分、記述は簡潔、そんな一方で自然に型安全に書ける。
elmなら認知症が迫りくる年になってもセキュリティ大丈夫なコードがかけそうな気がして、素晴らしい。
ただ、惜しいことに、ＵＸに弱い私の場合、定年後にelmで数千万円稼ぐ未来が見えなかった。
フロントエンドよりの若い方は、elmをきちんとやっておくと間違いなく幸せになれると思う。

## 人生最後に学ぶべきは...では？
その他flutterで存在感を取り戻したdartや、マイクロサービスの実務言語となったGoなどを実務で使えるようにする、といったものもありえようが、
老人向けではない気がするので、いったん却下。
ボケ防止にHaskell極めるとかいうのも、なんか寂しい気がしたので却下しておく。

# なぜ、人生最後にgroovy3.xを学ぼうと考えているのか？

さて、groovy3である。注目している人は少ないと思う。
何しろ、Alt-Javaとしてのgroovyの歴史は、他のJVM言語より長いため、groovy自体が、今更、あまり話題とならないためだ。

注目に値するのは、Scala/Kotlinをはじめとする他のJVM言語と決定的に違うのは、rubyばりのスクリプト言語である一方で、Javaとの表記上の互換性の高さである。
このあたりは、groovyを実務に使ってらっしゃるNTTテクノクロスさんの紹介記事を読んでもらえば良いだろう。
https://www.ntt-tx.co.jp/column/tec/java_01/
（...つまりは、Springベースのフレームワークで固く開発しますといった案件で、
開発生産性を上げるためにgroovyも併用しますといった提案が行いやすいといった意味合いがある。）

そんな古くからあるgroovyだが、Java8以降のJava自体の進化に対応したGroovy3.0がリリース間近である。...Java自体の言語仕様が大きいこともあってか、かなり長いこと間近のまま、だが。
http://groovy-lang.org/releasenotes/groovy-3.0.html

ちなみに、Javaのバージョン管理でSDKMAN入れてる人は、Groovy3.0のrcがすぐに試せるからね。


```
$ sdk list groovy

==== BROADCAST =================================================================
* 2019-12-08: Groovy 3.0.0-rc-2 released on SDKMAN! #groovylang
* 2019-12-06: Springboot 2.2.2.RELEASE released on SDKMAN! #springboot
* 2019-12-06: Springboot 2.1.11.RELEASE released on SDKMAN! #springboot
```
要するに、groovy3.0を学ぶと、今風のJavaのキャッチアップもできるということ。
Javaもrubyもscalaも学んだことがある者が、それらを合わせたようなgroovyを今更学び直すだと？
覇気のないこと、この上ない。

だが、そんな華麗でない選択が、加齢を考慮に入れた選択というもの。
人は忘れる。そして、だんだんボケていく。
そんなおっさんが化石にならないためには、教育言語としては有用であるJavaの１０年前、２０年前しか知らないようではいけない（私はandroid Javaを書いたのが最後なので １０年前のJavaであろうJava6相当の実務知識しかない）。


とはいえ、今更仕事でもないのに、Java8をとかいっても、あまり気が入らない。そんなおっさんの私でも、スクリプト言語として楽できるgroovy3ならば、そこそこ楽しんで学べるかな、と。

そう、まぁ、人生最後についての考えは、人それぞれであるとして、（というか、最後に学ぶ言語はプログラム言語でない人の方が多いか？）
わたしの場合、人生最後に学ぶプログラム言語もコスパで選ぶ、それがgroovy3だということである。今風のJavaに業務上触れられない人は、人生最後でなくてもいいからgroovy3を週末にでもちょっと学んで置くのが吉だと思うよ。

私のgroovy3学習記は、groovy3の正式リリース後に書くとしよう。

# 最後に。人生最後にプログラム言語を学ぶ使命感を書いておく。
最後に、人生最後もなぜプログラム言語を学ぶのか、だけ書いておこう（数千万円稼ぐだけなら、他の選択肢もあるだろうし）。
それは、プログラムを書く若い人に、なるべく早くにオブジェクト指向言語の勘所を伝えたいと思うから。わかりやすいところで言うと、[『現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法』](https://www.amazon.co.jp/dp/B073GSDBGT/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)に近いレベルをSIerの新人教育などの場で伝えておきたいと思うから。オブジェクト指向なきwater fall開発の現場で炎上して洪水に流されて去っていく若者をもう見たくないから、なんてね。
今はドメイン駆動設計を淡々と学ぶ我が身の、ちょっとした社会貢献ともなればいいなと思ったりして。

ということで、人生いろいろ。
おっさんもそうでない人も、年末年始は、来年学ぶプログラム言語、そして、人生最後に学ぶプログラム言語を考えてみよう。

ポエムの時間は、以上♪

---------------

...ぁあ，graalVMとnim1.0についても書く予定だったのだったが、出勤時間となったので、時間切れ。...SIer の世界でなくて、ゲーム業界とかに向けたお話。
graalVMについては、後ほど書いてリンクをここに貼ろう。。JVM資産が使えるgraalvmが活きるのは、低レベルながら簡潔な記述に特化したnimのような言語だと思うと、といったお話。
ちなみに、pythonでgraalvmは辛かった。。
実は、老後をゲーム＆eスポーツ業界で過ごして数千万円稼ぐのもいいかなとも思ったりしているんだけど、その場合、人生最後に学ぶことになるのはgraalvmと、nimかalt-pythonかな ;-)