最近は、IT系の人とかSEじゃなくてもプログラミング言語を学習する人が増えてる気がする。私の友人にも何人かいる。「今、Python勉強してるで」みたいな。
プログラミング学習サービスが沢山登場して学習のハードルが下がってきたこともあるし、サービスを作りたいと考える人が増えたからなのだと思う。で、はじめの一歩としてプログラミング言語を勉強する、というわけだ。
私はプログラミング言語の勉強はまったく否定しないどころか良い事だと思っている。少なくとも何かの言語を一通りやってみることは重要だ。どの言語にも共通する考え方を学ぶことができるからだ。
しかし、特定の言語(例えばPython)だけを一通り学習すれば、サービスが作れるようになるか。もちろん答えはNOである。プログラミング言語を知っているだけでは不十分なのだ。
かく言う私がそうだった。大学院時代にC言語の教科書を一通り学習した後にWebサービスを作ろうと思ったが、全くわからなかった。サービスを作る上で必要なことを理解していなかったからだ。
プログラミング言語を理解するよりもずっと大切なこと、それはアーキテクチャの本質を理解することである。ズバリ言ってしまうと、アーキテクチャの本質とは入出力、データ、加工方法、この3つ。これだけ。システム風な言葉としては、それぞれ、インターフェース、データベース、ビジネスロジックなどと言う。
簡素なWebシステムでさえ、インターフェースはブラウザなので、htmlやphpが使われるし、データベースを扱うためにはsqlが必要、そしてビジネスロジックでCとかJavaとかPythonとかを使う。
Androidアプリも同じ。私が過去に作った簡単なやつでも、アプリの画面はxml、データベースはsql、ビジネスロジックはJavaと3種類は必要だった。結論から言うと、1つの言語で今風のサービスを作ることなんてできないということ。(もちろん、C言語だけで画面もデータベースの仕組みも作れることは作れるけれど、コード量が膨大になって保守性も悪いのでもはやできないと考えた方が良い。)
もっと言えば、それらを動かすために必要なミドルウェアとかフレームワークも理解する必要がある。
私の場合は、「Webサービスの作り方」的な本を買って勉強して、始めてこのアーキテクチャを理解した。だから、いきなり言語の本を買うよりも、「チャットサービスの作り方」とか「作って覚えるゲームプログラミング」的な本を目的に応じて選んだ方がサービスを構成する全体像が見えて良い。