最近ぐいぐい「D言語はいいぞ」って言われてるんだけど、そのよさをいまいち汲み取れない紅茶屋さんです。
個人的には使う言語なんてなんでもよいぞと思ってる人間です。
言語なんてあくまで手段でしかないので、伝えたいもの、表現したいものがあってこそのものだからです。
プログラミング言語は動作環境や利用可能なライブラリの関係で、言語という手段を先に限定して何かをやろうとすると、とてもとても遠回りを強いられることがあるので、目的にあわせて言語を選択するぐらいがよいと思います。
どーょ?
2016年の言語ランキング
www.tiobe.com/tiobe_index
Java
最近はAndroid開発周りでもつかわれている。struts以前はどうしても取れないバグ相手に消耗戦が繰り広げられていた言語だが、大規模開発のデファクトになる程度にポピュラーな言語として確立した。もはや職業プログラマー界隈では避けて通れない。なんにもとっかかりがなければjavaから始めればいいんじゃないかな。たぶん、あと5年は確実にメインストリームだと思う。でも、個人的には書き方が煩わしく感じる。
C
プログラミング界隈で紀元前とはBefore C言語ということらしい(石はこちらには投げないでください)。
制御系とかで、オンオフをぱちぱち書くなら必須。ハード界隈かな?
Arduinoなんかを見るとJavaで代替される未来もあるんじゃないかなと思わなくもない。大穴でmrubyとかな。
C++
使われ方としてはJavaと同じ並びかな。windowsに限定できたりする業務系環境なら、圧倒的に開発コストを抑えられる。winAPIをコントロールしやすい。Microsoft Visual StudioがやっぱりIDE(統合開発環境)として優秀で、呼び出してる他のDLLとかと連携するのに便利じゃでのぉ。
Python
Webまわりでなんかつくるのに便利。Google App Engineで使えるのが一番かなぁ?
海外のコーディングゲーム( checkio.org/ )とかで遊ぶのにデフォルトにされてるので、ある意味世界標準ではいまはこれがエントリーポイントになってるのかもね。
科学演算系やら数値計算のライブラリ(SciPy、numpyとか)とかも充実してて、Fortranとかの界隈もPythonのほうがいいんじゃないかと思う。ほら、最近話題のディープラーニングとかのオープンソース TensorFlow とかもPythonだしね。
カメラ認識のOpenCVが対応している言語はC/C++、Java、Python。つまりそういう感じ。
C#
C++の後継だけど、web系にもつかわれてたりと使われ方が定まらない印象。かつてパッケージソフトとかを創るのに使ってたけど、いまパッケージソフトとかなくて、アプリ扱いじゃない?ちょっと没個性さん。コンパイラが無償提供になって可能性はすこし広がった。C#単体でみるより、.NETというくくりでみるべきかもね。windowsユーティリティなんかつくれって言われたらC#採用するかもね。
PHP
Web系なら必須だから触われるようにはしておけ物。どのレンタルサーバーでも動くというのが一番の利点。
テッキーな連中にバカにされがちだけど、wordpressとかdrupalみたいなポピュラーなCMSがPHPで書かれてことからもわかるとおり不可避言語。htmlをコードできるだけの人でもPHPerになるために言語に触れている人口そのものが多い。技術習熟度がとても大きな正規分布になっているので裾野が広い。
技術習熟度が低い人が居るからといって、人を侮り、下を探して安心するような技術者にはなってほしくない。言語を理由にマウンティングしていく論には汲みしないこと。あいつの言語はたった26文字しかないんだぜと英語話者をバカにするようなもの。バカっていうやつがバカなんですぅ!ばかー
JavaScript
ちょっとなにがどうなってるのか、わけわからない言語。
最近はnode.jsみたいにサーバー側でも動くようになってきた。
html5でできることを考えるとかなり色々なことができてしまう。ソケット通信から、PCやスマフォのマイク、カメラのハンドリングまで。実行がブラウザベースなので、動作環境の構築や実行について何もかんがえなくてもいいのがいい。もはやブラウザとかを蹴るためのインターフェイス言語といってもいいのかもしれない。
数万件のデータを読み込んでプロットしながらグラフを書いてもストレスなくさくさく動く。一昔前のjsとは隔絶の感。恐ろしい。でも、今と昔が混在しているカオス。書き方がヤダからとかcoffeescriptとかまであってさらにカオス。
でもま、弱点もあって、n*0.1とn/10の結果がずれていったりするなど科学計算に使うにはおすすめはしない。型がゆるいからね。でも、ちょっとなにかするのにすごく便利。
Perl
どうだろう?もう枯れてるとおもう。新規でこれからやる必要はあるかな?よくわかんないや。Pythonでいいんじゃね。
Visual Basic .NET
これもどうだろうね。C#に統合でいいんじゃないかな?
Ruby
Rubyの事を言うと必然Ruby on Railsの事になるのだけど、環境がすでに手元にあってちょっと結果がみたいものをつくるのには楽な言語。作り捨て専用。レンタルサーバで動かすためには環境構築をできるスキル、建てたサーバーのお守り、また書いた端からアップデートされる言語仕様に付き合ってコードをメンテナンスし続ける予算と覚悟と人員が必要。
初心者にあまり勧めないのは環境構築周りでしんどさがまだあるから。自前macとかに載せるだけなら別だけどね。でも、公開サーバーに載せようとすると、いまだにheroku1択じゃない?
請負とかで生命財産に絡んで稼働責任が問われる分野で採用すべき言語ではないと思ってる。バージョン齟齬で死んじゃうから。
Visual Basic
ここであがってるVisual BasicってVB6.0の事かな?だとしたらこれも遺物かな。化石。Visual Basic .NETの前バージョン。windowsアプリを創るのにとても開発コスト低い言語でした。新人研修も楽ちんで量産型プログラマーを投入してもなんとかなる懐の深い言語。PHPのように裾野が広い言語だったのでこれまたバカにされがちだけど、別にC++でDLLつくって表側をVBにしたり結構なんでもできたので、PHPに言えることと同じことが言える。
Assembly language
用途次第。触らない人は一生触らない言語なんじゃないかね。メインフレームとか、CPUに直接命令どうこうというような世界にいった人が使うものなのかな?
Delphi/Object Pascal
Delphi、Delphi、Delphi・・・。ごめんなさい、これについての経験や知識がないです。知らない世界だ。あ、HSP(Hot Soup Processor)とかが全盛だったころHSPとぶつかってたDelphiの後継?あれイルカのマークじゃなかった?はて???ごめん、やっぱ知らない。
Swift
iPhoneアプリとかを創るときに使う言語。
objective-cは触る気もおきなかったけどSwiftは結構食指が動いている人たちも多い。x-codeを含む環境構築もかなり楽ちん。2.0になって、ちょっと触ってみた感じ結構よさげ。こんど3.0になるそうな。今まさにこれからというフレッシュな言語。ただStoryboardがなんかもやっとする・・・。ただ可能性は感じちゃってます。
Objective-C
iPhoneアプリを作るのに今まで必須だったなにか。
死屍累々を積み上げ、先人たちが下草を刈ってくれた。苦行をされてきた先達に感謝の念を。
でも、ごめんなさい、後続はSwift使うわぁー。
R
プログラミング言語というよりは大量データ処理のための統計用言語。
計量経済学とか社会科学の人たちには必須かもしれない。
先日、物議をかもした東京財団の財政長期推計モデルがデータと一緒にRで配られていたのでいまさら初めていれてみた。
www.tkfd.or.jp/research/fiscal-estimate/model_b_61
まあ、プログラミングという感じではない。
政府統計局のe-Statとかで得られるデータがcsvだったり、Excelだったりするけれども、将来はこういうデータはRに寄るかもしれないですね。変な加工はしないで、未加工データで配ってくれると色々調べやすいです。ただ、どこがなんのデータか定義がわからない形で配られてもという感じ。
データビジュアライゼーションという点で考えると、最近のエクセルとかの統計関数(分散とか偏差値、近似曲線とか)、財務ファイナンス系の関数は非常に強力で実務ではこちらのほうが用をなすんじゃないかと思います。VBAはこんかいのリストではランクインしてないけれどもExcelまじ強いから併せると侮るなかれです。例えば、偏差値の算出なんかをSQLだけで書こうとすると、回帰とかめんどくせぇなぁという感じだけども、関数一発で、グラフ化までしてくれたりするので、Rとの差別化って?という心持ちもあります。扱うデータ種類量的に、Excel→Access→R→SQLみたいなイメージ。
Excelから吹きこぼれてRじゃないとできなくて、SQLより本格的じゃないという結構限定的なスチュエーションなのかなと思っています。ここらへんで競合するのはjavascriptでd3.jsとかかね。政府統計のRESAS resas.go.jp/ とかをみてばわかると思うけど、Rのみよりはjs+DBのほうが、潰しがきくので、Rの使いドコロが難しい。
やっぱり学術分野だけかなー?
MATLAB
MATLAB??ごめん、まったく知らない。うわさもきかないや。数値解析ソフトウェアだって・・・。ソフトウエア!?言語なんだね?CADみたいなもんかね?化学工学とかで流速とかそういうのをやるためだろうか??
PL/SQL
データを取り扱うための言語で主要言語ですわ。いままででてきたプログラミング言語と競合するものじゃなくて、データを扱う側で必須なものです。逆に言うとこれに馴染みがないままだと、いくら上に並んでいるような言語でエキスパートだったとしてもプログラムをつかってやれることの範囲が100倍以上違ってくる。
だって、データ構造の設計もできないんだぜ。
PL/SQLという言語に限定すれば、ストアドとかビュー、プロシジャーまで含むんだろうけど、あえてSQLに一般化して申し上げておきます。DBもDB操作系のお作法も多々あれど、どれも同じようなもんだしね。
そういう意味でいうとRuby on Railsのいいところは、この設計をよしなにすっとばして書けるところなんだろうね。NoSQL、MongoDBみたいな道もあるだろうけどRDBMSがわかったうえで行かないとダメなんじゃないかと思いますよ。
D
私が唯一知っていることは、ツイッター上で「D言語くん」とつぶやくとD言語くんにフォローされるということだけです。
COBOL
枯れすぎて残存者利益の領域に到達した唯一の言語。最近新卒の子とかが爺様方の引退に伴ってCOBOLをやらされているらしい。ただ、レガシーシステムも多く食いっぱぐれはないので「ライスワーク」と割り切れば別にいいんじゃないかなと思います。つぶしは効かないけど。
感想戦
個人的には最近はjavascriptでhtml5でwebkitが面白いなーと思っています。swiftもそのうち触りたいかもー。ぐらい。
数年前は、Flashとかで使われていた、FlexAirがコンセプトとしても面白い言語だなーといろいろ遊んだんですが、振り返っても、周りを見渡しても誰もいませんでした・・・。使われてたのは郵便局のはがきデザインキットとTweetdeckぐらいかな。ブラウザから印刷系やフォント系がいじれるので帳票まわりをリッチにつくれてなかなか便利だったんですが。今ならhtml5でいいので要らないですが。
プログラミング言語は環境を構築するのがめんどくさいです。
自分みたいに好き勝手、つまみ食いするだけの人間にはなおさら。
はやくcloud9みたいに、なんか、偉い人がよしなに実行環境をつくっておいてくれると嬉しいです。
c9.io/
empire of codeみたいに、わしゃロジックぐらいしか書きたくないんじゃ感。
2020年にプログラミング教育が必修化されるとか言われてるらしいです。
コードを教えるんじゃなくて、考え方を育てようとかいっているらしいですが、自分はプログラミングの専門教育をうけたことがないので、考え方を教えるんじゃとかいわれるともやっとします。だってプログラミングって反復させることをするための道具なので、考え方が同じだったら、誰か一人が書けばいい。考え方、優先順位にばらつきがあるからこそ多種多様なプログラミング言語と使われ方があるわけでしょ。
プログラミングで楽しむような子はいままでの教育課程からすると「吹きこぼれ」に相当して、教育で人材の知識的品質を確保するというクオリティアシュアランス的な教育にはなじまねぇだろうなという危惧もあります。型から飛び出た外れ値の子をフォローする仕組みは教師個別の情熱に依存されるだけで、制度としては設計されてないよね・・・。(スーパーサイエンスハイスクールとかAO入試とかは一応そうなのかな。)
飛び出ちゃった子とかには、環境だけあたえて好きにさせておけばいいじゃないと思うのですが、先日の佐賀B-CAS破って県内の生徒の成績集めちゃったみたいな闇堕ちケースもあるので、ヨーダは必要かもね。でも、学校+教師っていう枠組みじゃ無理だなと思います。上記の主要言語だけみても種類が多すぎて、生徒のやりたいに併せて、フォローできる人材なんていないからです。あるとしたら、門下徒弟道場制度かな。
子供向けの教育にはScratch でいいんじゃないでしょうか。Swift Playgrounds も面白そうね。
地元三鷹には中高生rubyコンテストがあって、rubyに縛ってやっていて子どもと侮るなかれという感じですが、プログラミングの言語を縛りはピアノコンクールとか水彩画展とか、そういうレベルでの表現の縛りなので・・・・・・、まあなんにせよ自由にのびのびやってほしいです。
とりとめなくなったので、ここらへんで終わり。