¿Cuál es el objetivo de desarrollo "ideal" para los lenguajes de programación?





La información sobre el lanzamiento de una nueva versión de un lenguaje de programación en particular aparece a intervalos regulares. Y con cada nueva versión, sus capacidades se expanden, se agregan nuevas construcciones de sintaxis u otras mejoras.



Y esto se parece mucho al desarrollo de la tecnología, como en cualquier otro campo de la tecnología. Cuando las creaciones creadas se mejoran con la siguiente etapa. Más rápido, más alto, más fuerte ... y al mismo tiempo mucho más difícil.



El artículo de April Fool "Programación demostrativa" me hizo pensar en este problema .



Está claro que la fecha de publicación del artículo habla por sí sola. Sin embargo, los nuevos estándares C ++, las especificaciones Java que salen constantemente o la nueva sintaxis en PHP 8, involuntariamente hacen que te preguntes, ¿va el desarrollo de los lenguajes de programación en la dirección correcta? Después de todo, la mayoría de las innovaciones agregan complejidad a la principal herramienta de trabajo y resuelven algunos problemas, agregando implícitamente muchos otros.



¿Y qué debería haber al final del progreso en el desarrollo de una disciplina como la programación? ¿O al menos un idioma específico? En aras de lograr, ¿qué objetivo "ideal" final se están desarrollando nuevos estándares de lenguaje de programación?



Si fantasea con el objetivo final ideal del desarrollo, por ejemplo, el transporte, entonces será un movimiento instantáneo a cualquier distancia con una carga útil arbitraria y un consumo de energía cero.



O, por ejemplo, ¿cuál es el objetivo ideal de la medicina? Los pobres no enfermaron y los ricos no se recuperaron, probablemente el tratamiento de alguna enfermedad y la inmortalidad biológica.



Por supuesto, el objetivo "ideal" es un concepto muy simplista. De hecho, "ideal" es sinónimo de "inalcanzable", ya que siempre se verá desafiado por la necesidad de mantener un compromiso entre diferentes condiciones de frontera mutuamente excluyentes.



Pero no se puede comparar directamente el desarrollo de software con el proceso de desarrollo en otras disciplinas técnicas. De hecho, al crear un producto final en cualquier área técnica, todas las operaciones de producción complejas que requieren la participación humana directa casi siempre se pueden dividir en partes o etapas separadas y más simples.



Esto se hace, entre otras cosas, para que la complejidad de una operación realizada no sea prohibitiva para el ejecutante. Pero, ¿cómo se puede hacer esto en el desarrollo de software?



En este caso, me refiero a la limitación última de las capacidades de una persona en particular, en oposición a las posibilidades de dividir los procesos tecnológicos en etapas separadas, cada una de las cuales puede ser realizada por personas completamente diferentes (como ejemplo, este es un transportador regular con su división del trabajo en operaciones elementales o una especialización limitada de médicos (especialistas en un área específica).



Después de todo, es incluso difícil imaginar una organización fantástica del trabajo de los programadores en forma de canalización: el primer desarrollador escribe solo las interfaces de las funciones y sus llamadas, después de lo cual transfiere el código al segundo empleado. El segundo escribe en el texto del programa solo condiciones de prueba y saltos incondicionales y pasa el texto al tercero. El tercero es responsable de escribir bucles y formatear el código en general, etc. - Se espera que el resultado sea una completa tontería.



Debido a esto, la industria del desarrollo de software se ve obligada a seguir un camino de desarrollo extenso (es decir, aumentando los recursos utilizados en la producción). Los lenguajes de programación industrial modernos tienen capacidades muy ricas para dividir el código de la aplicación en funciones / módulos / componentes separados, lo que permite a muchos empleados desarrollar un producto de software complejo a la vez.



Pero incluso este desarrollo tiene una limitación natural. Y esta limitación es la propia persona, ya que cada desarrollador debe conocer y poder utilizar su herramienta de trabajo, es decir lenguaje de programación.



Si tomamos la analogía anterior con una cinta transportadora, a continuación, todos los trabajadores de que tendría que conocer a fondo acercala mayor parte de las máquinas y herramientas utilizadas en toda la planta, independientemente de lo que uno operación en particular se lleva a cabo en su lugar de trabajo.



Después de todo, la paradoja del desarrollo de lenguajes de programación es que al agregar nuevas características y construcciones sintácticas, ¡complicamos una herramienta de trabajo diseñada para uso conjunto e individual!



Y resulta que simultáneamente con el proceso de aumentar constantemente las capacidades de las herramientas de desarrollo, también hay un proceso inverso: un aumento en la complejidad del desarrollo de código por parte de un desarrollador individual. De hecho, esta es la contradicción insuperable y mutuamente excluyente.



¿Quizás por eso es imposible encontrar una "fórmula milagrosa" que aumente la productividad de un programador? Después de todo, la atención y las capacidades de una persona no son ilimitadas. Y cualquier innovación y mejora en la herramienta de trabajo del programador se ve obligada a impulsar a toda la industria de TI en un amplio camino de desarrollo.



¿Quizás deberíamos desarrollar enfoques fundamentalmente nuevos y no perseguir el azúcar sintáctico en los lenguajes de programación del siglo pasado? ¿O no se dispara en absoluto, para seguir usando lo que es, y la teoría del abuelo de Darwin pondrá todo en su lugar por sí misma?



All Articles