Tag Archives: Conceptos

Simple, Seguro y Elegante

¡FELIZ 2015! (Un poco tarde…)

Tras un tiempo sin añadir posts a nuestro blog retomamos la actividad. Empezamos deseando un feliz 2015. Este post además es un tanto especial, ya que no esta relacionado con ningun tema técnico en particular, si no que es más bien una reflexión personal acerca de como deberían ser, desde mi humilde punto de vista, los desarrollos de software, y en particular el producto o el código generado a partir de ellos.

Creo que no voy a redescubrir la rueda con esto, pero simplemente quiero afirmarme y afianzarme en unas creencias que toman cada vez más sentido para mi. Cuanto más trabajo como desarrollador y en más proyectos y trabajos estoy, más me convezco de la necesidad de inculcar a todas las personas involucradas en un desarrollo de estas ideas que para mi han de ser una máxima en dicho desarrollo. Han de ser intocables, seguirse al pie de la letra y respetarlas por encima de todo, de cualquier incertidumbre, problema o alteración interna o externa que pueda sufrir el proyecto. Es decir, no importa lo nos venga impuesto, estas ideas han de respetarse POR ENCIMA DE TODO.

Este POR ENCIMA DE TODO no es un capricho. No se trata de imponer nuestro pensamiento. Se trata simple y llanamete de HACER LAS COSAS BIEN. Esto que parece una obviedad, en ocasiones puede parecer más bien lo raro, lo escaso. Por diferentes causas, las cosas no se hacen todo lo bien que se deberian hacer. Para mi estas causas no son más que excusas. Como he dicho antes, no existe nada, absolutamente nada dentro de un proyecto, que nos impida hacer las cosas como es debido. No puede haber nada más importante que hacer las cosas de forma correcta. Es preferible gastar más dinero, invertir más tiempo y retrasar los proyectos lo que haga falta, antes que hacer las cosas mal.

Porque a la larga, el hacer las cosas bien es un beneficio para TODOS. Es una situacion win-win, ganamos todos. Los que usan los productos, los que los mantienen, los que los venden, los que los desarrollan, etc. En cambio hacer las cosas mal no es más que una fuente de problemas continuos, disgustos, desgastes, errores, etc.

Bien, ya explayado todo esto, para mi, ¿qué es hacer las cosas bien? Pues algo muy pero que muy sencillo (o no, no lo sé). Basicamente se trata de aplicar lo que son para mi las tres máximas de cualquier desarrollo: que sea SIMPLE, SEGURO y ELEGANTE. ¿Y qué es lo que significa esto? Pues para mi significa lo siguiente:

SIMPLE – Keep it simple!

En la simplicidad esta la belleza. Cualquiera (o eso creo) puede entender este concepto. La mayoria de las ciencias buscan la simplicidad en sus soluciones. Un matemático o un físico pueden resolver un problema muy complejo de múltilples formas, pero si lo hacen de una forma simple y elegante, entonces es el culmen de la resolución.

Resolver un problema, o implementar su solucion, es lo que normalmente hacemos en un desarrollo de software. El problema es la funcionalidad que queremos implementar, con todas sus casuisticas y alternativas. Y se puede implementar de mil maneras. Hacer de forma sencilla, simple, que cualquiera de un solo vistazo entienda como funciona de forma interna, que todas sus partes esten bien diferenciadas, que no haya subterfugios ni trucos ni parches ni malas prácticas. Eso es hacerlo simple. Que si podemos usar una clase en vez de tres lo hagamos, pero que si en esa clase vamos a generar un espagueti-codigo inmantenible, entonces es preferible tener las tres clases.

Por norma general, el uso de buenas prácticas de desarrollo, de patrones, de frameworks de trabajo bien conocidos, de metodologias altamente aplicadas, etc. nos ayudará y nos encaminará hacia esto.

SEGURO

Con el concepto de SEGURIDAD no me refiero tan solo a “Seguridad informática”. Me refiero a ésta. pero sobre todo me refiero a SEGURIDAD en la correcta ejecución del software.

Esta claro que la seguridad informática es importante, y en los tiempos que vivimos y viviremos, cada día mas crucial. Es importante tenerla en cuenta para minimizar cualquier riesgo. Aplicar dicha seguridad dependerá mucho del tipo de software que estemos desarrollando y de los riesgos que conlleve su uso. No es lo mismo una aplicación de escritorio que solo se va a usar en un equipo informático, que una aplicación web conectada a Internet y donde cualquiera puede acceder. Usar los protocolos de seguridad, criterios recomendades y tecnologias asociadas nos garantiza un minimo de seguridad. Esta claro que este es un tema delicado y que siempre existiran agujeros por los que un buen hacker se pueda colar, pero lo importante es que al menos el 90% de ellos no tenga los conociemientos necesarios para hacerlo.

La otra “seguridad” es quizas más importante para mí, porque afecta por igual a cualquier tipo de aplicación y no es tan obvia de aplicar. Es el hecho de intentar desarrollar pensando en que cualquier error o problema puede surgir dentro de la aplicación y el objetivo es intentar minimizar el impacto que puedan tener esos errores. Pueden darse problemas que causen perdidad de conexiones, conexiones mal cerradas, descriptores abiertos, hilos huérfanos, procesos sin finalizar, etc. Y estas causas puede derivar en problemas más serios que paralicen el completo funcionamiento del software desarrollado y que impacten en el hardware y otras aplicaciones. Desarrollar intentando preveer todos estos problemas es complicado, pero no está demás ponernos siempre en lo peor e intenar proteger al máximo situaciones en las que, un posible error cause que no se liberen recursos o no se finalicen procesos de forma correcta. De esta manera, aunque se de el error, la aplicación podra seguir operando de forma óptima y no causará mayores daños.

Igualmente, aplicar mecanismos tradicionales como capturas de excepciones y uso de frameworks bien conocidos, nos ayudará a hacer las aplicaciones más seguras en este sentido.

ELEGANTE

Este puede ser un concepto dificil de interpretar pero que es igual de importante que los anteriores. Puede incluso llegar a chocar con el concepto de SIMPLICIDAD en cierto modo, pero es igual de importante, por lo que al final se tendrá que buscar un equilibrio entre la SIMPLICIDAD y la ELEGANCIA, que por otro lado sulen ir de la mano, ya que lo simple puede ser elegante y la elegancia ayuda a la simplicidad.

Cuando pienso en este concepto, no me refiero a un tema estético, que también, si no a aplicar soluciones a la resolución de problemas que sean “elegantes”. Explicando el concepto de SIMPLICIDAD comenté que no es lo mismo soucionar un problema de una manera compleja, con multiples subterfugios y condiciones, que de una forma simple, que facilite la comprensión de la solución y su mantenimiento. Con la elegancia pasa lo mismo. No es igual resolver el problema usando múltiples funciones, parámetros y elementos, que resolverlo con un solo elemento y una sencilla función.

De ahi que el concepto de ELEGANTE esté relacionado con la SIMPLICIDAD, lo simple suele ser elegante, porque se limita a hacer las cosas sencillas y eso deriva en una resolución del problema clara y limpia. No tiene porque ser siempre asi, una solución sencilla puede estar repleta de elementos, cosa que no sería elegante. Y la elegancia suele derivar en simplicidad, ya que una solución con pocos elementos y bien estructurados suele derivar en una solución sencilla de comprender y mantener, aunque igualmente en este caso no tiene porque ser siempre así. Un problema complejo resuelto mediante una solución elegante puede llevar una síntesis de su solución tan compleja que el resultado, aunque de pocos elementos, pueda ser altamente complejo, con estructuras de datos y funciones con multiples variantes, aunque comprimidas en unas pocas lineas de código.

Por lo general, como se ha mencionado antes, habra que buscar un equilibrio entre la SIMPLICIDAD y la ELEGANCIA, para que la solución sea lo más simple posible, pero con la mayor elegancia disponible. Si a eso le añadimos el hecho de que esa SIMPLICIDAD y ELEGANCIA conllevarán sin duda una mayor SEGURIDAD, tendremos la mezcla perfecta para nuestro coctel.

CONCLUSIÓN

El desarrollo de software, al igual que otras labores en otras profesiones más o menos metódicas, requiere de unas formas de trabajo depuradas que faciliten el mismo. Además en este caso, la importancia cada vez mayor de esta labor asi como sus demandas requieren de unas metodologías cada vez más estrictas pero flexibles a la vez.

Independientemente de la forma en la que se trabaje, creo necesario respetar unos principios que han de conservarse bajo cualquier concepto, para asegurar el éxito en esta labor. No solo depende que el producto desarrollado sea bueno, si no que sea útil, que ayude a resolver los problemas y proporcione los servicios para los que ha sido creado, y que facilite la vida tanto a sus usuarios como a sus creadores y a las personas que los mantienen.

Los conceptos fundamentales para mí han de ser la SIMPLICIDAD, o aplicar la solución más sencilla, la SEGURIDAD, o minimizar los riesgos al máximo aunque se den errores, que se darán, y la ELEGANCIA, o aplicar la solución más elegante, más flexible, reducida y práctica.

No es fácil aplicar estos conceptos. Algunos de ellos incluso pueden chocar, como es el caso de la SIMPLICIDAD y la ELEGANCIA. Pero usando buenas prácticas, frameworks y técnicas bien conocidas se podrá conseguir una buena aproximación a ellas, redundando con total seguridad en un gran beneficio para todos.

Un saludo