¿Cuáles son buenos ejemplos de proyectos abandonados (o reiniciados) debido a limitaciones del lenguaje de programación?

Los que mencionan que esto sucede todo el tiempo están más en el camino correcto.

Otros mencionan los fracasos comerciales que conducen al abandono. El lenguaje no es el decisivo completo de esto.

Tenga en cuenta que la mayoría de las traducciones son movimientos de secuencias de comandos a compilación. O bien, puede optar por la simulación de software para la realización de hardware.

Entonces, de hecho, es una práctica probar algo usando lenguajes con frases rápidas sin tener en cuenta la eficiencia. Luego, pasa a algo más industrial.

Hay muchos idiomas que se supone que evitan que los proyectos fallen. Pero no lo hacen. Si una persona escribe código totalmente codificado en el idioma más genial del mundo, probablemente no será descifrado en algo mejor. He visto esto con Python. Había una compañía en la que trabajaba que tenía gente demente (una de varias). Amaban a su pitón. Tenían esta pila escrita por este abandono de la escuela secundaria hippie. Se suponía que la pila era un gran clasificador de correo electrónico. La cosa era un desorden revuelto sin una teoría real detrás, solo un loco ensayo y error. Básicamente me despidieron por tratar de librarlos de su desorden. Eso dejó a la gente allí no más educada que antes, solo más decidida en su decisión de que este fracaso de un proyecto era su tecnología joya. Pero, de hecho, los estaba derribando. Python a menudo se promociona como un lenguaje que evita la programación trastornada. Pero, no, en manos de una persona trastornada, el código sale alterado.

Hay momentos en que un idioma es tan ineficiente que no puede cumplir con los requisitos de una aplicación. Entonces, el idioma tendría que ser cambiado. Pero, es más que el lenguaje en muchos sentidos.

Una vez tuve un proyecto que se suponía que debía hacerse en Director. Pero, el tamaño de compilación de la aplicación era demasiado grande para las máquinas de destino en el mercado. Entonces, cambié a otra pila, que hizo el mismo trabajo (incluso mejor en algún sentido) y se ejecutó en la memoria requerida. Pero, incluso el segundo producto (que era un entorno completo más allá del lenguaje) no se ejecutó lo suficientemente rápido como para rastrear el mouse. Entonces, creé otro idioma dentro del segundo producto (un intérprete de código de bytes) que podría rastrear el mouse. Al final, el producto se entregó en todo el país y funcionó bien.

Las personas que dicen que deberíamos abandonar node.js a favor de Go, podrían decir que la pereza impide que los programadores hagan dos lenguajes, uno para el cliente y el otro para el servidor. Pero, esto es una arrogancia tonta. Puede ser bueno aprender Go. Pero, es una mejor idea permitir que los programadores trabajen sus muchos procesos en un idioma. Tenga en cuenta que Go es más un lenguaje compilado y JavaScript es un lenguaje interpretado. Go todavía tiene que enredarse con el rendimiento sobre C, y sería impresionante si pudiera llegar allí. Pero, se supone que node.js es una puerta de entrada a un lenguaje compilado, por ejemplo, C ++, que aún puede proporcionar la eficiencia necesaria. Aparte de eso, todavía pienso en cuál podría ser el próximo jugador.

Creo que hay esperanzas de que para la web y muchos procesos en muchas máquinas (por ejemplo, IoT) se pueda programar en un idioma, que sea eficiente, que se pueda compilar o interpretar, y que sea extremadamente fácil empacar. Por lo tanto, puede ayudar que haya una transición sin problemas del estado actual de las cosas con los idiomas, que han sido parte de la evolución, a nuevas formas de expresar programas dirigidos a entornos de componentes múltiples y que el trabajo será más fácil. Cuantos más programadores se puedan llevar en la evolución, mejor.

Docker es una muy buena disciplina de empaque. Está escrito en JavaScript y Go. De hecho, las imágenes que admite pueden ser más grandes de lo que uno podría querer transmitir para una gran cantidad de computación futura. Pero este es un buen comienzo. Y tiene sentido que desee entregar un entorno completo desde su espacio de trabajo hasta su producción. Esto resuelve muchos problemas a la hora de instalar aplicaciones.

Algunas de las mejoras que vienen con cosas como Docker y node.js han resuelto problemas con producciones, uso de equipos, instalación, pruebas, etc. Uno no quiere crear nuevos lenguajes y entornos que reviertan la situación, o que resuelvan problemas.

Por lo tanto, parece que los idiomas por sí mismos no crean ni rompen un proyecto, siempre y cuando calculen el espectro de los requisitos del proyecto (por ejemplo, el idioma no admite números reales de ninguna manera, pero su proyecto es un cálculo numérico). La mayor parte tiene que ver con la entrega, los objetivos de hardware y los recursos. Algunos idiomas existen solo en sus entornos de entrega, lo que podría funcionar o no en términos de tener que verificar y volver a verificar la consonancia con las instancias de instalación. Otros idiomas representan sus instancias de instalación más que otros. A menudo, esto es mediante la creación de soporte básico para cada sistema operativo posible. Pero, algunos tienen marcos básicos que se portan más fácilmente, y no sacrifican la eficiencia para construir el marco.

Entonces, ahora estoy pensando que PayPal se ha mudado de Java a node.js. Entonces, han creado una nueva pila. Y, su elección les ha ayudado a cambiar su proceso de negocio para mejor. Pero, pienso en esto más como una evolución que como un abandono.

P: ¿Cuáles son buenos ejemplos de proyectos abandonados (o reiniciados) debido a limitaciones del lenguaje de programación?

Hay dos escenarios donde esto sucede.

El primer (y único ejemplo basado completamente en el lenguaje) es donde está creciendo una base de código y el lenguaje hace que sea cada vez más difícil de mantener. Casi todo lo escrito en PHP y luego cambiado a un idioma diferente cae en esta categoría. Quizás el ejemplo más conocido es wordpress . PHP es especialmente propenso a este problema, pero también lo son la mayoría de los otros lenguajes de programación de tipo dinámico, aunque notaré que WordPress se movió de PHP -> Nodo / JavaScript (que también se escribe dinámicamente, solo más sano …)

Angular dio el siguiente paso y se mudó de javascript -> typecript para v2.0. Los lenguajes de tipo estático funcionan mejor aquí, ya que son más fáciles y más rápidos de mantener, más rápido por casi exactamente la cantidad de tiempo que pasan constantemente los métodos de referencias cruzadas para ver cuáles deberían ser sus parámetros. Tenga en cuenta que esto se trata de mantenimiento, los idiomas escritos dinámicamente a menudo pueden ser más rápidos de escribir en primer lugar, y a menudo se usan en la creación de prototipos solo por esta razón, pero luego lo ralentizan para el trabajo continuo.

El segundo escenario es para el rendimiento, aunque esto se trata más a menudo del tiempo de ejecución del lenguaje que del lenguaje en sí. Probablemente el ejemplo más famoso es el movimiento de Twitter de Ruby a Scala. Si recuerda la infame ballena falsa, puede ver por qué; esas fallas fueron causadas por problemas de rendimiento debido a la naturaleza interpretada de Ruby y al efecto de limitación de velocidad del bloqueo global del intérprete.

Por supuesto … Twitter podría haber cambiado a JRuby, cambiando el tiempo de ejecución pero no el idioma … pero eso habría roto sus complementos nativos, por lo que no fue tan simple como parece y dado el tamaño del cambio de todos modos, optaron por el otro beneficios de Scala (sugerencia: tipeo estático nuevamente y FP)

Las limitaciones del lenguaje de programación en este contexto generalmente no incluyen características y sintaxis del lenguaje, sino que incluyen la calidad del tiempo de ejecución, el alcance del soporte del ecosistema y la disponibilidad de buenos empleados (incluidos los administradores). Alguien mencionó Twitter y Ruby como un buen ejemplo, pero hay muchos otros.

Los proyectos a menudo fallan debido a una gestión deficiente de los proyectos, a una arquitectura de programa deficiente o a una escalabilidad deficiente debido al tiempo de ejecución (por ejemplo, ver La caída de la casa del nodo).

Ha habido varios …

Uno de los primeros conocidos públicamente es UNIX. Comenzó en la asamblea. reiniciado en B, rehecho en C.

Otro bastante público es Linux. Comenzó en C. Luego experimentó en C ++, luego regresó a C.

Se pueden crear prototipos de muchas aplicaciones en un idioma (Perl, Python, lo que sea) como prueba de concepto. Pero estos no suelen ser adecuados por motivos de rendimiento, y la mayoría del prototipo (las partes identificadas como el problema) se reescribe en C o C ++.

Facebook comenzó a usar PHP.

Descubrieron que su naturaleza interpretada (p. Ej., Una desaceleración 10 veces mayor que los idiomas compilados) significaba que su factura de electricidad y los costos de la granja de servidores eran 10 veces más grandes de lo necesario. A su escala, eso es simplemente inmanejable.

Han reemplazado PHP correctamente con inicialmente HipHop (un compilador PHP puro para C ++) y más recientemente creo que con HHVM que está compilado por JIT y, por lo tanto, es más fácil de administrar para la implementación.

Es una buena cosa que tuvieran tanto océano de dinero que podrían hacer esto después del hecho.

¿Proyectos abandonados debido a limitaciones del lenguaje de programación? He visto MUCHOS proyectos en los últimos 40 años, así que he visto muchos fracasos. ¿Pero realmente debido a las limitaciones del idioma? Ninguna. Podría haber sido una excusa, pero no la verdadera razón.

Los proyectos fallan debido a (sin ningún orden en particular):

  • Falta de financiamiento
  • Falta de experiencia (comercial o técnica)
  • Expectativas irrealistas
  • Sin arquitectura o metodología pobre.
  • Negocio cambiante
  • Mala planificación (quiero decir horrible)

La lista continua…

Esto sucede todo el tiempo. Un proyecto se inicia como una prueba de concepto en algo como Python o Ruby, luego se convierte en un v1.0 porque el código está allí y hay una presión de tiempo para entregar, y cuando falla la escala o el costo de las operaciones también mucho (es un lenguaje de scripting dinámico, duh) es desechado y reescrito (con mucha funcionalidad ausente por lo general) en algo como Java.