Warum meiden Startups Java?
(news.ycombinator.com)Warum meiden Startups Java? Antwort auf eine Frage, die auf HN gepostet wurde
- Der größte Grund ist, dass das Java-Ökosystem kaputt ist, mit Schrecklichkeiten wie Maven/Gradle.
- Es wird wegen der Entwickler gemieden, die Spring anhängen.
- Weil Java mit Hibernate/Spring Boot verwechselt wird.
- Java steht für langweiliges Enterprise-Coding und ist nicht der neueste heiße Scheiß wie Rust.
- Wenn man die JVM nutzen muss, ist es besser, andere Sprachen wie Kotlin oder Clojure zu verwenden.
- 2022 zu sagen, dass dein neues Startup Java verwendet, ist so, als würde man sagen, dass es Cobol verwendet.
- Früher war es hip und trendy, dann kam Oracle.
47 Kommentare
+1 zum letzten Punkt. Nachdem Oracle es geschluckt hatte, begann der Rückschritt.
Es ist doch völlig offensichtlich, dass sie weder die Kosten noch den Personalaufwand stemmen können — wovon redest du also ...
Maven/Gradle usw. sind furchtbar
Das deutet darauf hin, dass man daran das Niveau des Autors erkennen kann.
Vielen Dank für Ihre Hinweise, ich nehme sie gern mit.
Der Vorteil, dass Recruiting leicht ist, kann auch den Nachteil haben, dass sich wirklich jeder bewirbt.
Es wird Veteranen geben, die von Kotlin bis Scala alles durchhaben und die JVM gemeistert haben, und es wird auch Leute geben, die in der SI-Branche zwar mehr als zehn Jahre Java-Erfahrung haben, aber keinen Willen zur technischen Weiterentwicklung zeigen, nicht einmal die Stream API kennen und bei der damaligen Syntax stehen geblieben sind. Wenn man stattdessen Go oder Rust einstellt, dürfte der Anteil der Letzteren deutlich sinken. Bei Python bin ich mir allerdings nicht sicher...
Der Umstieg von Java auf Kotlin ist nicht schwierig, und auch der Wechsel von JSP zu Thymeleaf ist nicht schwer. Es ist lediglich etwas umständlich, weil es weniger Referenzen gibt. Womit auch immer Sie arbeiten: Befassen Sie sich zuerst mit Objekten und Vererbung sowie mit strukturellem Design. Sich von Bibliotheken oder Nebentools abhängig zu machen, beweist letztlich nur, dass man noch Anfänger ist.
Persönlich habe ich den Eindruck, dass es bei Java aufgrund seiner langen Geschichte ein starkes Informationsungleichgewicht gibt.
Da es nun einmal eine Sprache war, die eine ganze Ära geprägt hat, gibt es aus dieser Zeit noch sehr viele Informationsartefakte, und selbst nach unzähligen Versionsupdates scheint vieles davon noch immer weiterverbreitet zu werden, als wäre es weiterhin gültig.
Ich erinnere mich, dass es sehr schwierig war, neue Ansätze zu finden, die zu den neueren Versionen passen.
Das ist zwar nicht nur bei anderen Sprachen so, aber wenn man Sprachen mit starker Fragmentierung nennen müsste, wären Python und Java für mich die naheliegendsten Beispiele.
Python wird jedoch wegen seiner hohen Entwicklungsgeschwindigkeit geschätzt, weshalb es in Startups wohl nach wie vor gelegentlich eingesetzt wird.
Das scheint mir aber ein anderer Grund zu sein als der, weshalb Startups Java meiden.
[Warum Startups Java meiden]
[Warum Startups sich trotzdem für Java entscheiden sollten]
[Warum man das dennoch überdenken sollte]
Unabhängig davon, ob Java gut ist oder nicht, habe ich persönlich den Eindruck, dass Java bei ausländischen Startups nicht zum Mainstream gehört.
Ich habe technische Analysen im Rahmen von Übernahmen ausländischer Unternehmen durchgeführt, und kein einziges davon setzte auf Java. Interessanterweise gab es überraschend viele mit .NET.
Da ich schon vor 2–3 Jahren eine ähnliche Erfahrung gemacht habe, kann ich dem Inhalt gut zustimmen.
Maven ist mir auch zu geschwätzig, deshalb mag ich es ebenfalls nicht,
aber Gradle ist wohl auch furchtbar gewesen.
Ich finde npm allerdings noch beängstigender;
Und COBOL ist meiner Meinung nach schon etwas drüber,
liegt das daran, dass es vor allem von Entwicklern in Großunternehmen genutzt wird? haha
Wie auch immer, ich finde es jedes Mal unterhaltsam, wenn Java blindlings niedergemacht wird. Wenn man sich die Beispiele anschaut, sieht man die jeweils düsteren Erfahrungen der Leute.
Java war einfach zu träge.
Es verdient die Kritik.
In letzter Zeit scheint man sich zwar etwas mehr anzustrengen, aber ich finde, es sollte noch mehr Kritik einstecken.
Mit dem Wandel der Generationen wird ohnehin wieder eine andere Sprache zum Mainstream werden. Bei Startups ist der Entscheidungsprozess zur Einführung neuer Strömungen einfacher, und erst wenn die von ihnen verwendete Sprache zum Mainstream wird, wachsen sie über die Startup-Phase hinaus. Bei großen Unternehmen hingegen sind die Entscheidungswege komplex und von Interessenlagen geprägt, daher führen sie Neues erst ein, wenn die Stabilität gesichert ist – liegt der Unterschied nicht darin?
COBOL, das 1959 erschien, verschwand im Finanzsektor erst im 21. Jahrhundert. Übrigens startete auch Java, das viele von euch nicht besonders gut finden, als Open Source und war zeitweise die beliebteste Sprache im SOHO-Bereich. Und dass Java stärker das Image einer Sprache für Großunternehmen bekam, liegt daran, dass Oracle es übernahm und in Korea das staatlich initiierte E-Government-Framework aufkam.
Ich frage mich, woher der Mythos kommt, dass „Java nur in Korea beliebt ist“. Liegt das daran, dass es unter den großen koreanischen IT-Konzernen im Grunde nur zwei von „Nekara“ gibt und beide Java verwenden?
Natürlich ist der Engineering-Pool in den USA deutlich breiter, daher ist es dort in mancher Hinsicht einfacher, Teams mit anderen Sprachen aufzubauen. Aber auch bei allen US-IT-Unternehmen, einschließlich FAANG, ist Java ein äußerst gängiger Tech-Stack.
Da es sich um so große Unternehmen handelt, unterscheiden sich die Teams stark voneinander, aber bei Amazon ist das interne Standard-Framework wohl sogar Java (ich habe gehört, dass in Version 2 Spring verwendet wurde und inzwischen auf Guice umgestellt wurde). Bei Google ist es meines Wissens ungefähr halb C++ und halb Java, mit einigen Teams, die Python verwenden. Und auch bei Apple laufen meines Wissens die meisten Webservices auf Java.
Von Netflix ganz zu schweigen: Hystrix, Zuul und Eureka wurden alle von Netflix entwickelt, daher ist es vielleicht das Unternehmen, das Spring weltweit am besten einsetzt.
Bei Facebook ist es meines Wissens zwar größtenteils C++ oder Hack, aber es gibt wohl auch einige Teams, die Java verwenden.
Auch Twitter hat meines Wissens anfangs Ruby verwendet und ist dann zu Scala, also einer JVM-Sprache, gewechselt. Und auch darüber hinaus dürfte es bei Großunternehmen wie Atlassian, VMware, Red Hat usw. eher schwieriger sein, welche zu finden, die kein Java einsetzen.
Da Kafka, Hadoop usw. alle auf der JVM laufen, gibt es wahrscheinlich kaum ein Unternehmen, das Java wirklich überhaupt nicht braucht, selbst wenn es Java nicht direkt für seine Services verwendet.
Niemand bestreitet, dass Java früher viel verwendet wurde. Das scheint aber ziemlich am Kern dieses Artikels vorbeizugehen.
Dein Beitrag selbst spricht doch unabhängig vom Land über typische Großunternehmen, aber in den Kommentaren fällt mir auf, dass besonders oft erwähnt wird: „In Korea ist das so“ oder „Das gilt nur für Korea“.
Nicht nur in Korea wird viel Java verwendet, aber es stimmt wohl, dass Java dort besonders stark verbreitet ist. Zum Beispiel hieß es in den Ergebnissen der JetBrains-Umfrage vom letzten Jahr: „Java ist die am häufigsten verwendete Sprache in Korea, China und Deutschland. Der Java-Anteil beträgt in Korea 53 %, in China 47 % und in Deutschland 33 %.“. Auf dieses Phänomen haben vermutlich auch die Existenz des E-Government-Frameworks, das viele andere in den Kommentaren erwähnt haben, sowie die Curricula staatlich geförderter Coding-Ausbildungen einen Einfluss gehabt.
Wenn ich mir einige der Kommentare anschaue, muss ich an den früheren Beitrag zu C++ denken. In der koreanischen Entwickler-Community haben C++ und Java offenbar fast schon den Status von Heiligtümern erreicht, haha — sobald man sie kritisiert, scheint bei unzähligen Leuten sofort der Trigger gedrückt zu werden..
Es gibt natürlich auch Gründe, warum Java den heimischen Markt dominiert hat, aber C++ mit Java in einen Topf zu werfen, ist ein bisschen ... haha
"Auslöser-Knopf" scheint mir kein besonders guter Ausdruck zu sein, weil er die andere Person negativ darstellt.
Ich erlaube mir, das anzusprechen, in der Hoffnung, dass wir eine Community werden, die einander etwas mehr respektiert. Es tut mir leid.
Stimme zu. Es scheint, als müsse man sich dafür nicht entschuldigen.
Ich denke weniger, dass Startups Java meiden, sondern eher, dass die Vorteile anderer Sprachen/Frameworks größer sind. Ich stimme aber zu, dass das Java/Spring-Ökosystem schlechter ist, als man denkt. Ehrlich gesagt bin ich zwar Spring-Entwickler, mag Spring aber nicht besonders. Es gibt nur wenige Entwickler, die Webanwendungen außerhalb von Java entwickelt haben (de facto ein Synonym für Spring), deshalb wirkt es vielleicht noch extremer.
Spring
data-jpa) hat fast religiöse Züge.Java
Die Vorteile des JVM-Ökosystems sind natürlich klar vorhanden, deshalb ist Kotlin bei neuen Projekten fast Pflicht. Wenn es keinen eindeutigen Grund gibt, Spring mitzunehmen, halte ich es für sinnvoll, mit einem leichtgewichtigen Framework wie Ktor zu starten. Auf die genannten Nachteile reagieren viele damit, dass das Design falsch gewesen sei oder man die Spring-Philosophie nicht richtig verstanden habe, aber OOP kann man auch in anderen Sprachen machen ...
Obwohl die Kommentarspalte ziemlich chaotisch und aggressiv ist, ist das hier ein Kommentar, dem ich zustimmen kann.
Ich stimme zu, dass wir neue Sprachen und Frameworks etwas offensiver einführen sollten. Aber ehrlich gesagt ist es hierzulande nach wie vor Realität, dass selbst bei gerade erst neu gestarteten Projekten unzählige Leute ohne irgendeinen vernünftigen Grund aus reiner Gewohnheit Java 8 statt der aktuellen LTS-Version Java 17 wählen. Wenn man auf Plattformen wie Tistory-Blogs schaut, findet man wirklich leicht Beiträge wie „So lädt man Java 1.8 herunter“, die mit einem Datum aus diesem Jahr 2022 veröffentlicht wurden. Wenn man so etwas sieht, hat man das Gefühl, dass die starke Abneigung vieler anderer hier gegen Java vielleicht gar nicht unbegründet ist.
Trotzdem scheint dieses Problem nicht allein auf die Sprache Java selbst zurückzugehen. Ich denke eher, dass eine gegenüber Veränderungen feindselige Kultur, die besonders hierzulande stark ausgeprägt zu sein scheint, sowie die Flut an Copy-and-paste-Code ohne jede Weiterentwicklung das größere Problem sind. Tatsächlich arbeite ich derzeit an der Wartung mehrerer ähnlicher Programme, die in C# entwickelt wurden. Ich halte die Sprache selbst zwar für besser als Java, aber egal wie gut eine Sprache ist: Gegen den Horror von Code, bei dem der Vorgänger nur schlampig alten Projektcode per Copy-and-paste wiederverwendet hat, gibt es kein Mittel. Noch schlimmer ist es, weil wir aufgrund von Veränderungen im externen Umfeld nun gezwungen sind, einen großen Teil dieses sich ständig wiederholenden Codes bis zum Jahresende unbedingt auszutauschen.
Das ist wohl ein Trigger-Thema, allerdings nur in Korea.
Es dürfte schwer sein, das seit Langem viel genutzte Java aufzugeben, und weil weiterhin Leute gebraucht werden, produzieren staatlich geförderte Akademien mit demselben Curriculum immer weiter Spring-Nachschub.
Ich habe daher den Eindruck, dass dieser Kreislauf nur schwer zu durchbrechen ist.
Versuche, Kotlin mit Spring zu nutzen, sehe ich positiv.
Wenn man Docker benutzt ...
werden auch die Docker-Images unnötig groß.
Auch der Start dauert lange und so weiter ...
Heutzutage nutzen ohnehin alle Docker, deshalb scheint es wohl unbeliebter geworden zu sein..
Das Java-Ökosystem ist noch nie wirklich kaputtgegangen.
Es gibt unzählige Open-Source-Projekte, und mit Versionsupdates werden aktuelle Entwicklungstrends meiner Meinung nach schneller als in anderen Sprachen aufgegriffen.
Gradle/Maven sind Build-Tools, aber nur eine Wahl und keine Pflicht.
Es gibt viele andere Build-Tools, und man kann einfach das verwenden, was man möchte.
Warum verwendet man in Node
npm? Weil es bequem ist. Gradle/Maven werden ebenfalls so häufig genutzt, weil sie praktisch sind.Obwohl es auch in Java viele Frameworks gibt, wird Spring genutzt, weil es flexible Erweiterbarkeit, bequemes Projektmanagement und stabile Performance bietet; deshalb ist es bis heute beliebt geblieben.
Wenn man sich ansieht, warum Startups mit wachsender Unternehmensgröße auf Java umsteigen, dann entscheiden sie sich meist wegen des stabilen Projektmanagements dafür.
Solange in kleinem Rahmen mit Python oder Node entwickelt wird, gibt es keine Probleme. Wenn das Geschäft aber erfolgreich ist und 100 oder 1000 Entwickler am selben Projekt arbeiten, lassen sich die Vorteile von Python oder Node nicht mehr gut ausspielen, und stattdessen treten eher die Nachteile stärker hervor.
Ich denke, man wechselt zu Java, weil man in großen Projekten Qualität managen und zugleich Stabilität sicherstellen kann.
Wenn es eine bessere Alternative als Java gäbe, hätte man sie wahrscheinlich schneller als alles andere eingesetzt, oder nicht?
Zum Schluss noch: Mit Java entwickelte Services haben hohe Einstiegshürden und verursachen höhere Infrastrukturkosten. Deshalb sieht man gerade in der frühen Startup-Phase oft, dass eher Sprachen verwendet werden, die sich ohne hohe Anfangskosten und viel Zeit für das Setup einfach und schnell einsetzen lassen.
Zunächst einmal, auf den heimischen Markt beschränkt, gibt es einfach zu viele Java-Entwickler. Genauer gesagt gibt es eigentlich keine Java-Entwickler, sondern nur Spring-Entwickler. Da das E-Government-Framework auf Spring basiert, lernen alle Entwickler nach demselben Schema nur Spring. Weil es von solchen Leuten mit Berufserfahrung mehr als genug gibt, ist das so. Es gibt auch keine Vielfalt mehr, und das Ökosystem der Sprache ist bereits kaputt. Viele nennen sich Java-Entwickler, können aber ohne Spring nicht einmal ein einfaches Board-System bauen.
Der Punkt dieser Frage ist das „Startup“; wichtiger als „Stabilität/Skalierbarkeit“ ist die „Entwicklungsgeschwindigkeit“.
Für Startups ist Zeit Geld!
(Wenn später Zeit und Geld da sind, dann Java?)
Und außerdem ist die Popularität von Java vermutlich keine Besonderheit nur in Korea. Es ist auch jetzt noch unter den Top 3 der beliebtesten Programmiersprachen.
Aus diesem Grund scheint die Geschichte, dass man auf Java umsteigt, nur in Korea zu funktionieren.
Da in großen Unternehmen vieles auf Java basiert, ist der größte Grund die Wartung.
Ob Oracle nun auftaucht oder nicht, ist für die meisten Unternehmen an der Front in Wahrheit kaum relevant ... Selbst bei Naver, Kakao, Line und Coupang laufen die Hauptsysteme komplett auf Java. Auch bei Spielefirmen wie Nexon ist das interne Backend-Netz in Java geschrieben.
Dass das Java-Ökosystem kaputt sei und Gradle schrecklich sei, kann ich überhaupt nicht nachvollziehen.
Ich verstehe die Logik nicht, dass Java eine alte Sprache ist und es viele Java-Entwickler gibt, und dass diese Leute deshalb nichts Neues lernen wollen oder von geringerer Qualität sein sollen.
Bei Nekarakubae ist Java überall die Hauptsprache, und in letzter Zeit wird Kotlin nur nach und nach eingeführt.
Heißt das etwa, dass die wirklichen Könner in Startups sind oder was? haha
Für "hotshit" scheint es eine passendere Übersetzung zu geben.
„Zu sagen, dass euer neues Startup im Jahr 2022 Java verwendet, ist so, als würde man sagen, dass es Cobol verwendet.“
In Korea kommt man gegen das Argument nicht an, dass sich Java-Entwickler leicht finden lassen. Über die Qualität der Entwickler, die man auf diese Weise einstellt, lässt sich allerdings streiten.
Ist das Java-Ökosystem kaputt? Warum soll Spring nicht geeignet sein? Die Begründung ist viel zu dürftig.
Wenn die JVM eine Kryptowährung wäre, dann wäre Java Bitcoin.
Hahahahahahahahahahahaha
Früher gab es das Meme „Java = zwei Leute und ein Toyota“ ja nicht ohne Grund … Dazu kommt, dass man im staatlichen Standard-Framework und in öffentlichen SI-Projekten der Behörden fast schon halb erzwungen Java verwenden muss …
Ich finde es etwas schwer nachvollziehbar, dass die Toolchain rund um Java nicht besonders gut sein soll.
Verglichen mit der Verwaltung in Maven/Gradle war sie geradezu himmlisch, wenn man zuvor unter npm gelitten hatte...
Auch ich habe meine Karriere mit Java begonnen und etwa vier Jahre lang in einem Unternehmen ausschließlich als Java-Entwickler gearbeitet. Danach bin ich zwischen verschiedenen Firmen gewechselt und habe dabei mit unterschiedlichen Sprachen wie Python, Ruby und Go gearbeitet; in letzter Zeit setze ich meine Karriere als Solidity-Entwickler fort.
In letzter Zeit sieht man, dass viele Startups, nachdem sie bis zu einem gewissen Grad gewachsen sind und in ruhigeres Fahrwasser kommen, ihre Infrastruktur größtenteils auf Java umstellen. Als ich darüber nachgedacht habe, warum sie das tun, kam es mir so vor, als läge es einfach an der Trägheit.
Viele Entwickler auf Lead-Niveau sind mit Java vertraut und zögern, andere Sprachen zu lernen. Deshalb verwenden sie einfach das Java, mit dem sie vertraut sind, und wenn solche Leute in Startups zusammenkommen, scheint die gesamte Infrastruktur auf einer Java-Basis umgestellt zu werden.
Persönlich kann ich nicht nachvollziehen, die Infrastruktur allein aus Gründen der Vertrautheit komplett umzubauen. Aber Menschen scheuen nun einmal oft davor zurück, etwas Neues zu lernen, und da das Java-Ökosystem in Südkorea so außerordentlich gefestigt ist, dürfte es sehr schwer sein, das zu ändern.
Java und Spring eignen sich gut dafür, große Services stabil bereitzustellen, aber die Services eines Startups sind anfangs klein, sodass die Vorteile von Java nur schwer zum Tragen kommen.
In der Anfangsphase eines Startups muss ein kleines Team oft sowohl Frontend als auch Backend übernehmen; dafür ist es praktischer, alles auf einmal mit
Node.jsoder JS umzusetzen als mit Java.Letztlich wechseln aber alle zu Java und Spring, sobald sie eine Series-Investmentrunde erhalten haben, oder?
beim ersten Punkt bin ich mir manchmal nicht so sicher. Das heißt aber auch nicht, dass andere Sprachen instabil wären. Wenn es ohnehin groß wird, muss man am Ende auch bei Java noch Tuning betreiben.
Wenn man sich das so anschaut, hat man manchmal das Gefühl, dass Leute einfach das, womit sie vertraut sind und bei dem ihnen Performance-Tuning und Troubleshooting leichter fallen, als „stabil“ bezeichnen.
Wie ihr alle wisst, bietet Java seit seinen frühen Versionen viele Dinge, die heute als völlig selbstverständlich gelten, etwa automatische Speicherverwaltung. Und in den 1990er Jahren, als Java erstmals aufkam, wurden Sprachen wie C oder C++ noch deutlich häufiger verwendet als heute — Sprachen also, in denen schon kleine Flüchtigkeitsfehler von Entwicklern leicht Speicherlecks verursachen und damit die Zuverlässigkeit einer gesamten Anwendung viel stärker beeinträchtigen konnten. In einer solchen Zeit soll das Erscheinen einer Sprache, die zwar möglicherweise vorübergehende Ausführungsunterbrechungen (Stop-the-world) mit sich brachte, dafür aber die Wahrscheinlichkeit drastisch senkte, dass ein Dienst wegen Speicherproblemen komplett ausfiel, eine ziemliche Sensation gewesen sein. Deshalb hatte Java wohl schon früh das Image, deutlich stabiler als andere Sprachen zu sein, und ich denke, dieses Image hat sich bis heute gehalten.
Außerdem verfügt Java zum jetzigen Zeitpunkt über ein hohes Maß an Vertrauen und über angesammelte Erfahrung, weil es in den verschiedensten Diensten über lange Zeit hinweg breit eingesetzt wurde. Deshalb ist es, wie du gesagt hast, auch einfacher, Performance-Tuning oder Troubleshooting zu betreiben, und es gibt viele Tools und Lösungen, sowohl kommerzielle als auch Open Source. Das Ökosystem eines weit verbreiteten Produkts erleichtert die Problemlösung schon an sich, und dass sich Probleme im Störungsfall leichter beheben lassen und dadurch Downtime reduziert werden kann, ist aus einer auf Stabilität bedachten Perspektive ein großer Vorteil.
Was Kotlin betrifft, das in anderen Kommentaren häufig erwähnt wird, heißt es laut einem anderen Kommentar hier auf GeekNews, dass es überraschenderweise bis heute noch viele Probleme mit Compiler-Bugs oder Kompatibilität gibt. Wenn selbst eine Sprache, die dieselbe JVM nutzt und inzwischen fast seit zehn Jahren öffentlich verfügbar ist, solche Schwierigkeiten hat, dann erscheint es doch völlig rational, bei einer Entscheidung, in der Stabilität das wichtigste Kriterium ist, nach Möglichkeit etwas zu wählen, das über viele Jahre hinweg ausreichend erprobt wurde.
Nur als Hinweis: Aus heutiger Sicht mag das sehr seltsam klingen, aber als Java erstmals erschien, vermittelte es, um eine Formulierung aus dem Buch 『Polyglot Programming』 (2014) von Lim Baekjun zu zitieren, angeblich sogar „ein frisches, junges und geradezu sexy Gefühl“. In diesem Zusammenhang stelle ich eine Übersetzung eines Textes vor, den James Gosling, der Vater von Java, 1997 geschrieben hat.
Ich denke, dass der Grund, warum man zu Spring greift, in den Besonderheiten des koreanischen Entwicklerarbeitsmarkts liegt.
Im Ausland stellt man innerhalb der JVM, wie in diesem Artikel beschrieben, größtenteils auf Kotlin um.
Für mich hat sich das Image von Java wegen der Spring-Anhänger auch verschlechtert.
Vor allem in Korea gilt: Wenn jemand sagt, er macht Java, dann ist damit praktisch immer Spring Boot gemeint. Oft ist es dort so nach dem Motto: Java = Spring Boot.
Ich bin Entwickler und kann kein Java, also fühle ich mich gut.
Trotzdem scheint es mir so, als würde man in Startups damit am schnellsten Leute finden können..
Aber in Korea ...
Ich habe früher auch einmal Java verwendet, aber inzwischen möchte ich möglichst kein Java mehr nutzen.
Warum ist das gleichzeitig traurig und zum Lachen..? hahaha
(Früher haben wir im Startup Java verwendet, jetzt aber nicht mehr)