• ベストアンサー

プログラミング言語の住み分けについて

はじめまして。ほぼ初心者です。 某書籍の一文なのですが、 A君「博士!CGIはPerlでつくるものなのですか?」 博士「いや、別にCでもC++でもなんでもいいんだよ」 私{・・・(メダパニ&コンヒュ)} 私{CGI・・・Common Gateway Interface、ということは、APIのようなものか?GetメソッドやらPostメソッドでのデータを受信?して処理できれば言語は何でもいい、ということだろうか???} 前提として、 言語は C/C++ Java Perl PHP Ruby VB(や.net系) ジャンル 組み込み系 Web系C/S(C側 S側) 非Web系C/S(C側 S側)(…クライアント側にWebブラウザを使わないものの意味です) 単体アプリ C/C++ C++はオブジェクト指向で、最もマシン語に近い。処理高速。 Java オブジェクト指向 WriteOnce(非OS依存) 処理時間は??? Perl 文字列処理が得意らしいが、たいていのことはできる??? PHP htmlに埋め込んで使うらしい。PHPのみのアプリはあるのか不明。 VB(や.net系) MS製品上でしか動かない。 ※Javaは、処理内容や動作環境によって、JSPとかAppletとか呼ばれる という知識があります。 ここで、疑問なのですが、これらのプログラミング言語の住み分けはどのようになっているのでしょうか? 私の持っている答えと疑問は以下のとおりです。 ・組み込み系ではマシン語に近いC/C++が使われる  ⇒組み込み系以外ではC/C++は使われないの?LinuxOSはアセンブリ?言語とC言語だったような。。OSに近い処理をするアプリではC/C++も現役? ・「いまやWebアプリ開発といえばJavaである」と偉い人が言っていた  ⇒RubyとかPHPとかとの住み分けはどのような感じ?"大は小を兼ねる"で、Javaさえできれば、RubyやPHPと同じものを作れるの?(手間隙は別として) ・サーバーサイドJavaという言葉があるくらいだから、Web系、非Web系を問わず、C/SシステムではC側もS側もJavaで作るのがよいの? ・Perlを用いて、文字列処理やテキスト処理を他の言語よりも簡易に処理することができる。GUI開発はできない。  ⇒Linux上でも動くアプリのGUI開発は、C/C++か、Javaでないと作れないの?(MS.netはMS製品上でしか動かないGUI開発なので除く)  ⇒例えば、FirefoxとかThunderBirdなんかはJava?それともC++? ・VB.net、VC#などはMSの製品上でしか動かない。  ⇒MS依存言語というところにあまり魅力を感じないのですが・・・。  ⇒Javaと例えばVB.netとで、同じアプリを作るときに、手間隙が同じだったらJavaで作ったほうがいいんじゃないの?それともその「手間隙」が大きく違ってくるの? ・Perlは文字列処理に強い。シェルの上位版みたいな感じらしい。  ⇒PHPとRubyのウリは一体何?Rubyはオブジェクト指向がウリらしいけど、オブジェクト指向の言語ならC++とJavaとか.netがあるし。。 ちょっと脱線します。 ・JavaScriptとhtmlで、Ajaxを作れる。動的な表示もお手の物。  ⇒ますますPHPとRubyの住み分けがわからない。。 まだまだいろいろあるのですが、脳内整理が出来てません・・。 各言語の得意とするところ(長所・短所)、Web系、非Web系C/Sシステムにおけるそれぞれの言語の住み分け、単体アプリはどれでも作れるのか。GUI開発をするにはどれがよいのか。。。 などなど、いろいろ調べたのですが、キチンと住み分けを図表示してくれているサイトはありませんでした。そもそも住み分けを図表示すること自体が無理なのかな?とか思ったりしました。 乱文で申し訳ありませんが、アドバイスをいただけたらと思います。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

COBOLに関しては、同じ作者の文章ですが以下のようなモノがあります。 百年の言語: http://practical-scheme.net/trans/hundred-j.html >「Eval」⇒Wikipediaも見てみましたが、今の私には難解すぎました…。 式評価の為の関数なんですが、まあ、あんま「Eval」自体は使わないんで(笑)。 基本的には「関数型言語のモデルを表現する為に」理論解説の為に導入されるようです。 詳しくはWikipediaのラムダ計算を参照して下さい(難しいんで、僕も良く分かっていません)。 http://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%A0%E3%83%80%E7%AE%97%E6%B3%95 >「最初に開発された時、Lispは9つの新しいアイディアを内包していた。」⇒6~9番目あたりにかけて「むむっ?」となってしまいました。要勉強です。 6:Lispは式だけで書いていきます。が……うん、確かに想像しづらいでしょうね。つまり、ロジックを記述する「地の文」ってのが無いんです。 7:これはPythonなんかにも受け継がれていますね。つまり、「何かをメモリに新たに格納」するんじゃなくって全て「参照」で形成されている、って事です(説明しづらいんですが)。 8~9はかなり難しいです。これはLispのマクロ記述の源になっているんですが、この「マクロ」が難しい(苦笑)。僕も良く分かってません(笑)。 単純に言うと、Lispってのは他の言語で見られる「構文」って程の「構文」が無いんです。全てリストとして表現された「式」で構成されていて、その式記述の約束事は (演算子 引数1 引数2 …) しかありません。しかも引数には別の「リストとされた式」と言うのを記述可能で、つまり式をどんどん「入れ子」で記述できる、と言うそれだけのシンプルな構造を持っているのです。 つまり、引数として設定された「式」の「評価(eval)」結果(普通の言語だと明示的にreturn「文」で返されるモノ)を外部の演算子に手渡しして…と言うような構造になってるんですね。 マクロはLispで記述されたテンプレートを設定してコンパイル時に展開しながら式を評価(eval)する、と言うような……ダメだ、こりゃ(笑)。全然説明になってませんね(笑)。まあ、要するにこれを使えば「全く新しい"構文"を使った言語をプログラム作成中に作れたり」「プログラムを書くプログラムを書ける」と言う事、です。僕はいまだにそんな目(必要性)にあった事はないんですが、Lispハッカーの方々は「日常茶飯事で」マクロを使っているようですね。 >「Cはあまりに低レベルな言語だ。」⇒C言語は高級言語と思っていたので「んんん?」となりました。Cはマシン語に近い いや、定義上は「Cは高級言語」ですよ。間違い無く。 ただ、慣用的な言い回しもあって、って事です。「Cは(高級言語の中では)マシン語に近い」と言うのがドンピシャですね。 実際、慣用的な言い回しではC言語は「高級アセンブラ」とか「80年代のアセンブラ」とか言われたりします。 >「Windows最強」 これ見る限り、貴方の反論の方が正しいような気がしますね。 思いつくまま補足を書くと、 win2kは安定性抜群!→現時点でのセキュリティはどうなん? VistaはAeroとかガジェットとかCoolすぎる!→LinuxのCompizの方がCoolです(笑)。Vista使っててもそう思うもん(笑)。 MS製品だけでどんなシステムも作れる→「どんな」と言うのはどう言う定義で言ってるのか知りませんが、「GNU」のツールだけでどんなシステムも作れないか?つまり強調する程の優位性は無いと思う。 Macはオレ絵を描かねーからいらないし→アメリカではMacは「ビジネス用コンピュータ」として売りたいんで、これはあくまで日本に於ける「宣伝」の影響。事実上、Macは登場時に「特にグラフィックに強い」マシンではなかった。恐らくCommodore Amigaには基本的能力で負けてたと思う。 また、Mac OSXではOSは事実上「UNIX」になったし、Intel Macになった時点で「Windows」も走らせられるようになった模様。そして、ある雑誌社のテストでは「Windows機」としては他メーカの製品より遥に速い処理速度を叩き出したらしい。従って、Macはある意味「最強のWindows機」になってしまってる。その人の言うMac像は明らかズレています。 Linuxに関しては全く貴方の仰る通りです。まあ、確かに「パッケージ管理システム」ってのが複数に分かれてる、ってのはデメリットの場合もありますがね。どうも「かなり素人に近い」、カーネル、ディストリビューション、パッケージ管理システムがごっちゃになった発言のようです。 多分、単純な話、その人の前でCompiz使えるLinuxディストロを何か入れてみて、3Dデスクトップをグルグルグルグル回転させて使って見せれば意見が変わる可能性もありますね(笑)。さっきも書きましたが、VistaのAeroより、LinuxのCompiz Fusionの方が「無駄にCool」だと思います(笑)。僕もWindow閉じるとき燃やしたりしてますし(笑)。 ちなみに、Vistaを模した、Vixtaと言うディストロもあります http://vixta.sourceforge.net/ >日経ソフトウェアのインタビューで「RubyはC言語で作っている」と仰ってました。 さっきの話じゃないですが、「Cは高級アセンブラ」のある意味実例に、「プログラミング言語を記述する言語として」Cは優秀だ、と言う事はあるんですよ。つまり、今後の動向の一つとしては、C言語は「直接アプリケーションを記述する」と言うよかは、「何か特定の問題に特化した言語を作成する」のがかなりの仕事の比率になっていくんじゃないかな、と。 例えばRubyに限らず、PythonなんかもC言語で記述されていますし、LispやSchemeなんかもC言語で記述されているケースが多いです。元々各言語は過去、アセンブリ言語で記述されてたらしいのですが、現時点では、ポータビリティと最適化のバランスではCにはかなわないんです。従って、一段抽象度を上げて、Cを経由して書く、と言う例が増えてきています。

miraise
質問者

お礼

お返事ありがとうございますっ。 個人的な諸事情でネットに触れることが出来ず、締め切り予定も過ぎてしまいました。お詫び申し上げます。 >百年の言語 興味深く読ませていただきました。ますます、Lisp(Lispハッカー)ってスゴいな・・。と思ってしまいました。 また、Lispの特徴について解説していただきありがとうございます。 いつかLispというものに触れる機会があったらぜひ触れてみたいな、と思いました。 >>「Windows最強」 >これ見る限り、貴方の反論の方が正しいような気がしますね。 については、うれしかったです♪ 今日も「先輩、LinuxにもGnomeとかKDEとかのXウインドウシステムはあるんですよ」って聞いたら、「そんなの、マイクロソフトがWindows3.1でPC業界に衝撃を突きつけたことのパクりだろ」と言われてしまいました。。やはりLinuxについての知識が薄い先輩のようです。VBをやっているのですが、VB.netではなく、VB6.0にこだわっていて、発言力が強いというか、言いくるめるのがうまいと言うか、見た目が怖いというか、とにかく「相手が格下だと判断したら押せ押せ、格上だと判断したらこびる」のヒトなので、あーこういう人が、10年後とかに「アタマのとんがった上司になるのかな~」なんて思ってしまいました(w あまりいい環境ではないので、ITスキルを身につけたら転職しようかな~とかいろいろ考えています(w 「言語の住み分け」の話からずいぶん脱線してしまいました(w さて、C言語を構造体、ポインタあたりまで一通りは扱えるようになったので、次は、Javaにすることにしました。 他の質問(qa567778.html)にて、 「私の体感ですが、JavaよりC++の方が3倍くらい面倒です。 よってJavaをおすすめします。」 という一文もあったので、Javaで、SJC-P資格やSJC-WC資格あたりを目標にがんばっていきたいと思います。 まだまだ駆け出しで、これから学ぶものも多いかと思いますが、この質問で、努力する初期ベクトルをうまく決めることが出来たと満足しています。 たびたびに渡るご回答、ありがとうございましたっ。

その他の回答 (4)

回答No.4

>Awk/Sedでも、CGI処理ができる、ということでしょうか? 分かりません(笑)。と言うより実例思いつかないんですよ(笑)。 例えば、日本のレンタルサーバ(特に無料)なんかでは「CGIはPerlしか使用出来ません」と言うケースが多いんですが、これはOSの問題じゃなくって、単に「インストールしてないから」とか「パスを通していないから」と言う理由です。これはレンタルサーバ会社の方針もあるでしょうし、そして言語によっては人気があったりなかったりするから、です(笑)。インストールしてても誰も使わん、とか(笑)。いずれにせよ「言語の能力」とは何の関係も無い話ですね。 SchemeもPythonもRubyも「CGI作成言語として実例がある」って事で例として挙げたまでです。もちろんAwk/SedでもCGI記述は可能かもしれませんが、単に「それだと作りづらい」って事もあるんでしょう。わざわざメンド臭い方法でプログラム書くよりは「書きやすい言語でプログラムを書く」方が生産性が高く、すぐ書ける、って事ですよね。 >えーと、これは、ウチの部長です(汗 あはははは(笑)。本当に「髪のとんがった上司」が実在するとは思いませんでした(笑)。 http://practical-scheme.net/trans/icad-j.html >「OpenOffice.org」はJava製なのかな? ANo.3氏によると、フルJavaで書かれているワケではなさそうですね。SUNだからJavaだろう、と言うのは軽率だったみたいです。かたじけない。 もちろんEclipse、ってのも思いついてはいたんですが、「開発環境をJavaで作った」と言うのはあまり説得力が無いな、と(笑)。多分それこそ「一般向けアプリケーション」だとThinkfree(オンラインのMicrosoft Officeみたいなモノ) http://www.thinkfree.co.jp/common/main.tfo くらいしか思いつかない、ってのが限界です。逆に言うと「これはJavaで書かれています!!!」と言うのは言語のネームヴァリューに反してあんま無い、って事なんでしょうね。意外なんですが。 まあ、「Javaで書かれたゲーム」ってのもあるにはありますが「これがJavaで…」って例には適しませんね(笑)。やっぱり、「実はあんま無いんだ」と言う事で(笑)。 >私の周りに「Windows最強だぜ!」というヒトがいて、影響力が強い人なので反論できなかったのですが、同じ意見の方がいてほっとしました(笑) まあ、だから「最強だぜ!」ってのは文脈によって違うでしょうしね。恐らくMacユーザーだったらそう言う意見は認めないでしょう(笑)。 一応、Windows(XP辺り?)はある程度良く出来たOSだとは思います。「使う分には」って事ですね。ただし、開発環境として……?と言うとまた違った感想になるんではないのか、と。 もちろん、全然「Linux最強!!!」って言う気はさらさら無いのですが、例えば、個人的にはAPIと言う概念とか、C++的なオブジェクト指向、なんて概念はWindows(と言うかホームユースのパソコン用OS)前提じゃないとあり得なかったのではないか、とか思っています。 と言うのもUNIXなんかは元々「OSに入ってるコードは全部自由に再利用して使え」ってスタンスなんで、そう言う概念は「当たり前過ぎて」育たないんじゃないか、と。 反面、コードが企業秘密で隠されてる場合、「再利用」しようが無いんですよ。結局「許された/提供された」コードしか利用出来ませんし、「意図的に」再利用出来るコードを作らないといけない。原則後者の方が負担が高い、とは思います(この辺は、UNIXの流儀とWindowsの流儀は違うと思います。後者はUNIXでは「車輪の再発明」と言って嫌われています・笑)。 いずれにせよ、僕の場合は、Vistaとオープンソースソフトの相性があまりにも悪すぎたんで(意図的なのか?)Vistaは使い物になんない、と判断してLinuxに鞍替えしたクチです。 >Linuxももっとメジャーになってくると見過ごされていたバグとかがもっと出てくるのかもしれませんが。 セキュリティアップデートの類は1~3日に一回ありますね。まあ、デスクトップ用途に限って、の話かもしれませんが。 >どの言語を勉強しよう・・・というのが決まらなかったのが難点です。。 いやいや、C言語をマスターしたんだったら、関数型言語のような「異質な」言語とかPrologみたいな面白そうな言語ならいざ知らず、どの言語へ移っても問題無いでしょう。多分(笑)。 特に目的はハッキリしているみたいなんで、単に ライブラリやフレームワークが目的に見合っているのか? で選べばいいと思います。あとは書きやすさ、とか。 現状ではJavaがいい、と思ってるんでしたら取りあえずJavaを使ってみれば良いんじゃないですか? あとは、次点候補くらいでRuby辺りを考えておけばいいのではないか?と思います。

miraise
質問者

お礼

ご回答ありがとうございますっ。 CGIはいろいろな言語で書けるのですね。 AmazonでCGIで検索すると、Perl/CGIとずら~っと出てくるので、オライリーの初めてのPerl くらいはやっておいても損はないかな、と思いました。 >「髪のとんがった上司」 のリンクはとても興味深かったのですが、とても難しかったです。何回か読んだのですが、まだ半分も理解できてないかも・・。そもそもLispを知らないので読みきれないのかな、とか。(名前だけなら知ってますが) でも、読んでみて、気になる点がいくつか ・「髪のとんがった上司は二つの性質を持っている。その性質とは: (a) 彼はテクノロジーに関して何も知らない。そして (b) 彼はテクノロジーに関して非常に強い意見を持っている。」⇒ウチの上司は奇跡を体現した人のようです(苦笑)何につけても「COBOLだと~」とくるので(a)も当てはまるかな、と。 ・「新しい言語を作るってことは、既に他の人がやったやり方よりうまく出来ると思うからそうするんだろう。実際、GoslingはJavaはC++にあるいくつかの問題を解決すべく設計されたとはっきりと述べている」⇒技術は日進月歩で、いまはJavaが大規模勢力(大規模看板?)を占めているけれど、他の言語も追随している。10年後には日本発hoge言語とか、新しいfoo言語、bar言語が出てくるんだろうな。 ・「Eval」⇒Wikipediaも見てみましたが、今の私には難解すぎました…。wikiのわからない単語それぞれのリンクを辿ったら、知識の迷宮に迷い込んでしまいました。心に留めておきます。 ・「最初に開発された時、Lispは9つの新しいアイディアを内包していた。」⇒6~9番目あたりにかけて「むむっ?」となってしまいました。要勉強です。 ・「だがこの世にある多くのプロジェクトの要求はさして高くない。それならもう手に馴染んでいて、目的に合わせたライブラリが充実している言語を使えばいい。」⇒ふむ。なるほど。 ・「ITAの記事には「一行のLispは20行のCコードを置き換えられる」とある。」⇒Lispってすげぇ…。 ・「Cはあまりに低レベルな言語だ。」⇒C言語は高級言語と思っていたので「んんん?」となりました。Cはマシン語に近い⇒たいていのことはできるけれど、用意された「マクロ」が少ない?⇒いちいち自分で関数を書かないといけない⇒「低レベル」ということ?要勉強です。

miraise
質問者

補足

例によって長くなってしまったので続きです。 >「Windows最強」 の先輩は、「win2kは安定性抜群!(*1)、winXPはデファクトスタンダード!(*2)、VistaはAeroとかガジェットとかCoolすぎる!(*3) MS製品だけでどんなシステムも作れる(*4)し、Macはオレ絵を描かねーからいらないし(*5)、Linuxは種類がたくさんあるからわかんねーし。rpmとか。(*6)」のような意見です。 それぞれ私が突っ込むと、 (*1):まぁ、win98はちょっとした負荷ですぐにブルーバックになったので安定性では納得ですが、SP4まであてると起動がめっちゃ遅い…。まぁ、安定してればそれくらいはいいか。 (*2):安定しているというのはそれなりに納得。 (*3):ウィジェットって、Mac OS Xのほうが先だったような…(うろ覚え)。 参考 http://www.atmarkit.co.jp/fwcr/rensai/imasara07/imasara07_1.html そもそもLonghorn でウリにしてた三大機能はどうなの? Avalon⇒新しいGUIである「Aero Glass」として実装。でも、Linuxにも3Dデスクトップはあると思うんだけども。 Indigo⇒新しいネットワークサービスモデル⇒これはどうなった? WinFS⇒RDBシステムを活かしたデータストレージシステムらしいけど、いつまで先送り? ついでに、 OpenDocument Format(ODF)がISO認定を受けたにも関わらず、独自のMicrosoft Office用のOffice Open XML(OOXML)をISO承認させようとして、また自社規格のごり押ししてないか? 参考 http://enterprise.watch.impress.co.jp/cda/foreign/2008/02/19/12278.html (*4):特定の企業に依存したアーキテクチャー=顧客のメリット ではないんじゃないんだろうか? (*5):Mac=絵描きのマシン って先入観はどこで身につけた…。。詳しくないけどそんなことはないだろう。 (*6):ディストリビューションのことを言っているのか、rpmとdpkgを混同しているのか、よくわからないです。毎回言ってる事がズレるので。ディストリビューションならカーネルは(たぶん)同じだから好きなの選べばいいし、パッケージ管理のことならrpmとdpkgの変換をすればいいだけなのでは…。ここについてはナゾです。。 なんだか、蛇足の話で大部分を使い果たしてしまいました…orz >いやいや、C言語をマスターしたんだったら~ いやいや、マスターなんてしてないです(汗 print文から始まって、構造体にあらかじめデータを入れておいて、それをポインタで参照して取り出すとか、検索するとか、その程度です。。DBとの連携のプログラムもできないし、Socketの使い方もわからないし、VC++とか使わないでスクラッチから作るにはWebと本との間をかなりにらめっこしないと…。 会社の研修だけじゃ足りなかったので、独学で C言語プログラミング (Computer Science Textbook) (単行本(ソフトカバー)) ハーベイ・M. ダイテル (著), ポール・J. ダイテル (著), Harvey M. Deitel (原著), Paul J. Deitel (原著), 小嶋 隆一 (翻訳) http://www.amazon.co.jp/C%E8%A8%80%E8%AA%9E%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-Computer-Science-Textbook-%E3%83%8F%E3%83%BC%E3%83%99%E3%82%A4%E3%83%BBM/dp/4894710293/ref=sr_1_1?ie=UTF8&s=books&qid=1204666155&sr=8-1 を一通りやった程度です(汗 >ライブラリやフレームワークが目的に見合っているのか? はとても参考になるご意見でした。ありがとうございますっ。 Javaには、Webアプリ用のフレームワークStrutsだけじゃなくて、AWTの他にSwingとかのGUI用ライブラリがあるみたいなので、とりあえずJavaをやってみることにします。フレームワークとライブラリの違いは、調べてみたら「フレームワークはパッケージの集合、クラスとインタフェースの集合であるという点では、クラス・ライブラリと同じなのですが、大きく違う点が一つあります。それは、全体として一つのアプリケーションとして機能するように、相互の連携が緊密になっているということです」とありました。よくわかりません(汗 これから勉強していきます。 それと、Rubyは、まつもとゆきひろさんが、日経ソフトウェアのインタビューで「RubyはC言語で作っている」と仰ってました。なんだか近親感を感じるので、Rubyも調べてみます。Rubyは「オブジェクト指向スクリプト言語」らしいので、Javaとは別にスクリプト言語も身につけておきたいな、というのもあるので、脳が筋肉にならないうちにいろいろトライしてみたいと思いますっ。 ※今度こそ、今日の昼過ぎか、夜に締め切りにさせていただきます。貴重なご意見、アドバイス、大変感謝いたします。

  • gon987
  • ベストアンサー率16% (53/312)
回答No.3

>Perlを用いて、文字列処理やテキスト処理を他の言語よりも簡易に処理することができる。GUI開発はできない。 Perl/Tkなんて利用方法でつくれます。 Perlの正規表現がワイルドカードくらいしか使えない言語に比べて 文字列処理に有効です。 ただし今は各種言語に正規表現の機能が組み込まれていたり拡張ライブラリがありその有効性は他の言語でも利用できるようになっています。 >VB.net、VC#などはMSの製品上でしか動かない。 .NET Framework環境をがんばって移植しようとしているプロジェクト(Mono)はあります。 まだ実用面では微妙ですけどMSが非商用利用に限り仕様文書を公開しそれを利用できるようなのでそれにより精度があがる可能性はあります。 >・JavaScriptとhtmlで、Ajaxを作れる。動的な表示もお手の物。 クライアントサイドで > ⇒ますますPHPとRubyの住み分けがわからない。 結局サーバサイドでは各種言語が必要。 >Javaは万能じゃあありません。(他にも、OpenOffice.orgは重いですし) 一部機能でJavaを利用するだけでOpenOffice.orgはJavaで作られたアプリではありません。 Javaで作られた有名なツールといえばeclipseでしょうかね。 もっともこれをピュアなJavaとはいえませんけど(SWTを利用しているためにOS依存な部分が出てきてしまっています。) >PHPはあまり詳しくはないんですが、原則Apacheと言うWebサーバーソフト上で動く言語です。サーバー負荷が少ない、と言う利点があるそうです。 動きません。 Apacheのモジュールを利用してApacheとPHPが連携しているだけです。

miraise
質問者

お礼

補足のご回答ありがとうございますっ。 Monoなんていうプロジェクトもあるんですね。 逆に言うと、Windows上でLinux?を動かすCygwinなんていうのもありますね。 >結局サーバサイドでは各種言語が必要。 というところに落ち着くのですね。。 いまは、C言語ができる(もちろん、深く理解しているわけではありません)のですが、 ・Web系のアプリ開発(例えば、このサイトのようなブラウザを介してデータのやり取りをするようなアプリ(サイト)や、メッセンジャーや東風荘のような、サーバーとデータのやり取りをするようなGUIアプリケーションを作りたい、そういうものを作る分野に進みたい、と思っているのですが、まず取り組む言語としては何がオススメでしょうか? プラットフォームは、MSではないほうがいいのですが。 できれば、Linux上で開発して、LinuxでもWindowsでも、コンパイルし直したりといった少しの手間で同じように動作するものがいいです。 というのも、WindowsのサーバーよりもLinuxやFreeBSD、Unixのサーバーのほうがはるかに多い、と聞かされているのと、やはり一社に依存した技術では、ユーザーにとって最適なアーキテクチャーは構築できないんじゃないかな・・・と思うからです。 Javaでeclipseを使ってGUI開発をする、というあたりからはじめようかと思っています。 アドバイスがありましたらよろしくお願いいたします。 ※締め切りはもう少し延ばすことにしました。

回答No.2

ちょっと長くなるんで分けますが、 >組み込み系ではマシン語に近いC/C++が使われる どころか組み込み系ではマシン語までもが現役だと思いますよ。 >OSに近い処理をするアプリではC/C++も現役? 現役です。 >「いまやWebアプリ開発といえばJavaである」と偉い人が言っていた 誰でしょう、その偉い人って(笑)? むしろ、ユーザーサイドにたってもJavaは問題が大きいです。 全てサーバーサイド上の処理ならともかく、実行する為にJREのダウンロードが必要、ってのはメンド臭いだけでしょう。しかもThinkfreeのようにLinuxでは動かないケースもあるんでJavaは万能じゃあありません。(他にも、OpenOffice.orgは重いですし) むしろJava離れが始まってる、って言ってもいいんじゃないか、とか思っています。 >RubyとかPHPとかとの住み分けはどのような感じ? RubyはPerlよりも「キレイな」ソース書きたい人に人気があります。言語そのものの「表現能力」に惚れ込んだ人であるとか。同じ事やらせるのなら「よりエレガントに書く」方が短く書けますしね。現時点では、そう言う「こだわりがある人」に人気があります。 「より進化したPerl」と言えば語弊があるかもしれませんが、まあ、そんなモノです。 PHPはあまり詳しくはないんですが、原則Apacheと言うWebサーバーソフト上で動く言語です。サーバー負荷が少ない、と言う利点があるそうです。 いずれにせよ、Perl、Ruby、PHPは原則全て「サーバーサイドで」動くので、Javaと直接競合する事は無いでしょう。 >Perlを用いて、文字列処理やテキスト処理を他の言語よりも簡易に処理することができる。GUI開発はできない。 なんて事も無いです。Perl用のGUIライブラリもあります。 例えばwxPerlとか。 http://wxperl.sourceforge.net/about.html こう言うのも、前述したように「ライブラリ次第」です。 >Linux上でも動くアプリのGUI開発は、C/C++か、Javaでないと作れないの? んな事無いです(笑)。前述の通り、Linuxでは「ほぼ全ての言語が」問題無く動作します。恐らく入手出来る言語の数はWindowsの比じゃないでしょう。お好みだったらHaskellなんてマイナー言語でもアプリ開発は出来ますよ。 数としては、現在はPythonで書かれたアプリが増えてきてる、とは思います。 >FirefoxとかThunderBirdなんかはJava?それともC++? C++の他にもJavaScriptとかXULと言う言語を組み合わせて書かれているようですね。 >MS依存言語というところにあまり魅力を感じないのですが・・・。 感じないで良いです(笑)。クロスプラットフォームの言語を覚えた方が有用でしょう。 >Javaと例えばVB.netとで、同じアプリを作るときに、手間隙が同じだったらJavaで作ったほうがいいんじゃないの?それともその「手間隙」が大きく違ってくるの? Windowsで走らせるんだったらVBで充分でしょう。ただし、「Windows上でだけで走らせる」と言うのがそもそも賢い選択だとも思えませんが。 そしてJavaで作るんだったら「もっと簡単で使いやすい言語があるだろ」って事ですね。 >Perlは文字列処理に強い。シェルの上位版みたいな感じらしい。 全然違います。シェル自体も「アプリケーション」であって、「プログラミング言語そのもの」ではありません(まあ、シェルスクリプトの事を言ってるのがもしれませんが)。 ただし、PC-UNIXなんかで古典的に使われている「文字列処理用言語」はAwkとかSedの事です。 >PHPとRubyのウリは一体何?Rubyはオブジェクト指向がウリらしいけど、オブジェクト指向の言語ならC++とJavaとか.netがあるし。。 これも勘違いされていますが、実は「オブジェクト指向」ってのは定義がハッキリしていません。実装=定義の気がありますし、もっと言っちゃえば言語作成者が「これはオブジェクト指向です」って言ってしまえばオブジェクト指向となります(かなり乱暴ですがね・笑)。 当然、後発の言語の方が、色々な問題を解決してる、と単純に考えて間違いないでしょう。

miraise
質問者

お礼

引き続き、ご回答ありがとうございますっ。 >>「いまやWebアプリ開発といえばJavaである」と偉い人が言っていた えーと、これは、ウチの部長です(汗 COBOLを25年間やってきたヒトらしいのですが、この話には続きがあって「いまやWebアプリ開発といえばJavaである!しかし!官公庁ではCOBOLが現役である!したがって、諸君がこれからCOBOLを学ぶことはエンジニアとして非常に強みとなる!また、VB5.0やVB6.0のような、開発効率の良い言語を身に着ける事で諸君は市場でも希少価値の高いエンジニアになることができるのである!」と力説していました。 日経コンピュータかなんかの雑誌で、官公庁のプログラムがCOBOLからJavaに置き換えられている、という話を読んだことがあるのですが、そういう仕事をする際にはCOBOLを知っていると「強い」のでしょうが、何もCOBOLの仕事につくのかもわからないのにわざわざ学ばなくったって・・・と思いました。VBについても同じく・・・。みんな真剣に聞き入っていましたが、私は内心「『希少価値の高いエンジニアになれる』ってホントかよっ」って思っていました。個人的には、最先端の技術と、特定の分野の業務知識を身につけたほうが『希少価値の高いエンジニアになれる』気がします・・・。 話がそれてしまいました。 C/C++ ~ Javaについては勉強になりました。 途中「Thinkfree」ってなんぞ?とか「OpenOffice.org」はJava製なのかな?と思った点がありましたが、調べてみます。調べるのも勉強のうちですね。むしろうまく調べられないヒトのほうがマズい気もします。・・・ってこうして質問してる私か・・・orz >いずれにせよ、Perl、Ruby、PHPは原則全て「サーバーサイドで」動くので、Javaと直接競合する事は無いでしょう。 この点について、JavaにはJSPがなかったっけ?と思って調べてみたら、@ITのサイトに「JSPとPHPを比較する」という記事がありました。 http://www.atmarkit.co.jp/fjava/rensai3/tomcat01/tomcat01.html JSPはサーバーに「JSP対応コンテナ」なるものが必要なようで、 >むしろJava離れが始まってる、って言ってもいいんじゃないか を後押しするような印象でした(サーバー側とはいえ、わざわざ「JSP対応コンテナ」なるものをいちいちいれるのは面倒くさい・・)。あとは、開発規模とか、保守性によってどれを選ぶか、という感じなのかもしれないなと思いました。

miraise
質問者

補足

お礼が長くなってしまったので、補足欄に続きを書きます。 >>Perlを用いて~GUI開発はできない。 >んな事無いです(笑)。 これについては、まったくの勉強不足です。参考リンク、とても勉強になりました。 また、FirefoxとかThunderBirdはC++ベースなのですね。確かに、どちらもLinux版、Windows32版、なんていう風にありますね。JavaはWriteOnceなので、~版、とある時点でC++かな、と気づいてもよかったんじゃないか、と反省です。~版、とあっても圧縮形式がtarかZipかの違いだけで中身は一緒、というのもあるのかもしれませんが。他にJavaScriptとかXUL??なんていうのも使われているのですね。興味があるので今度調べてみます。 >>MS依存言語というところにあまり魅力を感じないのですが・・・。 >感じないで良いです(笑)。 はよかったです。私の周りに「Windows最強だぜ!」というヒトがいて、影響力が強い人なので反論できなかったのですが、同じ意見の方がいてほっとしました(笑) 個人的には、bug fixをばんばん出して、それをまとめてサービスパックといかにもお得な感じの響きをさせてるけど、中身はほとんどバグ修正じゃんかっ!とか思っていました。 Linuxももっとメジャーになってくると見過ごされていたバグとかがもっと出てくるのかもしれませんが。 Perlと、PHP・Rubyのオブジェクト指向の誤解についてはご指摘いただいてありがとうございます。知らないまま突っ走ってしまうところでした(汗。オブジェクト指向の次?にアスペクト志向というのがあるそうですが、ここら辺も興味があるのでまとめて調べなおしてみます。 ただ、いろいろご意見をいただいて、結局のところ、どの言語を勉強しよう・・・というのが決まらなかったのが難点です。。 C言語はできるので、「Javaで作るんだったら「もっと簡単で使いやすい言語があるだろ」って事ですね。」と仰っていましたが、Web系の開発をしたい(ブラウザとサーバでやりとりするような開発(表現があいまいですみません。。))のでJavaを勉強しようかな、と思っています。 これだけだとそのほかの言語でもいいのですが、そのほか、GUIアプリも作りたいので、AWTとかいうのを使えばできるみたいだし、Javaにしようか、と。調べてみたら「AWT(Abstract Window Toolkit)はJavaの基本GUIライブラリである。 ... ただしAWTの拡張は現在も進んでおり、最終的には他のGUIクラスライブラリと遜色のない機能が提供されることを期待したい。」とかあって、敷居が高そう・・ですが、「Java GUIコンポーネント完全制覇」とかいう本があるみたいなので、Javaにしようかな、と。 他にも「実はJavaってEclipseのようなIDEを使えばLL(language laboratoryの略、軽量プログラミング言語)以上に楽な開発出来るんじゃないか」という書評の載っていた「創るJava 改訂第2版 ~NetBeansでつくって学ぶ Java GUI & Webアプリケーション」あたりを立ち読みに行ってみようかな、と思っています。 もしオススメ言語や、コレ勉強してからコレやっとけ!その際にはこのライブラリを要チェックだ!のようなものがありましたらご紹介ください。 なお、十分満足する回答が得られたので、本日昼過ぎくらいに締め切りにする予定です。

回答No.1

住み分けってあるのかしら? 個人的には >そもそも住み分けを図表示すること自体が無理なのかな?とか思ったりしました。 と言うのが一番的確なんじゃないか、とか思ったりして。 一つ、前提として、「住み分けてる」と言っても考えられる理由は3つくらいあるでしょう。 1.あるOS上でその言語が相性がいいから。 2.「プロ」のソフトウェア製作会社ではある特定の言語に偏る傾向がある。 3.手軽にプログラムを書ける「ライブラリ」が充実してたりしてなかったりする。 1番のケースから言うと、これはWindows側の視点とLinux等のPOSIXの視点とでまた違うんじゃないかな、とか思います。 基本的にLinuxやFreeBSDの「PC-UNIX系OS」だと「どんな言語でも」インストールされてさえいれば相性が良いです。Windowsのような「Microsoft独特の制限」が無いから、ですね。 サーバー分野でPC-UNIX系のOSが使われている以上、そうなるとCGIを記述する言語は何でも良い、と言う事になります。つまり、別にC言語なんかでCGIを記述しても構いませんし、またはSchemeなんかのマイナー言語でCGIを記述する事も可能です。特に「どれが向いてる?」ってワケではないですよね。単に「書きやすいか否か?」ってのが重要で、そんな理由で「一番手っ取り早くソースを記述出来る」「Awk/Sedに代わるテキスト処理向きの」Perlが愛用された、ってだけです。まずこの観点から言うと「Windows側の視点」と「PC-UNIX側の視点」ってのは食い違ってきますね。(実際、海外でメジャーなモノにPythonでのCGIもありますし、日本国内でもRubyのCGI、なんてのもあります) 2番に関しては知りません(笑)。これは実際にソフトハウスに勤めている方に訊かないと分からないでしょうが、原則「Web系の会社」と「Windows用のスタンドアロンのソフト製作会社」でも意見が違うでしょうね。恐らく「こう言った言語を使ってくれ」と言う縛りは後者の方が大きいんじゃないでしょうか?前者だと「ほぼどんな言語を使っても目的を達成さえ出来ればオーケー」でしょうが、後者だとWindowsの制限が(笑)。あとは慣習的な問題もあると思います。長年使ってる言語を使った方がノウハウも溜まってるでしょうし。 3番が結構大事なんじゃないかな、と個人的には思います。JavaScriptみたいに「Webブラウザ上での実行」が前提ならともかく、単に「一から全てを組み上げるのはメンド臭いの法則」ってのがあるのです(笑)。例えばクイックソートのアルゴリズムを「学校の宿題だから自分で書く」のは大事な勉強ですが、実際ソフトウェアを作るときに一々そんなアルゴリズムを毎回毎回書くのはメンド臭いです。だったら使いまわし可能なソーティングの「ライブラリ」を呼び出せば済む程度の方がありがたい、と。そう言う「再利用の必要性」と言うのが色んなレベルで起きてきます。 と言うことは、重要なのは「言語そのものの特質」ってのは2の次で、「豊富な再利用可能なライブラリを備えているのか?」の方が大事なんです。自分がやりたい特定分野に使えそうなライブラリがあるのか?って事です。これが一番「住み分け」が出来る原因でしょう。 結局、ある特定分野で人気が出る、と言うのはそれ専用のライブラリが元々充実してて、また、それ故にユーザーや開発者が多数参加してくれて、そのお陰でまたもやライブラリが充実していく、と。それが原因でしょうね。「好循環が起こる」と。ただし、それは原則的に「本質的な言語の能力」とは関係ないと思います。

miraise
質問者

お礼

ご回答ありがとうございますっ。 >個人的には >>そもそも住み分けを図表示すること自体が無理なのかな?とか思ったりしました。 >と言うのが一番的確なんじゃないか、とか思ったりして。 に、「おおっ、おいら意外といいとこ突いてるっ」とびっくりしました(笑) >1.あるOS上でその言語が相性がいいから。 なるほど、です。LinuxとかのPC-UNIX系OS(と言うんですね。勉強になりました)は、どの言語とも相性がいい、というのはうれしいですね。 ただ、『「Awk/Sedに代わるテキスト処理向きの」Perlが愛用された』とありますが、これは、Awk/Sedでも、CGI処理ができる、ということでしょうか? >海外でメジャーなモノにPythonでのCGIもありますし、日本国内でもRubyのCGI は知りませんでした。勉強不足ですねっ(汗 >2.「プロ」のソフトウェア製作会社ではある特定の言語に偏る傾向がある。 >3.手軽にプログラムを書ける「ライブラリ」が充実してたりしてなかったりする。 こちらは、納得!と思いました。 特にライブラリについては、ある会社は独自のライブラリ群(コンポーネント群)を持っていてそれが開発効率の向上に役立っている、と聞いたことがあります。フューチャーアーキテクと、だったかな。何でも、「顧客にとって一番の製品の組み合わせを追求した」ところ、スクラッチから独自のコンポーネント群をつくりだしたそうです。直接聞いた話ではないんですが・・・。。

関連するQ&A