「さぁ、これからプログラムを始めるぞ~!」
「学生だけど、どんなプログラム言語を学べば楽しいの?」
「IT業界に転職したいんだけど、何を学べば良いの?やっぱりJavaが良いの?」

という事を僕は滅多に聞かれないけど、勝手に答えてみる。

未経験者の大半の人は「プログラム=Java」と思っているのではないかなー。
もしくはC言語とか思ってたりするかもしれない。

だから勉強するためにはJavaやC言語だ!

と思って勉強すると挫折をしやすい。
僕が学生の頃は本当にC言語とかBasicとか限られた言語しか学べなかったけど、今はいくらでも選択肢があるからあえて楽しくない言語を始めに学ぶ必要は無いかなーと思う。
(※言語はもっとあったけど、当時はインターネットも無く情報を集めれなくてメジャーなC言語を僕は独学で学んでいた。)
重要なのはやり続けれる楽しい言語だと僕は思う。
というのも、僕はVB4(Visual Basic4)という言語に随分救われたからだ。

当時の僕は学生時代はC言語を学び、仕事ではFortranという言語を使っていた。
いわゆる黒画面に白文字が表示される無機質な画面でプログラムを書いていたのだ。
つまらないわけではなかったが、何か足りなかった。

作ったプログラムを人に触ってもらう楽しさが足りなかったのだ。
そんな中でVB(Visual Basic)に出会ってVBで「ブロック崩しゲーム」を作って友達達に配布して、楽しいと言われた時に足りなかったプログラムの楽しさを覚えた気がする。
そんな観点から初心者が選ぶプログラム言語について書こうと思う。

初めに言っておくと、何か一つのプログラム言語を覚えれば他の言語の仕組みも理解しやすくなる。
なので始めは楽しく学べるものをお勧めする。

1位 .NET Framework(C#)【Windows】
1位と書きながら実は4年くらい触ってないのだが。。。
理由はWindowsで動くアプリを簡単に作れる事だ。
Macユーザーの場合は2位のObjective-cをお勧めする。

とにかく書いたプログラムがすぐに動くというのはモチベーションに繋がる。
.NETはそのモチベーションを保つためには最良の言語である。
また、言語自体の癖が少なくJavaと言語特性が似てたりするので後々Javaを学ぶためのステップにもなる。
そして深く学んでいくとポインタの扱い等の下位レイヤー(Javaでは扱う事が出来ない領域)にも携われるため、この言語だけで十分に深いプログラムを学べるのも大きな魅力だ。
※VB.NETではなくC#を学んだ方が後々を考えると良いと思うが、VB.NETでも十分学べるのでプログラムに自身が無い方はVB.NETをやっても良いだろう。

欠点はWindowsでしか動かない(一応動かそうと思えば動かせるが。。。動かないと思ってた方が良いだろう。)事だろう。


なお、ASP.NETはお勧めしない。
理由はWebサーバーはLinuxで動かした方が安価で動かせるため、PHPやRuby等の言語を選んだ方が後々を考えると良いだろう。
Webを学びたいなら3位のPHPや4位のRubyを参考にして欲しい。

2位 Objective-c/Swift【Mac】
これから始めるならSwiftの方が良いが、Swiftはまだ文献が少ないのでObjective-cをお勧めする。
どちらもiOSアプリ(Macアプリも作れるが、iOSの方が友達とかに広めやすいのでiOSをお勧めする。)を作るための言語で、SwiftはObjective-cの後発言語だ。(2014年に発表された新しい言語)
Macを持っている人ならXCodeがただで手に入るので、App StoreでXCodeをダウンロードしよう!(昔は有料だった・・・)

C#に比べるとかなり癖の強い言語だけど、初心者の場合は他の言語の癖が無いのですんなり入り込めると思う。
お勧めの理由はC#同様で簡単にアプリが作れるところだ。(しかも、かなりサクサク動く!)
Androidは環境構築の敷居が少し高く初心者には少し手が出し難いが、Objective-cはXCodeを入れるだけで開発環境が手に入るのですぐにモチベーションを高めれるだろう。
「はじめてのiPhone開発」系の本を購入してマップアプリを作ろうと思えば一日で作れるくらい敷居が低いので、初心者にはもってこいだ。
 →本を買う場合は出来るだけ新しい本を買った方が良い。古い本は情報が古いので発行日はしっかりチェックする事!

欠点は言語仕様が(メジャー言語に比べると)少し特殊のため、Objective-cが出来てもJavaやPHPと言った言語の習得が難しいところ。
 →文献を読んだ限りではSwiftの方がスマートな記述が出来るが、先ほど書いたように文献の少なさは初心者の足かせになると思う。

JavaやPHP、Ruby等を触っている人からみると取っ付きにくいためエンジニアが始終足りない状況が続いているのも一つの特徴だろう。
なので、これを覚えればそのまま仕事に繋がるかもしれない。

ちなみに作ったアプリを公開するためには年間8000円くらいのお金がかかる。(為替によって変動する。今しらべたら7800円だった。昔は10200円だったかな?)

3位 PHP+Apache
「動的に計算とかが出来るWebサイトを作りたい!」
と言う方はPHP言語をお勧めする。

今はCakePHPとかFuelPHPとか言われる仕組みがあるが、始めはそんなに難しいものに手を出すべきではない。
出来るだけシンプルに扱えるPHP+Apacheをやってみるのがモチベーションを保てる。
Apacheの構築が始めは鬼門だけど、今は文献も多く簡単に構築出来る仕組みもたくさんあるので手間取るけど出来ない事は無い。

作ったプログラムがすぐに表示されるという簡素な仕組みはすぐにモチベーションを高めてくれるだろう。
そして、もっと深く色々触ってみたいと思ったら4位のRubyをやってみると良い!

PHP+Apacheは簡単にWebサイトが作れる代償に、大きなシステムを作るのには向かない。
(初心者の場合はすぐにプログラムが複雑化してしまい、3日前に書いたプログラムが何故か動かないという現象に悩まされる様になっていく。)
下記にも書いているが、Webシステムは様々な知識が必要となるのでこのPHPを使ってHTMLやCSS等の癖をつかむのが大事だ。

ちなみに僕が最初に作ったWebシステムもPHP+Apacheで、これがあればどんなシステムでも作れると思ってたのですが・・・
実際に作っていくと、ページ数が増えてページ同士の連携が入れば入るほどきつくなっていきました。
なので「多くても10ページくらいのWebサイトを作るもの!練習!」と割り切ってやると良いと思います。


4位 Ruby(Ruby on Rails)【Windows/Mac】
「SNSサイトを作りたい!」
などのような大きめのWebサイトを作りたいならこの言語(Ruby on Rails)がうってつけだ。
環境準備に少し手間取るかもしれないが、出来ないというレベルではない。
そして、驚くほど簡単に複雑なWebページが作れる事に驚くだろう。
→Ruby on RailsはRuby言語を使って出来ているWebシステムを作りやすい様にしてくれた仕組みである。(フレームワークと呼ばれる。)

しかし、Rubyに限らずWebシステムは初心者には少し敷居が高い。
その理由として覚える事が多い事が上げられる。
上記の二つの言語はその言語だけを覚えればものが作れるが、Webシステムの場合はサーバーサイドプログラムとクライアントサイドのコーディングを覚える必要がある。
具体的に言うとHTMLやCSS、そしてJavaScriptだ。

これらの知識があらかじめあるなら良いがこれらも含めて知識が無い場合はモチベーションを保てるかちょっと心配だ。
Webシステムは最終的にはHTMLというマークアップ言語を組み立てる作業になるため、これらを避けて通る事は殆ど出来ない。(ASP.NETを使うとある程度避けて通れるが今後を考えると避けるべきではない。※ホームページビルダー等のツールも然り。)
また、データベースという超難関も触らなければならないためWebシステムは色々と難儀しやすいのだ。
(RailsにはActive Recordというデータベースを簡単に扱える仕組みがあるが、最低限のデータベースへのアクセスする仕組みであるSQLは覚えておくと良いだろう。)
その分やりがいもあり、Rubyは言語の中ではとても分かりやすい言語で融通も利きやすいためWebシステムを作りたいならこの言語をお勧めする。

始めからRuby on Railsを触ると何が便利なのかが分からないと思う。
また、制約だらけで嫌になってしまうかもしれないのでまずは3位のPHP+Apacheで自由奔放にWebページを作ってみる事をお勧めする。

なお、実際に公開する場合はLinux(Windowsでも出来る)の知識が必要になる。(あと、レンタルサーバー代とかがかかる。)


5位 その他
アプリを作るならiOS以外にもAndroidという手もあるが、AndroidアプリはJavaで作る必要がある。
Javaだけならまだしも、SDKのバージョンや様々なアンドロイド端末の画面サイズを意識してプログラムをしなければならない(iOSは2種類だけを意識すれば最低限の対応は出来る。)のでiOSよりも敷居が高い。
また、Javaはイベントリスナーの仕組みが言語仕様的にイケテナイのでiOSに比べて冗長なプログラムになってしまうところがありそれなりにストレスが溜まってしまう。
Javaは堅い言語と言われるが、Androidアプリに限って言えばそんな事は無い。コンパイラーで防げるのは言語構造程度で様々なスレッド起動するAndroidアプリを制御するのはそれなりに難しく堅いプログラムが書き難い。
よって、僕はAndroidよりiOSのアプリのほうをお勧めする。

サーバーサイドプログラムを作る上でJavaはよく使われる言語だが、僕が見る限りそろそろ頭打ちの気がしている。
というのも、フレームワークの発達が止まっている様に見えるからだ。
これは言語が堅すぎて他の言語では当たり前に使えるブロック構文(高階関数等)や匿名メソッド、デリゲード等の仕組みを兼ね備えていないためでは無いかと僕は推測する。
いわゆる良くも悪くも堅い言語のため、勉強には良いが仕事にするには楽しくない言語だと僕は思う。
(自由に書くには楽しいけど、Webシステムを作る時は冗長な書き方が多い・・・。面倒くさいw)

PHPも良く聞く言語だが、、、
僕個人的には遊びで使うまでの言語だと思っている。
というのも、PHP4の時代の負の遺産を引きずって今のPHP5がある様に見えるのでオブジェクト指向と言われつつも関数任せの言語でどっちつかずの気がするからだ。
「PHP: Hypertext Preprocessor」と言う名前の通り、PHP4の仕様の方が僕的にはしっくり言語でオブジェクト指向を学ぶならわざわざこの言語を選択する必然性は無いと思っている。
僕個人的には、提供されているベースとなる処理が殆ど関数の気がしてならないし、関数の引数は値渡しがデフォルだったりと僕的には引っかかる箇所が多い言語。

ちなみに、JavaScriptは学ぶには良い言語だと思う。
しかし、この言語は思っている以上に根深い言語で深いところまで学ぶと習得に時間がかかる上言語による縛りが殆どないためバグを生みやすい。
なのでWebシステムを作る時の補助的要因として学ぶのが良いかなーと思う。
node.jsとかあるけど初心者には向かないと思う。(僕自身が殆ど触ってないというのもあるが・・・)

あと、単純に言語の処理速度を比べると以下のような順番になる。(はず。やる事によって変わるので参考程度に。)

Objective-c → C# → Java → PHP → Ruby

※C言語は最速で動かせるけど、初心者が学ぶには少しきついかと思うので対象外。(作ったものの共有も難しいし、モチベーション保ち難いよー。)

※注意
上記は僕の知識レベルで書いているので、本当はもっと良い言語があるかもしれない。
その際には是非僕に教えて欲しい。