どの言語を学ぶべき?†
目的別で考えよう†
どの言語を学ぶかは、「何をやりたいか」で考えると良いと思います。
ゲームを作りたいとか、便利なツールを作りたいとか、そういう目標があれば楽しく学べるでしょう。
ゲームを作りたい†
- 一昔前はゲームといえばC/C++という感じでしたが(さらに前はアセンブリ言語)、
最近はPCの性能も上がり色々な言語が選べるようになってきました。
なので、定番のC/C++以外でのおススメを考えてみました。
しっかり学びたい方は少しくらい大変でもジャンルを問わずC/C++をやりましょう。
- 3Dバリバリなゲームを作りたい場合、ほぼC/C++になります。
最近ではC#もライブラリが充実してきています。
- 2DならJava、C#、DelphiなどGUIの作りやすい言語や、
ゲームライブラリのある言語(Pythonなど)がオススメです。
- また、ゲーム製作のための言語であるHSPや、
エンジン部分がRGSS(Rubyの仕様を勝手に改造したものらしいです)で記述され、さらにそのコードをいじることが出来るRPGツクールXPに、
高度なカスタマイズ機能を持つアドベンチャーゲーム製作環境吉里吉里/KAGなどもあります。
ゲームがつくりたいだけならこれらの言語、環境もおススメです。
有名どころでは、TypemoonのFate/Stay nightが吉里吉里/KAGで作られていたりします。(といってもアレはかなり改造されてるので吉里吉里とは別モンだとおもった方がいい)
GUIツールを作りたい†
- デスクトップで動くちょっとした小物(時計や電卓、システム情報を表示するソフトなど)のような小さめのGUIアプリを作りたい場合、
GUIアプリの製作が簡単なVisual BasicやDelphi、Java、C#、VB.NET、なでしこなどをオススメします。
ちょっとした作業を効率よくやりたい†
例えば、「nekomimiフォルダの中の全画像に対して、ファイル名の先頭に「neko_」とつけたい」などといった、日常でのちょっとした作業(でも、画像が100枚あったら大仕事ですよね)をささっとやりたい場合、スクリプト言語であるPerl、Ruby、Python、もしくはなでしこがおススメです。
Mac? MacでリネームするならAutomatorかAppleScriptの方が楽ですよ。
Web上で動くものを作りたい†
- 掲示板やwikiなどのサービスを作成したい場合、サーバで動くプログラムを作成することになります。
サーバでプログラムを動かすための仕組みとしては、
- CGI
- Common Gateway Interface(サーバーが、クライアントからのリクエストを受けたバイナリ、もしくは一行目にインタプリタの場所を指定してあるスクリプト言語のソースを実行し、その出力結果をクライアントに返すシステムのこと)の略なので、正確には言語の名前ではない。喩えば HTTPD(Apache) という「シェル」がリファラなんぞのリクエストヘッダを環境変数に追加してシェルスクリプトを実行している、と解釈できる。
- Perl、Ruby、Pythonなどが一般的で、C,C++等をコンパイルしたバイナリも存在する。拡張子はcgi(サーバの設定如何で変更可)。
- なぜスクリプト言語が主流かと言うと、コンパイルの手間がなく、保守性が高いため。また、どうしても"ユーザー<->サーバー"の双方向の"textでの"やり取りが多いために、文字列処理に特化しているPerlや、Perlから派生した言語が多い。
- 一般的にPHPに比べて遅いとされるが、それはサーバーがシステムに投げてる手間がかかるため。例えばApacheの場合、mod_perlなどを使って、ApacheのmoduleとしてPerlなどを動かせば(つまりCGIでないようにすれば)PHPよりもはるかに高速で、使うメモリも少なくて済む。
- PHP
- 普通PHPというと、サーバーのmoduleとして動かしているものを指すので、厳密にはPHPはCGIではない。(PHPをCGIとして動かすこともできる。)
- 一般的にCGIよりも高速で動作するが、それは前述のためであり、PHPの言語としてのスピードは言うほど速くない。
- サーバーの設定によっては、使える関数が制限されていることもある。
- CGIと違いHTMLに埋め込むため、どこまでがコードなのか判定しづらい。読みやすく感じるのはおそらくPerlの難読性との対比のため。
- 手軽さから、サーバーサイドプログラムとしては人気が高い。
- JSP
- Javaで記述。拡張子はjsp
- 個人のページではあまり使用されているのを見ないが、企業では良く使われる
- ASP.NET
- .NET言語(主にC#)で記述。Windows系サーバーほぼ限定。拡張子はaspx
- Microsoftのページなどで見れる。それなりに個人利用もあるようだが、やはり企業での使用が中心
- WebObjects
- 超マイナーなJava サーブレットの一種だけれど、数百万もしたものが、Mac OS X にはランセンスタダ同然で付いてくる。
- 比較的Cocoa の体系に近い(もともとObjective-Cだった)ぞ。iTunesStore や AppleStore はこれ。企業で(ry
- ちなみにMac OS X にはPerl、Ruby、Python、Module版PHPが最初から、10.5からはRuby on Rails までインスコされてるから、Apache を設定すればすぐ使える。
などがあります。おススメはPerl、Ruby、Pythonなどを用いたCGIやPHPです。
当然、他にHTMLの知識も必要になります。まあざつとこんな感じで。
HTML使うのってどうなの?†
最近流行りのページ構成はMVC的発想があるのでグラマ的にもおいしい所は充分にあると思う。てかHTML造ったのはNEXTSTEP使いのイギリス人グラマですよ。URL・HTTP・HTML・世界初のブラウザ、全部彼が原型を造ったてんだから、グラマだってんならこういう偉業を成し遂げたいと思わなく・・・ないかね?
- URI
- リソース識別子、とでも呼んでやりたい。今はURL(場所)、URN(名前)と役割分担してる。
- 世の中には色んな情報があるわけだけれど、これの場所を文字列で表現するという発想が元。
- 残念だけれど、横のつながりがない。ダウンロードしてきた画像を仕舞う時をイメージして欲しい。Aのフォルダにすべきか、Bのフォルダにすべきか、どこに分けるか悩む時がある。こんな時はどうしたらいいのだろう? 両方に入れるべきか、Cのフォルダに入れてA・Bにはリンクを貼る、まあ解決の仕方がないわけではない。後者の発想は、とりあえず簡潔で絶対的な名前(C)を作りそれから意味を表す名前(A、B)を作ることを表したつもり。
- Javaなんかでjava.langみたいな表現が有るけれど、階層表記の特性はIDLにゆずるとして、ともかく、URI的発想がいろんな所でいきてる。
- これは人間がカテゴリ化した情報を、どのように呼出し、どのように管理し、そしてどのように作るべきかの問いかけでもある。バージョン管理もいざ作ろうとすると悩むからね。
- HTML
- CSS(後述)みたいにいろいろ規格がある。そこにXHTMLを含めてやってもいい。
- XML的性格を追求したのがXHTMLだったけど、今後はHTMLという方針に戻りそうな気配。
- HTMLとXMLの違いは、HTML5のfooterやheaderを追加しようという話をみればよくわかる。
- 恆に下部に存在するfooterといった役割は、XMLからすれば本来デザインで決めるべきだが、HTML5ではfooterというタグ自体が画面の下部に存在することを表している。
- つまり「俺は見出しだ」「僕は段落だ」「私は題名です」ということを宣言させておいて、ブラウザはその内容をよく解析することでページを表示する。
- XMLというよりは、「ラテン語(SGML)の子供のフランス語」みたいに、Web のためのHTMLを目指し始めてる稀ガス。
- XMLはプログラムではシリアライズ(永続化)手段としてよく使われます。その触りとしてやってみるのもよかろう。
- JavaScript
- CGIだとかはサーバに実行させるプログラムだが、これはそうではない。ブラウザ(クライアント)に実行させるプログラム。
- JavaScript のコードをCGIで動的にサーバから返答させて実行する荒技もある。すぐ環境が準備できる点で便利。
- クライアントサイドという点では Javaアプレット や Adobe Flash(スクリプトはJavaScript風) という技術もある。
- CGIやPHP、そしてDB(Data base)との連携が極めて多い。ただ、ブラウザにより実装が異なる欠点が有る。
- 最近では、DBにSQL文を生成して投げる時さまざまな手法があるけれども、JavaScriptに投げたり投げられたりする。
- サーバでやるべきか、クライアントに処理させるべきか。良く判断してプログラムを組むべし。
- CSS
- デザインを分離するための方針。Design, Logic, Database, これの分離といった所。MVC に近い。
- CSS, CSS2, CSS3 といろいろあつて、IE以外は CSS2に結構対応できてる。CSS3 はまだ議論されてる。
- レガシーな CSS よりも CSS2 を今は重視すべきです。CSS3 は徐々に先行的対応が始まってます。
- CSS3の先行対応は、IEの組版(ruby, 縱書)、SafariのCSSアニメやCSSフォントや文字影、Firefox・Safariなどのborder-radiusなどです。
- Logic は JavaScript や CGIなど。Database は DB Server、HTMLのテキストもリソースなのでここに入れるといい。
- MVCのCはさしづめWeb ServerやBrowser。Databaseはサーバ以外にクライアント(JavaScript参照)が追加された。
- デザインはサーバから受け取るだけではなく、JavaScriptで動的に変更できる。コンテンツも同樣である。
- したがって Design, Logic, Database はサーバとクライアントの両方に存在することになる。適当に使い分けよ。
Flashを作りたい†
- Flashアニメや本格的なFlashゲームを作りたい場合、
ActionScript2.0、またはActionScript3.0をオススメします。
AS2であればフリーのツール「ParaFla!」や「Suzuka」がありますし、
AS3であれば公式で開発環境を無料でDLできるので入りやすいです。
最新版では、デスクトップアプリも作れるようになりました。
Adobe Flash の体験版を入れると、謹製のプレイヤーがついてきますよ。
とにかくいろいろやりたい†
とりあえず、
- コンパイラ系(C/C++、Java、C#など)から一つ
- スクリプト系(Perl、Ruby、Pythonなど)から一つ
- サーバサイドWeb系(CGI、PHP、JSP、ASP.NETなど)から一つ
- クライアントサイドWeb系(HTML、CSS、JavaScript、ActionScript)から一つ
といった感じで身につけていくのはどうでしょうか。コンパイラ系とスクリプト系はどちらからでもかまいません。
また、関数型言語(Lisp、Ocaml、Haskellなど)の世界に足を突っ込んでみるのも楽しいかもしれません。
さらにPrologなどの論理型言語と呼ばれるものもあります。
Python†
Pythonは、オブジェクト指向のプログラミング言語です。
初心者でも分かりやすいのですが、とても奥深い言語です。
習得が容易でありながら、アプリケーション作成、システム管理、ウェブプログラミングなど色々な事が出来ます。
C++やJavaと連携したCPython、Jythonなどもあるのでプログラマの方でも満足できると思います。
他には、IronPythonと言う.NET Framework上で動作するPythonまで出てます。
将来性に優れたPythonを始めても損はしないはずです。これを期にPythonを始めてはいかがでしょうか。
Mac っす(Objective-C)†
Carbon はやめたまへ。血をみるよ。サポート打切りの噂も絶えない。フツーのアプリなら Cocoa になさい。Xcode (Project Builder)を入れるといいよ。Mac OS なひとは今から何か作るのは無謀でないか。Xcodeでのアプリケーションは次のどれかとなるはづです。
- Objective-C(Cocoa API)
- Objective-C++
- C++
- Java(Cocoa API)
- Ruby(Cocoa API)
- Python(Cocoa API)
- AppleScript
- C(Carbon API)
- JavaScript
以外におもうかも知れないけど、C++があります。これは 低レベル系の開発で使うだけのようです。
Objective-C++はC++にObjective-Cの拡張部分をつなげたもので、SafariはObjective-C++で組まれているそうです。
Ruby や Java、Python は Objective-C の Cocoa API が使えます。先述の WebObjects ではWO5より Java化され、RubyやPythonはグルーとしてもですがRubyCocoaやPython Cocoaとして一般のアプリケーションも作れます。それからAppleはJavaScriptも力を入れて居て、Widget なんかはコレ。
AppleScriptは知らないとわからないけれど、AppleScriptは(コンパイルして)保存した物を独立したアプリケーションとして使用できます(実体はOSレベルで実行されるアプリケーションコマンドの塊?で、gccされたのとは違うよ)。QuickTime などの基幹機能は AppleScript を遣ってムービー変換ができたりする優れもの。Mac OS の昔はこれを日本語で書けたけれど今は知らない。UNIX コマンドの呼出し(及びシェルからのAppleScriptの呼出し)などの拡張が Mac OS X から増えてます。AppleScript はプログラムで遣う配列やらの概念と簡単な英文法を知っていればすぐ理解できるはづです。
他にも「Quartz Composer」で簡易スクリーンセーバ(本格的なのはXcodeで作る)ができたり。「WebObjects Builder」でのWebObjects開発は、WebObjects Builderのコードが古いために 10.5 からはできません。Audio Unit、Metadata Importer(Spotlight)、Quick Look Generator、Preference Panel(システム環境設定書類)など小物用のテンプレもXcodeには揃ってます。
上にも述べたけど、Web サーバ系の開発も可能です。また UNIX(カーネルである Darwin は BSD系で 10.5からはUNIXになりました)として使用することもできるので、シェルで遊ぶこともできましょう。Objective-Cが今いちマイナーな言語ですから、言語の紹介を得るのがむつかしいのですが、それなりにドキュメントは揃ってるようです。
iPhone アプリってどうなのさ(Objective-C/Objctive-C++)†
流行ってるみたいだね。SDK のダウンロードも結構多いとか。Mac OS X と同じ体系になるけど、微妙に違うので別項として扱うよ。
iPhone SDK の開発言語は Objective-C の模様。理解レベルは「Mac OS X アプリケーション開発に必要な知識(ここ重要)」と「iPhone 用に拡張された API 及び iPhone のハードとしての擧動」を知る必要があります。ですから、Mac OS X アプリケーション(Objective-C、Cocoa API)に就ても参照してみて下さい。基本的にはMac OS X アプリケーションを作る際に必要な知識が大きな比重を占め、iPhoneのみの理解はごくごくわづかな比重となるかと思います。言語理解とCocoaの理解は並行して進めるとよいでせう。
面白いのができたら App Store に発表するべし。SDKとドキュメントはアップルのサイトにある。http://developer.apple.com/iphone/
プログラミングを楽しみたい†
プログラミングを楽しみたい人やプログラミング自体を勉強したいという方は、
余計なことをあまり考えなくていいRubyやPythonといったスクリプト系がいいと思います。
どちらも、WebのCGIプログラムからGUI、ゲームなどなど色々なものが作れますから、
実用的にも覚えておいて損はないと思います。
スーパープログラマになりたい†
- スーパープログラマと人々に呼んでもらうためには、「どの言語を使うか」より「何を作るか」の方が重要です。
最近では、DHHという人がそれまで海外ではあまり普及していなかったRubyでRuby On Railsというソフトウェアを作り、一躍時の人となりました。
Ruby On Rails以降、海外でRubyの書籍は一気に10倍以上売れるようになったそうです。
頑張って超格好良いソフトを作ろう!
OSたんをつくりたい†
- アセンブリ!これさえあれば怖いものなし! --> Linuxのソースコードでもダウンロードしてお勉強しなさい。(Cです。) --> その前に本を読んでOSの基礎知識を固めなさい(日本語です。)-->「OS自作本」もあるよー。ググレ。
彼女を作りたい†
世界を作り変えたい†
働きたい†