Vale a pena aprender essas linguagens de programação, mesmo que você não as use: 1/6 C C está na etapa removida do assembly de gravação. Isso força você a entender a diferença entre "pilha" e "pilha". Você também deve se emaranhar com ponteiros - e treinar seu cérebro para lidar com a indireção o ajudará a lidar com problemas mais difíceis mais tarde, já que quase todos os problemas "difíceis" devem ser modelados com algum nível de indireção.
2/6 Assembléia Aprender como o assembly funciona é um pré-requisito para aprender como os compiladores funcionam. Ao contrário de C, você também é forçado a aprender quando está usando um "registro" e desenvolverá um senso mais forte para o que é código de desempenho e o que não é. Acho que saber programar em assembly provavelmente contribui mais para me ajudar a aprender um novo blockchain muito rápido. Eu os abordo com um modelo mental de "qualquer arquitetura de máquina virtual/cpu em funcionamento deve ter os seguintes recursos, então onde posso encontrá-los?" Isso me ajuda a abordar novos sistemas com um conjunto de perguntas inteligentes a serem feitas, em vez de me perguntar o que diabos está acontecendo.
3/6 Ferrugem Rust é muito rigoroso sobre várias referências ao mesmo valor, algo que outras linguagens não o forçam a pensar, embora isso possa ser uma fonte de bugs reais. Além disso, o sistema de tipos Rust é muito bem pensado, então você tem mais opções sobre como modelar o mundo real (esta é uma faca de dois gumes, é claro, pois você pode acabar pensando demais em problemas simples, então você tem que aprender a controlar o poder que ele lhe dá). Alguém que aprende a escrever Rust idiomático também não estará longe de aprender a escrever programação funcional.
4/6 Cecear Se você quer aprender programação funcional sem ser punido pelo compilador, esta é a melhor maneira de fazê-lo. Além disso, você terá exposição ao sistema de macros mais poderoso que existe e "verá" a estrutura recursiva em coisas como JSON, XML e código-fonte. Estrutura recursiva não significa escrever código recursivo. Em vez disso, força você a pensar em como dividir um grande problema em problemas menores e a pensar nos casos extremos primeiro, e não depois. Lisp também foi pioneiro: coleta de lixo, instruções if, macros, funções de primeira classe e muitas outras coisas. Praticamente todas as linguagens modernas emprestam alguma ideia que Lisp inventou. Então, se você conhece Lisp, pode perguntar de forma inteligente "essa linguagem tem uma maneira de fazer X? Se não, como faço para fazer isso?" Se você é obcecado em ser "prático", recomendo o dialeto Clojure, mas apenas para aprender, Racket é bastante amigável (se você conhece um, é extremamente fácil aprender o outro).
5/6 Haskell Haskell provavelmente tem o sistema de tipos mais rigoroso que existe (pelo menos fora das linguagens que conheço). É ainda mais rigoroso que o Rust e força você a pensar em como lidar com operações que podem falhar (como uma chamada de rede). É como trabalhar com um programador sênior extremamente pedante que detecta todos os erros que você comete, mesmo coisas que têm uma chance muito baixa de resultar em um bug. Sim, o compilador é ainda mais punitivo do que o Rust, mas o feedback constante sobre "você não considerou a possibilidade de ..." irá ajudá-lo a se exercitar mais rapidamente. Se você é um engenheiro júnior e quer um engenheiro sênior disponível, programe em Haskell e a sabedoria de nossos ancestrais será concedida a você.
6/6 Como eles ajudam O aprendizado eficaz acontece quando você tenta resolver um problema e recebe instantaneamente feedback sobre seu trabalho - algo que cada uma dessas linguagens faz bem à sua maneira. Cada uma dessas linguagens força você a se envolver com questões que linguagens como JavaScript ou Python varrem para debaixo do tapete e fornecem feedback direto e imediato sobre o que você fez de errado. Lembre-se: tanto os problemas júnior quanto os seniores podem escrever código que "resolve" um problema — mas o código sênior é muito mais refinado. Esse "refinamento" vem do treinamento - algo que cada uma dessas linguagens oferece gratuitamente.
9,26K