Marco o lenguaje?

Una adición a mi historia muy personal de programación

Programadores hoy …

… realmente no sé dónde se detiene el lenguaje y comienza el marco.

¿Qué quiero decir con esto?

Hasta aproximadamente 1988, la mayoría de los programas que una persona (como usted) usaría habían sido programados desde cero por un puñado de programadores (a menudo solo uno) usando un 3GL (lenguaje de tercera generación). Las palabras clave son: desde cero .

Como explico en el primer artículo de esta serie, los 3GL resumen el ensamblaje o el lenguaje de máquina en palabras reservadas .¹ Un lenguaje de programación es una colección de palabras reservadas y algunas reglas sobre gramática que restringen cómo se pueden usar esas palabras de una manera que no confundir el compilador (que expande las palabras en una serie de instrucciones de lenguaje de máquina). Juntos, esto se conoce como la sintaxis del lenguaje .

Como puede ver, la mayoría de los idiomas tienen sorprendentemente pocas palabras reservadas para recordar. SmallTalk tiene solo 6!

Por lo tanto, de vuelta al software anterior a 1988, si observa el código de un programa escrito antes de esa fecha, las únicas palabras que verá además del puñado de palabras reservadas son los nombres de las variables y funciones que crearon los programadores . Esto es lo que la mayoría de la gente piensa como programación.

El código de comparación de imágenes (escrito en C) a continuación utiliza dos palabras reservadas: para y doble . Las dos palabras subrayadas ( fabs e printf ) son funciones incluidas bibliotecas ( stdio.h y math.h ). Cuando una biblioteca se incluye así, se llama dependencia. Todas las otras palabras en este programa son variables o comentarios escritos por el programador.

Por simple conteo de palabras, el 90% de este código fue escrito por el programador. Menos del 10% del código es de otra persona, el 4% del idioma y el 6% de las dos bibliotecas.

 para ( x = 0 ; x <im1-> ancho; x ++ ) 
{
para ( y = 0 ; y <im1-> ancho; 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 ) [ GREEN_C ] - GET_PIXEL ( im2, x, y ) [ GREEN_C ] ) / 255.0;
totalDiff + = fabs ( GET_PIXEL ( im1, x, y ) [ BLUE_C ] - GET_PIXEL ( im2, x, y ) [ BLUE_C ] ) / 255.0;
}
}
printf ( "% lf n", 100.0 * totalDiff / (doble) ( im1-> ancho * im1-> altura * 3) ) ;

Todo en negrita es una palabra clave, todo lo subrayado es una función de una biblioteca importada . Esta lista contiene aproximadamente un 65% de código escrito por el programador y un 20% de código de la sintaxis del lenguaje y un 15% de dependencias en bibliotecas externas.

No estoy diciendo que esto sea algo malo. Estoy simplemente haciendo una declaración de hechos. Como ocurre, incluir el código de las bibliotecas es un importante potenciador de la productividad. No hay una razón justificable para que el programador promedio reinvente las ruedas del lenguaje; palabras reservadas, clases de biblioteca y funciones. Por lo tanto, en el código más moderno, esta tendencia hacia menos código escrito por el programador, y dependiendo cada vez más del código escrito por otra persona en forma de biblioteca, ha aumentado exponencialmente. Y aunque no es intrínsecamente algo malo, muchos están de acuerdo en que las cosas han ido demasiado lejos.