2018年10月22日

プログラミング言語について

世の中には、数え切れないほどのプログラミング言語が溢れている。
初心者におすすめの言語はあれど、最終的にはどれを覚えてもいいし、だいたい3,4言語をしっかり使い込むと、以後どんな言語でもそんなに掛からずに取り組めるようになる。
(個人的にはpythonあたりから入って、余裕があればCを覚えてほしい感がある)

それは置いておいて。
プログラミング言語を選ぶとき、何を基準に選ぶだろうか?

最終的にプログラミングの結果は、過程はどうあれ機械語に翻訳されて実行される。であるならばどんな言語を使っても過程はどうあれ最終的には同じ結果を実現できるはずである。なのに世の中にはプログラミング言語が溢れている。

数ある中で何が人を引きつけ、選ばせるのだろうか?理由はいくつかある。
一つは、言語そのものの機能だ。
これがないとその系統の言語でなければ実現できない・大変に面倒くさいというものがある。例えばC言語が未だに使われる理由である、生のメモリを扱えるポインタ。これがなければハードウェア的なことできない。またクリティカルなタイミングのためにアセンブリ言語。一部他のと被るが、CGや、仮想マシン上で動作させる必要があるなどもあるだろう。

一つは文法と支援だ。
最終的には機械語になるとしても、途中過程は人間が書く。人間はミスをする。C言語で書かれたプログラムに危険なバグが多く、アセンブリは言うまでもないのはそのへんの支援が薄いからだ。人間の振る舞いに制約を書けるのも支援、適当にしてもうまく書けるようにするのも支援。PythonやRust、Javaといった言語が広まったのはこの辺の効果がある。
※なんかjavascriptはこのへんワチャワチャしてるよね。

一つは豊富なライブラリ、そしてその支援システムだ。
コードの再利用性が高く、ライブラリが揃っていれば書く量が少なくて済む。バグも少なくなる。使っているユーザーが多ければ不具合が見つかりやすく直されやすい。
なにより、初心者が適当に書いてもわりといい感じの成果物が出来上がる。
かつてPerlとCPANが流行り、今はPythonとPipや、Javascript(node)とnpmなんかが流行る理由はこの辺もある。

最後に、環境・ランタイムの利点と制約だ。
おそらくだが、最終的な一番の理由はこれなのではないかと思う。
例えばiPhoneアプリを開発するにはSwiftかObject-Cしか使えない。Androidアプリならjavaか、Kotorinかを覚えないと細かいところがさわれない。ブラウザ上で動作させるならjavascriptしか使えない(頑張ればCも使えるけど)。マルチプラットフォームに対応させようと思うとjavaが楽。Unityで使うならC#(昔はjavascriptも使えた)。FlashAir上で動作させるならLuaしかない。

どこで、なにがしたいか。そのために何が使えるか...ではなく何を使わなければならないか。逆に言えば、環境での制約がないのなら何を使ってもいい。で、制約がない状態でどれを選ぶかと言われれば、現在活発的なユーザーと資料が多いものがいい
そして、実現したいものがなるべく楽で簡単にできるものがいい

最後のが重要で、逆に実現したいものがなるべく簡単で楽にできる環境を選ぶべきである。

自分にとってCが手に馴染んでいて、C以外使いたくないなら、Cで実現できる環境を選んで使えばいいし、なるべくコードを書きたくないなら、最先端のコード不要でほとんどのことができる、ユーザーの多い環境(Unityとか)を選んで、必要最低限のコードだけ書けばいい。

あと最後に。
よく勘違いしやすいし、環境上の制約でそうならざるを得ない場合もあるのだが、忘れないでほしいのは一つの言語ですべてを賄う必要はないということ。不得意なところは別の言語に投げてもいい。(ただしその分覚えることは増えるが)

例えば、UIはHTML+javascript、機械学習はpython、演算処理はC、プラグインはLuaのように。というもの、それらもまた結局、不得意なところ(大抵は速度面)は別の言語(たいていC)の成果物に投げている事が多い。

一つの言語を使っているように錯覚しても、DLLを使えば、最終的にはCに戻ってこれる。
(javascriptとかだとあまり頼ること少ないかも知れないけれど)
Cを学習するのが無駄にならないのは、これが理由の一つだ。
posted by gpsnmeajp at 17:22| Comment(0) | TrackBack(0) | プログラム
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/184742035
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック