Actualmente estoy desarrollando una aplicación web para la planificación territorial del gobierno. La aplicación se ejecuta principalmente en el navegador, utilizando ajax para cargar y guardar datos.
Haré el desarrollo inicial y luego me graduaré (es un trabajo de estudiante). Después de esto, el resto del equipo agregará la característica ocasional según sea necesario. Saben codificar, pero en su mayoría son expertos en planificación de tierras.
Teniendo en cuenta el ritmo al que cambian las tecnologías Javascript, ¿cómo puedo escribir código que todavía funcionará dentro de 20 años? Específicamente, ¿qué bibliotecas, tecnologías e ideas de diseño debo usar (o evitar) para proteger mi código en el futuro?
Respuestas:
Planificar el software para tal vida útil es difícil, porque no sabemos qué depara el futuro. Un poco de contexto: Java se publicó en 1995, hace 21 años. XmlHttpRequest estuvo disponible por primera vez como una extensión patentada para Internet Explorer 5, publicada en 1999, hace 17 años. Pasaron unos 5 años hasta que estuvo disponible en todos los principales navegadores. Los 20 años que está tratando de mirar hacia el futuro son casi el tiempo que incluso han existido aplicaciones web ricas.
Algunas cosas ciertamente han permanecido igual desde entonces. Ha habido un gran esfuerzo de estandarización, y la mayoría de los navegadores se ajustan bien a los diversos estándares involucrados. Un sitio web que funcionó en todos los navegadores hace 15 años seguirá funcionando igual, siempre que funcione porque está dirigido al subconjunto común de todos los navegadores, no porque utiliza soluciones alternativas para cada navegador.
Otras cosas iban y venían, principalmente Flash. Flash tuvo una variedad de problemas que llevaron a su desaparición. Lo más importante, fue controlado por una sola compañía. En lugar de competencia dentro de la plataforma Flash, hubo competencia entre Flash y HTML5, y HTML5 ganó.
De esta historia, podemos reunir un par de pistas:
Hágalo simple: haga lo que funciona ahora, sin tener que usar soluciones alternativas. Es probable que este comportamiento permanezca disponible en el futuro por razones de compatibilidad con versiones anteriores.
Evite depender de tecnologías patentadas y prefiera estándares abiertos.
El mundo de JavaScript hoy es relativamente volátil con un alto flujo de bibliotecas y marcos. Sin embargo, casi ninguno de ellos importará en 20 años: el único "marco" que estoy seguro de que todavía se utilizará para entonces es Vanilla JS .
Si desea utilizar una biblioteca o herramienta porque realmente hace que el desarrollo sea mucho más fácil, primero asegúrese de que esté basado en los estándares compatibles actuales. Luego debe descargar la biblioteca o herramienta e incluirla con su código fuente. Su repositorio de código debe incluir todo lo necesario para que el sistema sea ejecutable. Cualquier cosa externa es una dependencia que podría romperse en el futuro. Una forma interesante de probar esto es copiar su código en una memoria USB, ir a una computadora nueva con un sistema operativo diferente, desconectarlo de Internet y ver si puede hacer que su interfaz funcione. Siempre y cuando su proyecto consista en HTML + CSS + JavaScript más algunas bibliotecas, es probable que lo apruebe.
fuente
Lo que es aún más importante que su código que sobrevive durante 20 años es que sus datos sobrevivan durante 20 años. Lo más probable es que eso sea lo que valga la pena preservar. Si es fácil trabajar con sus datos, será fácil construir un sistema alternativo con tecnología más nueva.
Una vez que tenga eso, preparar la aplicación en el futuro es más simple, ya que es una envoltura alrededor del modelo de datos, y puede reemplazarse si, en 10 años, ya nadie usa Javascript, por ejemplo, y necesita migrar la aplicación a WASM o algo así. Mantener las cosas modulares, menos interdependientes, permite un mantenimiento futuro más fácil.
[1] La mayoría de los comentarios a esta respuesta adoptan una postura firme contra el uso de Oracle para una base de datos, citando muchas razones perfectamente legítimas por las que es difícil trabajar con Oracle, tiene una curva de aprendizaje empinada y una sobrecarga de instalación. Estas son preocupaciones completamente válidas al elegir Oracle como DB, pero en nuestro caso, no estamos buscando una DB de propósito general, sino una en la que la preocupación principal sea la mantenibilidad . Oracle ha existido desde finales de los años 70 y probablemente será compatible durante muchos años, y hay un gran ecosistema de consultores y opciones de soporte que pueden ayudarlo a mantenerlo en funcionamiento. ¿Es esto un desastre caro para muchas empresas? Seguro. ¿Pero mantendrá su base de datos funcionando durante 20 años ? Muy probable.
fuente
La respuesta anterior de amon es excelente, pero hay dos puntos adicionales que no se mencionaron:
No se trata solo de navegadores; los dispositivos también importan.
amon menciona el hecho de que un "sitio web que funcionó en los navegadores hace 15 años seguirá funcionando igual" , lo cual es cierto. Sin embargo, mire los sitios web creados no hace quince, sino hace diez años, que, cuando se crearon, funcionaron en la mayoría de los navegadores para la mayoría de los usuarios. Hoy, una gran parte de los usuarios no podrán usar esos sitios web en absoluto, no porque los navegadores hayan cambiado, sino porque los dispositivos sí lo hicieron. Esos sitios web se verían terribles en pantallas pequeñas de dispositivos móviles , y eventualmente no funcionarían si los desarrolladores decidieran confiar en el
click
evento JavaScript , sin saber que esetap
evento también es importante.Te estás enfocando en un tema equivocado.
Los cambios tecnológicos son una cosa, pero uno más importante son los cambios de requisitos . Es posible que sea necesario escalar el producto, o que deba tener características adicionales, o que necesite cambiar sus características actuales.
No importa lo que suceda con los navegadores, dispositivos, W3C o ... lo que sea.
Si escribe su código de manera que pueda ser refactorizado , el producto evolucionará con la tecnología.
Si escribe su código de una manera que nadie pueda entenderlo y mantenerlo, la tecnología no importa: cualquier cambio ambiental hará que su aplicación se caiga de todos modos, como una migración a un sistema operativo diferente, o incluso algo tan simple como el crecimiento de datos naturales .
Como ejemplo, trabajo en desarrollo de software durante diez años. Entre las docenas y docenas de proyectos, solo hubo dos que decidí cambiar debido a la tecnología , más precisamente porque PHP evolucionó mucho en los últimos diez años. Ni siquiera fue la decisión del cliente: no le importaría menos si el sitio usa espacios de nombres o cierres de PHP. Sin embargo, los cambios relacionados con los nuevos requisitos y la escalabilidad, ¡hubo muchos!
fuente
No planeas durar 20 años. Llano y simple. En cambio, cambias tus objetivos a la compartimentación.
¿Su base de datos de aplicaciones es independiente? Si tuviera que cambiar las bases de datos en este momento, ¿podría? ¿Es su lenguaje lógico agnóstico? Si tuviera que volver a escribir la aplicación en un idioma totalmente nuevo en este momento, ¿podría? ¿Sigue buenas pautas de diseño como SRP y DRY?
He tenido proyectos en vivo durante más de 20 años, y puedo decirles que las cosas cambian. Al igual que las ventanas emergentes. Hace 20 años podía confiar en una ventana emergente, hoy no puede. XSS no era una cosa hace 20 años, ahora tienes que dar cuenta de CORS.
Entonces, lo que debe hacer es asegurarse de que su lógica esté bien separada, y que evite usar CUALQUIER tecnología que lo encierre en un proveedor específico.
Esto puede ser muy complicado a veces. .NET, por ejemplo, es excelente para exponer la lógica y el método para su adaptador de base de datos MSSQL que no tiene equivalentes en otros adaptadores. MSSQL puede parecer un buen plan hoy, pero ¿seguirá siéndolo durante 20 años? Quién sabe. Un ejemplo de cómo solucionar esto para tener una capa de datos totalmente separada de las otras partes de la aplicación. Luego, en el peor de los casos, solo tiene que volver a escribir toda la capa de datos, el resto de su aplicación no se ve afectada.
En otras palabras, piense en ello como un automóvil. Su automóvil no va a cumplir 20 años. Pero, con neumáticos nuevos, motor nuevo, transmisión nueva, ventanas nuevas, electrónica nueva, etc. Ese mismo automóvil puede estar en la carretera durante mucho tiempo.
fuente
Las respuestas de @amon y algunas otras son geniales, pero quería sugerirte que mires esto desde otra perspectiva.
He trabajado con grandes fabricantes y agencias gubernamentales que confiaban en programas o bases de código que se habían utilizado durante más de 20 años, y todos tenían una cosa en común: la compañía controlaba el hardware. Tener algo funcionando y extensible por más de 20 años no es difícil cuando controlas lo que funciona. Los empleados de estos grupos desarrollaron código en máquinas modernas que eran cientos de veces más rápido que las máquinas de implementación ... pero las máquinas de implementación se congelaron a tiempo.
Su situación es complicada, porque un sitio web significa que necesita planificar dos entornos: el servidor y el navegador.
Cuando se trata del servidor, tiene dos opciones generales:
Confíe en el sistema operativo para varias funciones de soporte que pueden ser mucho más rápidas, pero significa que el sistema operativo puede necesitar "congelarse a tiempo". Si ese es el caso, querrá preparar algunas copias de seguridad de la instalación del sistema operativo para el servidor. Si algo falla en 10 años, no querrá volver loco a alguien tratando de reinstalar el sistema operativo o reescribir el código para que funcione en un entorno diferente.
Use bibliotecas versionadas dentro de un lenguaje / marco de trabajo dado, que son más lentos, pero se pueden empaquetar en un entorno virtual y probablemente se ejecuten en diferentes sistemas operativos o arquitecturas.
Cuando se trata del navegador, necesitará alojar todo en el servidor (es decir, no puede usar una CDN global para alojar archivos). Podemos suponer que los futuros navegadores seguirán ejecutando HTML y Javascript (al menos por compatibilidad), pero eso es realmente una suposición / suposición y no se puede controlar eso.
fuente
El núcleo de la mayoría de las aplicaciones son los datos. Los datos son para siempre. El código es más prescindible , cambiante, maleable. Sin embargo, los datos deben conservarse. Así que concéntrate en crear un modelo de datos realmente sólido. Mantenga el esquema y los datos limpios. Anticípese, que una nueva aplicación podría construirse sobre la misma base de datos.
Elija una base de datos que sea capaz de imponer restricciones de integridad. Las restricciones no forzadas tienden a violarse a medida que pasa el tiempo. Nadie se da cuenta. Aproveche al máximo las instalaciones, como claves foráneas, restricciones únicas, verifique las restricciones y posiblemente los activadores para la validación. Hay algunos trucos para abusar de las vistas indexadas para imponer restricciones de unicidad entre tablas.
Entonces quizás deba aceptar que la aplicación se reescribirá en algún momento. Si la base de datos está limpia, habrá poco trabajo de migración. Las migraciones son extremadamente caras en términos de mano de obra y defectos causados.
Desde una perspectiva tecnológica, podría ser una buena idea colocar la mayor parte de la aplicación en el servidor y no en un formulario JavaScript en el cliente. Probablemente podrá ejecutar la misma aplicación en la misma instancia del sistema operativo durante mucho tiempo gracias a la virtualización . Eso no es realmente agradable, pero es una garantía de que la aplicación funcionará dentro de 20 años sin costos de mantenimiento y hardware costosos. Al hacer esto, al menos tiene la alternativa segura y económica de continuar ejecutando código antiguo y funcional.
Además, encuentro que algunas pilas de tecnología son más estables que otras . Yo diría que .NET tiene la mejor historia de compatibilidad con versiones anteriores posible actualmente. Microsoft es muy serio al respecto. Java y C / C ++ también son realmente estables. Python ha demostrado que es muy inestable con los cambios de última hora de Python 3. JavaScript en realidad me parece bastante estable porque romper la web no es una opción para ningún proveedor de navegadores. Sin embargo, probablemente no deberías confiar en nada experimental o funky. ("Funky" se define como "Lo sé cuando lo veo").
fuente
Las otras respuestas tienen sentido. Sin embargo, creo que los comentarios sobre la tecnología del cliente han terminado de complicar las cosas. He trabajado como desarrollador durante los últimos 16 años. En mi experiencia, siempre y cuando mantenga su código de cliente intuitivo, debería estar bien. Así que no hay "hacks" con marcos / iframes, etc. Solo use funciones bien definidas en los navegadores.
Siempre puede usar los modos de compatibilidad en los navegadores para que sigan funcionando.
Para probar mi punto, hace solo unos meses arreglé un error de milenio en el código javascript para un cliente, que ha estado ejecutando su aplicación web durante 17 años. Todavía funciona en máquinas recientes, base de datos reciente, sistema operativo reciente.
Conclusión: manténgalo simple y limpio y debería estar bien.
fuente
Algunos axiomas:
Las tecnologías y estándares más estables (los menos vulnerables a la obsolescencia) tienden a ser los que no son propietarios y se han adoptado más ampliamente. Cuanto más amplia es la adopción, mayor es la inercia contra casi cualquier forma de cambio. Los "estándares" propietarios son siempre vulnerables a las fortunas y caprichos de sus dueños y fuerzas competitivas.
Veinte años es mucho tiempo en la industria informática. Cinco años es un objetivo más realista. Dentro de cinco años, todo el problema que su aplicación debe resolver podría redefinirse por completo.
Algunos ejemplos para ilustrar:
C y C ++ han existido por mucho tiempo. Tienen implementaciones en casi todas las plataformas. C ++ continúa evolucionando, pero las características "universales" (las disponibles en todas las plataformas) están prácticamente garantizadas de que nunca serán desaprobadas.
Flash casi se convirtió en un estándar universal, pero es propietario. Las decisiones corporativas de no admitirlo en plataformas móviles populares básicamente lo han condenado a todas partes: si está creando para la web, quiere que su contenido esté disponible en todas las plataformas; no te quieres perder el principal mercado móvil se ha convertido.
WinTel (Windows / x86) a pesar de ser propiedad de Microsoft e Intel, habiendo comenzado en una plataforma menos que óptima (16 bits internos / 8 bits externos 8088 frente a Apple Macintosh contemporáneo 32 bits internos / 16 bits externos 68000), y erosión para Apple en el mercado de consumo sigue siendo una opción de facto para las plataformas comerciales. En todo ese tiempo (25 años), un compromiso con la compatibilidad con versiones anteriores ha obstaculizado el desarrollo futuro y ha inspirado una confianza considerable en que lo que funcionó en la caja anterior seguirá funcionando en la nueva.
Pensamientos finales
JavaScript podría no ser la mejor opción para implementar la lógica empresarial. Por razones de integridad y seguridad de los datos, la lógica empresarial debe realizarse en el servidor, por lo que JavaScript del lado del cliente debe limitarse al comportamiento de la interfaz de usuario. Incluso en el servidor, JavaScript podría no ser la mejor opción. Aunque es más fácil trabajar con él que otras pilas (Java o C #) para proyectos pequeños, carece de la formalidad que puede ayudarlo a escribir soluciones mejores y más organizadas cuando las cosas se vuelven más complejas.
fuente