La Economía de las Lenguajes de Programación
David N. Welton
Davidw@dedasys.com
Welton
Me gustan mucho los lenguajes de programación. He utilizado un número de ellos profesionalmente, e incluso he escrito uno mismo - Hecl - aunque toma prestado la mayor parte de sus ideas, si no código fuente, de Tcl. Y, por supuesto, he participado en mi parte de los debates y discusiones sobre "qué idioma es el mejor", un tema que por supuesto no tiene una respuesta clara, pero a menudo es la fuente de argumentos acalorados.
Recientemente leí un libro interesante,
Information Rules: A Strategic Guide to the Network Economy, de Carl Shapiro y Hal R. Varian (Harvard Business School Press, 1998; ISBN: 087584863X), que habla de la economía del mundo de la alta tecnología. Mientras lo leía y pensaba en los lenguajes de programación, se hicieron clic en varias cosas. No son conclusiones que rompen la tierra. Por el contrario, muchos de ellos tienen más o menos sentido común, pero es bueno leer que hay algunas teorías metódicamente estudiadas detrás de algunas de las intuiciones, presentimientos y observaciones que he hecho a lo largo de los años.
En este artículo intentaré enumerar lo que creo que son los puntos más destacados de la economía de los lenguajes de programación y describir sus efectos en los idiomas existentes, así como en aquellos que desean escribir e introducir nuevos idiomas.
Lenguajes como productos
Los lenguajes de programación, como cualquier producto, tienen ciertas propiedades. Obviamente, como cualquier otro tipo de información buena, los costes de producción en el sentido de hacer copias son esencialmente cero. La investigación y el desarrollo (costos irrecuperables) son necesarios para crear el software en sí, lo que significa que una inversión inicial es necesaria, y si el idioma no es exitoso, es probable que la inversión no se puede recuperar.
Esto se aplica a muchos bienes de información, pero los lenguajes de programación también tienen algunas cualidades que los hacen especiales dentro de este grupo. A saber, que ambos son un medio de dirigir a las computadoras y sus periféricos para hacer un trabajo útil, pero también son un medio de intercambio de ideas y algoritmos para hacer ese trabajo entre personas. En otras palabras, las lenguas van más allá de ser simplemente algo que es útil; Son también un medio de comunicación. Además, en forma de colecciones de código tales como paquetes, módulos o bibliotecas, los lenguajes de programación son también una forma de intercambiar rutinas útiles que pueden ser recombinadas de forma novedosa por otros programadores, en lugar de simplemente intercambiar aplicaciones terminadas.
Externalidades positivas de red
Esto nos lleva a lo que es uno de los conceptos más importantes. "Externalidades de red", o "efectos de red", se refiere a la noción de que cuanto más personas poseen o utilizan algo, más valioso es para cada uno. Considere un teléfono celular, por ejemplo. Si no tuviera a nadie para llamar, podría obtener un poco de placer de seleccionar molesto tonos de llamada en lugares públicos, pero más allá de eso, sería un trozo de plástico en su mayoría inútil. Una gran parte del valor del teléfono está en la capacidad de llamar a tus amigos, y hacer que te llamen.
El valor de las lenguajes de programación no depende claramente totalmente de este concepto; ciertamente puede hacer mucho incluso con un lenguaje que no es utilizado por muchas personas. Sin embargo, tenga en cuenta todos los extras que obtiene si su idioma es popular: libros, bibliotecas de código abierto, ejemplos, grupos de discusión / apoyo, posibilidades de trabajo o, a la inversa, la capacidad de contratar a programadores para trabajar en el producto de su empresa. Si utiliza un lenguaje popular como C, y sale un nuevo protocolo de red, es muy probable que alguien cree una biblioteca que "hable" de este protocolo, y en estos días es muy posible que sea incluso de código abierto. Por otra parte, si usted está usando un lenguaje oscuro, usted tendrá que escribir el apoyo para este nuevo protocolo usted mismo, o esperar que alguien en un grupo más limitado.
Los efectos de esto son claramente visibles. A pesar del gran número de lenguajes que han sido creados por individuos, investigadores universitarios y corporaciones, la mayoría de los programadores en cualquier momento dado probablemente usarán uno de un conjunto relativamente pequeño de lenguajes. Sin embargo, hay algunos factores que mitigan estos efectos, como veremos en breve.
Costos de cambio
En la columna de gastos, los "costos de conmutación", o los costos de cambiar los lenguajes de programación, son bastante evidentes. Reescribir una gran pieza de software en otro idioma está plagado de trampas, y es probable que sea extremadamente caro y consume mucho tiempo. Una vez que se escribe, puede ser ampliado o modificado, pero las reescrituras completas son raras. ¿Propondrías reescribir un sistema de trabajo a tu jefe? "No, en realidad no hará mucho más, que lo que tenemos ahora, y se necesitarán tres programadores de cinco meses para completar, pero será en Haskell en lugar de Fortran!". Esta es la razón por la cual los bancos todavía tienen tanto código escrito en Cobol.
Para el individuo, también, tener que aprender un nuevo idioma es difícil. Incluso para los programadores expertos, es difícil dominar realmente muchos idiomas, ya que la práctica frecuente es necesaria para "mantenerse en forma". Una vez que tenga unos pocos en su cinturón, es para su ventaja para poder utilizarlos por un tiempo. Prefiere poner "20 años de experiencia en Java" en su currículum que "6 meses de programación Forth", ¿no? Debido a que los programadores y los programas incurren en costos de conmutación que pueden ser muy altos, el efecto es que los idiomas duran mucho tiempo, incluso si ya no son "lo último" que se enseña en las universidades.
Cambiar los costos es aún mayor para las personas que no son programadores expertos - aprender un idioma ya es una gran inversión para ellos, y no sería rápido e indoloro para ellos aprender varios idiomas, o cambiar a un idioma diferente. El viejo adagio de "la mejor herramienta para el trabajo" tampoco encaja en este caso. Dado que la mayoría de los lenguajes de programación son mucho más complejos que, por ejemplo, un martillo, la mayoría de la gente prefiere aprender uno o dos que hacen un buen trabajo razonable al tratar con los problemas que más frecuentemente enfrentan, Otras necesidades que puedan surgir.
La elección de un idioma para aprender es, por consiguiente, de mayor importancia para estos individuos, que sin embargo son los menos bien posicionados para poder hacer una elección informada, carentes de la experiencia y la capacidad de comparar y contrastar los conjuntos de herramientas disponibles.
Una vez que nuestro hipotético programador "a tiempo parcial" ha seleccionado e invertido el tiempo para aprender un nuevo idioma, es probable que en ese momento quieran defender su elección - a nadie le gusta pensar que hicieron una mala inversión. Y, por supuesto, quieren ver que continúan fuertes, por lo que no se les pone en una posición de ser obligados a aprender algo más, a partir de cero.
Introducción a un nuevo idioma
Para aquellos que desean introducir y popularizar un nuevo idioma, un punto clave es cómo superar el impulso conferido a las lenguas populares existentes por los efectos de red y los costos de cambio.
En estos días y edades, las implementaciones de lenguaje de programación están en su mayoría disponibles de forma gratuita (y en muchos casos incluso tienen implementaciones de código abierto), lo que significa que la introducción de un lenguaje más reciente y más barato y la implementación rara vez es posible. Si desarrollamos un nuevo lenguaje, las porciones "más baratas" y "mejores" de la ecuación deben provenir de la calidad del lenguaje mismo. Tendrá que hacer código:
- Más fácil de escribir - ampliar el número de personas que pueden utilizar el idioma, y por lo tanto su valor. Piense en los lenguajes de scripting en comparación con C. Son más tolerantes y fáciles de usar gracias a las formas de recolección de basura o de referencia de conteo, lo que significa que las personas que podrían no haber sido capaces de llevar a cabo una tarea determinada con C podría hacerlo con un lenguaje de scripting.
- Más eficientes: hacer programas más rápidos que requieren menos tiempo o recursos del sistema para lograr lo que necesitan. Aunque, como podemos ver en las tendencias recientes como Java, esto es menos importante a medida que los precios de la memoria caen y el espacio en disco es cada vez más abundante.
- Mayor calidad - lo que significa que menos tiempo del programador se gasta bugs de caza, y más en el desarrollo de nuevas características. Recolección de basura, una vez más, es una de esas características que significa que el programador necesita preocuparse menos sobre el seguimiento de la memoria. Algunas investigaciones han pasado a programas "demostrables", aunque sin ningún efecto sobre las técnicas convencionales en esta fecha. No tener que lidiar con la manipulación de puntero directo también es una forma de eliminar una categoría de errores.
- Más productivo - lenguajes que le permiten hacer cosas complejas fácilmente significa que usted puede hacer más que un competidor con un lenguaje que es más lento para desarrollar pulg PHP en la web permite a las personas hack out rápido páginas web dinámicas muy rápidamente sin una gran cantidad de configuración. El kit de herramientas gráficas Tk hizo que las GUIs escritas fueran muy fáciles, impulsando el uso del lenguaje Tcl. Esto es muy a menudo una cuestión de bibliotecas que resumen en el nivel correcto en lugar de la lengua en sí; La mayoría de los idiomas, sin embargo, tienen una "sensación", y es el lenguaje central y las bibliotecas que dan el tono.
Por supuesto, las ganancias deben ser significativas -si sólo obtienes una ganancia del cinco por ciento, pero pierdes todo el código existente, o esa gran comunidad de programadores que puedes pedir ayuda en un momento dado, vale la pena?
Compatibilidad
Una forma de darse un impulso es con alguna forma de compatibilidad. C ++ es un ejemplo obvio de esto. Otro es el mayor de los lenguajes de script, todos los cuales están escritos en C, y proporcionan una interfaz que les permite interoperar a ese nivel. Por ejemplo, Tcl no fue concebido como un lenguaje independiente, sino como una biblioteca que proporciona un lenguaje flexible para ser incluido en programas más grandes, lo que significa que tiene una API C que le permite interactuar fácilmente entre Tcl y C. Esto significa que Todos los lenguajes de secuencias de comandos han sido capaces de aprovechar las bibliotecas escritas en C, aumentando considerablemente su utilidad.
Lisp, un lenguaje muy elegante que es ampliamente admirado por los aficionados al lenguaje, a menudo ha tomado el enfoque de estar orientado a hacer todo en Lisp - a principios de los años 80, incluso se producían computadoras que ejecuta Lisp: "Lisp Machines"! Tal vez este deseo de ser Lisp "todo el camino hacia abajo" ha costado este lenguaje algo en términos de su capacidad de co-optar a través de la compatibilidad con C, pero es una discusión compleja en sí mismo y es probablemente mejor dejar para otro artículo.
Java es otro lenguaje que tiende a desear "pureza", aunque es posible integrar el código C nativo con él. Su éxito se atribuye probablemente a algunas mejoras genuinas sobre C y C ++ en términos de facilidad y calidad, ya su organización rígida, que le da a los equipos la capacidad de asignar tareas a programadores menos talentosos sin temor a contaminar todo el proyecto con un disco duro -verificación de segmentación. Millones de dólares de dólares de Sun Microsystems para la comercialización y la construcción de grandes bibliotecas estándar también fueron útiles en la adopción de la lengua, aunque esta es una técnica no disponible para muchos diseñadores de lenguaje aspirantes.
Atacar un nicho
A pesar de los intentos de flexibilizar las lenguas y de llevar a cabo tantas tareas como sea posible, como herramientas, las lenguas tienen áreas donde son más adecuadas que otras. Fortran sigue siendo el mejor de algunas aplicaciones científicas, pero lo más probable es que no lo utilice para aplicaciones web. Erlang es un lenguaje y una plataforma muy robustos que son ideales para aplicaciones que no se les permite fallar, pero es probable que no sea tan fácil para principiantes como algo como Python.
El mundo de la informática y la tecnología está siempre cambiando, por lo que se deduce que surgirán nuevos nichos y mercados donde las lenguas existentes no son ideales. Por ejemplo, los lenguajes de secuencias de comandos eran un ajuste natural para la Web. Fácil de usar y práctico para tratar con texto, que hizo mucho más agradable para crear páginas web que trabajar con C habría sido. Los diseñadores de lenguajes que esperan ver su creación más ampliamente utilizada pueden desear identificar un nicho en particular donde su invención es particularmente adecuada. El nuevo idioma puede no estar tan lejos del campo en todas las formas posibles, pero si el desarrollo se concentra para proporcionar un sistema que es al menos superior en una cosa que hace muy bien, podría llegar a ser suficiente para Menos que la gente la utilice.
PHP, por ejemplo, no era una novedad cuando se creó. Como lengua, no es nada innovador en comparación con otros de su tipo. Sin embargo, hizo páginas web dinámicas muy bien, y muy fácilmente comparado con otros sistemas disponibles en el momento. Recuerdo la configuración de mod_perl y la instalación de varios componentes que a menudo tenían los requisitos de versión. Fue un dolor comparado con la configuración PHP más integrada. Otro ejemplo, como se mencionó anteriormente, fue la combinación de Tk con Tcl para scripts de GUI. Tcl es muy adecuado para una variedad de tareas, desde ejecutar en routers de Cisco hasta hacer scripts web en sí, pero Tk fue su home run, y lo que se hizo conocido.
Conclusión
Las nociones aquí discutidas parecerán familiares para aquellos que se han dedicado a reflexionar sobre el tema, pero al enmarcarlos en términos de costos y beneficios, espero darles a los usuarios de idiomas una idea para seleccionar un idioma que mejor se adapte a sus necesidades. Este marco también ayudará a los diseñadores y defensores lingüísticos a comercializar mejor sus productos, dándoles un lenguaje común, el de la economía, para discutir los desafíos y oportunidades inherentes al mercado de los lenguajes de programación informática.
_________________
Además del libro
Information Rules mencionado al principio de este artículo, otro recurso para los lectores interesados en el seguimiento de este tema es
"Languages, Levels, Libraries, and Longevity" de John R. Mashey publicado en ACM Queue (vol. 9, diciembre / enero 2004-2005). Gracias también al profesor Stephen J. Turnbull, de la Universidad de Tsukuba, por sus comentarios y sugerencias.