La realidad cambia constantemente, los antiguos paradigmas dejan de funcionar, colapsan y necesitamos nuevos paradigmas. Para ello, hay que volver a las raíces, preguntarnos ¿por qué hacemos las cosas así? ¿hoy podemos hacerlas mejor? ¿que hemos aprendido? Esto aplica tanto para la sociedad, el Estado, la familia, la economía, la espiritualidad, la ciencia, y en este artículo para la industria del desarrollo de software.
¿Cuál es el problema?
El software no es confiable, y cada día es más importante en nuestras vidas. Le confiamos la seguridad de nuestros aviones, nuestros autos y sistemas de producción. El software ahora es de misión critica, muchas vidas humanas dependen de ello, debido a fallas de software, ya hemos visto la perdida de cientos de vidas humanas , tal como el caso del Boeing 737 Max y la aceleración no intencional de Toyota Camry. Necesitamos software de calidad, al que podamos confiar nuestras vidas.
La falta de calidad del software no es solo que el software haga lo que se espera que haga, es también como nos advierte Quinn Norton en su artículo Todo esta Roto, es el problema de privacidad (que no te esten espiando) y de seguridad (que no controlen tu procesador).
Para muchos «expertos» la solución al problema de falta de calidad del software es obligar a los programadores a escribir código «limpio», bien pensado y bien probado. Tienen razón, pero solo en parte, ya que el problema es mas profundo ya que tiene dos dimensiones adicionales. ¿se puede tener software de calidad, si las herramientas con las que se desarrolla tienen fallas?, ¿se puede tener software de calidad si el sistema en donde se ejecuta tiene fallas?, para tener software de calidad ademas de escribir código de calidad, debemos tener un ambiente de desarrollo y un ambiente de ejecución de calidad.
Este problema tri dimensional de calidad del software, produce ademas del problema de confianza, un problema de eficiencia del software, tanto en su desarrollo como en su ejecución. La ineficiencia la pagamos dos veces, primero al aumentar el costo de desarrollo de software, ya que se necesitan mas desarrolladores para mantener un software o agregarle funciones, y pagamos la ineficiencia por segunda vez, cuando al duplicar o triplicar nuestra potencia de hardware las mejoras de software no van a la par.
La solución
Simplificar – Unificar – Experimentar – Estandarizar – Contextualizar – Actualizar.
Para entender mejor la solución propuesta, es necesario conocer una serie de elementos fundamentales.
- Paradigma : modelo mental para una determinada realidad, con el paso del tiempo cambia la realidad y por lo tanto debe de cambiar el paradigma.
- El problema del supervisor incorruptible : no hay persona ni organización hecha de personas incorruptibles.
- La linea media : si los contrarios estudian sus diferencias sobre un tema, pueden llegar a un mayor grado de entendimiento del tema.
- La ley 90 9 1 : la audiencia se distribuye en 90% seguidores pasivos, 9% activistas parciales, 1% activistas comprometidos.
- La limitación fundamental del pensamiento verdadero / falso. El teorema de incompletitud de Kurt Godel (1.920): hay proposiciones que no se pueden demostrar ni refutar, «Si el barbero del pueblo afeita a todos los hombres que no se afeitan a si mismos, ¿Quién afeita al barbero?», dicho de otra forma; si un sistema de axiomas es completo entonces es inconsistente, por otro lado, si un sistema de axiomas es consistente entonces es incompleto, no se puede hacer un sistema de axiomas que sea a la vez completo y consistente. La raíz de esto es que el lenguaje hablado por los seres humanos, es binario, construido de expresiones verdadero falso, nuestra matemática es binaria, nuestros lenguajes de programación son binarios, nuestros procesadores son binarios, es una limitación fundamental de nuestra forma de pensar. (hay lenguajes mas allá de lo binario, que resuelven este problema pero yo no conozco quien los use en el planeta tierra).
- El método científico no prueba que algo es verdad, solo puede probar que algo no es falso. Esta es una falla común en la comunidad «científica», inclusive en el 2020. Se confunde la doble negación con una afirmación, esto es lo que produce que la ciencia se contradiga de tiempo en tiempo. el fundamento de esta negación es también el pensamiento / lenguaje binario ejemplo.
Robert C Martin, know as «Uncle Bob» ha hecho un gran trabajo, educando en como escribir codigo limpio.
En la dimension herramientas, hay lenguajes de programación pensados en solucionar el problema de las herramientas de programación, como el lenguaje D orientado al 90% 9% y 1% de los programadores y los lenguajes BEEF and JAI que estan orientados al 90% y 9% de los programadores.
En la dimensión de la ejecución del software, el sistema operativo Arrakis ha demostrado que una visión alternativa del rol del sistema operativo como un plano de inicialización, control de acceso y limite de recursos, puede producir una mejora del rendimiento del 200% al 900%, acercandose al máximo rendimiento del hardware.
Otro ejemplo es el sistema operativo IncludeOS que define al sistema operativo como una libreria y LegoOS que distribuye completamente al sistema operativo en una red de componentes interconectados mejorando notablemente la tolerancia a fallas.
La solución es Simplificar, eliminando las complicaciones innecesarias, Unificar los diversos proyectos que intentan solucionar el mismo problema, Experimentar con las opciones que no podemos unificar, Estandarizar : librerias, algoritmos, interfaces, patrones. No es necesario reinventar la rueda continuamente. Contextualizar nuestra infraestructura ya que las necesidades del 90% de los programadores son diferentes del 1%, pensar en el proceso de Actualización de toda esta infraestructura, ya que cambios seguro que habra en el futuro.
La buena noticia, es que todo este gran trabajo, no requiere comenzar de cero, ya que tenemos toda una historia de desarrollo de software que al estudiarla nos permite aprender de lo que hemos hecho bien y lo que debemos mejorar.
Es interesante notar, que la arquitectura distribuida de LegoOS se orienta hacia nuestra Arquitectura Orgánica de software distribuido.
Conclusión
La industria del software esta en una etapa de transición, esta pasando de software de baja calidad, con herramientas inadecuadas y ambientes de ejecución ineficientes a una nueva era de software de calidad, programado limpiamente, con herramientas y ambientes de ejecución eficientes. Estamos en el 2020 en un cambio de paradigma, en una transición que apenas estamos reconociendo, pero con la unificación del trabajo de todos los programadores del mundo, lograremos en pocas décadas tener software de calidad, al que los seres humanos podremos confiar nuestras vidas.