この記事は過去の個人ブログからの移転記事です。
はじめに
西尾 泰和さんによって出版された、コーディングを支える技術を読んで考えたこと。
この本では、コーディングにおける数多の記法に対して、それ以前にあった問題とそれ以降に何が解決したのかを、歴史と具体例と共に纏めている。
以下は、あくまで本の内容に触発されて構成された持論です。
プログラミング言語と構文
プログラマの中で、構文とプログラミング言語は密接に結びついていることがある。
しかし、これはある意味ではとても危ういことでもある。
なぜなら、現存しているプログラミング言語は、制約の中で数多の記法の一部をある時点での言語仕様として採用しているに過ぎないから。
これからも同じだとは限らないし、最近の言語はドラスティックな変更が言語仕様に加えられることも多い。
確かに、特定のプログラミング言語の構文を通じて、プログラマはあらゆる問題の解決方法のサブセットを利用する。
けれど、それは決して全てではないし、同じ問題に対しての解決方法が1つとも限らない。
現存しているプログラミング言語が1つではない事も、それを表しているように思う。
そしておそらく、これからもそうなる事は無いだろうという事は経験から推測できる。
プログラミング言語はツール、それも進化する
例えるならば、プログラミング言語はそれぞれ目的を持ったツールであり、使い方も異なれば、壊れもするし廃れもする。
ただし、作られて消費されていくだけのツールではなく、改善されもすれば、進化していくツールでもある。
だからきっとプログラミング言語が変わり続けることだけは、これからも変わらない。
変わる知識と変わらない知識
では、プログラマに求められることは何か。
プログラマには、もちろんプログラミング言語を適切に使って、問題解決を行う事が求められる。
しかし、それが日々変わっていくとしたらどうなるだろう。
冗談ではなく、本当にそうなっている気さえしているのは自分だけではないと思う。
最近でもEcma Script 2017がリリースされ、Java 9のリリースも控えている。
やはり、より俯瞰的な視点を持ち問題解決に当たる事が求められる。
そのために何をすべきかということに答えることは、容易なことではない。
それこそ、答えは人によって異なる。
ただ一つの回答として、特定のプログラミング言語に縛られない知識を持つことはその助けになる。
そうすれば少なくとも、1つの言語と心中することにはならない。
第2言語を学んだことからの経験則
現在、第2言語としてJSを学習している。
それによって例えばスコープや、リテラル、関数と言ったものについての考え方は、大きく変わった。
JSで関数を書いていくことで、それと並行してJavaのStream APIに対する理解もより進んだ。
異なる言語を比較しつつ身につける事は、既存の知識を強化することにもつながる。
それに、最初のプログラミング言語を学ぶことに比べたら、はるかにマシだった。
コーディングを支える技術には、数多くの言語によるサンプルコードが掲載されている。
その種類はJava, JavaScript, Perl, Python, Ruby, アセンブリ言語まで幅広い。
ちょうど第2言語を学ぼうと思っている人へは、副読本としてもお勧めできる。
プログラミング言語を選択することについて
個人的には、プログラミング言語を選択することには慎重になるべきだけれど、選り好みするべきではないと考えている。
それよりも重要なことは、少なくとも1つの言語に精通することだと思う。
それによって、今後言語を選択する基準ができる。
また、案外求められていることは、基本的にどんな言語でも実装できるってことがだんだんわかってくる。
ただ、生産性に影響を与えることは確実なため、そういう意味で、慎重になるべきだはと思う。
言語の中でのプログラミングと、言語の中へのプログラミング
少しコンテキストが異なるけれど、プログラミング言語を選択することについては、スティーブマコネルも自著の中で触れている。
この場合は開発に利用すべき言語を選択することについてだが、重要なコンセプトが書かれている。
それは言語の中でのプログラミングと言語の中へのプログラミングを区別する事の重要性についてだ。
身近な言葉で言うなら、道具に使われるな、道具を使え。ということになる。
嬉しいことにプログラマは道具(プログラミング言語)を使って道具(関数やクラスやモジュール、フレームワークなど)を作れる。
関連する情報について
コードコンプリート第2版 上 の第4章の中で、プログラミング言語の選択についてと題された箇所がある。
これは、コーディングを支える技術で語られているコンセプトを、開発に置けるよりマクロな視点から語られたものであり、参照することをおすすめする。
最後に
長々と持論を書いたけれど、コーディングを支える技術は良い本だと思ったってのが動機だった。
出版されたのが2013年と少し古い本だけれど、その内容自体が廃れないものについてのために、古さを感じることはなかった。
ただ、もしこの本が今書かれていたとしたら、例えば関数型プログラミングについても、取り上げられていただろうなとかは思う。
しかしそれでも、プログラミングについて、言語に縛られない視点を持つことを助けてくれることに関しては、変わらない。
少しでも言語オタクじみたところがあったり、第2言語を学ぼうと思っている人へなら、ぜひオススメしたい本だった。