¿Cuáles son las áreas de investigación abiertas en arquitectura de software?

Una de las cosas que lee una y otra vez cuando la gente habla sobre qué plataformas, idiomas, herramientas, etc. es “depende”. Eso no es una respuesta. Por supuesto que depende. No hay bala de plata. Una talla no sirve para todos. El punto es que se trata de compensaciones. Si elige X sobre Y, gana A, B, C y pierde D, E y F.

Depende, aunque precisa, es débil. Significa que debe identificar las alternativas, investigar y determinar qué opción se adapta mejor a sus necesidades.

Tomemos JavaScript ya que es bien conocido. Si desea escribir una aplicación de consola, puede usar Node. Si desea escribir una aplicación orientada al usuario, puede crear una para el navegador. ¿Qué bibliotecas deberías usar para esa aplicación? jQuery, Redux, Angular, etc. Hay demasiadas opciones para contemplar. Es difícil responder a esa pregunta incluso cuando está aprovechando pilas / marcos completos porque incluso en ese espacio hay muchas opciones. ¿Qué sucede si desea utilizar microlibliotecas y seleccionar manualmente las adecuadas para su aplicación? Ahora tiene muchas opciones que cubren muchas categorías. Acabas de multiplicar el espacio del problema. Depende de mi pie!

Lo que la gente quiere y necesita es una arquitectura que se adapte a una amplia gama de casos de uso para que puedan trabajar con un conjunto conocido de cosas, independientemente de los detalles del software. Decir “depende” es simplemente otra forma de decir gastemos la mitad delantera del proyecto simplemente decidiendo y definiendo nuestra infraestructura, porque realmente tenemos que identificar las mejores piezas para este caso de uso en particular.

Personalmente me he desafiado a mí mismo para encontrar una arquitectura que funcione para casi cualquier tipo de aplicación. Si bien aún no lo he probado, creo que las ideas correctas se pueden encontrar en Elm Architecture y sus derivados (Redux, Cycle.js, etc.). Elm no es muy diferente al estilo de código big-bang que descubrí por primera vez en Racket (ver el libro Realm of Racket). La premisa es que el estado de su aplicación está contenido en un único objeto del mundo que puede modificarse cuadro por cuadro utilizando funciones puras. Esto significa que todos los programas son esencialmente reducciones (que dependen de la conocida función de reduce ).

Creo que esta forma de modelar programas puede funcionar bien en muchas situaciones. Puede funcionar con videojuegos, aplicaciones web, microservicios, demonios, aplicaciones de consola, etc. El área de investigación abierta no se trata tanto de encontrar nuevos diseños como de modelar una arquitectura más general y luego demostrar que se puede aprovechar con éxito para hacer software en cada una de las categorías anteriores. Si hace esto, tendrá éxito en enseñar a muchos programadores que “depende” se usa en exceso y que las arquitecturas generales son suficientes incluso si no son óptimas.

Lo que sería notable de eso es que la gente podría mover más rápidamente las decisiones pasadas de infraestructura para construir las cosas que realmente importan.

More Interesting

¿Las empresas tecnológicas tienen un proceso de aprobación de código abierto?

Cómo pasar del desarrollo a las pruebas de software

¿Qué es una revisión de código?

¿Qué lenguajes de programación se usan más comúnmente en las startups?

¿Deberían los estudiantes actuales de CS / SE preocuparse por el creciente énfasis en CS y la codificación en las escuelas públicas?

¿Por qué tantos eligen la pila abierta (Django, Play, Ruby on Rails) frente a la pila de Microsoft para construir redes sociales (ASP.NET MVC)

¿Cómo realizan las empresas como salesforce.com pruebas de carga / rendimiento?

¿Puedes aprender programación / ingeniería de software gratis en casa y aún así conseguir un trabajo en una empresa líder en Silicon Valley (por ejemplo, Google) sin un título universitario?

¿Por qué soy un asco en la programación competitiva a pesar de ser bueno para descifrar entrevistas en las principales empresas?

¿Qué es lo mejor para comenzar su carrera en una empresa de software sin un desarrollo de software de grado de ingeniería, desarrollo web, pruebas o redes?

¿Cuáles son los mejores cursos para OOP?

En algunas publicaciones de trabajo de desarrollador se requiere un título de licenciatura, pero no dice nada sobre la especialización. En estos casos, ¿puedo solicitar un puesto de desarrollador como graduado de estudios sociales?

Cómo convertirse en arquitecto de software en Google o Facebook

¿Cuáles son algunos de los mejores centros de entrenamiento de software en Visakhapatnam?

¿Dónde puedo encontrar el probador de lágrimas Elmendorf TF140C?