Framework ou linguagem?

Um adendo à minha história pessoal de programação

Programadores hoje …

… Não sei realmente onde a linguagem pára e a estrutura começa.

O que quero dizer com isso?

Até cerca de 1988 a maioria dos programas que uma pessoa (como você) usaria foi programada do zero por um punhado de programadores (geralmente apenas um) usando um 3GL (linguagem de 3ª geração). As palavras-chave são: a partir do zero .

Como explico no primeiro artigo desta série, os 3GLs abstraem assembly ou linguagem de máquina em palavras reservadas .¹ Uma linguagem de programação é uma coleção de palavras reservadas e algumas regras sobre gramática que restringem a maneira de usar essas palavras de uma forma que não confunda o compilador (que expande as palavras em uma série de instruções de linguagem de máquina). Juntos, isso é chamado de sintaxe da linguagem.

Como você pode ver, a maioria dos idiomas tem surpreendentemente poucas palavras reservadas para serem lembradas. O SmallTalk tem apenas 6!

Então, de volta ao software pré-1988, se você olhar o código de um programa escrito antes dessa hora, as únicas palavras que você verá além do punhado de palavras reservadas são os nomes de variáveis ??e funções que os programadores criaram . Isso é o que a maioria das pessoas pensa como programação.

O código de comparação de imagens (escrito em C) abaixo usa duas palavras reservadas: para e duplo . As duas palavras sublinhadas ( fabs e printf ) são funções incluídas bibliotecas ( stdio.he math.h ). Quando uma biblioteca é incluída dessa forma, ela é chamada de dependência. Todas as outras palavras neste programa são variáveis ??ou comentários escritos pelo programador.

Por simples contagem de palavras, 90% deste código foi escrito pelo programador. Menos de 10% do código é de outra pessoa, 4% da linguagem e 6% das duas bibliotecas.

 para ( x = 0 ; x <im1-> largura; x ++ ) 
{
para ( y = 0 ; y <im1-> largura; y ++ )
{
totalDiff + = fabs ( GET_PIXEL ( im1, x, y ) [ RED_C ] - GET_PIXEL ( im2, x, y ) [ RED_C ] ) / 255,0;
totalDiff + = fabs ( GET_PIXEL ( im1, x, y ) [ VERDE_C ] - GET_PIXEL ( im2, x, y ) [ VERDE_C ] ) / 255,0;
totalDiff + = fabs ( GET_PIXEL ( im1, x, y ) [ AZUL_C ] - GET_PIXEL ( im2, x, y ) [ AZUL_C ] ) / 255,0;
}
}
printf ( "% lf n", 100.0 * totalDiff / (double) ( im1-> largura * im1-> altura * 3) ) ;

Tudo em negrito é uma palavra chave, tudo sublinhado é uma função de uma biblioteca importada . Esta listagem tem cerca de 65% de código escrito pelo programador e 20% de código da sintaxe da linguagem e 15% de depedências em bibliotecas externas.

Eu não estou dizendo que isso é uma coisa ruim. Estou apenas fazendo uma declaração de fato. Acontece que incluir código de bibliotecas é um importante aprimorador de produtividade. Não há razão justificável para o programador médio reinventar as rodas da linguagem; palavras reservadas, classes e funções da biblioteca. Assim, na maioria dos códigos modernos, essa tendência em direção a menos código escrito pelo programador, e confiando cada vez mais no código escrito por outra pessoa na forma de uma biblioteca, aumentou exponencialmente. E embora não seja inerentemente uma coisa ruim, muitos concordam que as coisas foram longe demais.