言語は集中的に学ぶべき? 満遍なく学ぶべき? 楽をすべき? 苦労をすべき?
言語は道具であるっていうか、武器である。
毎日磨いていないとすぐ鈍ってしまうが、例え錆び付いてしまっても研ぎ直せばまた使えるようになる。
また、武器には得手不得手がある。
優劣にこだわり、剣や斧、槍や弓、あるいは槌を比べてどうこう言うのはナンセンス。 *1
そう、武器なんだから好きな武器を持って戦場に赴けばいい。
ただ、他の武器を使ったことがないと不利になることもある。もっと楽に戦える筈なのに、苦労している可能性がある。
鎖帷子に刃物で立ち向かったり、板金鎧に長剣で斬りつけていないかい? 重いハンマーを持って素早い相手を殴ろうとしていないかい?
鎖帷子には棍棒のような殴打できる武器が有効の筈だし、素早い相手なら適当に振っても当たるような武器を使うべきで、そんな考える事が有利に働く戦場の中でいつまでも槍ばかり使っている人は近接したときの短剣の威力を知らないし、鎧の隙間から突き刺して使えることの有効性を知らない。
また、刃物を使ったことがない人は、優れた刀剣でも何も考えずに使い続ければ血脂ですぐに切れなくなってしまう事を知らないし、普通の弓を使っている人は弩弓は鎧を貫くほどの威力を持つが弓を引くのに足を使って全力で引かなければならず、矢のセットに時間がかかるのを知らない。
……とかいうと、酷く抽象的な話になりますが、自分が使わない道具だとしてもある程度性質を知ることが自分を広げるということをうまく言い表したい。
敵を知って、己を知れば、百戦危うからずや。
GC(ガベコレ)が当たり前の言語ばかりを使っているとリソース管理という意識を持つことが難しいし、恐らく数値(アドレス)を伴ったメモリ上にそれが存在しているという意識が希薄なように感じている。
まぁ、C言語のようにいちいちアドレスを意識して組まなければならない、なんてことを避けるための言語なのだから当たり前なのだけれど、メモリを本当の意味で知らずにいることは参照/解放(生成はともかく)のイメージができないという事に他ならない。
動的言語ばかりだと、型という意識が薄く、静的言語を扱った時、どんな型を受け取って良いかわからない、どんな型を返したらわからない、そもそも型ってなに?
みたいなことになりかねない。(ってか実際にある)
暗黙の型変換になれすぎていて、型の事を本当に考えられない。
そういう意味では、やっぱりオーソドックスにC/C++→Java/C#→Perl/PHP/Ruby/Pythonとか学んでいくと良いのかなと思った。
ちょうど良い加減で知識が身につくのではないかや?
プログラマが苦労しないように、とか、ある程度スキルがなくても要員として使えるように、というような意味合いで言語はどんどん楽になっていくんだけど、
楽に組ませる事を目的にしている言語は暗黙的安寧を提供するのでプログラマスキルを低下させることに繋がっているように感じるなぁ。
言語制約が自由になるのなら、よりスキルを必要とするわけで。
Javaは「よくわからない人にいらんことをさせない」ことができるけど、動的言語はそうはいかないのであるからして。
答えは風に舞っているのでありまする。
*1:でも、人類は優劣に拘るようにできているのでそれはそれで仕方がない