As informações sobre o lançamento de uma nova versão de uma linguagem de programação específica aparecem em intervalos regulares. E com cada nova versão, seus recursos se expandem, novas construções de sintaxe ou outras melhorias são adicionadas.
E isso se assemelha muito ao desenvolvimento da tecnologia, como em qualquer outro campo da tecnologia. Quando as criações criadas são aprimoradas com a próxima etapa. Mais rápido, mais alto, mais forte ... e ao mesmo tempo muito mais difícil.
O artigo do Dia da Mentira "Programação Demonstrativa" me fez pensar sobre esse problema .
É claro que a data de publicação do artigo fala por si. No entanto, os novos padrões C ++, as especificações Java constantemente surgindo ou a nova sintaxe do PHP 8, involuntariamente fazem você se perguntar se o desenvolvimento de linguagens de programação está indo na direção certa? Afinal, a maioria das inovações adiciona complexidade à principal ferramenta de trabalho e resolve alguns problemas, acrescentando implicitamente muitos outros.
E o que deve ser feito no final do progresso no desenvolvimento de uma disciplina como a programação? Ou pelo menos um idioma específico? Para alcançar qual objetivo "ideal" final, novos padrões de linguagem de programação estão sendo desenvolvidos?
Se você fantasiar sobre o objetivo final ideal de desenvolvimento, por exemplo, o transporte, então será um movimento instantâneo a qualquer distância com uma carga arbitrária e consumo zero de energia.
Ou, por exemplo, qual é o objetivo ideal para a medicina?
Claro, o objetivo “ideal” é um conceito muito simplista. Na verdade, “ideal” é sinônimo de “inatingível”, uma vez que será sempre desafiado pela necessidade de manter um compromisso entre diferentes condições de fronteira mutuamente exclusivas.
Mas você não pode comparar diretamente o desenvolvimento de software com o processo de desenvolvimento em outras disciplinas técnicas. Na verdade, ao criar um produto final em qualquer área técnica, todas as operações de produção complexas que requerem a participação humana direta quase sempre podem ser divididas em partes ou estágios separados e mais simples.
Isso é feito, entre outras coisas, para que a complexidade de uma operação executada não seja proibitiva para o executor. Mas como isso pode ser feito no desenvolvimento de software?
Neste caso, quero dizer a limitação final das capacidades de uma pessoa em particular, em oposição às possibilidades de dividir os processos tecnológicos em estágios separados, cada um dos quais pode ser realizado por pessoas completamente diferentes (por exemplo, este é um transportador regular com sua divisão de trabalho em operações elementares ou uma estreita especialização de médicos - especialistas em uma área específica).
Afinal, é até difícil imaginar uma fantástica organização do trabalho dos programadores em forma de pipeline: o primeiro desenvolvedor escreve apenas as interfaces das funções e suas chamadas, após o que ele transfere o código para o segundo funcionário. O segundo escreve no texto do programa apenas condições de teste e saltos incondicionais e passa o texto para o terceiro. O terceiro é responsável por escrever loops e formatação geral de código, etc. - espera-se que o resultado seja um absurdo completo.
Por causa disso, a indústria de desenvolvimento de software é forçada a seguir um extenso caminho de desenvolvimento (ou seja, aumentando os recursos usados na produção). Linguagens de programação industrial modernas têm recursos muito ricos para dividir o código do aplicativo em funções / módulos / componentes separados, o que permite que muitos funcionários desenvolvam um produto de software complexo de uma só vez.
Mas mesmo esse desenvolvimento tem uma limitação natural. E essa limitação é da própria pessoa, já que cada desenvolvedor deve conhecer e poder utilizar sua ferramenta de trabalho, ou seja, linguagem de programação.
Se tomarmos a analogia acima com uma correia transportadora, então cada trabalhador nela teria que saber completamente sobrea maioria das máquinas e ferramentas utilizadas em toda a planta, independentemente de qual uma operação particular, ele executa em seu local de trabalho.
Afinal, o paradoxo do desenvolvimento de linguagens de programação é que, ao adicionar novos recursos e construções sintáticas, complicamos uma ferramenta de trabalho projetada para uso conjunto e individual!
E acontece que, simultaneamente com o processo de aumento constante das capacidades das ferramentas de desenvolvimento, há também um processo reverso - um aumento na complexidade do desenvolvimento de código por um desenvolvedor individual. Na verdade, essa é a contradição mutuamente exclusiva e intransponível.
Talvez seja por isso que é impossível encontrar uma "bala de prata" que aumentaria a produtividade de um programador? Afinal, a atenção e as capacidades de uma pessoa não são ilimitadas. E quaisquer inovações e melhorias na ferramenta de trabalho do programador são forçadas a empurrar toda a indústria de TI em um extenso caminho de desenvolvimento.
Talvez devêssemos desenvolver abordagens fundamentalmente novas, e não perseguir o açúcar sintático nas linguagens de programação do século passado? Ou não é de todo disparado continuar a usar o que é, e a teoria do avô de Darwin porá tudo em seu lugar por si mesma?