Top / Docs / どの言語を学ぶべき?

どの言語を学ぶべき?#

一般的には情報量の多さから、C/C++、C#、Java辺りから選ぶのがよさそうです。
スクリプト言語は、変数に型をつけないなど比較的単純なプログラムを記述するため、
初めてプログラミングを学ぶ人にとってはやや適切でない部分があるかもしれません(一概には言えませんが)。

目的別で考えよう#

どの言語を学ぶかは、「何をやりたいか」で考えると良いと思います。
ゲームを作りたいとか、便利なツールを作りたいとか、そういう目標があれば楽しく学べるでしょう。

ゲームを作りたい(C#、C/C++、Java、Delphi、Python、Ruby)#

今北産業: UnityでC#やれ(……と言えればよかったのですが、2023年にUnityがやらかして信頼を失っており困りどころ)。

  • 2010年代以降は、まず作りたいものに合ったゲームエンジンの採用を検討、

そのあと要求される能力を習得、というのがよくあるパターンだと思います。
そういう意味で「どの言語を学ぶべき?」に若干回答しづらい分野です。
結局ゲームが作りたいだけなら「プロの作ったありものを使う」ので良いのであり、 その結果プログラミング言語を全く利用しない、ということもありえます。極端に言えばツクールゲーでいいならそれでいいのです。

  • 一昔前はゲームといえばC/C++という感じでしたが(さらに前はアセンブリ言語)、

最近はPCの性能も上がり色々な言語が選べるようになりました。
が、しっかり学びたい方は少しくらい大変でもジャンルを問わずC/C++をやりましょう。

  • 3Dバリバリなゲームを自作したい場合、ほぼC/C++になります。
    最近ではC#もライブラリが充実してきています。

  • 2DならJava、C#、DelphiなどGUIの作りやすい言語や、
    ゲームライブラリのある言語(Python、Rubyなど)がオススメです。

  • また、ゲーム製作のための言語であるHSPや、
    スクリプト言語による改造機能を得たRPGツクール(MVではJavaScript)に、
    高度なカスタマイズ機能を持つアドベンチャーゲーム製作環境の吉里吉里/KAG、
    同じくアドベンチャーゲーム製作ツールなら、Luaで書かれたコードを呼び出せるNScripterなどもあります。

    ゲームが作りたいだけならこれらの言語・環境もオススメです。~
    有名どころでは、TypemoonのFate/Stay nightが吉里吉里/KAGで作られていたりします(といっても別物レベルに改造済)。

GUIツールを作りたい(C#、Delphi、Java、なでしこ)#

デスクトップで動くちょっとした小物GUIアプリ(時計や電卓、システム情報表示など)を作りたい場合、
GUIアプリの製作が簡単なC#、Delphi、Java、なでしこなどをオススメします。

ちょっとした作業を効率よくやりたい (Python、Ruby、Perl)#

例えば「nekomimiフォルダ内の全画像に対し、ファイル名の先頭に『neko_』と付けたい」などといった、 日常でのちょっとした作業(でも、画像が100枚あったら大仕事ですよね)をささっとやりたい場合、 スクリプト言語であるPython、Ruby、Perl、もしくはなでしこがおススメです。

Mac? MacでリネームするならAutomatorかAppleScriptの方が楽ですよ。

Web上で動くものを作りたい(PHP、Perl、Python、Ruby、Java、C#)#

今北産業: PHPで作れ、あるいはPerl・Python・Rubyなどを用いたCGIで作れ。当然、HTMLの知識も必要になります。

  • 掲示板やwikiなどのサービスを作成したい場合、サーバで動くプログラムを作成することになります。
    サーバでプログラムを動かすための仕組みとしては、

  • CGI

    • サーバーが、リクエストされたバイナリやスクリプトを外部実行し、その出力を送信する仕様。Common Gateway Interfaceの略。

例えば HTTPD(Apache) という「シェル」がリファラなんぞのリクエストヘッダを環境変数に追加してシェルスクリプトを実行している、と解釈できる。

  • 言語は問わないがPerlがよく使われてきた。スクリプト言語はコンパイルの手間がなく保守性が高いうえ、その中でも文字列のやり取りに強かったため。
  • Python・Rubyなどのほか、C,C++等をコンパイルしたバイナリも存在する。拡張子はcgiが多いが自由に決められる。
  • 一般的にPHPに比べて遅いとされるが、それはサーバーがシステムに投げてる手間がかかるため。

例えばApacheの場合、mod_perlなどでApacheのmoduleとしてPerlなどを動かせば(つまりCGIでないようにすれば)高速になる。

  • PHP

    • CGI方式のPHPもあるが、普通PHPと言うとサーバーのmoduleとして動かしているもの、つまりCGIではないPHPを指すことが多いので項を分けた。
    • 手軽さから、サーバーサイドプログラムとして人気が高い。レンタルサーバーでもPHPだけは入ってるということがよくある。
      • 当wiki自体がphp製。
  • サーブレット/JSP

    • Javaで記述。JSPではPHPのようにHTMLにコードを埋め込むカタチで記述できる。
    • 個人のページではあまり使用されているのを見ないが、企業では良く使われる。
    • 低価格なレンタルサーバーでは利用できないことが多かったが、Google App Engineというサービスで利用できるようになったため若干敷居が低くなった。
  • ASP.NET

    • .NET言語(主にC#)で記述。Windows系サーバーほぼ限定。拡張子はaspx
    • Microsoftのページなどで見れる。それなりに個人利用もあるようだが、やはり企業での使用が中心

WEBページを作りたい (HTML、CSS、JavaScript)#

以下の3つはどれも知っておいたほうがよい。

  • HTML

    • 「

      俺は見出しだ

      」「

      僕は段落だ

      」「私は題名です」というように、決められたタグで囲って構造を宣言しておくテキスト。
    • 基本的には文書である。だから「使える言語はHTMLです」がジョークになるのだ。
    • いろいろ規格があったがHTML5に至って落ち着いた。
  • CSS

    • ページの見た目を担当する。
    • 位置・色・字の大きさなど設定できるのはもちろん、「要素がマウスオーバーでぷるぷる震える」といった効果もCSSだけで出来るようになった。
  • JavaScript

    • CGIのようなサーバーサイドプログラムではなく、これはブラウザ(クライアント)側で実行される。
    • 一番簡単な例だと「右クリック禁止!」みたいなアラート出したり。
    • 要素でゲームを作ったり、Ajaxでサーバー側と連携して動的にページの一部を書き換えたり、割と何でもできるようになった。
      Linuxエミュレータとか動画エンコーダーといった狂気の成果物もあるほどだ。

とにかくいろいろやりたい#

とりあえず、

  • コンパイラ系(C/C++、Java、C#など)から一つ
  • スクリプト系(Perl、Python、Rubyなど)から一つ
  • サーバサイドWeb系(CGI、PHP、JSP、ASP.NETなど)から一つ
  • クライアントサイドWeb系(HTML、CSS、JavaScript)から一つ

といった感じで身につけていくのはどうでしょうか。コンパイラ系とスクリプト系はどちらからでもかまいません。
また、関数型言語(Lisp、Ocaml、Haskellなど)の世界に足を突っ込んでみるのも楽しいかもしれません。
さらにPrologなどの論理型言語と呼ばれるものもあります。

Mac/iOSを擦りたい(Objective-C)#

Xcode (Project Builder)を入れるといいよ。Xcodeでのアプリケーションは次のどれかとなるはずです。

  • Objective-C(Cocoa API)
  • Objective-C++
  • C++
  • Java(Cocoa API)
  • Python(Cocoa API)
  • Ruby(Cocoa API)
  • AppleScript
  • JavaScript

Objective-Cが今いちマイナーな言語ですから、言語の紹介を得るのが難しいですが、それなりにドキュメントは揃ってるようです。

Python や Java、Ruby は Objective-C の Cocoa API が使えます。

AppleScriptはコンパイルして保存した物を独立したアプリケーションとして使用できます。プログラムで遣う配列やらの概念と簡単な英文法を知っていればすぐ理解できるはずです。

プログラミングを楽しみたい#

プログラミングを楽しみたい人やプログラミング自体を勉強したいという方は、
余計なことをあまり考えなくていいPythonやRubyといったスクリプト系がいいと思います。
どちらも、WebのCGIプログラムからGUI、ゲームなどなど色々なものが作れますから、
実用的にも覚えておいて損はないと思います。

スーパープログラマになりたい#

スーパープログラマと人々に呼んでもらうためには、「どの言語を使うか」より「何を作るか」の方が重要です。
最近では、DHHという人がそれまで海外ではあまり普及していなかったRubyでRuby On Railsというソフトウェアを作り、一躍時の人となりました。
Ruby On Rails以降、海外でRubyの書籍は一気に10倍以上売れるようになったそうです。
頑張って超格好良いソフトを作ろう!

OSたんを作りたい(アセンブリ)#

  • 初心者にはまったくお勧めできない。プログラマなら一度は憧れるOS開発。ネットワークやCPUなどの物理レベルの知識を一通り身に付けた後に挑戦し、CUIのOSを作ると言うのが趣味レベルでの流れ。
  • OS自作本に従い、以下を並行していくとよいだろう
    • アセンブリ!これさえあれば怖いものなし!
    • Cのお勉強をすれば、Linuxカーネルのソースコードが読めるようになるぞ。
    • OSの知識を得る。タネンバウムのOS本など。
  • 「30日でできる! OS自作入門」が日本語書籍で筆者がお勧めする書籍。それなりに簡単。
  • ハードウェアの変化に伴い、UEFIで高級言語の恩恵を受けられるようになった一方、入力装置が鬼門になっているらしい

世を統べる真理を実装したい(人生、宇宙、すべての答え*1を求める)#

  • そんなアレげなことを望むあなたにはLispをおすすめします。
    Lispは歴史が古く、パンチカードでコンピュータが動いていた1950年に生まれました。~
    人工知能の開発に使われたりするなどいろいろぶっ飛んだ言語です。
    一見すると括弧だらけで使い辛そうですが、学んだが最後あなたはきっとLispの持つ魔力に吸い寄せられるでしょう。現代に残る謎の言語です。
  • Lispは元々一つでしたが、拡張が進み、ある一定の共通性を持ったプログラミング言語の総称になっています。

なので厳密に言えば複数のLisp言語があります。これをLisp方言と言います。
方言により関数がちょいちょい変わったりするのでどれか一つの方言をマスターしてから、他の方言に手を出さないと混乱します。

  • 代表的なLisp方言
    • CommonLisp
    • Scheme
    • EmacsLisp
    • Clojure
  • CommonLispはLispの再統一を目指した言語でLispの事実上の標準方言です。

ですが、何が何だかわからない人はまず手始めにLisp方言の中でも教育向けと言われているSchemeをマスターしましょう。

彼女を作りたい#

  • 親から受け継いだ日本語…Priceless

世界を作り変えたい#

働きたい#

  • 親から受け継いだ日本語…Priceless
  • TOEIC750点くらいあると捗ります

  1. [42である。](https://ja.wikipedia.org/?curid=156092) ↩
📝 このページに誤りを見つけたら…  GitHubで報告(エンジニア向け)  ・  フォームで報告