未経験のプログラミング言語に慣れる再現性について考えた
ひとつの言語をある程度理解していれば他でも応用が効くというけど、その『ある程度』ってなんだろうと考えるなどした。
大体の人には母国語的な言語があって、新たな言語を習得する際の基準になっていると思う。私の場合はJavaとRubyが半々くらいで、他の言語に触れる際はだいたいこの2つとの類似点や相違点などを意識している。経験した言語が増えるほど、この類似点や相違点を照らし合わせる先が多くなるので習得コストは下がっていく。
難しいのが2つめの言語に触れるタイミングだと思っていて、母国語をベースにしていかに色々な要素を理解できているかで、第2プログラミング言語の習得難易度が大分変わってくる。初歩的なところで言えば繰り返しや条件分岐、配列やハッシュマップなどのデータ構造を理解してアルゴリズムを組み立てられるかだけど、他にも色々ありそうである。
ちょっと考えてみたものだとこのへん
言語によっては関わらないものもあるし、そもそも言語関係ないものも入ってる。あとWebアプリケーション開発に偏りすぎた。
- トランザクション
- O/Rマッパー
- パッケージ管理ツール
- ビルド/デプロイ
- ポインタ
- 高階関数
- スレッド/プロセス
- フレームワーク
- アプリケーションサーバ
- オブジェクト指向プログラミング
共通して言えることとして、今自分が扱ってるライブラリやツールがどういう目的で存在するものなのかを理解した上で使うことは大事そう。例えばRubyでRSpecを実行するときのbundle exec rspec
、このbundle exec
を『おまじない』と思って使っている人と、Bundlerが何なのかを理解して使っている人だと他の言語圏に移った時のスイッチングコストが大分変わるはず。
と、ここまで書いてから気付いたけど、純粋に使う言語だけが変わるケースって珍しくて、大抵は転職や部署異動だったり新規プロダクトを担当するなど、言語が変わると同時に他の要素もガラッと変わっていることが多い。だから尚の事難しさがあるんだと思った。
最近職場で新卒エンジニアの研修や教育を担当する機会が増えてきたので、こういった『意識せずに使っていると後々苦労する』系の事柄は教えられるようにしたい。