Tumblr新入生のみなさん初めまして。49代プログラミング研究会会長のCashew(カシュー)と申します。僕はプログラミング研究会に所属しているので、プログラミングをしたくてミスに入る人に向けて記事を書きたいと思います。「どのプログラミング言語を使ったらいいのか」ということです。「どのプログラミング言語を使ったらいいか」は新入生からよく聞かれる質問です。この質問、とても答えにくいのです。なんにでも使えるとても使いやすい良い言語というのがあったら多分世界にこんなプログラミング言語は溢れていないですね。普遍的な答えはないのです。この質問に答えるには前提条件なるものが足りないのです。鍵となるのは作りたいものは何かということです。iOSで動く普通のアプリケーションを作りたかったとしましょう。なると選択肢は大体3つくらいになってきます。Objective-CSwiftC#くらいです。この中でObjective-CとSwiftはアップルが正式にサポートしている言語です。8割くらいの普通のアプリはこの2つの言語で書かれているのではないかと想像します。C#はマイクロソフトが中心となって進められていると言っても過言ではないでしょう。そのMicrosoftが買収したXamarinという企業があるのですがそこが作ったXamarinを使うとC#だけでWindows,iOS,Androidの開発が出来てしまうという優れものがあります。このXamarinはつい先日の4/1にVisualStuidoから無料で使えるようになったことが公表されました。Xamarinを使えばAndoridとの共同開発が楽になることから今後はC#でのiOS開発が盛んになると思います。ゲームを作ろうとする時はどうなるでしょうか。ゲームは普通のアプリケーションと違ってもっと低レベルなAPIを基本的には叩かなければいけません。普通のOS側が提供しているWin32APIやUIKitでも画像は表示できるので、ゲームが作れない訳ではありませんが、たいていの場合そのようなAPIを使ってしまうともっさりしたゲームになってしまいます。(UIKitのdrawRectなら速いかも未検証)ゲーム制作の時にどのようなAPIを叩けばいいのかというと、DirectXやOpenGLといったAPIを叩けば良いのです。DirectXはMicrosoftが提供しているAPIで高速であるという特徴があります。WindowsやXboxでしか利用することができないという特徴があります。OpenGLはDirectXと比べると低速であるが正確であると言われています。OpenGLはPCやスマートフォンであれば利用できます。DirectXやOpenGLが利用できる言語(正式にサポートされている言語)はどんなものがあるのでしょうか。DirectXが利用できる言語C/C++C#OpenGLが利用できる言語C(C++/Obj-Cは当然可)という感じなのですが、OpenGLのラッパーが提供されているまで含めるとJavaやC#もOpenGLを利用できるので事実上OpenGLの方が使える言語は多いです。(あまり有名でないライブラリまで含めればDirectXも使える言語)ゲーム制作ではこんな感じですが、他の言語について見ていきましょう。C言語が好きかと言われるとそうでもないんです。C言語はとても小さいという感覚を持ってください。小さいので扱いやすかったり割と初心者に勧めやすかったりするのですが、例えばキューというデータ構造を使おうと思った時にはC言語であると自作しなくてはならず、大変です。C言語の何がいいかというとハードウェアに近いことです。ハードウェアに比較的近い言語であるので、高速に動作しますし、チューニングのしやすさは群を抜きます。C++カシューは何が好きなんだと思いましたか?C++が好きなのです。C++の良さはここに書くにはスペースが足らないと言いたいところですが、とりあえず書いてみましょう。一つ目はオブジェクト指向プログラミング(OOP)が出来るということです。オブジェクト指向プログラミングとは何かがわからない人は最近のプログラミングには不可欠な概念であるということだけはわかっておいてください。この特徴は汎用プログラミング言語では一般的ですね。2つ目はC++の型システムです。C++の型システムはかなり厳しい方であるといえるでしょう。C++はテンプレートと呼ばれる型を引数にとるようなプログラミングができるようになっていて、テンプレートだけで色々と出来てしまったりします。Library)という標準ライブラリ群があり、これがとても便利なのです。STLが僕を虜にしてしまったと言っても過言ではないでしょう。3つ目は速度が速いということを挙げておきます。好きであるからこそデメリットも挙げておきましょう。1つ目は全て値型であるということです。値型とはデータを渡すやり方のことなのですが、コピーしなくてもいいところまで何も考えずに書いているとコピーしてしまいます。コピーしないための特別な書き方があり、もしかすると面倒であると感じるかもしれません。何も考えずにプログラミングをしていてJavaより遅くなってしまうことさえあります。2つ目にGC(ガベージコレクション)がないことです。GCがわからない人は飛ばしてください。「C++やるとnewやったらdeleteしなきゃいけないんでしょ」なんてことは良く言われます。今は参照カウンタ方式のメモリ管理が標準ライブラリで実現可能なためそこまで問題にはならないと思うのですが、参照カウンタ方式は循環参照の危険性があり、これまた何も考えずにプログラミングをしているとバグを産んでしまうという注意点があります。3つ目の欠点として初心者に分かりづらいという点を挙げておきます。僕自身C++を勉強してから他の言語を使うようになってきたのですが、他の言語の方が大抵の場合言語仕様が小さく理解しやすいものです。C++をやると他のOOPの言語は使えるようになりますが、他の言語をやった人はC++が使えないと言われるくらいです。(実際そう感じた)Javaプログラミング言語と言ってこの言語を思い浮かべる人も少なくないのではないでしょうか。有名なプログラミング言語ですね。今企業で自社内のパソコンで動かすアプリケーションを作ろうとなった場合Javaが選択されることが多いのではないかと思います。いうと、C/C++よりもOSに依存する部分が少ないこと、標準ライブラリが充実していること、バグを生み出しにくいこと(人によります)、分業がしやすいこと、パッケージ管理が楽なこと、そして開発環境が充実していることでしょうか。入門という点から考えても結構いい言語です。僕はあまり好きではなかったりします。僕が思う欠点としては、"もっさり感"でしょうか。JavaのIDEはJavaで書かれていることが多いのですが、メモリ消費量が多くなってくるとなかなか上手く動いてくれなくなってしまうように感じます。Javaはとても小さいプログラムだとC言語で書いたものと同じくらい高速に動きます。大きいプログラムになってくるにつれて遅いと感じることが多いです。あと一つ気になることがあるとしたらiOSとの相性が悪いということでしょうか。思うに今最もアツイ言語ではないでしょうか。"Microsoftが作った言語"ですね。この言語ができた当時、Javaとあまり変わらないとかコピーだとか言われた経緯がありますが、今はそんなことはありません。使いやすさでいったらjavaを完全に超えていると言ってもいいのではないでしょうか。作ったということもありWindows系でしか使えない過去がありました。その後monoと呼ばれるものを使うことによってC#が他のOSでも使えるようになりUnityでもC#が使えるよういなっているわけですね。先ほど紹介したXamarinの無償化によってC#のマルチプラットフォーム開発が一般に普及していくことになると思います。Objective-C実は割と経験者のいる言語でしょうか。Xプログラミングに使われますね。僕はこの言語を使ってラベル付き引数が好きになりました。いってしまうと失礼な気がしますが、ダラダラやるにはいい言語な気がします。他の言語と比べるとなんだか英文を読んでいる気がしてくる言語です。標準ライブラリのクラスの関数名がとても長いということがそうさせているのだと思うのですが、「これ何だっけ」ってことが少なくなるので長い関数名も苦じゃないです。言語自体が優秀だとはあまり思わないのですが、Xcodeの補完が素晴らしく使い易いものになっていると思います。言語仕様がC++ほどじゃないけれども複雑ですね。(Obj-Cがスモールトーク系だから僕が馴染みがなかっただけかもしれない。)軽量言語javascriptおなじみjavascriptですね。javascriptは今使われているほとんどのブラウザで実行することができますね。いったことからブラウザでゲームを作るのに使うことができるのは分かると思います。javascriptの利用はhtmlの中に書くだけにはとどまりません。実はJavascriptはC++やJavaなどの言語に組み込むのが容易という性質があり、高速に動作する必要がある部分は汎用言語で書き、ちょくちょく変更する部分はJavascriptで書くということがされることがあります。そのような構成にすると、毎回コンパイルしてから実行する手間がなくなり、スクリプトを変更して実行するという手順になるのでプログラマーの仕事をデザイナーに任せられたりすることができます。Javascript自体はオブジェクト指向プログラミングを利用できるのですが、classを作れないことから使いづらいと言われることがあります。そのような問題にぶつかってしまったときはalt-jsと呼ばれるjavascriptを強化したような言語たちがあるのでそれを使うといいかもしれないですね。Python熱狂的信者の多めなpythonです。なんといっても今は情報系ではDeepLearningが流行っていますね。このDeepLearningをするにあたって最も使われている言語です。早稲田の情報系の研究室でもよく使っているという話を聞きます。C/Javaと違ってブロック({}で括られる部分のこと)を使いません。階層構造はインデントで区別されています。入門者にPythonを教えるとインデントがしっかりとする癖がつくから良いという話も聞きますね。書く人によるインデントの癖も出にくい(出ない?)ので読みやすい言語とも言えるのではないでしょうか。Pythonから派生した言語にCythonというものがあり、これはPythonをC言語のコードに変換してからコンパイルしてバイナリを作ることができるのでパフォーマンスが必要になってきたらCythonに変えられるというメリットがありますね。Lua/Squirrelこれはゲーム制作でよく利用される言語の一つです。C/C++に組み込んで利用することができます。先ほどJavascriptをC/C++/Javaに組みこむことが出来ると言いましたが、むしろLua/Squirrelは組み込まれることが前提としてあると言えます。スクリプト言語の中では結構高速な部類に入ります。LuaはPythonに似ていてSquirrelはC/C++に似た書き方をします。この2つを選ぶのは書き方の好みだったりするのではないでしょうか。PHPPHPは動的なサイトを作るのによく使われていますね。動的なサイトを作りたいときは一番PHPが楽な気がします(Web系の標準ライブラリが豊富)。特徴と言っても特に思い当たることがないような言語ですが、PHPファイルをサーバーに設置すればすぐに使えるようになるという点とCGIではなくデーモンとして実行されるという強みがあります。動くコードを作れるのとセキュリティ的に安全なコードが違ったりするので注意が必要です。型が欲しかったり高速化を望むならば某大企業が作ったHackを使いましょう。(HackはPHPを拡張した言語です。)Ruby日本で生まれた言語というだけあって資料が豊富・入門しやすい言語です。Rails(RoR)を使うために勉強したという人が結構多いのではないでしょうか。RoRはPHPと同じように動的なWebページを制作することができるのですが、PHPより大規模なシステムの制作に向いていると思います。TwitterがRoRで作られていたことで有名ですね。(関数型言語)関数型の言語について触れておきたいと思います。関数型は最近人気がありよく見かけるようになってきました。関数型を勉強してもC/C++/Java等に役に立たないという人もいるのですが、僕はそうは思いません。関数型に関しては僕は不勉強ですし他のサイトで勉強してみて欲しいです。参照透明性に関してはオブジェクト指向しか使う気がない人でも知っている人と知らない人で使い易い関数が書けるかどうか・コードの汚さという概念が分かるかどうかが変わってくると思ってるので勉強することをお勧めします。Lispはとても言語仕様が小さく初めて勉強したときは逆に混乱してしまいました。Lispの方言(派生)が多く中には入門に適したものもあるようです。Haskellはちょこちょこと勉強しているのですが仕様が重厚でなかなか覚えられないですね。数学的なバックグラウンドがあったり、副作用を厳格に扱ったりするのでプログラミング自体の勉強にはとてもいいと思います。F#はC#と並列して(組み込みなのかな?)利用することが出来るのでC#の普及と共に一気に利用者が増えそうな予感がする言語です。ScalaはC#と同じくらいアツイ言語だと思います。ScalaはJavaを知っている人ならそこまで苦でもないと思いますし、Javaのライブラリが使えるのがいいですね。SwiftSwiftは少しいじってみたのですがあまり理解していないのでここに書くつもりがなかったのですが、今日ビッグニュースが入ってきたので書きたいと思います。SwiftはAppleが作った言語です。Swift自体はオブジェクト指向(OOP)と関数型言語の特徴をサポートします。Xのアプリケーションを作れますが、先般オープンソース化が発表され実施されていました。今日Android開発でSwiftを使えるようにするかもしれないという報道が出てきたのですね。噂段階の情報ですが、Androidで今まで開発に使われていたJavaのOracleとの特許権で訴訟があっただけあり本当な気がします。実現したらSwiftでAndroidとiOSの開発ができるようになることになるので楽しみです。他にも色々と言語はあるのですが時間が足りなくなってきたのでここまでにします。新入生にはC言語から始めてC++まで教える予定です。ミスへの入会を待っています。以上Cashewがお送りしました。14日目】はじめまして、53代のソエキです。51代ケモ研のむさしんです。サークル代表としての抱負【カウントダウンカレンダー2019冬14日目】2019-12-24Vulkanの道も一歩から【カウントダウンカレンダー2019冬13日目】2019-12-23【blender】ポリゴンモデリングで顔をつくるときの話【カウントダウンカレンダー2019冬12日目】2019-12-22超手抜きで覚える将棋【カウントダウンカレンダー2019冬11日目】2019-12-21企画で大忙しだったお話。(3)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。