martes, 19 de julio de 2011

Manten limpias tus características

Una de las etapas más aburridas a la vez que necesarias en el desarrollo de software es aquella en la que, una vez lo tenemos todo funcionando perfectamente tenemos que limpiar, pulir y dar cera a los elementos que hemos creado. Algunas tareas que pueden ser relativamente divertidas como refactorizar código y otras que son un absoluto peñazo como, por ejemplo, asegurar que se siguen unas directrices básicas en cuanto a nomenclatura (sí, StyleCop y Resharper nos ayudan bastante pero no impiden que cada developer tiene sus manías a la hora de nombrar clases, por ejemplo).

Hoy, realizando esas tareas de limpieza he dado con un error típico que solemos cometer los que trabajamos con SharePoint debido a cómo Visual Studio 2010 trabaja los conceptos de característica y módulo. El mayor de los problemas es que habitualmente es un error silencioso (y todos sabemos que si algo no hace ruido no es peligroso –salvo la excepción que todos conocemos–) y no solemos prestarles atención.

El problema radica en el hecho que cuando creas un módulo nuevo en Visual Studio 2010, éste se añade a la última característica que hemos añadido a la solución. Si, como es lógico, queremos añadir el módulo a una caacterística concreta, al hacerlo no observaremos ningún mensaje indicando que el módulo ya está añadido a la original. Para evitar este problema basta con mirar la ventana de output de Visual Studio cuando creamos el paquete wsp. Veremos mensajes como los siguientes

c:\code\MyProject\\Package\Package.package : warning SPT6: The Project Item "Module1" is included in the following Features: Feature1, Feature2
c:\code\MyProject\Package\Package.package : warning SPT6: The Project Item "Module2" is included in the following Features: Feature3, Feature4

Viendo esto resulta relativamente sencillo ir a aquellas características donde no deberían estar incluídos los módulos indicados en el error y eliminarlos fácilmente.

¿Es buena la complejidad?

Siguiendo una conversación en Twitter de esta mañana, y a riesgo de polemizar un poco más, me tomo la libertad de expresar mi humilde opinión al respecto. No tiene por qué ser una opinión mejor que la del resto, pero tampoco tiene por qué ser peor, es simplemente una opinión más.

Para introduciros en el asunto os resumo un poco la conversación de esta mañana. Aparentemente alguien se quejaba de la complejidad del proceso de instalación de SQL Server y yo apuntaba que en ocasiones los procesos de instalación de aplicaciones debían ser incluso más complejos para evitar problemas futuros causados por instalaciones realizadas por profesional no cualificado para la tarea. La conversación derivó en opiniones relativas a que la instalación de SQL Server en realidad no era tan compleja y, por otro lado, en que justificar la complejidad era fácil, no merecía la pena, y hacía referencia a mentalidades del pasado. A continuación os expongo los motivos que tengo yo para pensar de la manera que pienso.

Primero, decir a los que no me conozcan que soy arquitecto de software especializado en .NET y sobretodo en SharePoint. Mi posición está claramente relacionada con el mundo del desarrollo y mis conocimientos de sistemas no son demasiado avanzados. No obstante, y debido a las particularidades del sector del desarrollo de software en España y debido las particularidades del desarrollo sobre la plataforma SharePoint tengo conocimientos básicos sobre Windows Server (especialmente en todo lo relacionado a los roles de servidor de aplicaciones y a IIS), SQL Server, Exchange Server, TMG, ForeFront, etc. También tengo conocimientos básicos de hardware (sé la diferencia entre RAM y HD, y conozco lo que tiene que tener un equipo para permitir virtualización) pero se me escapan conceptos que seguramente no son altamente avanzados como RAID 0, 1 o 5.

Dicho esto, tengo que decir que en unas pocas horas tengo montado un entorno con varias máquinas virtuales y con todos los componentes mencionados anteriormente instalados y funcionando. Eso significa, en mi opinión, que los procesos de instalación no son excesivamente complejos. Además, si por casualidad tengo que instalar alguna de estas piezas en producción, sé que dispongo de documentación suficiente en Technet (para productos Microsoft) como para hacerlo de manera más o menos adecuada.

Ahora bien, ¿cuál era la razón de mi tweet? Si yo soy capaz de instalar un SQL Server o un SharePoint siguiendo el asistente cualquier persona es capaz de hacerlo. Con cualquier persona no me refiero a “idiotas” (entre comillas que aparentemente no es lo mismo que idiotas) sino a personas que no tienen los conocimientos necesarios para desarrollar la tarea. Pero resulta que estamos en España y aquí, si puedo gastarme menos dinero en hacer una tarea, lo haré. Ahora no entraré en si es el mercado, si es nuestro caracter o si es una mezcla de ambos, pero es un hecho que si se plantea un proyecto de implantación de un producto, el 90% de los casos se lo lleva el que pone un precio hora más barato. Señores, ¿alguien sabe el coste de una persona con los conocimientos necesarios para instalar SharePoint, Exchange, SQL Server o TMG? ¿Alguien conoce una persona que tenga todas esas capacidades con un coste inferior a 20€/h? Que me lo diga que le doblo el sueldo.

Y os preguntaréis qué me importa a mí todo esto. Pues en realidad nada, simplemente expresaba mi opinión. De hecho, mientras las cosas sigan como están seguiré teniendo trabajo arreglando las implantaciones de SharePoint que han sido realizadas siguiendo el asistente. Lo único que me preocupa es que esta práctica siga haciendo daño al nombre de SharePoint, que está lejos de ser una plataforma perfecta (por eso sigo y seguiré teniendo trabajo) pero está aún más lejos de ser la basura que mucha gente piensa que es. Y quien piense que es una basura, que me presente una alternativa y la discutiré con mucho placer.

Y no penséis que estoy planteando proteger mi territorio para que nadie lo pise. Al contrario, fijaos que según lo que comento yo no debería tener “el carné” para instalar SQL Server, por ejemplo. Si pretendemos que traten la ingeniería de software como cualquier otra ingeniería tenemos que plantearnos que tiene que haber especialistas para cada una de las materias. Y ojo, tampoco estoy planteando que para instalar un SQL Server tengas que compilar un kernel. Contra más fácil sea hacer algo mayor será la productividad que es lo que interesa. Lo que yo planteo es que el proceso de instalación podría incorporar alguna característica que impidiera que el sistema funcione adecuadamente hasta que se cumplan ciertos requisitos, de la misma manera que se cambió la política con Windows Server donde por defecto todo está cerrado hasta que alguien va y lo abre.

Ahí queda mi opinión… espero las vuestras para ver si aprendo algo, aunque seguro que ninguno hará cambiar la opinión del otro si no es con cerveza. Con mucha cerveza…