プログラミング言語最強はC/C++でいいじゃない

 C++言語は慣れると本当に最高な言語です。WindowsでもLinuxでも、他の言語と違って、アレが出来ない、これをやるには不向きだ、ということがありません。当たり前ですよね、C/C++がOSの基本なのですから(?)。以下、C/C++に対して腰が引けている人に対して伝えたいこと。

 

使いたくなるライブラリがC/C++で作られていることが多い

 これがC/C++を使う最も大きい動機の一つです。

 しかし、現在では用途や環境によって言語の使い分けをしたほうが効率よく目的を達成できるので、C/C++だけやっていても逆に効率が悪い場合もあります。

 この取捨選択が出来るようになるということは大前提です。

Web開発しかしないから(゚⊿゚)イラネ

 C++でもWeb開発ができます。PHP等でサービスを作るのと同様にC++でも出来るのです。古くはCGIなどを使う方法から、TreeFrogFramework等を用いることが出来、高速に動作します。また、PHPから外部処理としてC/C++等で処理を行うことが出来れば、スクリプト言語の制約を簡単に乗り越えられるケースも少なくないでしょう。しかし、PHPは優秀なのでちょっとしたWebサービスを作る際には重宝する言語であることは確かです。

スレッド処理と排他制御が難しいよ・・・(´・ω・`)

 それぐらい出来なくてなにがプログラマでしょうか。用意されているAPIを雑に使うだけではエレガントなソースコードにはならず、自分で書いたのに理解しづらいものになりがちですが、スレッドやミューテックスオブジェクトを動的に管理するようにラップをすれば良いのです。

 また、スレッドが難しいという初心者プログラマはじっくり勉強してない人が多いです。BoostC++ライブラリなどの充実によって、スレッドの扱いも昔に比べて格段に簡単になりつつあります。しかし、Boostをもってしても自分でスレッド関連オブジェクトの動的な管理をしないと、エレガントにはなりません。

ポインタが難しいよ・・・(´・ω・`)

 今どきポインタがどうのこうので初学者を悩ませるアホなテキストは確かに無くなるべきですが、ポインタの挙動やポインタに関わるC/C++の言語仕様をちゃんと把握しておくことは最重要です。なぜなら、たまにポインタの奇妙な記述を使ってソースを書く人が居り、そのようなソースを読むこともあるかも知れないからです。しかし自分が書く時はそのような書き方はしないで下さい。参照渡しや配列のポインタ引数渡しといったケースを使うことが多いでしょう。C言語で作られたサードパーティライブラリ等では、ポインタ引数渡しが多用されるという特徴があります。基本的にポインタの考え方は何も難しくないのですが、ポインタの記述仕様自体が若干複雑で、初学者にとっては奇妙で読みづらいものなので難解に感じる傾向があります。

 ポインタに絡んで、ガーベジコレクションGC)問題がありますが、最近のC++ではスマートポインタ等が充実しているので、メモリーリークやセグメンテーションフォルトで悩むというケースは、サードパーティライブラリを使っていてそいつがミスっていたり、スマートポインタの使い方を間違えるといったケース以外ではまず起こりません。ただし、C++からC言語サードパーティライブラリを使う際にはC言語の作法が必要になることも少なくなく、関数に渡したポインタが関数内でメモリ確保され、必要がなくなったところで明示的に開放してやるといった処理が必要になることがあります。

C++テンプレートが難しいよ(´・ω・`)

 これは確かに難しいです。簡単な使い方を覚えるだけなら何の問題もないのですが、「C++ジェネリックプログラミング」などというものがあり、これはコンパイル時プログラミングを駆使するもので、トリッキーで難解です。

 しかし、BoostC++ライブラリに見られるように、発見されたC++ジェネリックプログラミングの有用な方法論をBoostに実装し、非常にポータブルなライブラリとして出してくれる人達が居ます。素直にありがたく使わせていただきましょう。やる気があればソースや書物からジェネリックプログラミングを勉強してなにか新しいものを作ってみてもいいかもしれません・・・が、普通に物を作る際、その必要はほぼありません。

ぼくちんの目的は動くものを作ることだから言語なんて簡単な方がいい!(`・ω・´)

 と、思うのであればC/C++は必須だと思っていいでしょう。なぜなら、何が作りたいかによって、あなたが今お勉強している簡単な言語には、すぐに制約が出てきてぐぬぬとなるのは目に見えているからです。

 

 最後に誤解されないように書いておきますが、私はJavaScriptPHPRubyといったWeb開発に良く使われる言語が嫌いではありません。むしろ優秀だし、ざっと使い方を覚えれば非常に使い勝手が良いのも確かです。しかしプログラマがもっとも鬱憤を感じるのは、今自分が使える言語で出来ないことが出てきた時でしょう。C/C++はそのような制約が最も少ない言語です(多分)。また、C/C++に熟れるということは、他の言語なんてすぐに習得できるということも意味します・・・が、これは実際に経験値を積んでからでないと実感できないかもしれません。初学者にとっては最初のプログラミング言語を覚えること自体、気の遠くなる作業に思えることも少なくないでしょうから。

 HaskellやGo言語などといったわけのわからん言語が出てきていますが本当に必要な物なのか非常に疑問です。Go言語に至っては他の言語の退化版でしかないという評価もありますし、C/C++やその他のWeb開発言語を幾つか覚えているプログラマがいちいち使う根拠を知りたいものです。ハッカーを自称する場合は、それ自体が根拠となり覚えなければなりませんが、開発においてはどうでしょうか・・・。

 C++は本当に最高です。これを覚えずしてプログラミンをグ楽しめるということは無いと言っても過言ではありません。