Uno de los “problemas” que he encontrado al querer aplicar técnicas, usar librerías, frameworks, lenguajes, etcétera. De los que he leído e incluso usado en algún pet Project. Es que al momento de querer aplicarlo en algún proyecto real, este tienen fechas de entrega a muy corto plazo y por lo tanto lo más “seguro”, para cumplir con esas fechas de entrega, es haciéndolo utilizando lo ya conocido y probado en proyectos anteriores.
No es común que el cliente nos pida alguna aplicación y nos de el tiempo necesario para aprender la tecnología a usar. Primero porque desea el sistema lo más rápido posible y segundo porque no quiere cubrir el costo del tiempo invertido en aprender lo nuevo. Cuando al final el recibe el mismo sistema, no importando la tecnología o técnicas usadas en el desarrollo.
Pude ser que esta necesidad sea mas del desarrollador, ya que es él el que trabaja directamente con la tecnología (ya sea framework,lenguaje de programación, etc).
Para poder aplicar/implementar algo nuevo en un proyecto real requiere de un esfuerzo adicional al que se necesitaría para aplicar lo que ya se conoce. Todo, por fácil que sea, tiene su curva de aprendizaje, sus ventajas y sus desventajas y debes de haberte encontrado con algunas de ellas antes de poder usarlo en producción, para que así sepas como resolver lo posibles problemas que se presenten.
Pero entonces. ¿Como puedo aplicar o usar lo nuevo en los proyectos de mi trabajo, si nunca tengo el tiempo necesario? Algo que he tenido que hacer al querer aplicar algo nuevo en proyectos del trabajo es primero practicar por fuera en proyectos personales (a.k.a. pet projects) la tecnología/técnica que me interesa y en una oportunidad que se presente proponer el uso de tal tecnología o técnica. Esta propuesta procuro hacerla mostrando algo ya funcionando (un demo funcional), para convencer de las bondades que tiene utilizar lo nuevo.
Esto requiere dedicarle tiempo extra al trabajo, porque lo aprendido en pet projects lleva su tiempo aplicarlo en proyectos reales. Puede incluso llegar a ser frustrante tardar en realizar algo sencillo que usando lo que ya conocemos lo haríamos en minutos; pero a la larga es aun más frustrante (por lo menos para mi) el trabajar con técnicas/tecnologías viejas, con las que no puedo lograr lo que se que es posible realizar con algo nuevo.
De no dedicarle tiempo por mi cuenta a practicar lo que quiero usar, la decisión de usar algo diferente correría totalmente a cargo de alguien más, ya sea el cliente, jefe o algún programador más que hiciera la sugerencia. Para algunos eso no es problema, esperar que a el jefe/cliente se le ocurra intentar algo nuevo (a veces hasta que ya no es tan nuevo, incluso ya viejo); pero para mi conocer y no aplicarlo no es divertido.
Entonces: Si quiero usar algo nuevo tengo que proponerlo, lo mejor seria hacerlo mostrando avances donde puedan verse las ventajas. Esto requiere algunas veces dedicar algo de mi propio tiempo para aprender las nuevas tecnologías y así poder convencer a los clientes/jefes que estamos listos para usar la tecnología/técnica nueva, porque el cliente no quiere pagar la curva de aprendizaje.
En algunos casos (como para los Freelancers), el cliente no tendria que pagar esos costos, ni esperar a que tu aprendas las tecnologias, creo que en esos casos es tu responsabilidad obtener entrenamiento, es tu inversion. Por otro lado a los que tenemos un trabajo fijo, creo que ahi si aplica que la misma compañia te pueda incluso patrocinar esos entrenamientos, aunque se que sucede con poca frecuencia, y en caso de que no sea asi, es cuando se vuelve mas dificil, requiere mucha mas dedicacion por parte del programador, y a final de cuentas es lo que separa a los del 10-20%, del resto de los programadores, los que estan dispuestos a aprender, aun en su propio tiempo, despues del trabajo; creo que lo menos que puedes hacer en esos casos es preguntar a tu jefe si estarian dispuestos a patrocinar de alguna forma ese entrenamiento, no tienen que ser conferencias, puede ser algo tan sencillo como un libro o una subscipcion a algun sitio de videos de entrenamiento
ResponderBorrarIntroducir cosas nuevas puede convertirse en obligación, no sólo para el freelancer sino también para una organización. Mantenerse desarrollando con la misma a versión del framework/lenguage/herramienta de hace 5 o más años años expone al ambiente de IT al riesgo de perder soporte por obsolescencia. La diferencia puede ser de matices: mientras que para algunos "usar algo nuevo" significa revolución, romper paradigmas, para otros puede significar *evolución*.
ResponderBorrarEn realidad el usar algo nuevo o mas eficiente o mas efectivo, no necesariamente es un beneficio directo para cliente - aunque si lo puede ser, porque a la mejor se le puede ofrecer una mejor funcionalidad o que el código y la tecnologia no este obsoleta desde que se le entrega -, el beneficio principal debe ser para quien desarrolla la solución.
ResponderBorrarDebido a esto el aprendizaje de esa tecnologia, no se le debe de cobrar al cliente. El beneficio al desarrollador viene en el sentido que la solución tecnologica seleccionada va a proporcionarle una mejor manera de desarrollar la solución, quizas requiriendo de menos esfuerzo-tiempo, o en el sentido que le va a permitir ofrecer un mejor soporte/mantenimiento sin pasar penurias, o la aplicación no se va a volver "legacy" en un periodo corto de tiempo.
Cuando se trabaja en una empresa de desarrollo que no ve los beneficios que conlleva el usar nuevas tecnologias o nuevas formas de desarrollar, el pensar en usar algo nuevo lo ven como un costo y un riesgo, y es por eso que prefieren usar lo conocido, en lo personal me ha tocado ver empresas que dicen "no vamos a migrar de .NET 1 a .NET 2, porque .NET 4 es muy nuevo, hay que esperar unos 2 años a que madure".
En mi caso como freelance cuando tengo un proyecto, veo que se requiere y que hay nuevo que pueda ofrecer y sobre todo que me ayude a terminar mas rapido y/o ser mas eficiente, esto no implica que al cliente le va a salir mas caro o mas barato, ya que el beneficio de usar algo nuevo, principalmente lo veo en mi proceso de desarrollo.
Si bien es cierto que las curvas de aprendizaje tienen un impacto, este es mayor para desarrolladores con poco experiencia o que siempre han trabajado con la misma herramienta o tecnologia, para gente con experiencia o que han pasado por varias tecnologias, esta cueva suele ser pequeña y no tan importante como para no usar algo nuevo.