25 ポイント 投稿者 hwaan2 2022-11-11 | 47件のコメント | WhatsAppで共有

なぜスタートアップはJavaを避けるのか? HNに投稿された質問への回答

  • 最大の理由はJavaエコシステムが壊れており、Maven/Gradleなどがひどいこと。
  • Springを信奉する開発者たちのせいで避けられている。
  • Javaをhibernate/springbootと混同しているため。
  • Javaは退屈な企業向けコーディングであり、Rustのような最新のホットなものではない。
  • JVMを使う必要があるなら、KotlinやClojureのような別の言語を使うほうがよい。
  • 2022年にあなたの新しいスタートアップがJavaを使っていると言うのは、Cobolを使っていると言うのと同じだ。
  • かつてはイケていてトレンディだったが、Oracleが登場した。

47件のコメント

 
zoonoo 2022-11-18

最後に一票。オラクルに買収されて以降、退化し始めた

 
duqduqduq 2022-11-17

コストも人材も賄えるレベルじゃないのはみんな分かりきってるのに、何を言ってるんだ…

 
whjgmlwns 2022-11-15

Maven/Gradle などをひどいものだと言っているあたりで、これを見れば筆者のレベルがうかがえることを示唆しています

 
dndnp4 2022-11-15

先輩方のお話をよく聞いていきます

 
narugal 2022-11-15

求人しやすいという利点は、本当に誰でも応募してくるという欠点にもなり得ますね。
KotlinやScalaまでひと通りこなしてJVMをマスターしたベテランもいるでしょうし、SI業界でJava経験は10年を超えていても技術を向上させる意欲がなく、Stream APIも知らず、当時の文法にずっととどまり続ける人もいるでしょうし。GoやRustを採用することになれば、後者の割合はかなり減りそうな気はします。Pythonは分かりませんが……

 
crusien 2022-11-14

JavaからKotlinへ移行するのは難しくありませんし、JSPからThymeleafへ移るのも難しくありません。単にリファレンスが不便だというだけです。何であれ、まずはオブジェクトと継承、構造的な設計からやってみてください。ライブラリや周辺ツールなどに依存するのは、自分が初心者だということしか証明しません。

 
bbulbum 2022-11-14

個人的には、Java は歴史が長いぶん、情報の非対称性がかなり大きいように思います。
どうしても一時代を築いた言語だっただけに、その時代の情報の産物が今でも多く残っていて、幾度ものバージョンアップを経た現在でも、それらがまるでまだ有効であるかのように再生産されるケースも非常に多かった気がします。
新しいバージョンに合った新しいアプローチを見つけていくのに苦労した記憶があります。
他の言語がそうではないというわけではありませんが、断片化が激しい言語を挙げるなら、Python と Java がまさに当てはまる気がします。
ただ、Python は生産速度の面で優れていると評価されているため、今でもスタートアップでしばしば採用されているようです。
しかし、それはスタートアップが Java を避けるのとは別の理由のように思います。

[スタートアップで Java を避ける理由]

  • ホットな言語ではないから
  • スタートアップはおおむね、新しいトレンドを牽引するという考えを持つ人を採りたいため、ホットな言語を使いたがるようです。
    [それでもスタートアップで Java を選ぶべき理由]
  • 採用しやすい。
    [ただし再考すべき理由]
  • 採用しやすいからといって、良い人を採りやすいわけではない。
 
handdol 2022-11-14

Javaが良いか悪いかは別として、肌感覚としては、Javaは海外スタートアップの主流ではないように思います。

海外企業の買収に向けて技術分析業務を行ったことがありますが、1社もJavaを使っていませんでした。興味深かったのは、意外にも.NETが多かったことです。

すでに2〜3年前にもそうした経験があったので、そのせいか共感できる内容です。

 
cbk1411 2022-11-13

maven は冗長すぎて私もあまり好きではありませんが、
gradle もひどいものだったんですね。
私は npm のほうがもっと怖いですが。

それに cobol はちょっと一線を越えているんじゃないかと思います。
大企業の開発者寄りの感覚だからそうなのかもしれませんね(笑)。

とにかく、Java が盲目的に非難される構図は見るたびに面白いです。事例を見ていると、それぞれの暗い経験が垣間見えるんですよね。

Java はあまりにも怠慢でした。
批判されても仕方ないと思います。
最近は少し頑張っているようですが、もっと批判されるべきだと思います。

 
stardust 2022-11-13

どうせ世代が移り変われば、また別の言語が主流になるはずです。スタートアップは新しい流れを導入するための意思決定の過程がシンプルで、自分たちが使う言語が主流になってこそスタートアップを卒業していくのでしょうし、規模の大きい企業は意思決定の過程が複雑で利害関係もあるため、安定性が確保されてから導入する、という違いなのではないでしょうか。 1959年に登場したCOBOLが金融業界で21世紀になってようやく姿を消しました。ちなみに、皆さんがあまり良くないと言うJavaもオープンソースとして出発し、かつてはSOHOで最も人気のある言語でした。そして、Javaに大企業のイメージが加わったのはOracleが買収して以降であり、韓国では政府主導の電子政府フレームワークが登場してからです。

 
pppqqq 2022-11-13

「Javaは韓国でしか人気がない」という俗説は、いったいどこから始まったのか気になりますね。韓国国内のIT大手といってもネイバーとカカオくらいですが、その2社がどちらもJavaを使っているからなのでしょうか。

もちろんアメリカではエンジニアの人材プールがはるかに広いので、他の言語でチームを組みやすい面はありますが、FAANGを含むあらゆるアメリカのIT企業でもJavaはごく一般的な技術スタックです。

会社の規模が非常に大きいのでチームごとの差はかなり激しいですが、Amazonは社内標準フレームワークがそもそもJavaですし(バージョン2ではSpringを使っていて、今はGuiceに変えたと聞いています)、GoogleはC++とJavaが半々くらいで、Pythonを使うチームも一部ある程度だと認識しています。Appleも、私の知る限りではWebサービスの大半がJavaで動いているはずです。

Netflixは言うまでもありません。hystrix、zuul、eurekaはいずれもNetflixが作ったものですから、おそらく世界で最もSpringをうまく使っている会社ではないかと思います。

Facebookも大半はC++かHackですが、一部にはJavaを使うチームがあると認識しています。

Twitterも最初はRubyで書かれていましたが、その後JVM言語であるScalaに移行したと理解していますし、そのほかにもAtlassian、VMware、Red Hatなど、大企業でむしろJavaを使っていないところを探すほうが難しいでしょう。

KafkaやHadoopなどもすべてJVM上で動いているので、直接的なサービスでJavaを使っていなくても、本当にJavaがまったく不要な会社はおそらくないのではないかと思います。

 
derse 2022-11-13

これまでJavaが広く使われてきたことを否定する人は誰もいません。この記事の要旨とは少し離れているようですね。

 
pppqqq 2022-11-13

あなたの文章自体は国を問わず一般的な大企業について論じているのですが、コメントではことさらに「韓国ではそうだ」「韓国限定ではそうだ」という言及がやけに多く見られるので。

 
kunggom 2022-11-13

韓国だけで Java が多く使われているわけではありませんが、韓国で特に Java が多く使われているのは事実のようです。たとえば、JetBrains の昨年の調査結果では、「Java は韓国、中国、ドイツで最も多く使われている言語です。韓国の Java シェアは 53%、中国は 47%、ドイツは 33% です。」とされています。こうした現象には、ほかの方々もコメントで多く触れていた電子政府フレームワークの存在や、国費支援のコーディング教育カリキュラムなどが、やはり影響しているのではないかと思います。

 
functor 2022-11-12

いくつかのコメントを見ていたら、以前投稿されたC++関連の記事を思い出しました。韓国の開発者コミュニティでは、C++とJavaはほとんど聖域のような地位にあるのは間違いないですね(笑)。けなした瞬間、ものすごく多くの人たちの発作ボタンが押されるのを見ると…

 
tequila 2022-11-14

Javaが国内市場を席巻した理由はもちろんありますが、C++をJavaと同列にくくるのはちょっと…(笑)

 
cbk1411 2022-11-13

「発作ボタン」という表現は、あまり良い言い方ではないように思います。相手を悪く表現してしまうからです。

もう少しお互いを尊重するコミュニティになればいい、という思いで、あえてお伝えしてみます。すみません。

 
freehn 2022-11-15

同感です。謝る必要はないと思います。

 
passerby 2022-11-12

スタートアップがJavaを避けているというより、他の言語/フレームワークの利点のほうが大きいからだと思っていますが、Java/Springエコシステムが思ったほど良くないという点には同意します。正直、Spring開発者ではありますが、Springを特別好きというわけではありません。Webアプリケーション開発をJava(事実上Springと同義)以外の環境で進めたことのある開発者があまりいないので、なおさら深刻に感じます。

Spring

  • 成熟したプロジェクトであるにもかかわらず、ドキュメント整備が不十分で断片化も激しいです。ググってみると、Baeldungが公式ドキュメント級というレベルです..
  • XMLが最悪なのはもちろんですが、Annotationベースで実装された機能もひどいです。見た目は似ていても、python decoratorのようなものとは根本的に異なるので。
  • 韓国国内に限れば、特に深く考えずSpringの拡張エコシステムを惰性で採用する開発文化があります。プロジェクトは不必要に肥大化し、バージョン依存も強いです。Hibernate(data-jpa)への信仰は宗教レベルです。

Java

  • Java自体が古くなり、初期の段階で設計を誤った機能を後方互換性を維持したまま抱え込んできたため、新しい機能を導入しにくいです。
  • 導入されたとしても、回りくどいか制限の多い形で提供されることが多いです。代表例がモジュールシステムや非同期プログラミングです(C#と比べると...惨憺たるレベル)。

JVMエコシステムの利点は確かにあるので、新規プロジェクトではKotlinはほぼ必須で、Springを持っていく明確な理由がないなら、ktorのような軽量フレームワークで始めるのが望ましいと思います。指摘した欠点については、設計が悪いとかSpringの哲学を正しく理解せずに開発したとか言う人も多いですが、OOPは他の言語でもできることです..

 
wooseop 2022-11-14

コメント欄はかなり荒れていて攻撃的ですが、その中でも共感できるコメントですね

 
kunggom 2022-11-12

新しい言語やフレームワークをもっと積極的に導入すべきだという点には同感ですが、正直なところ、今まさに新規プロジェクトを立ち上げる段階なのに、これといった合理的な理由もなく、最新のLTS版であるJava 17ではなく惰性的にJava 8を選ぶ人があまりにも多いのが国内の現実です。Tistoryのようなブログを見ると、「Java 1.8 のダウンロード方法」といった記事が2022年の今年の日付で投稿されているのも本当に簡単に見つかります。そういうのを見ると、ここにいる多くの方々がJavaをひどく嫌うような態度を見せるのも、あながち不思議ではないように思えます。

とはいえ、こうした問題がJavaという言語そのものに起因する問題ばかりとも思えません。むしろ、特に国内で深刻に見える、変化に敵対的な文化や、進歩のないコピー&ペーストコードの氾濫のほうが、より大きな問題ではないかと思います。実際、私はC#で開発された似たようなプログラム数種類の保守作業をしていますが、言語自体はJavaより優れていると思う一方で、どれだけ言語が良くても、前任者が昔のプロジェクトのコードを雑にコピー&ペーストしてしのいだだけのコードのひどさを防ぐ術はありませんでした。しかも今は外部環境の変化によって、そのように繰り返されたコードのかなりの部分を年末までに必ず置き換えなければならない状況に直面しており、なおさらひどいです。

 
d3fau1t 2022-11-12

国内限定の発作ボタンですね。
以前から多く使ってきたJavaを捨てるのは難しそうですし、継続的に人も必要なので、国費の学院では同じカリキュラムでSpring向けの人材を量産していて……。

こういう循環の輪は断ち切りにくいのでは、という気がします。
Kotlin + Springを使おうとする試みは前向きに見ています。

 
ruinnel 2022-11-12

Dockerを使っていると…
Dockerイメージのサイズも無駄に大きくなるし。
実行されるまでにも時間がかかるし、などなど…。

最近はみんなDockerを使っているので、あまり好まれなくなった気もします…。

 
bbgom 2022-11-12

Javaのエコシステムは、一度たりとも壊れたことがない。
無数のオープンソースプロジェクトもあり、バージョンアップを重ねながら、現在の開発トレンドを他の言語よりも速く反映していると思う。

gradle/maven はビルドツールは選択肢であるだけで、必須ではない。
他のビルドツールもたくさんあり、望むものを使えばよい。
Nodeでなぜnpmを使うのか? 便利だから使うのだ。gradle/mavenも同じく便利なので多く使われているのだ。

Javaにも多くのフレームワークがあるにもかかわらずspringを使う理由は、柔軟な拡張性、プロジェクト管理のしやすさ、そして安定したパフォーマンスを示しているため、その人気が今まで続いているのだと思う。

なぜスタートアップで事業規模が大きくなるにつれてJavaへ移行するのかを見ると、ほとんどは安定したプロジェクト管理のために移行を決めている。
これまで小規模でPythonやNodeで開発を進めていたときは問題なかったが、事業が成功して開発者が100人、1000人となり、同じプロジェクトを進めると考えると、もはやPythonやNodeの利点を生かしにくくなり、むしろ欠点のほうが多くなるためだ。
大規模プロジェクトで品質管理をしながら安定性まで確保されたJavaへ移行するのだと思う。
おそらくJavaよりもっと良い代替言語があったなら、誰よりも早くその代替言語を使っていたのではないだろうか。

最後に、Javaで作ったサービスは初期の参入障壁が高く、インフラコストも高い。だからスタートアップ初期には、高い費用と多くの時間をかけてセットアップするのではなく、簡単かつ素早く適用できる言語を主に使うのだと思う。

 
kasiel 2022-11-12

ひとまず韓国国内に限れば、Java開発者だけがあふれています。正確には、Java開発者ではなくSpring開発者しかいません。電子政府フレームワークがSpringなので、いわゆる量産型の開発者はみなSpringだけを学んで出てきます。そういう人たちの経歴者があまりにも多いから、そうなっているのです。多様性もなく、言語エコシステムはすでに壊れています。Springなしでは掲示板すら作れないのに、自分をJava開発者だと言う人も多いです。

 
angryshot 2022-11-12

この質問のポイントは「スタートアップ」であり、重要なのは「安定性/拡張性」よりも「開発速度」です。
スタートアップにとって時間はお金です!
(後で時間とお金ができたらJavaに?)

そして、Javaの人気は韓国だけの特殊事情ではないようです。今でも人気のあるプログラミング言語トップ3です。

 
derse 2022-11-12

そういう理由で、Javaへ移行するという話は韓国でしか通用しないように思います。
大企業はJavaでできているものが多いため、最大の目的は保守です。

 
blackj0221 2022-11-12

オラクルがどうこう言っても、実際にはたいていの現場企業ではあまり関係ありませんし……ネカラクベのような企業でもメインシステムはすべてJavaです。ネクソンのようなゲーム会社も、社内バックエンド網はJavaで書かれています。

Javaエコシステムが壊れたとか、Gradleがひどいという意見にはまったく同意できませんね

 
nick9060 2022-11-11

Javaが古い言語で、Java開発者が多いからといって、その人たちが新しいものを学びたがらないとか、クオリティが低いとかいうのは、どういう理屈なのかよく分かりませんね。

ネカラクベのような大手テック企業はどこもJavaがメインで、最近になってKotlinが少しずつ導入されている程度です。
まさか本当に、真の達人はスタートアップにいる、みたいな話なんですか?(笑)

 
roxie 2022-11-11

ホットシット(hotshit)には、より適切な訳がありそうです。

 
derse 2022-11-11

「2022年にあなたの新しいスタートアップがJavaを使っていると言うのは、Cobolを使っていると言うのと同じだ。」

韓国では、「Java開発者は確保しやすい」という理屈には勝てません。そうやって採用される開発者のクオリティは、さてどうでしょうか。

 
love7peace 2022-11-11

Javaエコシステムが壊れたって? Springがなぜ駄目だというのか? 根拠があまりにも乏しい

 
chicol 2022-11-11

JVMが暗号資産だとすれば、Javaはビットコインです。

 
roxie 2022-11-11

wwwwwwwwwwww

 
ifmkl 2022-11-11

昔から「Java 2人でやっと乗る」みたいなミームがあるのも無理はないですよね…。しかも政府標準フレームワークとかいうもので、政府・公共SIではほとんど半強制的にJAVAを使わせることになりますし……

 
kallare 2022-11-11

Java系のツールチェーンがいまひとつだというのは、ちょっと理解しづらいですね。
Maven/Gradleの管理方式は、npmで痛い目を見たのと比べればずっとましでしたが……

 
tesha001 2022-11-11

私もキャリアをJavaで始め、4年ほどはある会社でJava開発者としてだけ働いていましたが、その後あちこち転職しながら Python、Ruby、Go などさまざまな言語に触れ、最近は Solidity 開発者としてキャリアを続けています。

最近は、多くのスタートアップがある程度の成長を終えて安定軌道に入ると、たいていJavaへインフラを変更する事例が見られますが、なぜそう変えるのかとよく考えてみると、
結局みんな惰性でそうしているように感じるんですよね。

多くのリード級開発者がJavaに慣れていて、ほかの言語を学ぶのを嫌がるため、結局は自分たちに馴染みのあるJavaを使うのでしょうし、そういう人たちがスタートアップに集まると、インフラがすべてJavaベースに変わっていくようです。

個人的には、単に慣れているという理由だけでインフラを作り替えるのは理解できませんが、人はもともと新しいものを学ぶのを嫌がるものですし、韓国ではJavaエコシステムがあまりにも強固なので、これを変えるのは非常に難しいように思います。

 
hasugogro 2022-11-11

JavaやSpringは大規模サービスを安定して提供するのに向いていますが、 創業初期のスタートアップのサービスは規模が小さく、Javaの長所を発揮しにくいため

創業初期のスタートアップでは少人数でFront、Backの両方を担当しなければならないこともありますが、その場合はJavaよりも Node.jsやJSでまとめて書くほうが楽なので

結局、スタートアップはシリーズ投資を受けるとみんなJava、Springへ移行していくようですが

 
kbumsik 2022-11-11

JavaやSpringは大規模サービスを安定して提供するのに向いているのですが、

1つ目については、私はたまによく分からないです。だからといって他の言語が不安定なのかというと、またそういうわけでもないので。どうせ大規模になればJavaだってチューニングは必要になるでしょうし。

見ていると、単に慣れているから自分たちが性能チューニングやトラブルシューティングをしやすいものを「安定的」だと言っているように感じることがあります。

 
kunggom 2022-11-12

ご存じのとおり、Java はメモリ管理を自動で行うなど、今ではあまりにも当たり前と見なされているさまざまな機能を初期バージョンのころから提供していました。そして Java が最初に登場した 1990 年代には、C や C++ のように開発者の些細なミスがメモリリークを引き起こすなど、アプリケーション全体の信頼性に今よりはるかに大きな影響を与えやすい言語が、現在よりずっと多く使われていました。そうした時代に、たとえ一時的な実行停止(Stop-the-world)はあっても、メモリ問題でサービスそのものが完全に落ちる確率を大きく下げた言語の登場は、かなりのセンセーションだったそうです。だからこそ Java は登場初期から、他の言語よりはるかに安定しているというイメージを持ってスタートし、それが今まで続いているのではないかと思います。

また、現時点で Java には、各種サービスで長年広く使われてきたことで積み重なった信頼性と蓄積された経験があります。したがって、おっしゃるとおり性能チューニングやトラブルシューティングがしやすく、商用・オープンソースを問わず各種ツールやソリューションも豊富です。広く使われる製品のエコシステムは、それ自体が問題解決を容易にする効果がありますし、障害発生時に問題解決がしやすくダウンタイムを減らせるという点は、安定性を重視する立場からすると大きなメリットでしょう。

そして、他のコメントでも多く言及されている Kotlin については、こちらの GeekNews に付いた別の方のコメント によれば、意外にもいまだにコンパイラのバグや互換性に関する問題が多いそうです。同じ JVM を使い、公開からもう 10 年近くになる言語でもこのような状況なのですから、判断基準として安定性を最重視するのであれば、よほどのことがない限り長い年月を通じて十分に検証されたものを選ぼうとするのは、十分に合理的ではないかと思います。

参考までに、今の時点ではかなり不思議に感じられるかもしれませんが、Java が最初に登場したときは、イム・ベクジュン氏の著書『ポリグロット・プログラミング』(2014)の表現を借りれば、「斬新で若く、セクシーな印象すら与えた」のだそうです。これに関連して、Java の父であるジェームズ・ゴスリングが 1997 年に書いた文章の翻訳文を紹介します。

 
colus001 2022-11-11

Springが選ばれる理由は、韓国の開発者市場の特殊性にあると思います。
海外ではJVMは、この記事にあるようにおおむねKotlinへ移行しています。

 
lordang 2022-11-11

私もSpring信者のせいでJavaのイメージが悪くなった。
特に韓国では、Javaをやると言うととにかく全部Spring Bootだから。Java = Spring Bootみたいな感じが多い。

 
freedomzero 2022-11-11

Javaができない開発者なので、いい気分ですね

 
imyounjs 2022-11-11

それでもスタートアップで人を採用するとき、一番早そうだけど..

 
superwoou 2022-11-11

しかし韓国では…

 
dbs0829 2022-11-11

私もかつてはJavaを使っていましたが、今ではできるだけJavaを使いたくないですね。

 
xguru 2022-11-11

なぜか悲しいのに笑ってしまいますね……?(笑)
(昔のスタートアップではJavaを使っていましたが、今は使っていません)