綺麗に死ぬITエンジニア

2つ以上のプログラミング言語を習得することの重要性

2016-01-18

私がこれまで出会ったプログラマー達は、その殆どが複数のプログラミング言語をある程度のレベルまで習得していました。また、そういった人物の方がITに関する理解が深く、何よりもITそのものを愛していた人が多いように思います。

今回は、複数のプログラミング言語を習得することのメリットや重要性を記したいと思います。

言語によって学べる領域が違う

現在広く使われているプログラミング言語には大きく分けて、「手続き型」と「オブジェクト指向」と「関数型」の3つがあります。学術的にはそれ以外も多くあり、中にはこの3つのうち複数の特徴を組み合わせた言語もあり、また今後他の特徴を備えた言語が流行する可能性がありますが、現在メジャーな考え方としてはこの3つがあります。

それぞれ、手続き型はC言語、オブジェクト指向はJava、関数型はLISPが代表的です。

まず、この3種類の言語を学習することによって得られる知識は、それぞれ違ったものになります。言語ごとに共通した機能があったり、共通して使える考え方があったりするため、すべてがすべて新しい知識になるというわけではありませんが、それぞれの言語における特有の概念は学習してみないとなかなか得られるものではありません。

また、メモリーの操作やシステムコールなど、よりハードウェアやOSよりの部分を学びたい場合はCやアセンブラ、逆に例えば大規模Webアプリの拡張性の高い実装の仕方など、よりプログラミングの手法や概念的な部分を学びたい場合はJavaやPHPなどと、言語によりそれ以外の特徴も様々です。

最近では、より高品質のシステムを開発するために、テスト駆動開発と呼ばれる手法も一般的になってきましたが、それぞれの言語ごとに、すでにノウハウが蓄積されていたりモジュールが用意されていたり、有利不利があったりします。

こういったそれぞれの言語の特徴を学んでいく上で、ハードウェアやシステムの深い部分について考える機会があったり、より効率的にプログラムを記述するための手法について考える機会が多くあります。「この言語はあの言語と違って、メモリーの操作ができる代わりにきちんと管理しなきゃいけないんだ!」とか、「あの言語だったらこうすれば効率的に書けたけど、この言語だとそれ以外のこういう方法で効率化できるんだ!」などという発見が、自身のITの知識をより深いものにしてくれます。

特定の言語で得た知識を活かす

もちろん、それらの経験で得た知識は、様々な場所で役立てることができます。全く別の言語で、システム全体のアーキテクチャーを決めるときに役立つこともあります。

そして、他の言語を知ることでその言語の長所・短所が見えてきますから、1つの言語しか知らない人に比べて、より要件に沿ったシステム開発を効率的にできるようになります。

また、関数型言語はプログラミングをやる上で必要な論理的な考え方をより必要とすることから、他の言語においてもプログラミングに対するセンスが良くなると言われています。

どれも1つの言語の学習だけでは得られない、他者との差別化を図れるスキルばかりです。

複数言語を学ぶことは難しいことではない

とはいえ、1つの言語を習得するのですら大変なのだから、複数言語を習得するのなんて絶対無理!と思われる方がいるかもしれません。しかし、心配は無用です。やる気さえあれば、なんとかなります。

1つの言語をマスターすれば、あとは変数や関数だったり、if文やfor文であったり、基本的な制御文の考え方は似通っているので、どの言語でも文法こそ違えど比較的簡単に使えます。いきなりでも数分でそこそこは使えるようになるはずです。あとは、必要に応じてその言語特有の機能や概念についての学習を、やる気と相談してやればいいのです。

1つの言語を完璧にマスターしていれば、他の言語を学習するとき、そのマスターした言語との差から興味が湧いてくることが多く、大体やる気が出てきます。

まずは、他の言語の入門書や入門サイトを読んで実際に使ってみることが大事です。

まとめ

いろいろな言語を知るという行為そのものが、プログラム設計や情報技術そのものに対する勉強になり、システム設計についてより幅広い考え方を持てるようになります。そしてそれは即ち、自分を他の技術者よりもより優れた存在にしてくれるということです。

多くの言語を習得することのメリットは、「多くの言語を書けるようになる」ということももちろんありますが、それよりも「多くの言語の概念や考え方を、いろいろな場所で活用できるようになる」というのが大きいと思います。

私もまだまだ知らない言語が多いので、もっともっと勉強して、精進していこうと思います。