Invocar constructores genéricos por reflexión

Explicaré brevemente cómo se puede invocar un constructor genérico por reflexión (del namespace System.Reflection) dado que a veces solamente tenemos el Type del genérico y no se puede pasar entre dado que no es el nombre de una clase.
Para mi caso, es una acción de un método web que me pasa un string con el nombre de la entidad a procesar por lo que el proceso, que es un método genérico, no se podía llamar de este modo:

public void ProcessStuff(Type type, object data)
{
    var processor = new Processor(); // Esto da error

    var results = processor.process(data);
}

Entonces, esto es un problema ya que el método ProcessStuff en este caso no puede ser genérico, lo que solventaría así el problema:

public void ProcessStuff(object data)
{
    var processor = new Processor();

    var results = processor.process(data);
}

Así que el namespace System.Reflection viene en nuestra ayuda y el secreto está en el método MakeGenericType. El método final es algo así:

public void ProcessStuff(Type type, object data)
{
    var constructor = typeof(Processor).MakeGenericType(new[] { type }).GetConstructor(new Type[] {}); // Obtiene el constructor sin parámetros
    var processor = constructor.Invoke(new object[] { });

    var processMethod = processor.GetType().GetMethod("Process", new[] {typeof(object)}); // Obtiene el método del objeto creado
    var results = processMethod.Invoke(processor, new[] {data}); // Llama al método
}

Y eso es todo. Es un poco más engorroso, por supuesto, pero nos puede sacar de más de un lio y ahorrarnos un montón de switches.

¿Qué le pedirías a tu jefe?

Revisando la larga lista de feeds a los que compulsivamente me suscribo llegué a un interesante post titulado What a developer needs from their manager. En él se detallan una serie de aspectos que debería tener en cuenta alguien que dirige desde el punto de vista no técnico a una serie de desarrolladores. Lo veo un tanto enfocado a empresas pequeñas, donde hay cierta proximidad entre unos y otros y las relaciones pueden ser mucho más dinámicas.

  • Por un lado, la idea de la capa de abstracción para desarrolladores que debe haber entre el funcionamiento de la empresa y lo que necesitamos saber los programadores. Me gusta la idea, porque en realidad en general no me interesan los problemas que tienen por ejemplo con ciertos clientes o con otros, para mí son todos prácticamente iguales. Por supuesto que tampoco hay que aislar completamente a nadie ni sobreproteger.
  • Es muy importante, por lo menos para mí, que me dejen trabajar en paz. A veces da igual pero otras veces estamos concentrados, resolviendo algo y una interrupción inoportuna puede dar al traste con esa atmósfera. Y no solo son los jefes los que interrumpen inoportunamente. La mensajería instantánea es un compromiso que en mi caso funciona bastante bien. No es tan asíncrono como el mail ni tan inmediato como una conversación cara a cara o una llamada.
  • Mareriales: libros, revistas y incluso equipamiento técnico. No hay nada más triste que trabajar con un equipo lento porque falta memoria o querer tener una referencia y no poder comprar un libro. Son gastos insignificantes comparados con un sueldo y pueden aumentar la productividad. No hay que racanear.
  • La confianza es imprescindible. En serio. Mientras no se demuestre lo contrario hay que confiar en que las cosas se van a hacer bien, y confiar de verdad. Y cuando salen mal las cosas, no responder con el típico “ya sabía yo”. Por supuesto, todo tiene un límite.
  • Como no, mantén feliz al programador. En realidad a cualquier empleado hay que mantenerlo feliz. Pero en un mundillo con tanta movilidad, los desdenes, los malos gestos, la falta de detalles son visitas seguras a las típicas webs de ofertas de trabajo que todos conocemos. Y si echas la caña, al final algo pescas.
  • No hay que meterse en lo que a uno no le importa, o mejor dicho: cada uno a lo suyo. No hay nada más odioso que que te digan como debes hacer algo. El programador sabe cómo se programan las cosas y si no lo sabe lo aprenderá.
  • También hay que estar accesible y tener las cosas organizadas. Debido a la anterior capa de abstracción, los programadores no sabemos exactamente qué es importante y qué no, cuales son las prioridades y las cosas que pueden esperar. Hay que poder responder a las dudas con rapidez y claridad y ayudar a resolver los problemas que puedan surgir cuando los plazos no se cumplen o algo sale como no estaba planeado.
  • Y finalmente, hay que dejar claro lo que se espera de cada uno. En mi caso es algo que nunca he tenido claro y no puedo decir si eso ayuda, pero la verdad es que me gustaría saber en qué criterios objetivos se basa la valoración de mi trabajo a parte de los criterios plenamente subjetivos que se puedan tener. Es un modo no solo de que cada uno sepa a qué se atiene sino que además se pueda exigir y ayudar a los demás compañeros a que cumplan sus objetivos si dependen de nosotros.

Y eso es todo, cada uno que saque sus propias conclusiones. Cómo jefe o director, ¿consigues satisfacer las expectativas de tus programadores? Como programador, ¿ves tus necesidades cubiertas? ¿tienes alguna otra necesidad que no esté aquí reflejada? ¿puedes hacer algo por conseguir que tus superiores las satisfagan?

Via | What a developer needs from their manager (ytechie.com)

Los 7 hábitos de la gente altamente efectiva

Los 7 hábitos de la gente altamente efectiva
Rating: ★★★★½

Los 7 hábitos de la gente altamente efectiva es un libro que he leído más que nada por curiosidad, porque lo ví recomendado varias veces y porque se puede decir, que después de los casi 30 años que lleva Stephen R. Covey promulgando el concepto de los 7 hábitos, es ya un clásico.

Es la edición en español del libro de 1989, The 7 habits of highly effective people editada por Paidós desde el año 1997. Consta de unas 400 páginas en las que se describen con abundantes ejemplos reales los 7 hábitos, uno por uno.

Aunque pueda parecer un libro sobre productividad empresarial o personal en el ámbito laboral, se trata de una visión bastante más profunda e introspectiva de la que nos tienen acostumbrados este tipo de libros, llegando al ámbito de la autoayuda pero sin decantarse por un aspecto vital concreto, más bien expone un marco general de trabajo basado en una serie de reglas básicas que pueden ayudar al lector a sacar más provecho de sí mismo y de sus relaciones con el resto de personas.

Divide el libro en dos grandes bloques, el de la victoria privada y la victoria pública, con tres hábitos cada uno y luego un séptimo hábito transversal a los demás que es en gran parte responsable de que consigamos llevar a cabo por lo menos una pequeña parte de los hábitos. Él mismo reconoce que no es nada sencillo seguir fielmente estas pautas pero que debe ser nuestro objetivo y es el suyo desde hace muchos años.

En cuanto a la victoria privada, los tres hábitos son: ser proactivo, empezar con un fin en mente y establecer primero lo primero. El primero se refiere a que nos adelantemos a los problemas y no vivamos de ellos; el segundo, que si no hay una meta clara, difícilmente llevaremos a cabo nuestros propósitos; y el tercero, que replanteemos nuestro sistema de establecimiento de prioridades.

Con este bagaje, vamos a la victoria privada: pensar en ganar/ganar, primero comprender y después ser comprendido y finalmente la sinergia. Ganar/ganar singnifica conseguir acuerdos que beneficien a todas las partes implicadas, sin que una de las dos sea la parte perdedora. Después, ponerse en el lugar del otro para comprender fielmente su punto de vista, un hábito que el autor considera especialmente complicado y para terminar habla de la sinergia, la asociación de personas con un objetivo común que puede ser mucho más provechosa y productiva que todas ellas por separado. En este último puedo estar de acuerdo, pero es complicado encontrar dicha sinergia ya que todas las partes deben de estar predispuestas a ello.

Finalmente, el último hábito lo llama afilar la sierra: “simplemente” nos invita a mantener nuestra mente despierta, aprender siempre cosas nuevas y estar dispuestos a renovar y mantener continuamente nuesta mente, nuestro espíritu, nuestro cuerpo y nuestras relaciones. Desde luego, un objetivo ambicioso pero a la vez necesario para ser realmente efectivo y desde luego un gran consejo para no dejarse llevar por el entorno.

En resumen, el libro me parece muy positivo, en un sentido amplio. No dice nada nuevo, no descubre el mundo pero aglutina una serie de pautas y hábitos que conviene por lo menos tener en cuenta en nuestro día a día y pueden ayudar a evitar o resolver potenciales problemas que se nos pueden ir planteando, lo que no es poco. Además, su lectura es bastante llevadera aunque considero que de vez en cuando se repite demasiado en algunos conceptos o expone algunos ejemplos que me parecen pasajeros y podemos vivir sin ellos. Tampoco me gusta demasiado su fijación con la Iglesia, quizás porque su percepción por un lado protestante y por otro sumamente norteamericana se me hacen lejanas y también porque evitando ciertos comentarios podría ser un poco más neutral. No es que sea ofensivo y el autor mismo reconoce que existen muchas religiones y creencias que en el fondo aunque no en la forma persiguen en cierto modo lo mismo que expone él en su concepto de vivir según unos principios. Por otro lado, hay que tener en cuenta que este libro se publicó en 1989 por primera vez, con la caída del muro de Berlín y el inicio de la era de la información: no había ni Internet, ni móviles, ni globalización… En definitiva, que los tiempos han cambiado y hay que leer el libro teniendo en cuenta este punto, que, aun así, no ha perdido vigencia en absoluto.

No es un libro especialmente caro y es recomendable: cada uno que lo lea y saque sus propias conclusiones porque es en muchos aspectos bastante personal y muchas veces hace reflexionar sobre cómo aplicaríamos tal o tal concepto en una u otra situación de lo que nos va ocurriendo mientras vamos leyendo. Hay gente realmente apasionada de este libro y desde luego algo tendrá porque no solamente lleva años dando vueltas sino que el autor ha publicado otros títulos que profundizan en ciertos aspectos (como “Primero lo primero”) o amplían los hábitos para adecuarlos a los tiempos actuales (como “El octavo hábito, el liderazgo centrado en principios”).