開発者のマインドシェアを奪い合うJavaとNode.js 83
ストーリー by headless
競合 部門より
競合 部門より
本家/.「Java Vs. Node.js: Epic Battle For Dev Mindshare」より
20年前には思いもよらなかったことだが、現在はJavaとJavaScriptがプログラミングの世界で覇権を争っている。InfoWorldのPeter Wayner氏が、昔ながらのコンパイラ方式のJavaが守り続けている領域と、Node.jsにより速度と柔軟性を獲得したサーバーサイドのJavaScriptが選ばれる領域との仕分けを行っている。
記事によれば、「コンピューティングの歴史で、1995年はとても忙しいときだった。Javaが登場し、JavaScriptが続いた。名前から同じ系統と思われがちだったが、2つは全く異なるものだった。一方はコンパイル方式で、静的型付けを使用するのに対し、もう一方はインタープリター方式で、動的型付けを使用する。これは2つのまるで方向の異なる言語の技術的相違点の一部に過ぎないが、Node.jsの出現により競合する方向へ進むことになった。」とのこと。
大規模ならJava,それ以外はnode.js (スコア:4, 興味深い)
Javaもnode.jsも使っていますが,適材適所で双方を使い分けるのが良いと思います
性能に関しては,まともなプログラマがコーディングすれば
Javaでもnode.jsでもそれなりの性能がでます.
細かいところでは,セッションの生成はnode.jsとか,スループットはJavaとか色々ありますが,
それらはケースバイケースで,どちらが良いとかは一概に言えません.
開発効率については
大規模,特に複数人で開発をするなら Java
それ以外,特に一人/数日で開発が終わるようなものは node.js が良いと思います
たとえば,Javaだと,Javadocやアノテーションがあり
大規模なものを複数人で開発する際はとても効率良いです
反面,小規模なものを短期間で作る場合だと,
Javaでクラス設計とかアノテーションをいちいちやっても,工数の無駄でしかありません.自己満足で終わるだけです.
Re:大規模ならJava,それ以外はnode.js (スコア:3, 参考になる)
小規模だったアプリが大規模になるパターンは往々にしてあるので、小規模だから○○と分けるのはあまりよろしくないかと思います。
初めは小規模だったのでrailsで作っていたのですが、利用者数が拡大するにつれ要望が増え、だんだんと規模が大きくなり、
railsではつらくなったという事例を目の当たりにしたことあります
Re:大規模ならJava,それ以外はnode.js (スコア:1)
今は大規模開発に耐えうるよう静的型付けに対応させたTypeScriptがあるので開発規模による適正の差はさらに縮まりつつある
さらにJavaは関数が第一級関数でないため最近の関数型の潮流に追随できない致命的とも言える欠点がある
それでもJavaは実績と信頼感が大きいので当分需要は減らないだろうが長期的には言語の進化から取り残されシェアを失うだろう
Re: (スコア:0, 荒らし)
>静的型付けに対応させたTypeScriptがあるので
そういうのが非標準で、似たようなのが出ては消えていくのが痛いんだよ。
長期サポートする(つもりの)製品には採用しにくい。
#長期サポートするつもりだったけど、短期でサービスが打ち切られる方が可能性は高いけどさ(涙)
>長期的には言語の進化から取り残されシェアを失うだろう
そういう根拠のない個人的願望を書き連ねるのはいかがなものか。
Re: (スコア:0)
> そういうのが非標準で、似たようなのが出ては消えていくのが痛いんだよ。
TSは「ESの先取り」言語なんだが。
HaxeやCoffeeScriptやJSXみたいなクソ言語と一緒にされては困るんだよねぇ。
Re: (スコア:0)
>Javaは関数が第一級関数でない
Java8「」
8ではかなり改善されてScalaっぽくなってます、7までに慣れた人は戸惑うかもしれません。
int sum = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
.filter(e -> {return e >= 5;})
.reduce(Integer::sum).get();
System.out.println(sum);//45
Re: (スコア:0)
Java8は各日に次の世代の基準点ですよね。
あるJava8前提のフレームワークとか最初に見たときはほんとに動くんかいなと思いました。
今のところ自分の範囲では第一級関数であるかどうかは必須条件では無いのでこれがないと致命的欠陥であるという意見は不思議ではあります。
書き方面倒でも今までなんとかなってたじゃんとか関数型言語にすればすべての問題が解決するわけでもないじゃんと思います。
ま、ケースバイケースということで。
Re:大規模ならJava,それ以外はnode.js (スコア:1)
「関数型の機能を取り入れればすべての問題が解決する」なんて誰も言っていないのに、
「関数型の機能を取り入れてもすべての問題が解決するわけじゃない」という人が多いのはなぜなんだろうか。
関数型言語の機能は必須じゃないよ。もちろんなくてもコーディングはできる。
オブジェクト指向言語の登場以前、クラスやインターフェイスがなくても何とか開発できていたように。
ただオブジェクト指向が登場して、オブジェクト指向はすべての問題を解決するわけじゃないけど、すこし開発が楽になった。
関数型の機能が導入されて、関数型はすべての問題を解決するわけじゃないけど、また少し開発が楽になる。それだけの話だ。
勝手に銀の弾丸に祀り上げて勝手に失望してはいけない。
他の人も言っているけど、「適材適所」「ケースバイケース」「状況に応じて」はとても聞こえの良い言葉だし、間違ってはない。
ただ、それは「高度の柔軟性を維持しつつ臨機応変に [nicovideo.jp]」というのと同じくらい具体性がない。
何の指針にもならないし、何も言っていないも同然だ。
Re: (スコア:0)
第一級関数の市場価値は再帰と高階関数を使いこなせる開発者を基準に開発できるかによるでしょうね
要するにプログラマの平均水準次第です
Re: (スコア:0)
しっかし無駄が多いなぁStreamは
Re: (スコア:0)
なお静的型はES7以降のJavaScriptで対応予定となっている
TypeScriptは未来のJavaScriptの先行実装として作られているため
仮にMSの開発が終了したとしても支障なく開発を継続できるのも強みである
Re: (スコア:0)
優秀なプログラマなら何を使っても優秀な結果を出すだろうから問題にならない。
問題になるのは大多数の普通の(優秀でない)プログラマの場合だから、その前提で議論しないと意味がないと思う。
外注に出す場合、名指しや選り好みはできないわけですし。
自分が担当したプログラムを墓場まで持っていくつもりがないなら、後々のことも考えなくちゃならない。
故人の趣味ならいいけど、職業となると色々制約がついて回りますよね。
Re: (スコア:0)
優秀なプログラマのただでさえ高い生産性を最大化することは企業利益に直結する
例えば優秀なプログラマを揃えた新規開発に今更VBを強制する企業は間違いなく無能だろう
開発競争するまでもなく人材を失って倒産する
優秀でないことを前提にしても全体として成長が停止した世界まで前提にするのはあまりに非生産的に過ぎる
いずれは高階関数くらい使えるのが普通になるのを見越して言語を整備しなければならない
それが今のJava8
進歩を否定する老害になってはいけない
Re: (スコア:0)
高階関数を扱える程に複雑化した言語が、本当に望まれているのか怪しいところ。
進歩だと喚きつつ肥大化&複雑化した挙句、シンプルな実装に回帰するのはコンピュータの歴史が証明している。
Re: (スコア:0)
高階関数は既存機能の特化でなく異なるパラダイムの基本機能なのでそれにはあたらない
Re: (スコア:0)
高階関数を複雑だと思うかどうかで、その人のコーディング能力が推し量れるな
高階関数はごくシンプルな道具だし、プログラミングの基礎中の基礎にすぎない。
でも、高階関数を理解していない人ほど、高階関数は複雑で扱うのが難しい機能だと思い込んで恐れている
Re:大規模ならJava,それ以外はnode.js (スコア:1)
> 一人で数十行、数百行程度のコードを書くときにも、静的型やオブジェクト指向でクラス書いたほうがずっと楽に感じる。
http://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer.html [ariel.com.au]
のSeasoned professionalぐらいの人ですね.わかります.
簡単な例だと,例えば,画面に文字を出力するプログラムを書くとしましょう.sh なら一行
echo "hello!"
で済みます.
java だと5行です.この5行中の4行,つまり80%は無駄だと思いませんか?
public class Hajimete {
public static void main(String[] args){
System.out.println("hello!");
}
}
TypeScript を使えば静的・動的両方のメリットを享受できる (スコア:2)
だからコーディングしててもかなり楽しい。
マインドシェアって (スコア:1)
マインドシェアって知名度と訳せばいいのかな?
JavaとJavaScriptは相違点が明確だし、適材適所使い分ければ済むだけないのか?
マインドシェアと言語選択は無関係な話じゃないかな。
Re: (スコア:0)
据え置きゲームとスマホゲームくらいの乖離かな?
Re: (スコア:0)
開発者の脳ミソのリソースをJavaとJavascriptで取り合っている、
という風に自分は読みました。
→マインドシェア
Re: (スコア:0)
Web開発で両方扱う必要があるのがとてもウザいです。
#「JAVA案件」て言うなよ。「Web案件」て言えよ。営業ども。
Re: (スコア:0)
とくにヨーロッパだと、「高等教育で教わる言語」の比率でJavaが多いんだよね。だから、必然的に(特に労働力としては若年層の)すそ野が広い。優秀な人もそれほどな人も、とりあえずJavaがわかる。
一方で、JavaScriptは自分でウェブページを書いたことがある人だったら、さわらないことはないし、インタプリタがブラウザに入っているんだから、圧倒的な手軽さであって、これまたすそ野が広い。
で、人数集める段階で経験者数がJava→JavaScriptに移っていくかも、って話でしょ。どうせ職場である程度教えなきゃいけないんだし、バックエンドが「今はJavaScript
Re: (スコア:0)
使おうとするモチベーション(マインド)だと思いますた
そして、 (スコア:1)
.NET Coreが生き残った。
Re: (スコア:0)
それだけはない
Re: (スコア:0)
なんで
Re: (スコア:0)
.NETはWebフレームワークが迷走気味なのがねえ。今のメインストリームがWebアプリであることを考えるとつらい。
まあJavaも褒められたものではないけど。どの言語もWebフレームワークはいまいちコレというのがない。
唯一の例外はRubyで、なんだかんだでRailsは偉大。
面白いのかなぁ (スコア:0)
どっちかが勝ちとか負けとか言ってる時点で、本筋から逸脱してる。
勝負って、共通のルールと土俵があって初めて成り立つものだし、
そもそも、プログラミング言語って、戦うものじゃないし。
Re: (スコア:0)
言語を擬人化して、戦わせてみてはどうだろう。
Re: (スコア:0)
綱引き大会とか?
Re: (スコア:0)
DMM さん出番ですよ。
Re: (スコア:0)
ラノベであったなあ、登場人物の名前がプログラム言語のやつ。
バグを生みやすいJavascript (スコア:0)
Javascriptはバグを生みやすいから
JavaからJavascript に乗り換える企業は少ないだろ
Re:バグを生みやすいJavascript (スコア:1)
うむ (スコア:0)
> 一方はコンパイル方式で、静的型付けを使用するのに対し、もう一方はインタープリター方式で
よくそこを違いだと言われるけど、実際にはもっと違うんじゃないの?
Re: (スコア:0)
コンパイルした中間言語をインタプリタ方式で実行するJavaとソースコードをインタプリタ方式で実行するJavaScriptなのでそっくり。
一度書けばどこでも動くと言いながらインタプリタ(エンジンまたはVM)が存在しない環境では動かないところが似ている。
放っておけばイイんじゃないかな (スコア:0)
ちょっと前まではVBマが業界の覇権を握るとか意味不明な記事書いてふんぞり返ってるような奴らがブイブイ言わしてたし
Re: (スコア:0)
派遣のタイポなんじゃないの、それ。
Re: (スコア:0)
派遣はJavaと.NETばっかだろ
VBなんてあるか?
VBはITに明るい社員がチャチャッと何か作るとかには使われそうだが、開発じゃ使われなさそう
Re: (スコア:0)
ITに明るくなさそうなコメントだな…
Re: (スコア:0)
それはVBじゃなくてVBAじゃなかろうか
Re: (スコア:0)
VB.NETなんぞVBとは認めねえって事ですね、よくわかります。
用途が違くない? (スコア:0)
nodeは多数のコネクションを捌きたいAPI系、JavaはWebアプリ系でしょ。
nodeには現状"良い"と言い切れるMVCフレームワークは無いし(まぁJavaもPlay以外はゴミだけど)、
逆にJavaに"良い"WebAPIフレームワークがあるかっていうとJAX-RS2.0実装が一番マシだけど実際微妙だし。
Re: (スコア:0)
どんなものかを教えてくれると嬉しいのですが。
Re: (スコア:0)
・即死級の脆弱性を出さない
・古くさく忌避される仕様を切り捨てる勇気がある
・それ要る?と多くの人から思われるセンスレスな実装をしない
・アプリケーションライフサイクルの維持およびロードマップの方向性がしっかりしている
・実際よく使われている
Re: (スコア:0)
コレ、nodeの宣伝じゃね? (スコア:0)
「マインドシェアを分け合っている」というのが、あたかも事実であるかのように書いてあるけど、
根拠としてリンクされているブログはただの機能比較なんだけど。
文字列が似てれば読めるって、どっかの研究であったな (スコア:0)
開発者のマッドサイエンティストを奪い合うJavaとNode.js
に見えた
Re:20年前って (スコア:2)
アバウト20年だろう。