Qual a sua opinião sobre as linguagens de programação atuais (principalmente o Java)

Olá, eu sou um estudante de programação e estou em busca da minha primeira vaga de emprego nesta área e estou precisando de algumas dicas pra escolher o meu caminho nesta área.

Minha trajetória até aqui

Eu comece a estudar programação, no final de 2021, já com a ideia de me tornar um fullStack, e iniciei com Python, aprendendo o básico sobre a programação, conforme fui pesquisando um pouco mais sobre como as coisas funcionam, acabei decidindo trocar para a dupla de NodeJS com ReactJS com a qual me mantive até agora e a que tenho alguns projetos prontos porém, comecei a me sentir atraído por outras linguagens e frameworks ( principalmente Java ).

Recentemente, comecei a ler o livro do Código Limpo, e comecei a me deparar com a linguagem Java e, me vi tomando muito mais gosto pra aprender Java do que para programar em JS e, desde então, estou em um dilema sobre se eu continua com a stack NodeJs e ReactJS com a qual já estou mais acostumado ou se, troco para Angular e Java ( já entendo os fundamentos dos dois, porém nunca tive um projeto utilizando-os).

Gostaria de saber a opinião de vocês sobre, se vale a pena eu migrar de linguagem e de framework, o que me custaria mais tempo de estudo (no caso, conseguir um emprego rápido não seria tão necessário porém, seria bom) e que talvez acabasse me negando boa parte das vagas do mercado pois, pelo que pesquisei, a quantidade de vagas para Java é muito menor que a quantidade de vagas para NodeJS e ReactJS mas, que em contrapartida, me faria ter muito mais ânimo para estudar e aprender, visto que, gostei muito mais de programar com Java e Angular do que com o que estou.

Em geral, não sei se o mercado ainda vai aceitar essa stack, que é um pouco ultrapassada, então queria a opinião de quem já sabe mais sobre o mercado.

Antes de mais nada entenda que sou uma pessoa muito realista, isso não agrada a todos.

Já ouviu falar que linguagens são só ferramentas? De uma certa é verdade. E o mais importante disso é que se elas não são tão importantes assim, e que o que importa mesmo é habilidade de programar, de achar soluções, em geral com a ferramenta mais adequada para a tarefa, é entender a computação, a engenharia de software, os fundamentos da programação, até para poder fazer escolhas sobre a melhor linguagem. Eu sei que todo mundo quer ver resultado logo e começar aprendendo a linguagem sem preocupações com outros assuntos tende ser mais proveitoso para a maioria. Mas se a pessoa seguir assim haverá um custo depois.

Cavalo dentro de um carro

Outro ponto que quero falar antes de entrar no assunto principal é que as linguagens podem fazer qualquer coisa seguindo a teoria de que elas são Turing Complete. Ao mesmo tempo que algumas são melhores do que outras para certas coisas, muitas vezes pelo seu ecossistema e cultura, mas do que a linguagem em si. É verdade que quase todos os problemas podem ser resolvidos com quase todas as linguagens principais (e são dezenas). Mas também é verdade que o resultado nem sempre será bom. E também é verdade que nem sempre faz tanta diferença assim. Por isso muita escolha ruim acaba não sendo percebida, porque é ruim, mas um leigo ou um programador inexperiente não percebe. E para muitos isso é suficiente.

Tem linguagens que acabam facilitando ou dificultando a entrega de mais eficiência. tem linguagens que foram voltadas mais para um nicho, com bibliotecas melhores para aquilo. Tem linguagens que você acha mais bibliotecas para algumas tarefas, e tem algumas que você acha mais tutoriais e ajuda em certas áreas.

Tem linguagem que você entrega o código fonte, outra tem isso mais protegido. Assim como podem permitir desenvolver mais rápido do outras. Mas as que costumam permitir desenvolver mais rápido pode ser mais difícil dar manutenção depois. Algumas são melhores para sistemas pequenos e outras para sistemas grandes. Algumas procuram entregar mais robustez por padrão, outras deixam isso para o programador trabalhar.

Para quem não tem os fundamentos de forma razoavelmente sólida, isso é tudo mais ou menos igual. Ou é mais difícil enxergar onde é tão diferente assim, quais as consequências dessa escolha. Mesmo com bons fundamentos precisa de experiência, qualitativa para tomar melhores decisões de escolha.

Em muitos casos a pessoa vai escolher por gosto, e quase sempre será a linguagem que ela pegou gosto em primeiro lugar. E isso pode ser um problema porque ela faz isso em um momento que ainda não é capaz de fazer boa escolha.

E é pior, porque se sempre teve alguma advocacia para as pessoas escolherem a linguagem que cada um acha melhor, todo mundo quer puxar a sardinha para seu lado, com as redes sociais  isso se tornou muito forte, e as bolhas vão sendo criadas. Então quem conseguir passar a mensagem melhor vai conseguir dissuadir você a ir para o lado de uma certa linguagem. Ninguém está fazendo uma escolha pensando no seu sucesso, "todo mundo" quer você para aumentar as fileiras da linguagem que ela gosta.

Em alguns casos um livro faz isso.

Sabe quando alguém quer que você goste das mesmas músicas que ela gosta?

Escolher linguagem de programação não é o mesmo que escolher música preferida.

Não sei se sua pesquisa tem fundamento, ou se importa. Vou falar abaixo de linguagem que praticamente não tem vaga anunciada e é o que vive me aparecendo. O mercado não é como as pessoas enxergam ele. E se tiver muitas vagas e muitos concorrentes indo atrás delas? E se eles forem mais experientes que você? E se eles aceitarem um valor mais baixo para conseguir a vaga?

Java não é ultrapassada. Ou é, mas todas são em alguma medida. Raras as muito novas, em geral menos populares. Não quero defendê-la aqui, só tirar uma premissa falsa. Um motivo errado para escolhê-la ou não. Eu não a escolheria, mas muito menos escolheria JS.

Aqui tem muita gente fã de JS, então espere um viés para esse lado.

Java não roda em navegadores, né? Tem algum projeto para isso, mas não sei como está e não sei se o resultado será bom, se já não foi tanto com outras...

Mas será que ser full stack é tão bom assim? Tem que pensar nisso também. Ou ser, mas precisa ser só com uma linguagem? Não pode ser a melhor para cada tarefa? Ou vai só de martelo porque dá para fazer de conta que todos os problemas são pregos?

Já parou pra pensar que muitas pessoas que te reponderão estão mais perdido que você? E você não sabe disso. Principalmente se ela passar confiança.

Minhas linguagens

Sabe como escolhi as linguagens que eu trabalho mais? Um é o mercado, é o que aparece coisas para mim. Isso é importante. E eu não ligo que uma delas "ninguém" usa, ela é boa para o que eu mais trabalho, eu gosto, e paga as contas de forma honesta. E outras duas é o que funciona melhor para alguns casos que posso escolher, uma para fazer sites simples, e outros para qualquer aplicação que eu me orgulho mais.

Mas como cheguei nessas duas? A outra foi das primeiras que tive contato, me tornei especialista e com pouca concorrência me dou bem com ela. Por que não escolhi outras?

Uma delas é fácil porque ela já vem com um framework embutido na linguagem que facilita muito fazer sites simples, não tem concorrentes nesse sentido. Tem gente que usa para outras coisas, colocam outro framework em cima do que já existe, eu não consigo entender isso, mas não importa, eu uso do jeito que parece mais adequado. E ela é muito popular nessa área, o que ajuda também.

Eu gosto muito de linguagens, estudo muito o assunto, e escolhi a outra porque foi a que me entregou o melhor dos mundos. Eficiência, robustez, produtividade, capacidade de entregar qualquer tipo de software, embora nem todos tão bem (não é boa para sistemas operacionais, ainda não é uma maravilha rodando em um browser, mas está melhorando), sintaxe e semântica agradável para fazer grandes softwares, mas também vai bem em menores, me dá bastante controle sobre o ambiente, é praticamente um C++ com mais robustez e produtividade, e bibliotecas e ferramentas aos montes pra tudo o que pensar, além de ser bem popular.

Eu escolhi uma entre todas as possíveis. Sim, eu estudei todas, eu poderia ter escolhido qualquer uma, não escolhi entre 3 ou 4 que aparecerem na minha frente. Não tenho compromisso com qualquer uma. Se aparecer outra melhor eu posso trocar (não farei por uma questão pessoal, mas há pouco tempo eu faria), mas precisa ser boa mesmo, melhor em todos os sentidos, porque trocar nunca é tão simples, a não ser no começo de carreira. Até pode ser se tudo o que a pessoa faz é descartável.

Sim, eu não quis dizer quais são as linguagens que uso para não influenciar mesmo e não por novas na sua frente.

E eu troquei de linguagens algumas vezes, o mercado muda, aparecem opções melhores. Minha primeira linguagem foi BASIC, o mais simples possível para rodar em um computador de 2KB de memória.

Se fosse o que eu trabalho eu escolheria C com maior orgulho, essa linguagem cinquantona "ultrapassada" que não tem vagas anunciadas por aí. Eu me prepararia melhor para ela e mandaria bala.

Conclusão

Resumo da história, só você pode estudar bem e escolher o caminho melhor. Se ouvir outras pessoas, uma delas estaria tomando a decisão por você se ela conseguir te dar a melhor mensagem. Pensa bem se isso é bom para você. Ninguém vai resolver seu "dilema". Você vai escolher a linguagem do primeiro que falar algo que te agrade? O que é bom para você?

Lembre-se que a escolha gerará uma consequência boa ou ruim, e só você a sofrerá. Tenho certeza que todo mundo aqui quer o seu bem, mas todo mundo vai dizer algo que ninguém sabe se é bom para você ou não. Nem você sabe.

Tá cheio de gente se dando bem com Java, ou com JavaScript, ou Python, ou outras que você não mencionou. Muitas vezes até se a pessoa não for muito boa nelas. Se você for razoável entregando resultado se dará bem em qualquer uma delas. Em alguma coisa mais do que outra, mas quem pode dizer o que acontecerá?

Gosto ajuda a pessoa a se dar bem. Na linguagem que eu escolhi sem olhar nada de mercado ou questão política eu fui pelo gosto. Eu gosto de linguagem que entrega o melhor possível, não gosto apenas do "suficiente".

Se a sua decisão não for bem fundamentada, não importa muito qual é a escolha, não será a melhor possível e não será uma tão ruim que te causará grande problema. A falta de fundamentação já é um problema.

Só posso desejar boa sorte e que consiga fazer o trabalho árduo para alcançar seus objetivos, e que não ache que tem atalho, porque a sorte terá que ser grande.

Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

Só avisando que agora o sistema pune quem não recebe likes no que escreve, portanto se ficar em 1 aqui não estranhe se eu apagá-lo. Lamento, mas é necessário para não ser prejudicado. Se não teve, é porque ninguém gostou, então não fará diferença mesmo. Se acha que é interessante, considere dar like aqui.

> *Você vai escolher a linguagem do primeiro que falar algo que te agrade?* Essa frase deveria ficar fixada no topo de todos os sites de programação (talvez seguido de "*Não faça isso*"). É impressionante como isso acontece o tempo todo: — Use a linguagem X, é muito legal (link pra curso, canal do influencer famosinho ou "roadmap") — Obrigado, vou ver (e nunca mais volta pro site, ou seja, se um dia depois chegar uma resposta boa como essa acima, ele nunca vai ler) Parece que a maioria das pessoas querem respostas fáceis, ou então só querem que alguém valide o que ela já decidiu. Sendo que o melhor conselho que podemos dar é justamente o que foi dito acima: [não terceirize suas decisões](https://m.youtube.com/watch?v=D3L8IOncLkg).
Adorei a sua resposta mas, você, em muitos momentos, diz que é necessário uma base para poder fazer uma escolha boa, e eu não discordo disso porém, gostaria de saber se você tem alguma recomendação de onde eu posso buscar essa base, seja algum artigo, algum vídeo, algum livro ou algum post na internet. > Só avisando que agora o sistema pune quem não recebe likes no que escreve, portanto se ficar em 1 aqui não estranhe se eu apagá-lo. Lamento, mas é necessário para não ser prejudicado. Se não teve, é porque ninguém gostou, então não fará diferença mesmo. Se acha que é interessante, considere dar like aqui. Caso você só não tenha alguma referência em específico, por conta do que você escreveu acima, apenas não responda, em qualquer caso, vou pesquisar e analisar melhor todos os fatores pra tentar tomar essa decisão sem depender de alguém para decidir por mim.

Eu venho do campo das ciências humanas e sempre gostei muito de linguagens de forma geral.

Gosto de pensar que linguagens de programação assim como as linguagens naturais (as que falamos no dia-a-dia) são linguagens, o que quer dizer que são conjuntos de regras (semânticas, sintáticas, morfológicas, etc) que atribuem sentido e qualidade, possibilitando a comunicação entre agentes (pessoas, animais, sistemas, etc).

As linguagens humanas são fruto da evolução, das trocas sociais, das culturas ao longo de milhares de anos, mas independente disso, conseguimos aprender e comunicar os mesmos conceitos em quase qualquer linguagem (claro que com excessões e adaptações).

Na programação não é muito diferente, se você for estudar um pouco sobre a história da programação vai notar que cada linguagem foi criada num contexto e momento histórico, voltada para necessidades de programadores, sistemas e organizações.

Por exemplo linguagens como FORTRAN (voltada para computação científica), Lisp (voltado para AI e seguindo o paradigma funcional), COBOL (para negócios e empresas) entre outras foram criadas lá entre os anos 1940-80 num período onde o que se tinha era basicamente linguagem assembly, e havia uma necessidade de facilitar o processo de escrever programas abstraindo conceitos de baixo nível sem abrir mão da capacidade de controlar os recursos do hardware.

Com o tempo, amadurecimento dos sistemas e aumento das capacidades computacionais, novas linguagens foram surgindo como B e C (alinhados com filosofia UNIX), Basic, C++, entre outras, para atender necessidades e novos paradigmas (como o surgimento do orientação a objetos OOP que impulsionou o amadurecimento do C++ por exemplo)

Java, Python e Javascript nasceram mais ou menos no mesmo período (idos dos anos 1980-90) com fundamentos muito diferentes, Java queria ser portável entre sistemas e plataformas, Python queria ser fácil e acessível facilitando a escrita de scripts e uma escrita mais próxima do inglês, Javascript nasceu como uma linguagem interpretada para o browser Netscape inspirada na sintaxe do Java.

E essa história segue evoluindo, paradigmas que haviam sido "esquecidos" por anos como o paradigma funcional, voltaram com força. Linguages de tipagem dinâmica como JS e python ganharam mercado e passaram a ser usadas em sistemas cada vez maiores, recebendo atualizações com tipagem explícita (vide typescript pra JS e python type-hints).


Enfim, poderia falar mais um monte aqui e trouxe essa breve visão histórica porque a visão pragmática o maniero já falou tudo e falou bonito.

Acho que o ponto que quero trazer é que linguagens mudam, evoluem, são usados em contextos culturais e por muitas vezes por conta de contexto, momento histórico.

Então reforço o ponto do maniero, foque em conceitos, entenda lógica de programação, se tiver curiosidade estude um pouco da história e momento de cada tecnologia.

No fim tua vida vai indicar por onde vc vai caminhar mais do que a sua escolha pessoal. Eu trabalhei com análise de dados usando python e SQL, migrei pra engenharia de dados e hoje uso bastante bash, python e javascript para "costurar" recursos e microsserviços na nuvem, e to indo aos poucos pro mundo javascript voltado pra desenvolvimento de aplicações fullstack simples para alguns trabalhos freelance.

Estudei um pouco de Java (spring/springboot) por conta de um projetos que peguei, estudei um pouco de C para aprender sobre as bases do Python e do linux (mas por pura curiosidade teórica).

O que mais tem sido útil no meio disso tudo é entender fundamentos, algoritimos, memória, arquitetura de computadores, básico de redes, um pouco de design patterns, um entimento geral de sistemas operacionais e filosofia UNIX, porque esses conhecimentos são realmente transferíveis para quase qualquer contexto.

Por fim, recomendaria vc focar naquilo que vc tem mais necessidade no momento (seja angular com java, express com react ou qualquer outra combinação de linguagens e frameworks) e ir fortalecendo esses fundamentos, com essa base em dia, eu acredito que vai ser cada vez mais "fácil" aprender uma linguagem nova ou um paradigma novo.

Meu conhecimento de mercado não é relevante, mas deixo uma reflexão pra voce amigo: Quando se trabalha com o que se gosta as coisas fazem mais sentido e tudo fica mais gostoso.

E se te ajuda, segundo o StackOF o salario de JS e J não é tão diferente assim: Top paying technologies

Eu acho que você deve manter no seu github um projeto em python, outro em java+angular, outro em react+node... e assim manter a mente aberta pra essas tecnologias, sem se especializar muito nelas até que consiga um trampo.

Quando vc conseguir um trampo, vai entrar com ojunior, aí você se especializa melhor no que a empresa precisa.

É importante manter um leque maior de linguagens (pelo menos o basico) pra vc conseguir um emprego inicial. Eu prefiro isso a ficar super escpecialista em algo.