Executando verificação de segurança...
2

Por que linguagens de programação são boas para tarefas diferentes se a base é igual?

Como um programador iniciante descobrindo as linguagens, eu vejo vários videos de 'curso gratuito: python em 2 horas', 'curso gratuito: java em 8 horas', 'curso gratuito: dart em 5 horas' e são sempre os mesmo conteúdos: If, else, for, while, function. E como eu não quero ficar sobrecarregado, escolhi java como back-end pra me aprofundar e react como front-end.

A questão é que eu sempre ouço falar "java é melhor para sistemas empresariais, python é bom para analise de dados, c# é bom para web" (Não exatamente assim, mas entenda que cada linguagem é atribuida a alguma coisa).

O que isso significa? Que parte do python que é pra analise que em um java é fraca? Que parte do c# é bom pra web que em python nem é citado? Quão profundo em uma linguagem eu tenho que estar para começar a entender esse conceito?

Carregando publicação patrocinada...
4

Acho que todos esses direcionamentos se resumem a uma única palavra: comunidade.
Geralmente a comunidade ele realiza essas "pré-definições" por conta de bibliotecas disponíveis, e um pouquinho de "puxada de sardinha para o próprio lado".
Então, justificando melhor sobre o porquê das linguagens que você citou terem sua "área" (minha própria opinião):

  • Java é considerado "bom" para sistemas empresariais porque foi uma das primeiras linguagens a pegar o conceito de "multiplataforma", que é no caso escrever uma vez o código, e rodar em qualquer máquina, sistema operacional, arquitetura de processador, entre outros. E, por conta disso, muitas empresas adotaram justamente por essa facilidade, já que geralmente empresas tem ambientes heterogêneos. Sendo assim, foram criadas várias soluções, as mais notáveis o Spring e, mais recentemente, o Quarkus, que possuem várias bibliotecas que fornecem várias ferramentas, como framework ORM, serializadores, integrações com bancos de dados, tudo isso já pronto, só usar as classes. Obviamente Java também tem a parte web, como JavaServer Faces, e desktop, como o Java Swing, mas a comunidade se focou a servir a soluções mais focadas à empresas, então outros tipos de soluções ficaram em escanteio.
  • Python é utilizada para análise de dados, principalmente, por conta da facilidade da linguagem, na qual foi utilizada principalmente por cientistas para desenvolver bibliotecas de análise de dados e inteligência artificial. Hoje a principal biblioteca do Python para análise é o Pandas, mas também há outros frameworks como PyThorch e Tensorflow por exemplo. Python, assim como Java, é uma linguagem que tem múltiplos propósitos, e não exclui você fazer outros tipos de aplicações, como aplicações Web (temos o Django e Flask por exemplo), aplicações Desktop (temos o Kivy), entre outros. Porém o ambiente mais forte pra Python é, de fato, automatizações e análise de dados.
  • C# é quase a mesma coisa que Java, com a diferença de que a Microsoft está por trás, então até pouco tempo atrás C# era a linguagem de facto para desenvolvimento de aplicações para Windows. Hoje em dia C# permite um desenvolvimento multiplataforma, mas também permitia o desenvolvimento de aplicações web, com o framework .NET e de jogos com o framework Mono.

Então, como citado, tudo depende da comunidade, porém os exemplos acima e que você passou são de linguagens multipropósito, então tanto C# quanto Python quanto Java geralmente podem fazer de tudo um pouco, mas não é especializado pra uma determinada coisa, porém existem linguagens específicas para determinadas funcionalidades. Linguagens como [Julia](https://pt.wikipedia.org/wiki/Julia_(linguagem_de_programa%C3%A7%C3%A3o) e [R](https://pt.wikipedia.org/wiki/R_(linguagem_de_programa%C3%A7%C3%A3o) são focadas para computação científica, enquanto PHP é uma linguagem muito mais focada para programação web, assim como JavaScript, porém JavaScript hoje é uma linguagem multipropósito igual os 3 exemplos acima por causa da comunidade. C, C++ e Rust são linguagens de programação de sistemas, que você também pode usar pra fazer qualquer coisa, mas são linguagens de baixo nível, então você precisa lidar com gerenciamento de memória, o que é uma coisa bem chata e que na maioria das situações você não precisa se preocupar, principalmente em linguagens que possuam Garbage Collector.

Por fim, além da comunidade e do propósito explícito de algumas linguagens, também tem o fator de familiaridade. Não é porque Java é bom para aplicativos empresariais que eu não possa utilizar PHP por exemplo. Na empresa que eu trabalho a maioria esmagadora das APIs são feitas em Python, utilizando o framework Django. Funciona? Claro. É o que a maioria das empresas usa? Não.

Então outro item que tem que ser colocado em consideração é a familiaridade com a linguagem. Aprendeu Python na faculdade? É provável que tu funde uma empresa usando Python ou vá atrás de empresas que usem Python, já que é sua zona de conforto.

Por fim, não acho que você tem que estar profundamente envolvido na linguagem pra saber que ela não é boa para desenvolvimento de sistemas. Você precisa saber como a linguagem funciona, seu paradigma de programação e as bibliotecas disponíveis pra entender o ecossistema e verificar se vale a pena para determinado caso de uso ou não. Isso é questão de experiência que tu adquire ao longo do tempo. Toda tecnologia tem seus pontos positivos ou negativos, então você vai ter sua própria opinião ao longo do tempo sobre se tecnologia x é boa para algo ou não.

1

O colega @Silva97 comentou que o que faz as linguagens serem direcionadas para certas tarefas são os fundamentos e a forma que ela foi feita. Você acha que isso que ele disse complementa o que vc introduziu sobre 'A comunidade é o que aperfeiçoa a linguagem nessas tarefas'? Ou os dois existem independentes no desenvolvimento?

1

Eu diria que um não exclui o outro. A equipe de desenvolvimento da linguagem geralmente vai definir uma filosofia do que é o propósito da linguagem, e muitas vezes somente fornecem suporte para o desenvolvimento relacionado àquele suporte (ex. programação focado pra web). Por exemplo, PHP é uma linguagem server-side, que significa que o código irá rodar apenas no servidor, sendo que o resultado, já pronto, é enviado para o cliente (ex. seu navegador), sem nenhum processamento adicional.

Porém a comunidade pode interferir na especificação original e tomar um outro caminho. JavaScript é um exemplo. JavaScript, ao contrário do PHP, é uma linguagem que originalmente era client-side, ou seja, o código é executado no cliente para efetuar alguma ação, como uma animação por exemplo, porém com o surgimento de outros runtimes, como o Node.js, a linguagem passou a também ser server-side também.

Em adição, podem haver restrições da própria linguagem que foi colocada lá por alguma restrição técnica ou até mesmo porque não é o propósito da linguagem. Um exemplo é Java, que não permite algumas operações, como por exemplo mandar pacotes ICMP puros. Então caso tu tenha esse caso de uso, você precisaria utilizar outra linguagem que tenha suporte a implementação do ICMP.

Por fim, os fundamentos e a forma de como a linguagem foi estruturada, assim como a comunidade geram um ecossistema, e cada um desses ecossistemas geram especificidades únicas, com suas forças e fraquezas.

2

Simples: a base não é igual. Só que 90% dos programadores acham que é por falta de conhecimento no assunto.

Como você é um iniciante vai ser difícil eu responder exatamente a sua pergunta. Mas grave na sua memória que existe uma diferença gigantesca entre saber usar uma linguagem de programação e entender sobre linguagens de programação. 90% dos programadores só sabem usar as linguagens sem entender quase nada sobre elas. É como um motorista que não entende nada de engenharia mecânica (mas acha que entende). Daí o motivo de surgirem frases absurdas como "basta aprender lógica de programação que você poderá programar em qualquer linguagem".

Bom, dito isso. Pesquise sobre Programming Language Theory (PLT) que é um ramo da Ciência da Computação, é de extrema importância entender a teoria por trás das linguagens de programação para entender porque linguagens são melhores em resolver determinados problemas do que outras (dentre outras coisas muito importantes também).

Para dar um resumo muito grosseiro: linguagens de programação são projetadas seguindo um determinado modelo de máquina abstrata, suportam determinados paradigmas de programação, tem um determinado sistema de tipos, seguem um determinado modelo de memória entre outros detalhes que fazem com que a linguagem funcione de maneira diferente de outras linguagens. E cada um dessses detalhes teóricos fazem ela funcionar melhor para determinados tipos de problema do que outras.

Também existe o runtime da linguagem que pode determinar como um programa escrito na linguagem vai ser executado. Isso pode determinar a performance de execução, portabilidade, consumo de recursos (como memória RAM), gerenciamento de threads, gerenciamento de memória dinâmica e por aí vai.

A sintaxe (for, if, while etc.) é um detalhe quase insignificante da linguagem de programação. Avaliar uma linguagem pela sintaxe é como avaliar um carro pela pintura e ignorar completamente o seu motor, para quem não entende de engenharia mecânica só o que muda de um carro para outro é a pintura mesmo... 90% dos programadores acham que linguagem de programação é só sintaxe, infelizmente esse é o "normal" no Brasil.

Sugiro dar uma lida sobre cada conceito que eu mencionei, aprendendo sobre essas coisas tu já vai estar acima da média no Brasil. E sugiro ler esses dois PDF também sobre sistema de tipos e paradigmas de programação:

1

O colega @jooojano comentou que o que faz as linguagens serem direcionadas para certas tarefas é a comunidade. Você acha que isso que ele disse complementa o que vc introduziu sobre 'os fundamentos de cada linguagem realmente devem ser estudados para serem entendidos'? Ou os dois existem independentes no desenvolvimento?

1

Bom ponto, ele avaliou sua pergunta de um ponto de vista diferente. A resposta dele está certa se estamos falando da impressão que as pessoas têm sobre determinada linguagem. Como um exemplo que ele mesmo deu de Python que as pessoas têm a impressão que é boa para data sciente e IA. Isso porque majoritariamente a galera que passaram a trabalhar nessas áreas eram matemáticos e não programadores. Então houve uma preferência em aprender uma linguagem que tivesse uma sintaxe fácil de aprender, Python e R foram as mais usadas pelos matemáticos. R porque sua sintaxe é muito o estilo matemático mesmo, tipo Haskell.

Só que objetivamente falando não existe vantagem nenhuma em Python para esse fim, isso foi apenas um resultado da linguagem ser fácil de aprender. Aliás pelo contrário, Python é ruim para fazer cálculos como esse por causa de sua performance. Por isso que na prática as bibliotecas que fazem os cálculos são implementadas em C (ou outra linguagem semelhante), e Python fica como uma "interface amigável".


Agora na minha resposta eu desconsiderei a impressão da galera e falei sobre o que objetivamente faz uma linguagem ser melhor em determinado tipo de problema do que outra. Por exemplo Go ou Erlang que são muito boas em processamento multitarefa. E C ou Rust que são boas para economia de recursos (memória e processamento), que são as chamadas "linguagens de sistemas"... Não coincidementente C é majoritariamente usada para desenvolvimendo de kernels. Isso não se deu por causa de uma impressão ilusória da comunidade, é que realmente a linguagem é boa para resolver esse tipo de problema.

1

No meu ponto de vista isso depende das ferramentas que a linguagem te dá para certas tarefas. Exemplo: Python é uma linguagem que já tem muitas e muitas ferramentas prontas e boas para análise de dados.

A questão é analisar as ferramentas que a linguagem entrega, talvez o Java entregue bastante desempenho e segurança, por exemplo, e por isso é mais indicado para sistemas empresariais e por aí vai.

E vai muito também da competência do programador de usar a linguagem, já que não adianta nada o python te dar ferramentas pra análise de dados se o programador não sabe usar ou usa de maneira incorreta. Então tudo depende muito, pois não existe uma linguagem que é a melhor do mundo.

1

Eu acho que a opinião do @Silva97 e do @jooojano são válidas. Vou ver se consigo agregar algo. Ou complicar.

Sim, a teoria é importante. Vejamos um caso simples:

Python se baseou em ABC e Icon (entre outras). Acho a endentação de ABC muito interessante por evitar um monte de pontuação que é necessária apenas para o compilador/interpretador ficar mais fácil de programar. Os generators são de Icon, mas muito menos poderosos. Qual o problema? A sintaxe de Icon é derivada do ALGOL (como grande parte das linguagens) mas em cima do conceito de sucesso e falha (derivada de SNOBOL que é do mesmo autor de Icon). Por exemplo:

procedure main(args)
  every write("Oi ",!args,". Coo você está?")
end

Sintaticamente parece um C+Pascal sem pontuação desnecessária. O !args retorna cada argumento passado para o comando e falhando quando não tiver mais. Mais ou menos como um try ... except ...end. Em outras linguagens necessitaria de um loop do estilo for a in args.Mas Icon também permite outras coisas como:

procedure main()
  c := 5
  if (soma := c + 1) > 5 then write("soma > 5")
  write("soma = ",soma)
end

Motivo de eu ter escrito tudo isto? Achei que fica claro que a sintaxe é apenas um aspecto e, mesmo sendo parecida, a semântica é totalmente diferente. Python teve que criar o Walrus Operator para lidar com uma situação que Icon é corriqueira. Expressões como if 9 > 5 > 3 then ou if (x | y) > (3 | 4) then fazem todo o sentido em Icon mas não em outras linguagens. Verse, a linguagem planejada para o metaverso , claramente se baseia nesse paradigma (mesmo que o Simon Peyton Jones tenha enrrolado no vídeo). Mas esquece Icon. O autor pediu que não fizessem alterações após a morte e, como ele já faleceu...). Mas tem Unicon que continua em desenvolvimento (lento por causa da comunidade pequena).

Por outro lado, a comunidade tem muita influência na adoção de novas linguagens. Algumas ruins. Como a maioria das linguagens são de uso geral e abertas, o pessoal fica pedindo um monte de coisas e o pessoal aceita algumas para não ficar atras do concorrente Y. Aí podem dizer: A minha também faz ou faz em uma linha e a tua precisa de 5. E parece que é tudo acadêmico e não vivem no mundo real. A grande maioria das linguagens possuem matrizes que iniciam em zero. Não vejo ninguém falando o contrário. Só é bom para o cara que faz o compilador. No mundo real deveria ser arbitrária. Pascal (e algumas outras) implementaram de forma mais correta. Preciso do comportamento de um material entre -10°C e 45°C. Em Pascal seria array [-10 .. 45]. Sem nenhum cálculo idiota no meu programa ou a necessidade de algum comentário para informar que condicao[3] = -7°C ou escrever temperatura += 10. Já existem trocentas linguagens mas vem alguém e resolve criar uma nova (sei lá se para aparecer ou por desconhecimento mesmo) que substituirá todas as antigas (Carbon?).

De qualquer forma, acho interessante aprender, mesmo que superficialmente, alguma linguagem de outro paradigma (se o cara tiver tempo já que vai aprender Java, React, CSS, HTML, framework tal, etc.).

Já que escolheste Java, acho que poderias dar uma olhadinha em Clojure (procura por Clojure e Nubank que deve vir resultados). Vais ter algo bem diferente sem sair da JVM e até podes usar profissionalmente (se permitirem ).

Só para citar um link que acho interessante, é o Beating the Averages, principalmente o tópico The Blub Paradox.

-1

Vou te dar uma dica que pode soar arrogante, mas não é, eu juro.

O problema da maior parte dos programadores que eu conheço que ficam estagnados na carreira e não saem do mesmo lugar é justamente por que eles ficam procurando 1000 pelos em um ovo que se realmente for encontrado não muda em absolutamente nada.

O que você tem que fazer é estudar coisas por demanda e que são relevantes pra sua atividade fim, ou seja, se você hoje precisa fazer alguma coisa use ferramentas que te facilite naquilo.

Entender de tudo pra não usar nem 10% disso não é ser sábio é só ter muito conhecimento guardado.

0

Conheço muitos programadores acima da média e todos eles concordam em uma coisa: para ser acima da média é necessário entender como as coisas funcionam. Aprender a usar ferramentas é fácil, difícil é entender como elas funcionam e porque funcionam dessa forma. É o que separa os homens dos meninos.

Acho muito importante a curiosidade que o autor do post teve e gostaria muito que todo iniciante fosse assim, mas infelizmente a maioria só aceita o status quo sem querer entender porque as coisas são como são.

Desencorajar a busca por conhecimento é simplesmente a pior dica que alguém pode dar a um programador. O problema é que é necessário ter conhecimento para entender poque ele é importante e útil. Não existe isso de "conhecimento guardado" não colega. Quando você já conheceu um excelente programador que não tivesse muito conhecimento?

Com todo o respeito mas a sua "dica" é basicamente um tutorial de como se tornar um programador medíocre.

1

Vamos lá vou te responder por tópicos, e pegar um gancho novamente no que eu respondi anteriormente, por que parece que algumas pessoas não entenderam: eu não quis ser arrogante.

Conheço muitos programadores acima da média e todos eles concordam em uma coisa: para ser acima da média é necessário entender como as coisas funcionam.

Eu concordo com isso, mas será que faz sentido aprender cerne de todas as linguagens de programação pra saber como diferencia-las? Ou dar foco em uma delas mesmo que por gosto e se especializar dentro dela?

Aprender a usar ferramentas é fácil, difícil é entender como elas funcionam e porque funcionam dessa forma. É o que separa os homens dos meninos.

A resposta para essa afirmação está na minha resposta acima.

Acho muito importante a curiosidade que o autor do post teve e gostaria muito que todo iniciante fosse assim, mas infelizmente a maioria só aceita o status quo sem querer entender porque as coisas são como são.

A curiosidade é excelente e precisa ser estimulada, mas se um desenvolvedor trabalha pra você, e você passa uma tarefa pra ele, por exemplo integrar com o blobstorage da azure, e ele fica na curiosidade de como funciona a integração pra todas as clouds, eu te pergunto: em que isso vai agregar no valor que ele vai entregar?

Desencorajar a busca por conhecimento é simplesmente a pior dica que alguém pode dar a um programador. O problema é que é necessário ter conhecimento para entender poque ele é importante e útil. Não existe isso de "conhecimento guardado" não colega. Quando você já conheceu um excelente programador que não tivesse muito conhecimento?

Desencorajar a busca não como um todo, mas de maneira generalizada "buscar tudo por que quanto mais conhecimento melhor", é sim uma coisa importante, por que é exatamente isso que separa os bons programadores dos programadores ruins: saber "o que é necessário com o menor esforço possível e entregar valor de uma forma excelente".

Com todo o respeito mas a sua "dica" é basicamente um tutorial de como se tornar um programador medíocre.

...

1

Vamos lá vou te responder por tópicos, e pegar um gancho novamente no que eu respondi anteriormente, por que parece que algumas pessoas não entenderam: eu não quis ser arrogante.

Bom, eu particularmente não achei que você tenha sido arrogante.

Eu concordo com isso, mas será que faz sentido aprender cerne de todas as linguagens de programação pra saber como diferencia-las? Ou dar foco em uma delas mesmo que por gosto e se especializar dentro dela?

De "todas" as linguagens? Bom, isso é objetivamente impossível porque existem mais de 8 mil linguagens de programação[1]. Mas se formos falar de se especializar em uma linguagem, é obrigatório estudar Programming Language Theory (PLT) para entender no mínimo como essa uma linguagem funciona.

Você não precisa estudar a teoria para entender sobre "todas as linguagens", precisa estudar a teoria para entender a(s) linguagem(ns) que você se dispor a estudar. É impossível entender uma linguagem de programação sem essa base em PLT. E por consequência disso como você poderia se declarar "especialista" se você não entende as bases dessa linguagem? Entender só a sintaxe da linguagem e saber usar frameworks/bibliotecas dela não me parece suficiente para se considerar "especialista".

A resposta para essa afirmação está na minha resposta acima.

Coincidentemente a tréplica está acima também.

A curiosidade é excelente e precisa ser estimulada, mas se um desenvolvedor trabalha pra você, e você passa uma tarefa pra ele, por exemplo integrar com o blobstorage da azure, e ele fica na curiosidade de como funciona a integração pra todas as clouds, eu te pergunto: em que isso vai agregar no valor que ele vai entregar?

Você comparou bananas com maçãs. Como "integrar com um cloud X" poderia ser considerado um conhecimento fundamental de computação? Isso é literalmente aprender a usar uma ferramenta e não aprender como a ferramenta funciona.

Mas curiosidade de aprender como serviço de cloud funciona seria bastante útil. Não útil para concluir essa tarefa, mas seria útil para o desenvolvedor pois o conhecimento novo o permitiria trabalhar em tarefas mais complexas (vulgo tarefas que não envolvam especificamente usar ferramentas, como essa do exemplo).

Desencorajar a busca não como um todo, mas de maneira generalizada "buscar tudo por que quanto mais conhecimento melhor", é sim uma coisa importante, por que é exatamente isso que separa os bons programadores dos programadores ruins: saber "o que é necessário com o menor esforço possível e entregar valor de uma forma excelente".

Hmm, não. Pela minha observação programador ruim é justamente o que só aprende o mínimo necessário para cumprir seu trabalho. Claro, isso é "bom" para o seu chefe porque você faz o seu trabalho, recebe seu salário no fim do mês e vida que segue. Um típico funcionário.

Mas isso é ruim para o desenvolvedor em si, que vai continuar sendo só mais um funcionário para o resto da vida dele. Se não quiser ser só mais um pelo resto da vida, vai ter que aprender muito mais do que o mínimo necessário.

Bom, é óbvio que para cumprir as tarefas atuais o conhecimento que o desenvolvedor já tem é o suficiente. Mas o desenvolvedor quer continuar cumprindo o mesmo nível de tarefa para sempre? Sem nunca pegar tarefas/projetos/problemas cada vez mais difíceis, cada vez necessitando conhecimento mais profundo? Se sim, esse é justamente o desenvolvedor medíocre.

  1. https://hopl.info/
1

Entendi o nosso desacordo.

Você está levando o assunto, ou o tema pra um lado muito mais científico que eu.

Eu não levei, e nem queria levar pra esse lado, até por que pra mim, nunca fez sentido isso, nem pros meus projetos e nem financeiramente falando.

Já tenho 12 anos de carreira, e nunca aprendi Programming Language Theory (PLT), pra ser sincero, nunca tive nem contato com esse termo.

Fato é que: nós técnicos colocamos muita expectativa em o quão cientificos somos, tenho um amigo que é exatamente assim, a diferença entre ele e eu, é que além de focar nas coisas que me fazem performar excelentemente bem como desenvolvedor, eu também foco nas minhas soft skills no tempo que eu estaria me especializando cientificamente, no mais baixo nível de como as coisas realmente funcionam.

No fim das contas, o cliente, não vê nada disso.

Pra mim, fazer um projeto bem estruturado, bem modelado e bem performático com as ferramentas que o framework e os itens de infraestrutura dão já é o bastante pra render bons frutos pro meu cliente.

Mas a partir daqui é questão de gosto mesmo =)

0

O problema é que você não foi arrogante mesmo, só simplório. Uma resposta dizendo isso mesmo: "Não estude todas as linguagens de programação que existem" ainda assim seria um concelho. Mas você só entregou como se curiosidade fosse atraso.
Se meu chefe me pede para usar azure, eu vou estudar azure, nao vou estudar 'todas as clouds'. Até na minha pergunta eu disse 'eu escolhi java e react'.
Eu não quero entender todas as linguagens do mundo, eu quero entender O QUE É QUE EU NÃO SEI QUE TEM POR TRÁS DA LINGUAGEM DE PROGRAMAÇÃO. Igual o colega disse, dev que não estuda a linguagem é piloto que dirige carro e não sabe que tem motor.
Você tendo o melhor das intenções vei com o concelho de 'O que você tem que fazer é estudar coisas por demanda e que são relevantes pra sua atividade fim, ou seja, se você hoje precisa fazer alguma coisa use ferramentas que te facilite naquilo.' e como o amigo aqui disse, é a receita da mediocridade

1

O problema é que você não foi arrogante mesmo, só simplório. Uma resposta dizendo isso mesmo: "Não estude todas as linguagens de programação que existem" ainda assim seria um concelho. Mas você só entregou como se curiosidade fosse atraso.

Mas em momento algum eu disse ou tentei dar a entender que curiosidade é um atraso, até por que isso é uma premissa básica pra você no mínimo se estimular a entender algo. Eu já li umas 2 vezes o meu texto, e te diria a mesma coisa:

Tenha curiosidade sempre, mas saiba o momento certo de usar, saiba no que é útil gastar teu tempo, saiba que perguntas fazer e principalmente quando você achar o que faz sentido pra você tenha foco nas curiosidades que te agregam.

No futuro quando você tiver bastante xp, você vai entender que procurar "1000 pelos em um ovo" não faz tanto sentido, se não agregar muito valor.

Eu não quero entender todas as linguagens do mundo, eu quero entender O QUE É QUE EU NÃO SEI QUE TEM POR TRÁS DA LINGUAGEM DE PROGRAMAÇÃO. Igual o colega disse, dev que não estuda a linguagem é piloto que dirige carro e não sabe que tem motor.

Eu não sei seu objetivo profissional, mas se o que você quer é ser um programador web, um desenvolvedor backend, ou fullstack, entender minuciosamente "o que tem por trás ou o que tem no motor" e quando eu digo "o que tem por trás ou o que tem no motor" estou tomando como premissa que você quer entender do binário gerado, do compilador, código de baixo nível, ao código de alto nível. E isso não faz tanto sentido pensando em performance de carreira. Até faz, mas demoraria MUITO mais pra você performar bem. No mercado em si, você precisa saber muito menos que isso pra começar a performar bem.

Você tendo o melhor das intenções vei com o concelho de 'O que você tem que fazer é estudar coisas por demanda e que são relevantes pra sua atividade fim, ou seja, se você hoje precisa fazer alguma coisa use ferramentas que te facilite naquilo.' e como o amigo aqui disse, é a receita da mediocridade

Quando você tiver trabalhando, for senior, tiver responsabilidades na tua empresa, o teu chefe, o cara de produto, ou melhor a pessoa que não entende nada que entendemos, ele não quer saber se vc entende como funciona o garbage collector, ele quer saber se o que vc tá fazendo vai retornar valor pra empresa pra ele te pagar.

Então lá na frente quando você tiver sua familia, filhos, use o menor tempo possível pra entregar valor, e isso acontece entendendo coisas por demanda. Todos nós, eu, você só temos 24h/dia, eu já tentei aprender coisas que eu estava muito interessado, mas não tinha aplicabilidade naquele momento. O que eu vi logo depois de ter aprendido, é que eu tinha um conhecimento morto dentro de mim que não ia ser usado pra nada.

A receita da mediocridade é a estagnação, e criar crenças limitantes dentro de você, se acomodar, acha que o que você sabe tá bom. Não foi isso que eu falei, eu falei pra você dar foco no que realmente importa.