Por que startups evitam Java?
(news.ycombinator.com)Por que startups evitam Java? Respostas à pergunta publicada no HN
- O maior motivo é que o ecossistema Java está quebrado, com horrores como Maven/Gradle.
- Evitam por causa dos desenvolvedores que seguem Spring.
- Porque confundem Java com hibernate/springboot.
- Java é código corporativo entediante, não algo moderno e badalado como Rust.
- Se for preciso usar a JVM, é melhor usar outra linguagem como Kotlin ou Clojure.
- Dizer em 2022 que sua nova startup usa Java é como dizer que usa Cobol.
- Já foi algo descolado e da moda, mas então a Oracle apareceu.
47 comentários
Concordo com o último ponto. Depois que a Oracle assumiu, começou a regredir.
Todo mundo sabe muito bem que eles não têm condição de arcar com os custos nem de sustentar a equipe, então de que diabos você está falando...
Maven/Gradle e coisas do tipo são horríveis
Isso sugere que dá para perceber o nível do autor só de ver isso
Obrigado pelos conselhos, pessoal.
A vantagem de ser fácil contratar também pode virar a desvantagem de que literalmente qualquer um se candidata.
Pode haver veteranos que dominam a JVM e já passaram por Kotlin e Scala, e também pode haver gente do setor de SI com mais de 10 anos de experiência em Java, mas sem vontade de evoluir tecnicamente, que nem conhece a Stream API e continua presa à sintaxe daquela época. Se a contratação for para Go ou Rust, parece que a proporção deste segundo tipo cai bastante. Python eu já não sei...
Não é difícil migrar de Java para Kotlin, e também não é difícil passar de JSP para Thymeleaf. Só existe o inconveniente da falta de referências. Seja o que for, tente começar por objetos, herança e projeto estrutural. Ficar dependente de bibliotecas ou ferramentas auxiliares só prova que você ainda é iniciante.
Pessoalmente, acho que com o Java, por ter uma história longa, o desequilíbrio de informação é bem grande.
Como foi uma linguagem que marcou uma era, ainda existe muito material produzido naquela época, e mesmo depois de inúmeras atualizações de versão, parece que muitas vezes esse material continua sendo reproduzido como se ainda fosse válido.
Lembro que tive muita dificuldade para encontrar novas abordagens adequadas às versões mais recentes.
Não é como se isso não acontecesse com outras linguagens, mas se eu tivesse que escolher linguagens muito fragmentadas, Python e Java seriam as primeiras da lista.
Mas o Python ainda parece ser contratado com certa frequência por startups, porque é avaliado como excelente em velocidade de produção.
Só que isso me parece um motivo diferente de evitar Java em startups.
[Razões pelas quais startups evitam Java]
[Mesmo assim, razões para escolher Java em startups]
[Mas razões para repensar isso]
Independentemente de Java ser boa ou não, o que sinto na prática é que Java não parece ser a principal escolha entre startups no exterior.
Já trabalhei com análise técnica para aquisição de empresas estrangeiras, e não havia Java em nenhuma delas. O curioso é que, de forma até inesperada, havia bastante .NET.
Como já tive essa experiência há 2 ou 3 anos, é um conteúdo com o qual consigo me identificar.
Também acho o
mavenmuito verboso, então não curto muito,ao que parece o
gradletambém era uma coisa horrível.eu acho o
npmainda mais assustador;e também acho que
coboljá foi longe demaisserá que é porque foi escrito mais do ponto de vista de desenvolvedores de grandes empresas? haha
de qualquer forma, é sempre divertido ver essa imagem do Java sendo criticado cegamente. Quando você olha os casos, dá para ver as experiências sombrias de cada um.
o Java foi preguiçoso demais.
merece ser xingado.
parece que ultimamente está se esforçando um pouco, mas acho que ainda merece levar mais bronca.
De qualquer forma, conforme as gerações passam, outra linguagem vai acabar se tornando dominante. Startups têm um processo de decisão mais simples para adotar novas tendências, e elas só deixam de ser startups quando a linguagem que usam se torna dominante; já empresas maiores têm processos de decisão mais complexos e interesses envolvidos, então a diferença não seria que elas só adotam quando a estabilidade está garantida?
O COBOL, que surgiu em 1959, só desapareceu do setor financeiro quando o século 21 chegou. Aliás, até o Java, que muita gente considera ruim, também começou como open source e já foi uma das linguagens mais populares entre pequenas empresas. E o Java ganhou mais essa imagem de linguagem de grande empresa depois da aquisição pela Oracle e, na Coreia, com o surgimento do framework de governo eletrônico liderado pelo governo.
Tenho curiosidade sobre onde começou o mito de que “Java só é popular na Coreia”. Será porque, no fim das contas, entre as grandes empresas de TI coreanas há basicamente duas do grupo NekaRa, e as duas usam Java?
Claro, nos EUA o pool de engenharia é muito mais amplo, então existe a vantagem de ser mais fácil montar times com outras linguagens, mas Java também é uma stack extremamente comum em todas as empresas americanas de TI, incluindo as FAANG.
Como são empresas enormes, varia muito de time para time, mas na Amazon o framework padrão interno é Java mesmo (ouvi dizer que no v2 usaram Spring e agora mudaram para Guice). Pelo que sei, no Google é algo como metade C++ e metade Java, com alguns times usando Python. E, pelo que eu saiba, na Apple a maioria dos serviços web roda em Java.
Da Netflix nem precisa falar: hystrix, zuul e eureka foram todos criados pela Netflix, então talvez seja a empresa que melhor usa Spring no mundo.
No Facebook também, apesar de a maior parte ser C++ ou Hack, pelo que sei existem alguns times que usam Java.
No Twitter, pelo que sei, eles começaram com Ruby e depois migraram para Scala, que é uma linguagem da JVM. Além disso, em grandes empresas como Atlassian, VMware, Red Hat etc., provavelmente é mais difícil encontrar lugares que não usam Java.
Como Kafka, Hadoop e outros rodam todos na JVM, mesmo que uma empresa não use Java diretamente nos serviços, acho que talvez nem exista empresa que realmente não precise de Java.
Ninguém negaria que Java foi muito usada no passado. Parece que isso está um pouco distante do ponto principal deste texto.
Seu texto em si está discutindo grandes empresas em geral, independentemente do país, mas nos comentários estou vendo com frequência especialmente alta menções como "na Coreia é assim" e "isso vale só para a Coreia".
Não é só na Coreia que Java é muito usado, mas parece ser verdade que, na Coreia, ele é usado especialmente com muita frequência. Por exemplo, no resultado da pesquisa do ano passado da JetBrains, consta que “Java é a linguagem mais usada na Coreia, na China e na Alemanha. A participação do Java na Coreia é de 53%, na China 47% e na Alemanha 33%.”. Para esse fenômeno, imagino que fatores como a existência do e-Government Framework, mencionada por várias pessoas nos comentários, e o currículo de cursos de programação financiados pelo governo certamente também tenham influenciado.
Ao ver alguns comentários, lembrei de um texto antigo sobre C++ que tinha sido publicado antes. Pelo visto, nas comunidades coreanas de desenvolvedores, C++ e Java quase certamente já foram elevados à categoria de vacas sagradas kkk; dá pra ver que, no instante em que alguém começa a criticá-los, o botão de gatilho de inúmeras pessoas é pressionado...
Claro que houve motivos para o Java também ter dominado o mercado doméstico, mas colocar C++ no mesmo pacote que Java é meio forçado... rs
Acho que “botão de ataque” não é uma expressão muito boa. Porque ela retrata a outra pessoa de forma negativa.
Tomo a liberdade de dizer isso na esperança de que possamos ser uma comunidade que se respeite um pouco mais. Desculpem.
Concordo. Não parece haver motivo para pedir desculpas.
Acho que, mais do que startups evitarem Java, é que as vantagens de outras linguagens/frameworks são maiores. Ainda assim, concordo que o ecossistema Java/Spring é pior do que parece. Sinceramente, sou desenvolvedor Spring, mas não gosto particularmente de Spring. Como há poucos desenvolvedores que já fizeram desenvolvimento de aplicações web em ambientes que não sejam Java (na prática, quase sinônimo de Spring), essa sensação parece ainda mais forte.
Spring
Java
As vantagens do ecossistema JVM certamente existem, então em novos projetos Kotlin é quase obrigatório, e se não houver um motivo claro para levar Spring, acho mais desejável começar com um framework leve como ktor. Sobre os pontos criticados, há muita gente dizendo que o design foi mal feito ou que quem desenvolveu não entendeu direito a filosofia do Spring, mas OOP também pode ser feito em outras linguagens..
Embora a seção de comentários esteja bem bagunçada e agressiva, este é um comentário com o qual dá para concordar bastante.
Concordo que deveríamos adotar novas linguagens e frameworks de forma mais ativa, mas, sinceramente, a realidade por aqui é que ainda há gente demais escolhendo por inércia o Java 8 em vez do Java 17, a versão LTS mais recente, mesmo ao começar um projeto novo agora, sem nenhum motivo racional. Em blogs como o Tistory, é muito fácil encontrar posts com data deste ano de 2022 como “como baixar o Java 1.8”. Vendo isso, dá a impressão de que talvez não seja à toa que muitas outras pessoas por aqui demonstrem uma aversão enorme ao Java.
Ainda assim, não me parece que esse problema tenha origem apenas na própria linguagem Java. Penso que o problema maior seja uma cultura avessa a mudanças, especialmente forte por aqui, e a proliferação de código sem evolução feito na base do copiar e colar. Na prática, eu trabalho fazendo manutenção de vários tipos de programas semelhantes desenvolvidos em C#, e, embora eu ache a linguagem em si melhor que Java, por melhor que a linguagem seja, não há como evitar o horror de um código em que o antecessor simplesmente remendou tudo copiando e colando código de projetos antigos. Para piorar, agora, por causa de mudanças no ambiente externo, surgiu a situação terrível de ter que substituir à força até o fim do ano uma parte considerável desse código repetido.
É um botão de gatilho bem específico do mercado coreano.
Parece difícil abandonar o Java, que já é muito usado há bastante tempo, e como a demanda por gente continua, os cursos financiados pelo governo continuam produzindo em massa gente para Spring com o mesmo currículo de sempre..
Acho que vai ser difícil romper esse ciclo.
Vejo com bons olhos as tentativas de usar Kotlin + Spring.
Quando você usa Docker...
O tamanho da imagem Docker também cresce sem necessidade.
Também demora mais para iniciar, entre outras coisas...
Hoje em dia, como todo mundo usa Docker, acho que acabou se tornando algo menos preferido..
O ecossistema do Java nunca quebrou de verdade.
Há inúmeros projetos open source e, a cada nova versão, ele vem refletindo as tendências atuais de desenvolvimento mais rápido do que outras linguagens, na minha opinião.
gradle/mavensão apenas opções de ferramenta de build, não uma obrigação.Existem várias outras ferramentas de build, e basta usar a que você quiser.
Por que se usa
npmno Node? Porque é prático.gradle/maventambém são muito usados porque são práticos.Mesmo havendo muitos frameworks em Java, acredito que o motivo de usar Spring seja sua flexibilidade para expansão, a praticidade na gestão de projetos e o desempenho estável, e por isso ele continua popular até hoje.
Quando se vê por que startups migram para Java à medida que o negócio cresce, na maioria dos casos a decisão é tomada por causa da gestão estável do projeto.
Até então, não há problema em desenvolver em pequena escala com Python ou Node, mas, quando o negócio dá certo e o número de desenvolvedores chega a 100 ou 1.000 trabalhando no mesmo projeto, fica mais difícil aproveitar as vantagens de Python ou Node, e os pontos fracos acabam pesando mais.
Acho que é por isso que elas migram para Java, que já oferece estabilidade e controle de qualidade para projetos de grande porte.
Se existisse uma linguagem substituta claramente melhor que Java, será que não a adotariam antes de qualquer um?
Por fim, serviços feitos em Java têm uma barreira de entrada inicial maior e um custo de infraestrutura mais alto. Por isso, no começo das startups, é comum ver o uso de linguagens que podem ser aplicadas de forma fácil e rápida, sem gastar tanto tempo e dinheiro com configuração inicial.
Por enquanto, pelo menos na Coreia, só tem desenvolvedor Java sobrando. Mais precisamente, não são desenvolvedores Java de verdade, só desenvolvedores Spring. Como o framework de governo eletrônico é baseado em Spring, praticamente todos os desenvolvedores medíocres aprendem só Spring e saem para o mercado. Como esse tipo de gente está cheio de experiência acumulada, o resultado é esse. Não há diversidade nenhuma, e o ecossistema da linguagem já está destruído. Tem muita gente que se diz desenvolvedora Java e não consegue nem fazer um quadro de avisos sem Spring.
O ponto desta pergunta é "startup"; o que importa não é tanto "estabilidade/escalabilidade", mas sim "velocidade de desenvolvimento".
Para startups, tempo é dinheiro!
(se depois houver tempo e dinheiro, aí vão de Java?)
E a popularidade do Java provavelmente não é uma particularidade só da Coreia. Mesmo agora, continua no top 3 das linguagens de programação mais populares.
Por isso, essa conversa de migrar para Java parece fazer sentido só na Coreia.
Como muitas empresas grandes têm muita coisa feita em Java, o principal motivo acaba sendo manutenção.
Se a Oracle aparece ou não, na verdade isso não se aplica à maioria das empresas na linha de frente... até mesmo Naver, Kakao, Coupang, Baemin e Danggeun têm seus sistemas principais todos em Java. Empresas de jogos como a Nexon também escrevem a rede interna de backend em Java.
Não concordo nem um pouco com a ideia de que o ecossistema Java foi destruído ou de que o Gradle é terrível.
Não entendo qual é a lógica de dizer que, só porque Java é uma linguagem antiga e há muitos desenvolvedores Java, essas pessoas não querem aprender coisas novas ou têm qualidade inferior.
Nekaracube usa Java como principal em todos os casos, e recentemente o Kotlin está sendo introduzido aos poucos.
Será que estão mesmo dizendo algo como “os verdadeiros mestres estão nas startups”? rs
Acho que há uma tradução mais adequada para hotshit.
"Dizer, em 2022, que a sua nova startup usa Java é como dizer que usa Cobol."
Na Coreia, é impossível vencer a lógica de que é fácil encontrar desenvolvedores Java. Quanto à qualidade dos desenvolvedores contratados assim, bem, sei lá.
Dizer que o ecossistema Java está quebrado? Por que Spring não serviria? A fundamentação é fraca demais.
Se a JVM fosse uma criptomoeda, Java seria o Bitcoin.
kkkkkkkkkkkkkkkkkkkk
Não é à toa que antigamente existia o meme de que eram necessários 2 desenvolvedores Java por carro... Além disso, como o framework padrão do governo praticamente força o uso de JAVA em projetos públicos de SI do governo...
É meio difícil entender a ideia de que o toolchain do Java não é lá essas coisas.
O jeito de gerenciar com Maven/Gradle foi um sonho perto do trauma que tive com npm...
Eu também comecei minha carreira com Java e trabalhei por cerca de 4 anos em uma empresa apenas como desenvolvedor Java. Depois, ao mudar de empresa algumas vezes, tive contato com várias linguagens como Python, Ruby e Go, e mais recentemente venho seguindo minha carreira como desenvolvedor Solidity.
Ultimamente, tenho visto muitos casos em que startups, depois de crescerem até certo ponto e entrarem em uma fase mais estável, acabam migrando sua infraestrutura em grande parte para Java. Pensando bem sobre por que fazem essa mudança, parece simplesmente que todo mundo faz isso por inércia.
Muitos desenvolvedores em cargos de liderança estão acostumados com Java e relutam em aprender outras linguagens, então acabam usando o Java com o qual já estão familiarizados. E quando pessoas assim se concentram nas startups, parece que toda a infraestrutura acaba sendo convertida para uma base em Java.
Pessoalmente, não consigo entender refazer a infraestrutura apenas por uma questão de familiaridade, mas as pessoas, por natureza, tendem a evitar aprender coisas novas, e como o ecossistema de Java na Coreia do Sul é extremamente sólido, parece que mudar isso será muito difícil.
Java e Spring são bons para oferecer serviços de grande escala com estabilidade, mas como o serviço inicial de uma startup é pequeno, não é fácil aproveitar as vantagens do Java.
No começo, uma startup às vezes precisa cuidar de Front e Back com uma equipe pequena, e nisso é mais prático fazer tudo de uma vez com Node.js ou JS do que com Java.
No fim, quando as startups recebem investimentos em rodadas, acabam migrando todas para Java e Spring.
Como todos sabem, Java já oferecia desde as primeiras versões várias coisas que hoje consideramos totalmente naturais, como gerenciamento automático de memória. E, nos anos 1990, quando Java apareceu pela primeira vez, linguagens como C e C++ — nas quais um pequeno descuido do desenvolvedor podia causar vazamentos de memória e afetar muito mais facilmente a confiabilidade da aplicação inteira — eram usadas com muito mais frequência do que hoje. Dizem que, numa época assim, o surgimento de uma linguagem que, mesmo com eventuais pausas temporárias de execução (stop-the-world), reduzia drasticamente a chance de o serviço simplesmente morrer por problemas de memória foi algo bastante sensacional. Por isso, acho que Java já começou sua trajetória com a imagem de ser muito mais estável do que outras linguagens, e talvez isso tenha se mantido até hoje.
Além disso, no momento atual, Java tem a confiança acumulada e a experiência construída ao longo de muitos anos de uso amplo em diversos tipos de serviço. Portanto, como você mencionou, também é mais fácil fazer tuning de performance e troubleshooting, e há muitas ferramentas e soluções, tanto comerciais quanto open source. O ecossistema de um produto amplamente utilizado por si só já facilita a resolução de problemas, e o fato de ser mais fácil resolver incidentes quando eles acontecem, reduzindo o downtime, deve ser uma grande vantagem para quem prioriza estabilidade.
E, no caso do Kotlin, bastante citado em outros comentários, segundo um comentário de outra pessoa no GeekNews, surpreendentemente ainda existem muitos problemas relacionados a bugs de compilador e compatibilidade. Se até uma linguagem que usa a mesma JVM e já está chegando a 10 anos desde que foi lançada publicamente é assim, então, se o critério principal de decisão for estabilidade, me parece perfeitamente razoável tender a escolher algo que já foi suficientemente validado ao longo de muitos anos.
Como curiosidade, embora hoje isso possa soar bastante estranho, quando Java apareceu pela primeira vez, para citar a expressão usada por Im Baekjun em seu livro Poliglota Programação (2014), ela até “passava uma sensação de novidade, juventude e até de ser sexy”. Em relação a isso, apresento a tradução de um texto escrito em 1997 por James Gosling, o pai do Java.
Acredito que o motivo de recorrer ao Spring está na especificidade do mercado de desenvolvedores na Coreia.
No exterior, a JVM, como neste artigo, em geral está migrando para Kotlin.
Para mim também, por causa dos seguidores do Spring, a imagem do Java piorou.
Especialmente na Coreia, se você diz que usa Java, é praticamente tudo Spring Boot. Então acaba virando muito essa ideia de
Java = Spring Boot.Sou um desenvolvedor que não sabe programar em Java, então estou me sentindo bem.
Mesmo assim, parece que em startup seria o mais rápido na hora de contratar gente...
Mas, na Coreia...
Eu também usei Java por um tempo, mas agora, se possível, prefiro não usar Java.
Por que isso me deixa triste e ao mesmo tempo me faz rir..? kkk
(Na startup antiga usávamos Java, mas agora não usamos mais)