Para ser sincero, já passei por isto demasiadas vezes quando mudei de uma linguagem de programação para outra. Lembro-me da primeira vez que mudei de JavaScript para Python, demorei três meses a habituar-me e podia escrever um livro sobre os buracos em que me meti. Mais tarde, descobri lentamente algumas das portas, e descobri que a conversão de linguagens é de facto uma regra a seguir, a chave é encontrar o "interrutor de pensamento". Por exemplo, a derivação de lista do Python é essencialmente uma combinação de mapa e filtro no JavaScript! Depois de encontrar este tipo de correspondência, a eficiência da aprendizagem é diretamente duplicada.

Compreender a filosofia de conceção antes de se debruçar sobre os pormenores sintácticos
Muitas pessoas aprendem uma nova linguagem memorizando a sintaxe, o que não é uma abordagem muito inteligente. Tenho um amigo que passou de Java para Go, mas é difícil escrever Go como Java, o resultado é que o código é escrito de quatro maneiras diferentes. De facto, a filosofia de design da linguagem Go é "simplicidade é beleza", não tem o complexo sistema de herança de Java, mas enfatiza que a combinação é melhor do que a herança. Se compreender o conceito central, compreenderá porque é que a interface da linguagem Go é implementada implicitamente, o que reflecte um pensamento de conceção completamente diferente.
Como outro exemplo interessante, quando mudei de Python para Rust, achei o sistema de propriedade de Rust completamente entorpecente no início. Mas quando me apercebi que este mecanismo resolve essencialmente problemas de segurança de memória em tempo de compilação, em vez de depender da recolha de lixo em tempo de execução como faz o Python, de repente tornou-se claro. Esta mudança no pensamento subjacente é mais importante do que memorizar uma centena de regras de sintaxe.
Esta dica sobre a criação de uma "tabela de mapeamento de conceitos" é muito útil!
Atualmente, desenho uma tabela de comparação no meu bloco de notas para cada nova linguagem que aprendo. Por exemplo, se escrever conceitos de JavaScript à esquerda e implementações de Python à direita, Promise corresponde a async/await e arrow function corresponde a lambda, este tipo de comparação intuitiva pode ajudá-lo a estabelecer rapidamente ligações de conhecimento. Alguns dados mostram que os alunos que utilizam o mapeamento de conceitos podem aumentar a velocidade de domínio de uma nova língua em cerca de 40%.
Note, no entanto, que este mapeamento não é absoluto. Por exemplo, embora a goroutine do Go e o async/await do JavaScript lidem com a concorrência, os mecanismos subjacentes são completamente diferentes. É aqui que é necessária uma compreensão mais profunda das suas diferenças, em vez de uma simples substituição recíproca.
Comece com projectos reais, não com o Hello World!
Já vi demasiadas pessoas ficarem presas no código de exemplo de um tutorial e não conseguirem sair. A melhor coisa a fazer é encontrar um projeto com o qual esteja familiarizado e reescrevê-lo numa nova linguagem. Por exemplo, reescreva a ferramenta de linha de comando que você escreveu anteriormente em JavaScript em Rust e, no processo, você descobrirá que a correspondência de padrões do Rust pode lidar com argumentos de linha de comando de forma tão elegante, algo que o JavaScript requer muito if-else para conseguir.
Recentemente, fiquei impressionado com um caso em que um programador front-end reescreveu o seu microsserviço em Go e a versão Node.js da interface, que demorava 200 ms, demorou apenas 50 ms na versão Go. Este tipo de melhoria real do desempenho é mais motivador do que quaisquer tutoriais para continuar a aprender.
No final, a mudança linguística requer paciência e a abordagem correta. Encontre esse ponto de "epifania" e o resto vai-se encaixar. Que nova língua está a aprender? Tem algum problema em particular?
评论列表 (15条):
加载更多评论 Carregando...