¿Quién no ha tenido una deuda tecnica?

La pregunta en el título de este post resulta apropiada en aquellos momentos donde tenemos encomendada la tarea de escribir un componente, una clase, un método, una función, etc. Como escritor de código fuente en diferentes proyectos académicos y del mundo productivo en ocasiones donde la presión impuesta por el cliente se hace explicita, no hay más remedio que buscar una solución rápida (porque al cliente no hay que dejarlo esperando) al problema que se ha manifestado o al requisito que no es lo suficientemente eficiente.

Pienso que el término de deuda técnica que la mayoría hemos tenido que afrontar (pagar) nos ha enseñado que debemos ser prudentes y sensatos a la ahora de dicidir si recurrimos a la solución rápida o hacerlo completo y correcto.

Respecto a lo anterior, si tomamos el camino de hacerlo rápido, debemos ser conscientes sobre las consecuencias que genera, además tener claro que hemos solucionado el problema en cuestión con otros problemas que se manifestaran en el futuro próximo y lo más probable es que tengamos más dolores de cabeza y un cliente molesto diciéndonos: “¿Acaso eso ya no había quedado resuelto/mejorado/etc?”

Continuando, la inclusión de código nuevo o artilugios que den solución al problema puede generar futuros conflictos, con lo cual nos hemos ganado una deuda técnica sin darnos cuenta, y por la que debemos pagar tarde que temprano. Así que, no basta con la solución rápida que satisfaga la necesidad del usuario o del cliente, sino de las medidas que tomemos para cubrir nuestra deuda técnica en el menor tiempo posible, de forma transparente, eficiente, y efectiva.

Finalmente, la planificación y el seguimiento que hagamos a las ‘soluciones rápidas’ nos permitirán preveer y pagar por aquellas deudas técnicas que hayamos asumido, inclusive por las que se manisfetaron implícitamente.

Una Introducción a Arquitecturas de Software – Resumen

Esta vez les traígo un resumen acerca de Arquitecturas de Software. Este tema me parece muy interesante, y he dedicado algunas horas en preparar este material para que conozcan de manera global las ventajas que tiene la selección de un Estilo de Arquitectura sobre ciertos dominios:

  • Tuberías y Filtros
  • Orientada a Objetos o basada en Tipo de Datos Abstractos
  • Sistema de Capas
  • Basado en Evento, e Invocación Implícita
  • Repositorios,
  • Entre otras importantes

Los dejo con el resumen, eso sí en inglés, de An Antroduction to Software Architecture David Garlan and Mary Shaw.

Gist, coloración de sintaxis

Tags

, ,

Como es común en las tardes de los sábados dedico unas horas a la lectura de diferentes blogs de desarrollo; y por casualidad me encontré con Gist.

¿Qué es Gist?

Logo Gist

Básicamente este servicio/herramienta (como prefieras llamarlo) Web nos permite publicar nuestros fragmentos de código de una manera rápida y sencilla. Ideal para compartir código con otros programadores, en búsqueda de ayuda o ideas en el hallazgo de un problema o error en la implementación de un algoritmo.

Un Copy & Paste no es suficiente, tengásmolo claro. Pues estaríamos perdiendo ese  bonito formato que proponen automáticamente los IDEs o cualquier editor de código con indentación inteligente y coloración de sintaxis. Imagínesen compartiendo un script por medio de una sesión de chat, la otra persona que está al otro lado de la pantalla tardaría más de lo esperado en darnos pista, u ofrecernos ayuda, pues la legibilidad del código juega un papel importantísimo a la hora de tratar de entender qué es lo que hace cada instrucción o el conjunto de ellas.

A continuación les mencionaré algunas ventajas de este excelente servicio que nos provee GitHub:

  • Provee coloración de sintaxis para más de 35 lenguajes de programación.
  • Generación de URL para compatir con otros.
  • Adición adición de múltiples scripts en un único Gist.
  • Facilita la agregación de comentarios.
  • Autodetección del tipo de coloración a aplicar de acuerdo al lenguaje escogido.
  • Historial de modificaciones.
  • Nuestro script puede ser público o privado.
  • Facilita la búsqueda entre miles de Gists de otros.
  • Gratuito.

Vale mencionar que este no es el único servicio de esta clase (también podemos encontrar, pastebin.com, paste.ubuntu.com, pastie, entre otros), pero desde mi punto de vista, juega un papel importante por ser pieza integrante de GitHub.

Ejemplos:

Finalmente, quiero invitarlos a hacer uso de esta fabulosa e interesante herramienta, que nos podrá hacer más productivo nuestro aprendizaje o trabajo.

La importancia de ir al fondo de una tecnología o enfoque

Cuando me introduje en el mundo de las computadoras, en un principio, fue por curiosidad y el afán de probar cualquier aplicación que venía en los CDs que acompañan revistas de computación, informática, vídeojuegos y consolas, hardware entre otros temas relevantes que atraín mi atención de forma vehemente.

Los contenidos, como he dicho, eran variados tanto así que era, en cierta medida, que era difícil concentrarse en un tema en específico e ir más fondo. A lo anterior se le podría sumar la carencia de tutores, mentores, profesores que le pudieran a uno potencializar la búsqueda de un foco especial en el cual uno pudiera especializarse, o simplemente, convertirse en el “ducho” en la materia.

A pesar de lo dicho ya, lo anterior no resultó un impedimento para ir de aplicación en aplicación y probando y sacarle el gusto a lo que cada una de ellas ofrecían, incluidas:

  • Suites ofimáticas (Office, Lotus 123, etc),
  • Navegadores Web (Netscape),
  • Compresores de archivos (por ese entonces el archiconocido WinZIP),
  • Reproductores multimedia,
  • Plug-ins,
  • Editores de audio y vídeo,
  • entre otros paquetes de gran importancia.

Aunque pasaba largas horas probando y dañando (así es, no faltaba el sistema operativo cargado por una incorrecta instalación de una versión de un controlador incompatible, o peor aún por querer hacer un mantenimiento preventivo del hardware (; ), no faltaban las oportunidades de obtener un empleo temporal para ofrecer un servicio de instalación de sistema operativo o el reemplazo de un componente completa o intermitentemente estropeado.

Pasaron algunos años cuando escuché por primera vez sobre personas (en realidad muy pocas, hasta las podría contar con los dedos de las manos) que creaban sus propias aplicaciones personales o encargaos de pequeñas empresas que requerían automatizar o sistematizar algunos procesos manuales. Para mí resultó aún más atractiva la idea de construir mis propias aplicaciones, aunque con mucha dificultad, me introduje de manera autodidacta en el mundo de HTML y JavaScript (en éste si que invertí horas, días, semanas tratando de entender la lógica con la que se creaban piezas de código que respondieran a solicitudes del usuario)…

…puedo recordar que las primeras piezas artesanales hechas con mis propias manos consistían en una tienda de música que trataba sobre biografías, discografía, letras de canciones de los integrantes de una banda musical que siempre admiré en sobremedida por la calidad de sus composiciones. Ahora pienso que la motivación personal estaba en cualidad que acabo de nombrar de ese grupo musical.

Otros tres años más, y llego a la universidad a estudiar Ingeniería de Sistemas, como fuente de formación profesional para alcanzar muchos de mis sueños y mi auto-entusiasmo (por así llamarlo). Desde luego me llevé muchas sorpresas, pero era consciente que debía, además que logré adquirir un gusto importante por las matemáticas y la física, responder y responsabilizarme por temas antes inmaginables, y formadores de las aptitudes y actitudes ingenieriles.

Incluidas también asignaturas netamenta orientadas a la escritura de código, el diseño de algoritmos, estructura de datos, y teorías importantes de análisis y diseño de sistemas, entre otras.

Es todo lo anterior lo que me conduce a pensar en Desarrollo de Software. Así mismo empiezo a buscar nuevas fuentes de información que pudieran darme una orientación más precisa sobre el tema al quiero llegar fondo.

Como han podido percibir, el enfoque o foco al que uno puede dirigirse empieza por pequeñas tareas simples, y repetitivas, para luego ir pensando en algo más exigente y trascendental. Además, de componentes, como el entusiasmo, la persistencia, el gusto por el trabajo y el estudio, entre otras más.

XML como apoyo en parsers personalizados

Tags

, , ,

Hace unos pocos semanas se me presentó la oportunidad de desarrollar un pequeño módulo para la generación de reportes (utilizando iReports y JasperReports) en formato PDF.

Cuando el encargado de TI de la empresa me entrega un archivo de fuente de datos este se encontraba en uno de los formatos más comunes que podemos encontrar en el mercado: TXT (texto plano, en pocas palabras)…

…Para mí no resultó ser una sorpresa tener en mis manos un archivo como ese con una estructura sencilla y poco ‘amigable’:

  • Diferenciaba los registros por cada línea
  • Uso de caracteres inválidos en ciertos campos (i.e.: Nombres de clientes, direcciones domiciliarias, valores de saldos, entre otros).
  • Fechas con formatos no esperadas. Algo así: 2011-02-30 (oh no! febrero con 30 días).
  • Exceso de campos por registro, es decir, donde se esperaban 12, por ejemplo. El uso incorrecto del delimitador (punto y coma (;)) era la causa de semejante problema.

Después de un análisis detallado sobre la estructura de registros del archivo de fuente de datos, e ignorando la conversión (esto como un proceso intermedio) de TXT a XML, pude hacer que el módulo funcionara correctamente…

…Sin embargo, después de algunos días y con una fuerte dedicación al uso de XML en desarrollos, hallé la forma de atacar los problemas que me producía el sólo tratar directamente con el archivo original…

¿Por qué?

  • Anidamiento de nuevos elementos de identidades dependientes (sinónimo de agregación en POO) de forma dinámica: ya puedo de una forma muy rápida y sencilla permitir anidar un registro dentro de otro con unas pocas líneas de código y haciendo uso de librerías diseñadas para ese propósito.
  • Validación y conversión de campos.
  • Consulta de un elemento o valor determinado en la estructura de XML en memoria construida a través de XPath.
  • Importante: Ya no necesitaba cambiar muchas líneas de código para crear un nuevo parser los nuevos formatos de archivos de fuente de datos (CSV, XLS, etc.)

El uso de XML en los cambios efectuados para lograr un mejor diseño de la aplicación Web fueron de gran importancia debido a que ahora el mantenimiento resulta ser una tarea no de horas sino de minutos.

Con la estructura XML actual puedo hacer adaptaciones a nuevos sistemas con un esfuerzo mínimo, pues con el uso XPath puedo realizar consultas en busca de información que puede ser consumida por un servicio o nueva aplicación.

Comentario sobre la “sobreconsideración” del CV

Tags

, ,

Hay pensamientos o procesos mentales implícitos que nos ayudan a tomar decisiones en el día a día; ya sea para consideración personal, o para casos que comprometen inversión en nuevos recursos tecnológicos, o personal capacitado para labores de TIC para las organizaciones que tanto lo requieren para ser competitivas, efectivas y eficiente en un mercado cada vez más acelerado como el que experimentamos actualmente.

La expresión anterior es acto reflejo de una cuidadosa lectura una de las cosas que debería considerar un Arquitecto de Software, exactamente:

1. Don't put your resume ahead of the requirements

Lo que en resumen nos dice esta recomendación es que debemos ser imparciales y objetivos a la hora de recomendar una tecnología, metodología o enfoque, no deberíamos sobreponer lo que se ve reflejado en nuestro curriculum vitae, sino más bien a través de una observación cuidadosa conocer el estado actual de la organización y apoyarnos en lo que sabemos y conocemos para proponer una solución o recomendación acerca de lo que la organización debería tener, hacer, cambiar, mejorar, etc.

Además, no nos deberíamos fijar sólo en aspectos de actualidad, como:

    • La última plataforma de desarrollo
    • Lenguaje de programación de última generación
    • Paradigma de desarrollo más reciente
    • Entre otros

…lo anterior, claro está, sino amerita inversión de tiempo y de recursos pecuniarios. Tampoco deber ser motivo el hecho de que el cliente nos escuche con mucha atención porque los conceptos novedosos con los que nos expresamos le impresionan y que desde su perspectiva cree que eso va a resolver todos sus problemas de negocios.

Por otro lado, esa primera recomendación que se hace en 97 Things Every Software Architect Should Know aclara que se DEBE poner encima las necesidades de largo plazo del cliente.

Finalmente, vale mencionar que la satisfacción cien por cien del cliente es el valor que debería perseguirse y conservarse. De ahí obtendremos nuestra reputación en este mercado tan exigente y competitivo al que nos enfrentamos.

Construir Software de Calidad (Cuestión de Experiencia)

Hola,

El título de esta entrada es muy importante para quienes en el día a día trabajan e invierten grandes esfuerzos y recursos: tiempo, dinero, etc. en pensar y creer que son capaces de construir soluciones software de calidad. Hoy voy a hablarles sobre mi experiencia en este campo tan inmersivo: el desarrollo de software con comprimiso y haciendo uso de las mejores prácticas.

En la Red podemos encontrar numerosas fuentes de información para constuir software de calidad. De esas lecturas podemos llevarnos una imagen «bonita» de cómo se comportaría y que características poseería una vez apliquemos uno de esas Mejores Prácticas nuestra solución: llego a pensar que no es cuestión inmediata la puesta en escena de buenas prácticas de desarollo, que es cuestión de tiempo. Lo dicho sinónimo de experiencia de largos años de trabajo.

No nos vamos a convertir en expertos en desarrollo de la noche a la mañana. Una vez tuve la oportunidad de leer un interesante artículo titulado Cómo aprender a programar en 10 años (http://goo.gl/QvocW), y lo aún encuentro muy intersante, conciso y concreto frente al caso que se discute.

Reunido todo lo anterior, vale la pena comentar que para ser buenos desarrolladores debemos aprender esas buenas prácticas de desarrollo que sólo se comprenden en la vida práctica, mientras asumimos nuevos retos para la construcción de soluciones software que aporten considerablemente valor agregado a la sociedad (que en últimas son los que valoran o rechazan nuestro producto).

Espero sus comentarios, sobre mis consideraciones en esta entrada.

Hasta pronto

HTML5: Estandarización y Ventajas Competitivas

Quiero empezar este post hablando sobre la importancia que está teniendo la adopción de los estándares propuestos por la WHATWG para HTML5. He tenido la oportunida de hacer lecturas sobre libros que he adquirido recientemente (Head First HTML5 Programming: Build Web Apps with JavaScriptOReilly HTML5 Media, OReilly HTML5 Cookbook, entre otros también importantes); y en resumen puedo decir y resaltar que grandes desarrolladores de software se están centrando en desarrollar aplicaciones que puedan ser accedidas por cualquier cliente (navegador Web) y por cualquier dispositivo. Esto desde luego no es una tarea fácil, pues como ya se ha expresado tomará varios años (hasta el 2022 aproximadamente) para que, digamos, HTML5 sea aceptado como un conjunto de estándares.

Respecto a lo anterior, me tomado el tiempo necesario para hacer unas pruebas sobre la compatibilidad actual que tienen las versiones más recientes de los navegadores más populares (i.e.: Chrome, Opera, IE, Firefox, Safari). A continuación presento los resultados con los puntajes asociados (las pruebas fueron realizadas sobre el sitio http://html5test.com/):

Chrome v. 18.0.1025.168 m:

Chrome @ html5test.com

Opera v. 11.62:

Opera @ html5test.com


IE v. 9.0.8112.16421


Safari v. 5.1.4 (7534.54.16)


Mozilla Firefox v. 12.0


Quien se «lleva la corona» en esta prueba, como ya he mencionado, por parte de http://www.html5test.com es Google Chrome. Hay que dejar claro que este test se ha realizado con la versión desktop de estos navegadores, y que puede variar considerablemente si se realiza desde versiones móbiles.

Comparando los puntajes obtenidos por Chrome e IE, se podría decir que esta es una de las ventajas competitivas que ahora mismo tiene el browser de Google sobre el Microsoft. Para saber más adjunto la siguiente gráfica (gracias a Genbeta):

http://goo.gl/Wi3m2

¿Y por qué todo esto?

Debido a que el mundo Web está cambiando, y como desarrolladores tenemos retos que afrontar, ideas nuevas que deben ser desarralladas con un enfoque totalmente diferente al actual, creación aplicaciones Web capaces de desplegarse sobre cualquier navegadores y con cero cambios.

Pienso que con HTML5 la sociedad y el mundo de los negocios se beneficiaran en una mayor medida, y esto ya lo estamos experimentando. Estas dos partes integrantes del mundo en el que vivimos, son los que consumen la rica funcionalidad que ofrece la Web: plataformas de servicios electrónicas robustas, sistemas de educación virtual novedosos y efectivos, entretenimiento con una experiencia infinita, et cetera.

Grandes ideas pueden surgir, y que mejor que utilizar estándares abiertos que nos permitan estar en todas partes sin tropiezos de compatibilidad, de rendimiento, de escalabilidad, seguridad, y más. Muchos nos podríamos estar tardando demasiado en empezar ya a ir al fondo de HTML5.

¿Es indispensable que un analista de sistemas conozca sobre lógica de programación?

Tags

Quiero empezar este post, aclarando la ausencia por alrededor de 2 semanas, ya que me había prometido a escribir por lo menos un post semanalmente. La razón: pérdida de móvil. Hasta no tener todo bajo orden y control, no podía estar tranquilo sino hasta tener certeza de que todas las credenciales que manejo de servicios electrónicos estuvieran bajo mi control de nuevo. Ya que esta labor se realizó, estoy de nuevo poniendo al día todas mis actividades de la Red.

Ahora sí, el tema principal de este post:

Desde mi propia experiencia, y de las discusiones que he tenido con algunos analistas sobre su propia experiencia, hemos pensando en preguntas básicas que se realizan aquellas personas interesadas en ir más a fondo en el mundo de Análisis de Sistemas. Y hemos extraído algunas de ellas, pero una nos causó gran curiosidad:

¿Es indispensable que un analista posee sólidas bases sobre lógica de programación?

Algunos dirán ‘No’, otros todo lo contrario. Me declinación es por ‘Sí’. El Analista de Sistemas, en su formación académica le compete conocer el funcionamiento de la lógica programación de aplicaciones: empezando por aquellas realizan tareas específicas, otras de mediana complejidad, y más importante, las que realizan complejas tareas.

Con competencias sólidas en análisis o diseño de algoritmos que den solución a problemas del mundo real, el futuro profesional en su rol como Analista de Sistemas, poseerá habilidades para comprometerse a llevar a cabo una de las tareas más cruciales en el ciclo de desarrollo de una solución software: el Análisis.

Aunque las actividades que se realizan en esta fase poseen una componente de alta complejidad y abstracción, esto no quiere decir que no se hubiera recurrido a un enfoque de decisiones basado en la pura e implícita utilización de una estructura lógica para la resolución de problemas comunes (conocimiento y habilidades adquiridas cuando el profesional analista de sistemas tuvo la oportunidad de aprender mientras que resolvía o analizaba problemas de las gamas ya mencionadas arriba).

Hay que dejar claro, que quienes se dedican a esta actividad con apenas unas cuantas horas de entrenamiento en lógica de programación, o diseño de algoritmos, es porque tienen habilidad innata o superior de abstraer con mera facilidad la solución particular/general a problemas de negocios. Y desde mi experiencia, no estaría demás que conocieran formalmente el proceso de análisis de sistemas.

Finalmente, sabiendo que este post pueden surgir muchos comentarios, me gustaría oírlos, y conocer su opinión objetiva sobre este tema.

Follow

Get every new post delivered to your Inbox.

Join 80 other followers