... como posso desenvolver habilidades de programação que podem ser aplicadas a todos os idiomas em vez de apenas um?
A chave para esta pergunta é transcender a linguagem e pensar em não o idioma que você está codificando em.
WAT?
Programadores poliglotas experientes pensam na árvore de sintaxe abstrata (AST) de seu próprio modelo mental da linguagem. Não se pensa "preciso de um loop for aqui", mas sim "preciso fazer um loop sobre algo" e traduz isso para o apropriado por, ou enquanto, ou iterador ou recursão para esse idioma.
Isso é semelhante ao que se vê ao aprender um idioma falado. As pessoas que falam muitas línguas pensam fluentemente o significado , e ele sai em um determinado idioma.
Pode-se ver alguma pista deste AST no par de vídeos eyetracking Código Compreensão com Eye Tracking e Experiment Eye-Tracking Código (Iniciante) , onde os movimentos do olho de um begineer e programador experiente são vigiados. Pode-se ver o programador experiente 'compilar' o código em seu modelo mental e 'executá-lo' em sua cabeça, enquanto o iniciante precisa repetir o código por palavra-chave.
Assim, a chave para a questão do desenvolvimento de habilidades de programação para aplicar a todos os idiomas é aprender vários idiomas para que se possa distanciar-se de ter o modelo mental de um idioma e desenvolver a capacidade de gerar o AST para um problema por si só. um idioma principal que é então traduzido para um determinado idioma.
Uma vez que se tenha essa capacidade de usar o AST na cabeça, aprender outra língua dentro de uma escola de pensamento semelhante (ir para Befunge é um pouco de Java, mas não tanto de Forth ) fica muito mais fácil - é 'apenas' traduzir o AST para um novo idioma que é muito mais fácil na 3ª, 4ª e 5ª (etc ...) vez.
Há um artigo clássico: Real Programmers Don't Use Pascal . Parte disso diz:
... o Real Programmer determinado pode escrever programas Fortran em qualquer idioma
Existem também bits para os quais você não pode simplesmente usar o AST mental - você também precisa pensar na linguagem. Isso leva um pouco de tempo para ser realizado (ainda sou acusado de escrever código Perl em Python e meu primeiro código Lisp foi revisado dizendo "Este é um programa C muito bom").
Para isso, devo salientar um artigo publicado pela ACM, Como não escrever Fortran em qualquer idioma . O terceiro parágrafo do artigo (que não está entre aspas) aborda diretamente a questão em questão:
Existem características de boa codificação que transcendem todas as linguagens de programação de uso geral. Você pode implementar um bom design e estilo transparente em praticamente qualquer código, se você se aplicar a ele. Só porque uma linguagem de programação permite que você escreva códigos incorretos não significa que você precisa fazer isso. E uma linguagem de programação que foi projetada para promover um bom estilo e design ainda pode ser usada para escrever códigos terríveis se o codificador for suficientemente criativo. Você pode se afogar em uma banheira com uma polegada de água e escrever facilmente um programa completamente ilegível e impossível de manter em um idioma sem gotos ou números de linha, com manipulação de exceção e tipos genéricos e coleta de lixo. Esteja você escrevendo Fortran ou Java, C ++ ou Smalltalk, você pode (e deve) optar por escrever um bom código em vez de um código incorreto.
Não basta apenas ter o AST - é necessário que o AST possa ser traduzido para outros idiomas. Ter um Fortran AST na sua cabeça e escrever código Fortran em Java não é uma coisa boa. É preciso também estar familiarizado o suficiente com o idioma e seus idiomas para poder pensar no idioma (apesar do que eu disse no topo).
Eu vi código Java escrito por alguém que não parou de escrever código C. Havia um objeto com um método principal. Nesse objeto, havia main
vários métodos estáticos chamados por e classes internas privadas que tinham campos públicos (e, portanto, pareciam muito com struts). Era um código C escrito em Java. Tudo o que foi feito foi traduzir a sintaxe de um idioma para outro.
Para superar esse ponto, é necessário continuar escrevendo código em vários idiomas, não pensando nesses idiomas ao projetar o código, mas pense neles ao traduzir o design no código para trabalhar com os idiomas de idioma corretamente.
A única maneira de chegar lá - ser capaz de desenvolver habilidades de programação que podem ser aplicadas a todos os idiomas - é continuar aprendendo idiomas e manter essa linguagem de programação mental flexível, em vez de vinculada a um idioma.
(Minhas desculpas ao ChaosPandion por emprestar muito da idéia que ele apresentou .)