アカウント名:
パスワード:
ライブラリが重要という意見はその通りだけど、でも、広く使われるようになる為に必要なのは使いやすいIDEだと思うよ。でなきゃ、VB(≠.net)があれだけ流行る理由がない。
スクリプト言語ならともかく、少なくともJavaに関しては少数派どころか害悪と言ってもいいですね。生産性が30倍は違う。
LL側から補足すると、例えば python では ipython などのインタラクティブシェルを併用することによってモジュールのメソッド補完・ドキュメントの参照・コードテストなどができます。私の良くあるスタイルはエディタ、コマンドライン、インタラクティブシェルの3つを併用ですね。まぁ、それが eclipse や DeveloperStudio に勝るとは考えていませんが、単なる慣れや好みということですね。
eclipseやVisualStudio(2005以降)を使い出したらとてもそんな昔の環境に戻れません。本当に生産性が数十倍違ってきます。
まぁその分ライブラリがなかなか覚えられないわけですが。インテリセンス便利過ぎ。
Eclipseですが、補完機能はもちろんのこと、リファクタリング機能がすごく便利です。
リファクタリングを前提として使うと、例えば変数名を簡単に変えられるので、変数名を考えるのを後回しに出来ます。str1, str2と適当に付けて、あとで意味を考えてsrc, destにするとか。
これが出来るのもJavaやC#が静的言語としてしっかりしてるからで、PHPやRuby、Pythonなどでは到底無理ですね。まあ、これらは動的言語としてのメリットがありますが。
スペースなどは、Visual Studioならメニューのツール→オプションのテキストエディタ→C#→書式設定などで少しはカスタマイズできます。足りない人にはこれでも全然足りないのでしょうけど。あと、Eclipseでも似たような設定があったはず。
IDEに頼らないとまともな生産性が得られない言語は、それだけで欠陥言語だと思う。
シェア拡大というか、広く受け入れられるには、もちろんライブラリが重要だと思います。否定するつもりは、これっぽっちもありません。
しかし、その前の段階で「おっ、これはなかなか面白そうだ。オレにもちょっと書かせろよ~」(byハッカーな人)的な言語仕様の筋のよさが船出の時期には必要で、それがライブラリの充実につながっていくと思います。
ない。ソースコードに加えて、言語拡張までメンテしなきゃいけない言語なんて誰が使うんだよ。
C++コミュニティみたいに「ほら、templateでこんな面白いことができた」と言語そのもので遊ぶことと、日曜プログラマが言語を使って遊べるものを作ることはユーザー層が違うということを理解すべき。
ソースコードに加えて、言語拡張までメンテしなきゃいけない言語なんて誰が使うんだよ。
それってまさにC++...
マクロを活用したプログラミングって問題分野に特化した新しい言語を作るのと等しいと思う。プロトタイピング専用言語とかだったらそれは有用だと思うけれど、Javaのようにあらゆるアプリケーションをカバーする言語にとってはデメリットが大きすぎる。そういうのが必要ならばLispやForthみたいなモノを使えばいいと思う。
たしかに、lispのマクロは特定の問題に特化させる言語を作り出すのですけれども、べつにそういった言語は「拡張にすぎない」のですから、元の言語が消えてなくなるわけじゃなし、全然問題ないと思います。
あらゆるアプリケーションを同時に扱うというのは、別に、超多機能の一つのプログラムが網の目のように絡まっているわけではないのですし・・・それってリファクタリングが必要でしょ?
で、lisperは分割したそれぞれの機能毎にそれぞれの言語を作る。その必要が無いときも多いですけれども。
JVM上で動くのだから過去のライブラリにかんしちゃ問題ないんでないの?
C++から複雑さを取り除いたことが売りの一つだったはずのJava言語が、今やジェネリックスだのアノテーションだのforeachだのを追加して複雑になっていくことへの批判だろ。
ジェネリックス→List等と書けるようになっただけでも十分進化。関係ない変なデータを入れるミスが減る&IDEの推測が洗練されるので、むしろ楽になってる。(toArray()がObject[]を返すのだけはどうにかしろって感じですが)アノテーション→メタデータをつけられるのは便利。ちゃちゃっとオーバーライド元の関数を調べたり、「過去のモジュール用に仕方なく残してあるんだから新規開発で使うなって言っただろ!」みたいなメソッドにマークをつけられたり。foreach→ループ変数の書き間違い(2重ループのなかでjにしなきゃいけないのにi使ってたとか)が減るって便利じゃないですか? いちいちint i=0; isize; i++って書くのもめんどくさいですし。
挙げられた例は当時「ようやく入ったか、何で今まで入れてなかったんだ」って不満に思っていたところなので、そこを複雑さって言われてしまうとちょっと納得しにくいです。
シンプル=最強ならBrainf*ck最強伝説ですよ。
> →List等と書けるようになっただけでも<>を消されちゃったんですねわかりますん。> toArray()がObject[]を返すのだけはどうにかしろtoArray(T [])じゃダメなの?
<>を消されちゃったんですねわかりますん。
ご推察の通りですorz 正しくはList<Integer>。そのもう少し下にある「isize」も「i<size」の誤り。プレビューで確認する癖をつけないといけませんね。
toArray(T [])じゃダメなの?
実際にはそちらを使ってます。ですけど、「IntegerのListだ」って予め教えてあるんですから、何も言わなくてもIntegerの配列を返してくれるのが自然な話じゃないですか。多分何か事情があってこうなったんでしょうけど…。
Map<K,V>::get(Object key)が結構きついputはちゃんとput(K key, V value)なので気付かずにやってしまいがちジェネリクス以前との互換性のためなのだろうか?
Java 言語が複雑になっていることは間違いないですし、C++ から複雑さを取り除いたはずなのにというのはおおむね同意なのですが。
人間も成長していますし、時代によって Java 言語に求められているちょうどいい複雑さというのは変わっていっていると思います。ですので、ジェネリクスやアノテーションが追加されたことが、Java 言語が思想とぶれていることにはならないかと。
また、ジェネリクスに関しても Java と C# を比べると、Java の方がシンプルだと思いますよ。
趣味でも仕事でもC++な私ですが、STLの使いやすさに惚れて、他の言語に移行できません。C++は人並み以上には使いこなしていると自負していますが、最近のJavaやC#には、C++に比べて「難しそう」という先入観があります。初期の頃のJavaやC#は多少使えますが、今はちょっと手を出すのが億劫です。
えーと、Netscapeから始まってMozillaになって、今度は更にFirefoxになって・・・・・・
習得しやすさとか、罠にはまらないという意味ではこの3つは別に複雑でも何でもない。
# この件についてはJavaで一番罠にはまりやすいフレームワークの作者が作った# 言語なんて程度は知れてると思うけど:P
どの言語も違いはライブラリ程度しかないと思ってるんだろうな。http://practical-scheme.net/trans/beating-the-averages-j.html [practical-scheme.net]まあAlgolの子孫たちしか知らないととくにそう思いがちだろうね。Algol自体はCall-by-nameというとんでもない機能を持ってたんだけどね。
とはいえ、優れた言語でアルゴリズムを工夫して、というようなプログラミングの楽しみよりも単純に既存のライブラリを利用して派手な仕事をすることに人々の関心が移ってきているのも事実でしょう。SICPを教えていたMITの授業も、最近ではPythonに切り替えたそうです。
JavaだってManglingはないし、ライブラリが最初から豊富ってことはないですよね。言語として何か売りとなるものが重要かと。例えばJavaはマルチスレッドが標準でサポートされているのが売りの一つだったし。
# 今の地位を決定的にしたのはEclipseによる、IDEとの相性の良さだと思うけど。
ライブラリが豊富すぎるのが問題なんじゃないですか、たぶん。Javaは成功したために無能が増えすぎて、彼らが車輪の再発明を繰り返しているとGoslingがどこかで言ってたような。このプロジェクトの目的は、Javaコミュニティに隔離場所を作りたいってことなんじゃないかと。Javaの言語仕様については、代入は := にすべきだとかブロックの使い方に不満があるとか、その程度のことしか思ってなさそう。いちおう関数型チックな機能もあるけど、すでにScalaがあるわけだし。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson
重要なのはライブラリ (スコア:2, すばらしい洞察)
世に受け入れられているのはライブラリが豊富だからです。
業務では仕様が安定している事も重要ですが、まずは趣味で使ってもらう事を考えると二の次。
DやらなにやらC/C++の汚さに業を煮やしてオレオレC言語を作ろうとする流れはよくありますが、
最初からよっぽど豊富なライブラリを備えていない限りは
既存のライブラリとリンクが出来ないと使う気が起きないわけですね。
となると最低限既存ライブラリとマングルを合わせる事が必要ですが、それでもまだ使う気が起きないので
既存ライブラリのヘッダファイルの読み込みもサポートして欲しいわけです。
そしたら結局既存言語のパーサーを備えなきゃいけないので、
じゃあ既存言語使えば良いじゃん、というジレンマ。
と、ここまで書きましたが、過去の不満点を改良した言語には期待しています。
Re:重要なのはライブラリ (スコア:3, すばらしい洞察)
ライブラリが重要という意見はその通りだけど、
でも、広く使われるようになる為に必要なのは使いやすいIDEだと思うよ。
でなきゃ、VB(≠.net)があれだけ流行る理由がない。
Re: (スコア:0)
私は、昔ながらのエディタと
コマンドラインからのコンパイラ呼び出しが好きですね。
そういう人って少数派なんですかね。
Re: (スコア:0)
スクリプト言語ならともかく、
少なくともJavaに関しては少数派どころか害悪と言ってもいいですね。
生産性が30倍は違う。
Re:重要なのはライブラリ (スコア:2, 参考になる)
LL側から補足すると、例えば python では ipython などのインタラクティブシェルを併用することによってモジュールのメソッド補完・ドキュメントの参照・コードテストなどができます。私の良くあるスタイルはエディタ、コマンドライン、インタラクティブシェルの3つを併用ですね。
まぁ、それが eclipse や DeveloperStudio に勝るとは考えていませんが、単なる慣れや好みということですね。
Re: (スコア:0)
eclipseやVisualStudio(2005以降)を使い出したらとてもそんな昔の環境に戻れません。
本当に生産性が数十倍違ってきます。
まぁその分ライブラリがなかなか覚えられないわけですが。
インテリセンス便利過ぎ。
Re:重要なのはライブラリ (スコア:1, 参考になる)
Eclipseですが、補完機能はもちろんのこと、
リファクタリング機能がすごく便利です。
リファクタリングを前提として使うと、
例えば変数名を簡単に変えられるので、変数名を考えるのを後回しに出来ます。
str1, str2と適当に付けて、あとで意味を考えてsrc, destにするとか。
これが出来るのもJavaやC#が静的言語としてしっかりしてるからで、
PHPやRuby、Pythonなどでは到底無理ですね。
まあ、これらは動的言語としてのメリットがありますが。
Re: (スコア:0)
インテリセンス便利ですね。私もそう思います。
が、その一方でスペースを自由に空けさせてもらえないとか、
括弧を自由に閉じさせてもらえないとかあって、
いまいち好きになれないんですよ。まあ、私の癖が悪いんでしょうが。
あと、プロジェクトフォルダに
わけの分からないファイルが自動生成されるのもちょっと...
プロジェクトをコピーしたいときに気になります。
私みたいな日曜プログラマじゃなくスキルの高いプロなら
そんなファイルのこともきちんと把握してるんでしょうけどね。
# Java の IDE についてはよく知りません。ごめんなさい。
Re: (スコア:0)
スペースなどは、Visual Studioならメニューのツール→オプションのテキストエディタ→C#→書式設定などで少しはカスタマイズできます。足りない人にはこれでも全然足りないのでしょうけど。あと、Eclipseでも似たような設定があったはず。
Re: (スコア:0)
有益な情報をありがとうございます。
おかげでずっと不満だった if,for,while などの後の中括弧が
好みの開き方にカスタマイズできました。
ただ、スペースはやっぱり好きにはできないみたいです。
私の癖は規則性がなくて行き当たりばったりなんです。
まてよ、オートフォーマットを無効にすればいいのか?
おお、うまくいった。うん、これで IDE が少し好きになれる。
Re: (スコア:0)
IDEに頼らないとまともな生産性が得られない言語は、それだけで欠陥言語だと思う。
Re:重要なのはライブラリ (スコア:2, すばらしい洞察)
シェア拡大というか、広く受け入れられるには、もちろんライブラリが重要だと思います。
否定するつもりは、これっぽっちもありません。
しかし、その前の段階で「おっ、これはなかなか面白そうだ。オレにもちょっと書かせろよ~」(byハッカーな人)的な
言語仕様の筋のよさが船出の時期には必要で、それがライブラリの充実につながっていくと思います。
yagiyama
Re: (スコア:0)
Re:重要なのはライブラリ (スコア:1, すばらしい洞察)
ない。
ソースコードに加えて、言語拡張までメンテしなきゃいけない言語なんて誰が使うんだよ。
C++コミュニティみたいに「ほら、templateでこんな面白いことができた」と言語そのもので遊ぶことと、
日曜プログラマが言語を使って遊べるものを作ることはユーザー層が違うということを理解すべき。
Re: (スコア:0)
それってまさにC++...
Re:重要なのはライブラリ (スコア:1)
マクロを活用したプログラミングって問題分野に特化した新しい言語を作るのと等しいと思う。
プロトタイピング専用言語とかだったらそれは有用だと思うけれど、Javaのようにあらゆるアプリケーションをカバーする言語にとってはデメリットが大きすぎる。
そういうのが必要ならばLispやForthみたいなモノを使えばいいと思う。
Re:重要なのはライブラリ (スコア:2)
たしかに、lispのマクロは特定の問題に特化させる言語を作り出すのですけれども、
べつにそういった言語は「拡張にすぎない」のですから、元の言語が消えてなくなるわけじゃなし、
全然問題ないと思います。
あらゆるアプリケーションを同時に扱うというのは、別に、
超多機能の一つのプログラムが網の目のように絡まっているわけではないのですし・・・
それってリファクタリングが必要でしょ?
で、lisperは分割したそれぞれの機能毎にそれぞれの言語を作る。
その必要が無いときも多いですけれども。
新人。プログラマレベルをポケモンで言うと、コラッタぐらい
Re: (スコア:0)
> 全然問題ないと思います。
ところがね、よほど優秀な奴が書いたのでない限り、マクロを駆使したプログラムって他人がメンテするのが大変なんだよ。
名うてのlisperのGoslingが、Javaにマクロもクロージャーすらも入れなかったことの意味を考えてみるといいよ。
Re: (スコア:0)
JVM上で動くのだから過去のライブラリにかんしちゃ問題ないんでないの?
Re: (スコア:0)
C++から複雑さを取り除いたことが売りの一つだったはずのJava言語が、
今やジェネリックスだのアノテーションだのforeachだのを追加して複雑になっていくことへの批判だろ。
Re:重要なのはライブラリ (スコア:2, 参考になる)
ジェネリックス
→List等と書けるようになっただけでも十分進化。関係ない変なデータを入れるミスが減る&IDEの推測が洗練されるので、むしろ楽になってる。(toArray()がObject[]を返すのだけはどうにかしろって感じですが)
アノテーション
→メタデータをつけられるのは便利。ちゃちゃっとオーバーライド元の関数を調べたり、「過去のモジュール用に仕方なく残してあるんだから新規開発で使うなって言っただろ!」みたいなメソッドにマークをつけられたり。
foreach
→ループ変数の書き間違い(2重ループのなかでjにしなきゃいけないのにi使ってたとか)が減るって便利じゃないですか? いちいちint i=0; isize; i++って書くのもめんどくさいですし。
挙げられた例は当時「ようやく入ったか、何で今まで入れてなかったんだ」って不満に思っていたところなので、そこを複雑さって言われてしまうとちょっと納得しにくいです。
シンプル=最強ならBrainf*ck最強伝説ですよ。
Re: (スコア:0)
> →List等と書けるようになっただけでも
<>を消されちゃったんですねわかりますん。
> toArray()がObject[]を返すのだけはどうにかしろ
toArray(T [])じゃダメなの?
Re:重要なのはライブラリ (スコア:1)
ご推察の通りですorz 正しくはList<Integer>。そのもう少し下にある「isize」も「i<size」の誤り。
プレビューで確認する癖をつけないといけませんね。
実際にはそちらを使ってます。ですけど、「IntegerのListだ」って予め教えてあるんですから、何も言わなくてもIntegerの配列を返してくれるのが自然な話じゃないですか。
多分何か事情があってこうなったんでしょうけど…。
Re: (スコア:0)
Map<K,V>::get(Object key)
が結構きつい
putはちゃんと
put(K key, V value)
なので気付かずにやってしまいがち
ジェネリクス以前との互換性のためなのだろうか?
Re: (スコア:0)
Re: (スコア:0)
型推論がないのが面倒で煩雑で。
Eclipseならnewだけ先に書いておいて、右クリックからローカル変数作成、でできるけど、
必ずしも欲しい宣言になるわけじゃないし、何より長ったらしい。
>アノテーション
独自アノテーション作って、必要なフィールドにだけつけといて、リフレクションで列挙してくのもたまにやる。
Re:重要なのはライブラリ (スコア:2)
Java 言語が複雑になっていることは間違いないですし、C++ から複雑さを取り除いたはずなのにというのはおおむね同意なのですが。
人間も成長していますし、時代によって Java 言語に求められているちょうどいい複雑さというのは変わっていっていると思います。ですので、ジェネリクスやアノテーションが追加されたことが、Java 言語が思想とぶれていることにはならないかと。
また、ジェネリクスに関しても Java と C# を比べると、Java の方がシンプルだと思いますよ。
Re:重要なのはライブラリ (スコア:1)
趣味でも仕事でもC++な私ですが、STLの使いやすさに惚れて、他の言語に移行できません。C++は人並み以上には使いこなしていると自負していますが、最近のJavaやC#には、C++に比べて「難しそう」という先入観があります。初期の頃のJavaやC#は多少使えますが、今はちょっと手を出すのが億劫です。
Re: (スコア:0)
えーと、Netscapeから始まってMozillaになって、今度は更にFirefoxになって・・・・・・
Re: (スコア:0)
習得しやすさとか、罠にはまらないという意味では
この3つは別に複雑でも何でもない。
# この件についてはJavaで一番罠にはまりやすいフレームワークの作者が作った
# 言語なんて程度は知れてると思うけど:P
Re: (スコア:0)
どの言語も違いはライブラリ程度しかないと思ってるんだろうな。
http://practical-scheme.net/trans/beating-the-averages-j.html [practical-scheme.net]
まあAlgolの子孫たちしか知らないととくにそう思いがちだろうね。Algol自体はCall-by-nameというとんでもない機能を持ってたんだけどね。
Re: (スコア:0)
> どの言語も違いはライブラリ程度しかないと思ってるんだろうな。
どうしてこうなるのか男の人って不思議。
Re: (スコア:0)
とはいえ、優れた言語でアルゴリズムを工夫して、というようなプログラミングの楽しみよりも
単純に既存のライブラリを利用して派手な仕事をすることに人々の関心が移ってきているのも事実でしょう。
SICPを教えていたMITの授業も、最近ではPythonに切り替えたそうです。
Re: (スコア:0)
JavaだってManglingはないし、ライブラリが最初から豊富ってことはないですよね。
言語として何か売りとなるものが重要かと。
例えばJavaはマルチスレッドが標準でサポートされているのが売りの一つだったし。
# 今の地位を決定的にしたのはEclipseによる、IDEとの相性の良さだと思うけど。
Re: (スコア:0)
ライブラリが豊富すぎるのが問題なんじゃないですか、たぶん。
Javaは成功したために無能が増えすぎて、彼らが車輪の再発明を繰り返していると
Goslingがどこかで言ってたような。
このプロジェクトの目的は、Javaコミュニティに隔離場所を作りたいってことなんじゃないかと。
Javaの言語仕様については、代入は := にすべきだとか
ブロックの使い方に不満があるとか、その程度のことしか思ってなさそう。
いちおう関数型チックな機能もあるけど、すでにScalaがあるわけだし。