土日も作業することになった。
単価は高いが、厳しい仕事がおおいのが現状だ。
では、なぜ日本人のスマートフォンアプリエンジニアが増えないのかを自分なりに考えてみた。
業務アプリなどに関わってきた人が、いきなりスマートフォンや、モダンWebに鞍替えするのは、かなり厳しいと思っている。
経験者ほど、頭の切り替えが大変だと思う。
過去、MVC(Model-View-Controller)などのアーキテクチャが30年ぐらい前に登場した。
その頃から採用されているMVCが主に使用されるケースは、
現在では、Spring Bootなどが残っているが、ASP.NETや、Struts、Seasar2などはほぼ消滅した。
MVCは、画面ベースで開発していくので、データベースのRequestやResponseを、脇において開発ができる。
ただし、複雑化しているスマートフォンアプリや、昨今のWebなどでは、使われない。
主に、MVVMアーキテクチャが最も使われている。
MVVMアーキテクチャ(M(Model)-V(View)-VM(ViewModel))では、
画面構築はV、画面に対する状態管理はVM、その他のロジックはMが受け持つ。
これは昨今のWebやスマートフォンアプリと相性がいい。
最近の言語が導入している「宣言的プログラミング」についても触れておこう。
特にUIにおいては宣言的プログラミング(宣言的UI)が使われるが、
従来の操作的プログラミングと比較し、単純な計算を行うコードをKotlinで書いて比べてみる。
ロジックは、0から100までの数の中で偶数だけの総和を求めるというあまり使い道のないものだ。
従来の操作的プログラミング
var result: Int = 0
for (i in 0.. 100) {
if (i % 2 == 0) {
result += i
}
}
くるくるとループさせて、0から100まで、条件判定して値を足していく。
宣言的プログラミング
val result: Int = (0.. 100)
.filter { it % 2 == 0 }
.sum()
ループはなく、2で割る切れる数だけを抽出し、それを足している。
この例だと6行が3行になっただけだが、実際の複雑なロジックでは、
操作的プログラミングでは、コードがかなり長くなり、インデントも深くなり、
最後まで見ないと、何をしているのか分からない。
それに対し、宣言的プログラミングでは、filter()でifを無くし、.sum()で合計を求める宣言が行われている。
このとき、コンパイラがどのようなコンパイルをするかは、操作的プログラミングのように意識する必要がない。
このようなにすれば、10万回のforループなど、無駄なことはしなくていい。
このあたりが最近の言語との一番の違いだと思うが、
双方向バインディングを使えば、値が変化すれば、Viewもリアルタイムに変化する。
M(Model)-V(View)-VM(ViewModel)の連携は、
依存関係インジェクション(DI)を使うことで、シンプルに書ける。
このあたりを理解するのに、古い言語の長い経験が邪魔をしてしまう。
Guide to app architecture | Android Developers
これらは、出来た若い人は苦労しないが、未経験や、その他の経験から鞍替えしようとする人は苦労している。
ただし、誰かが時代に合わせて働かなければならない。
高齢者30%の日本なら、人口減少の補完のためにも、優秀な移民を受け入れ、納税者を増やし、人不足を解消してくれれば、もっといい国になると思う。
移民が増えても、失業率が上がることはない。時代のニーズにあったスキルがあれば心配はいらない。もし移民が増えれば、外国語を習うだけでも強みになる。
どうせ、どんどんと人種は混じるし、人口増大を続けるアフリカが存在感を増すことは紛れもない。
だれか、こんな割の合わない仕事をする人が増えてほしい。
I don't really care.