E3matheus

Soy un desarrollador web interesado en ayudar a personas. Soy venezolano, católico, amo a mi novia, mi país, mi familia y mi trabajo.
Recent Tweets @e3matheus

El pasado fin de semana estuve participando en el Hackathon de MTY. El mismo es un evento organizado por una asociación de estudiantes en donde tienes que crear una aplicación en 24 horas con un grupo de máximo 4 personas. La pregunta que se me viene a la mente, es cual es el interés detrás de una noche de hacking? No dormir y hacer las cosas apresurado?


En primer lugar, te motiva a hacer realidad una idea tuya. Como bien dijo el buen emprendedor Eduardo Lopez, en el hackathon se viene a ejecutar(Be an executioner). Muchos se quejan, pocos tienen ideas para resolver esas quejas y un porcentaje aún menor, en realidad ejecuta su idea. Como desarrollador, a veces, con todas las actividades que tienes que hacer, pierdes de vista el hecho de que tu tambien tienes ideas y además cuentas con la capacidad de cambiar tu entorno implementándolas. Un hackathon no sólo significa dejar de dormir, significa ejecutar.

Otra razón de peso, es el ambiente. Piensa en un ambiente donde desarrolladores y diseñadores debaten, se rien, codifican, comen(bastante wujuu), emprenden, etc. Al estar rodeado de otros grupos como tú, tienes la oportunidad de conocer otros desarrolladores, de recibir feedback de tu idea y de conocer a la próxima generación de hackers.

Por último, te obliga a vender tu idea. Durante el evento, en muchas de tus conversaciones, vas a tener que explicar tu idea, y al final tienes que presentarla a todo el grupo. A pesar, de que no pareciera como algo que le pedirías a un ingeniero de computación hacer, en realidad es algo que como profesional necesitas aprender. Puedes hacer la aplicación más útil en el mundo, pero si no puedes comunicar tu idea, no va a llegar a ningún lado. O perderás el hackathon por lo menos jejeje.

Muchas gracias a los organizadores del Hackathon Monterrey por un excelente evento y por incentivar a la comunidad con ese sentimiento de emprender. Por lo menos, lo han hecho en mi caso. Finalmente, invito a aquellas comunidades que todavía no cuenten con este tipo de eventos, a que se organicen, hablen con Juan Pablo para que les de tips y hagan el intento :)

(via geekmega)

Cuando pensamos en un lider, a que nos referimos? Nos referimos a un ejemplo a seguir? Nos referimos a una persona que tome todas las decisiones?. Siento que lo común es imaginarse una foto de ghandi con miles de personas atras. Cuando estas en una organización estudiantil, quien es el líder? El presidente? Cuando estas en un startup, los líderes son los socios? Esa definición de liderazgo me parece superficial.

Si un líder es la persona que toma decisiones, entonces que queda para los demás? Ellos no toman decisiones? Si no tienes un cargo alto, ya no puedes opinar?. Lo único que te queda por pensar es si yo fuera el jefe, haría las cosas de otra manera.

Esa versión de liderazgo para mi, produce por un lado, gente con mucho ego, orgullo e incapaz de mostrar sus defectos y por otro lado, gente que solo recibe instrucciones y sin mucha iniciativa. Basicamente, creo que ese tipo de liderazgo lleva a que se tomen las decisiones equivocadas. Creo que produce trabajos donde prohiben redes sociales en los navegadores, donde están revisando todo el tiempo donde estas y en donde, solo el jefe puede tener iniciativa.

super trabajo

Puedo estar equivocado, pero yo pienso que un líder es una persona con mucha iniciativa que se apoya en un equipo de trabajo haciendo uso de la empatía y humildad. De acuerdo a esa definición, cualquier persona no solo puede ser líder, debe ser líder. Esta definición es el punto de partida para una organización horizontal. En el momento en que vemos que la opinión de todos importa, se construye un verdadero equipo de trabajo.

Fíjense que no estoy diciendo que deben desaparecer los líderes, mas bien estoy llamando a que cada quien sea un líder. Yo creo en el liderazgo situacional. De acuerdo al area que te apasiona, puedes ser la persona encargada de cuidar ese iniciativa. En las cosas que no te sientas identificado, solo muestras el apoyo que esperarías recibir si tu fueras el de la iniciativa. Un líder para mi sabe que no tiene que tomar la decisión siempre.

Para mi, el verdadero líder eres tu. Tu tienes la capacidad de cambiar lo que te parezca injusto. No te conviertas en alguien que solo sigue instrucciones. Aporta valor, ten empatía y despierta en tu equipo el potencial que pueden llegar a tener. Tienes mas poder del que piensas.

El mundo de los startups es increible. Entre las cosas que destacan a un startup es que tienes mucha libertad. tienes un horario más flexible, buscan tener proyectos con gran impacto social e incluso parece una familia. Adoptas prácticas y metodologías no tradicionales(metodologías ágiles, testing, programar en pares). Incluso, se desarrollan ideas propias de como compartir conocimiento(apps como hubot, eventos como hackathons), proyectos open source interesantes, etc.

Ciertamente, eso es un salto considerable a lo que estamos acostumbrados. Que la compañia adopte metodologías de desarrollo y ágiles rigurosamente, que crea en open source, que ayuden a capacitar al desarrollador, no exija al desarrollador tener multiples personalidades es un gran paso.

Sin embargo, he visto ya en muchas startups el mismo problema, creen a medias en estos conceptos. Algunas frases se me vienen a la mente:

  • "No hacemos wireframes, solo por esta iteración".
  • "Estamos muy ocupados para hacer una reunión diaria(scrum)".
  • "Creemos en apprenticeships, solo que no hay gente".
  • "No podemos hacer testing ahora por cuestiones de tiempo".

Aclaro, no estoy diciendo que tengas que creer en todas estas prácticas o que tengas que ser la persona menos flexible en el mundo. Es dificil tomar un rumbo diferente a muchas de las companias que ya existen. La cuestión es que para hacer estas prácticas, se necesita un esfuerzo sostenido. Se necesita fe y formar el hábito.

No se trata de forzar estas prácticas. Tu equipo de trabajo rechazará las metodologías o ideas con las que no se siente cómodo. La cuestión es que muchas de estas ideas, para lograr que formen parte de la cultura de tu empresa, se necesita un esfuerzo sostenido. Una vez más, se necesita fe y hábitos. Antes de ejecutar una metodología o una idea a medias, dedicale un esfuerzo sostenido porque no sabes el potencial que pueda tener.

Se que esto es idealista. La cuestión es que es triste ver, en primer lugar, que se pierda tiempo considerable en un proyecto por falta de fe en principios que si funcionan, solo que necesitan un esfuerzo consistente. Y en segundo lugar, que ideas mueran por el hecho de no darles seguimiento. Necesitamos ponerle un parado a esto. Necesitamos tener más fe en nuestros principios, más disciplina para probarlos y capacidad de adaptación para entender como podemos mejorarlos.

La programación es un tema muy complicado. Cualquier persona que crea que para crear una compañia que haga software mantenible y estable solo necesita un par de buenas ideas, comprar unas computadores y contratar a una docena de programadores de una universidad de prestigio se va a llevar tremenda sorpresa.

Multi path

Aqui dejo algunos ejemplos, que en algunos casos pueden chocar con el sentido común, pero si les pido revisen a ver si les hace sentido:

  • La educación en el trabajo lo es TODO

La computación, no es como la música o la medicina, que tienen más de 700 años existiendo. Es una ciencia que apenas comienza. Las carreras de computación vendrán de como mucho 1950. Hay gente en las universidades enseñando del tema pero es difícil atinarle sobretodo porque cambia tan rápido. Se hace lo posible por enseñar una base, pero en mi opinión se quedan cortos. Por lo que el trabajo, forzosamente, si quiere construir software mantenible, debe convertirse en educador.

Para mi la realidad es la siguiente: si quieres construir software estable, es necesario aprender TODOS los días y con una buena base. Es decir, en lugar de aprender con Google, me refiero a aprender leyendo código, libros, escuchando podcasts, teniendo conversaciones con un buen equipo de trabajo, programando en pares, yendo a conferencias buenas, dictando cursos, construyendo comunidades, etc.

  • Si necesitas más sistemas, la solución no siempre es contratar más programadores

Si hay algo que es importante entender, es la gran diferencia que puede hacer un buen programador. Dos programadores malos no equivalen a uno medio. Nunca la cantidad de programadores malos, va a compararse a un programador bueno. Si creas programas sin entender acerca del lenguaje y de los principios de computación, la cantidad de errores puede ser enorme, el tiempo que te puedes tardar debugueandolos aún más y el tiempo que te puedes tardar creando mas funcionalidades, crecerá muchísimo.

Quiero aclarar que cuando digo un programador bueno, no necesariamente me refiero a un egresado de una universidad de prestigio. Va a ser uno que tome riesgos, que tenga ganas de aprender todos los días y que tome en cuenta más crecer como equipo, que crecer personalmente.

  • La habilidad es importante, pero más lo es la humildad

La habilidad puede impresionar, pero la humildad permite crecer todos los días y adaptarte con mucha facilidad. En una industria donde la comunicación es TAN vital como la nuestra, ser humilde se vuelve indispensable. No se trata de tener la mejor solución o la que corra en menos tiempo. Se trata de comunicar efectivamente lo que estás tratando de hacer y de ponerte en los zapatos del que viene despues que tú. Depende de la cultura de la empresa, pero en mi experiencia, tener a un programador bueno pero que no sea humilde puede ser un riesgo alto.

  • Comunicación, comunicación, comunicación

Mucho de la programación se trata de comunicar. No se trata de hablarle a la computadora, sino de hablarle a la persona que viene despues que tu. Se trata de comunicación efectiva. Yo diría que las formas más efectivas de atacar este problema son: programar en pares, revisar el código que se hizo y tener un mentor. Consideraría un error desestimar estas actividades.

  • Evita darle múltiples responsabilidades al programador

En una industria de software debería haber cuatro tipo de personalidades: un hustler, un operador, un diseñador y un programador. El hustler busca negocios y vende el sistema, el operador se encarga de las finanzas y de mantener todo en orden, el diseñador construye la interacción con el usuario, la hace natural y sencilla para el usuario, y el programador implementa la funcionalidad.

Cuando una persona acepta tomar estas cuatro responsabilidades(Ejemplo cuando aceptas tigritos), siento que se comete un error grave si es un trabajo importante. Los Wireframes son un buen ejemplo de lo que estoy hablando. Si además de una descripción de la funcionalidad que tienes que implementar, le muestras al programador como quiere que interactúe el sistema, le estás ahorrando mucho tiempo.

Para los que le interesa el tema pero que no quieran leer un post tan largo :)

Si les da mucha flojera leer todo lo que escribí(jejeje), los invito a ver dos videos(en inglés) que hablan acerca de lo que significa ser desarrollador. Aqui les dejo la parte 1 y la parte 2.

Un gran abrazo!

En el post anterior, hablé de mis experiencias en la universidad y de todo lo valioso que aprendí, aun cuando no fuera parte del curriculum de la universidad. Esta vez quiero comenterles cual es mi siguiente paso.

Cuando me fui de intercambio, un amigo me pregunto como me estaba adaptando a la carrera en México. En ese momento le dije que me sentía al mismo nivel académicamente hablando. Esto no sucedió cuando entré al trabajo. En el momento en que comencé a trabajar, me dí cuenta que el nivel de las personas que estaban ahí era mucho mejor que el mío. No me sentí preparado. Creo que se lo que están pensando: “Eso es normal”. Sin embargo, muchos conceptos me parecen fundamentales para cualquier programador que yo ni habia escuchado. No eran áreas triviales.

Aqui les dejo las áreas que en mi caso, necesito trabajar y las razones por las que siento que un postgrado no me ayudaría:

  • Quiero aprender de comunicación, no tanto de eficiencia

Si bien la eficiencia es importante, no basta solo con que funcione bien. Sabias que uno se la pasa más tiempo leyendo código viejo que haciendo código nuevo. Eso implica que aun cuando funcione, cuando tengas que visitar otra vez ese código, hay una muy alta probabilidad de que pierdas tiempo más adelante y quizas lo rompas.

Desafortunadamente, siento que un modelo de exámenes y proyectos donde te evalúen en base a si tu programa funciona, no basta. Para mejorar tu comunicación lo más importante es obligarte a explicar tu código. Sea a manera de exponerlo, de tener un mentor que revise tu código, de hacer code reviews con tu equipo de trabajo, etc. ¿Sino cómo sabes si lo que hiciste otra persona lo va a entender?

Esa es una de las razones por las que el opensource es tan útil. Te obliga a tener código mantenible porque otras personas tienen que entenderlo si algo se rompe. Y también por eso me gusta tanto programar en pares, porque te obliga a explicar tu código desde el momento en que lo estas haciendo. Te obliga a escoger abstracciones entendibles, nombres de variables y metodos lógicos.

Comunicacion

  • Quiero aprender de muy buenos programadores con experiencia trabajando

Quizas en otra área, esto no podría suceder. La cuestión es que hay tantos programadores buenos que estan compartiendo su conocimiento. Están haciendo cursos en línea, podcasts, screencasts, dando charlas, tienen sus propios blogs, etc. Gente con experiencia real usando nuevas tecnologías quieren compartir su conocimiento porque saben que el estado de la industria no está bien y que se necesita compartir la experiencia para saber como se puede avanzar.

  • Quiero fomentar una comunidad de programadores

Siento que las comunidades a las que quiero apuntar, están en el opensource y en los startups buenos que te rodean. La cuestión es que muchos de los programadores que hacen opensource y que estan creando software valioso, no necesariamente salieron de una escuela de computación. Asi como conozco computistas excelentes, también conozco programadores de muy buena calidad que no estudiaron computación: Matemáticos, Mecatrónicos, estudiantes de arte visual, etc. Estoy apuntando a la comunidad que esta saliendo de personas que tienen ganas de hacer software valioso, que toman riesgos y que está preparando a su personal bien para lograrlo, que no necesariamente son los que tienen un postgrado en computación.

Conclusión

Un nuevo modelo de aprendizaje es lo único que se me ocurre que puede funcionar. En buenas empresas se esta siguiendo este nuevo modelo. Donde se hacen Code Reviews, programan en pares, te obligan a explicar lo que hiciste. Te ofrecen un modelo de mentores que te puedan ayudar a tener feedback instantáneo de tu código.

Adicionalmente, Corey Haines, the software journeyman, habla de un modelo de escuela parecido a este en este artículo y en esta charla minuto 27. Iniciativas como Mendicant University seguirán saliendo porque es necesario atacar un problema real. Hay personas, como yo, que salen de la universidad(e incluso de un postgrado), sin entender aspectos fundamentales acerca de como hacer software mantenible.

Los mantendré al tanto :).

Aqui les dejo unos videos pequeños que preparé en donde relato algunas de las lecciones que aprendí durante el transcurso de mi universidad.

No esperen mucho, solo son pequeñas reflexiones informales que no quiero que se me olviden. Se las comparto a ver si les sirven de ayuda y tambien para que se animen a recordar y compartir las suyas.

  • Invitación a recordar y motivación del video


  • Baloncesto, Cambio de Carrera y Movimiento Estudiantil


  • Centro de Estudiantes, Intercambio y últimas palabras


Aqui tambien les dejo algunos enlaces complementarios:

  1. Final del discurso a los graduandos 2012 del vicerrector académico William Colmenares.

  2. Generación de Espectadores de Adrian Cuadros

  3. TED: Listening to shame

Les mando un gran abrazo!

blogiviano:

Este es un tema que cada vez que damos un taller o algún tipo de curso lo puedo ver y sentir con algunos de los participantes y es algo que me preocupa.

En lo particular estoy en desarrollo de productos de software por dos cosas: La primera es que me encanta el echo de ver mis ideas plasmadas…

arianamcl:

Presidentes latinoamericanos y su posición política (Oficial….)

Cristina Fernandez: (Argentina) Frente para la victoriaKirchnerismo. Movimiento de centro-izquierda de origen peronista (Partido Justicialista).

Evo Morales: (Bolivia): Movimiento al Socialismo. Socialismo, Izquierda.

Dilma Rouseff: (Brasil) Partido de los trabajadores. Partido de centro-izquierda. Socialismo democrático.

Sebastián Piñera: (Chile) Coalición por el cambio, Coalición oficialista. Derecha, Centro-derecha.  

Juan Manuel Santos: (Colombia). Partido de la U. Derecha, uribismo.

Laura Chinchilla: (Costa Rica) Partido Liberal Nacional. Socialdemócrata, centro-izquierda.

Raul Castro: (Cuba) Partido Comunista de Cuba. Izquierda

Rafael Correa: (Ecuador) Alianza País. Socialismo, Izquierda.

Mauricio Funes: (El Salvador) Frente Farabundo Martí para la Liberación Nacional. Izquierda, Socialismo.

Otto Perez Molina: (Guatemala) Partido Patriota. Centro-derecho.

Porfirio Lobo: (Honduras) Partido Nacional. Derecha, conservadurismo.

Felipe Calderón: (México) Partido Acción Nacional. Derecha, Democracia cristiana.

Daniel Ortega: (Nicaragua) Frente Sandinista de Liberación Nacional. Izquierda, socialismo.

Fernando Lugo: (Paraguay) Alianza patriótica para el Cambio. Centro-izquierda, socialdemócrata, socialismo democrático.

Ricardo Martinelli: (Panamá) Cambio democrático. Centro-derecha, liberalismo.

Ollanta Humalá: (Perú) Partido Nacionalista Peruano. Izquierda

Leonel Fernandez: (República Dominicana) Partido de la Liberación Dominicana. Socialdemócrata, Tercera vía.

José Mujica: (Uruguay) Frente Amplio. Izquierda, Centro-izquierda.

Hugo Chávez: (Venezuela) Partido Socialista Unido de Venezuela. Izquierda, socialismo.

No se ustedes, pero yo siempre he asumido que el hecho de que mi mamá no sepa navegar en internet es un problema generacional. Simplemente no están acostumbrados como tu y yo. Ultimamente he estado dudando de esta afirmación y preguntándome si existe algo de culpabilidad de los diseñadores, al no hacerlas lo suficientemente intuitivas.

Ahora pienso que un sitio web debe ser intuitivo para ser considerado de calidad. No se trata de crear una aplicación que tenga muchas funcionalidades o muchos efectos. Se trata de ayudar al usuario y no hacerle complicada su estadía. Tomando un ejemplo del libro super recomendado "Don’t Make Me Think", el proceso realizado cuando estas en un sitio web no es del todo distinto al realizado cuando entras a una tienda por primera vez. Estas buscando algo y te fijas en los pasillos que tienen. Te fijas en los letreros ya que te ayudan a hacer un modelo mental.

En un sitio web, la experiencia debe ser muy similar. Debes construir la estructura del sitio para que sea fácil de entender. Y algo muy importante, debes seguir ciertas convenciones así como en la tienda se usan pasillos y letreros. Si existiera una tienda super original pero que sea muy dificil conseguir lo que necesitas, no sería muy popular.

¿A qué convenciones me refiero? Una página de inicio sencilla, un menú global, un menu local que te permita saber en donde estas, un cuadro de búsqueda preferiblemente arriba a la derecha. Si bien no son reglas fijas, son convenciones que puedes usar para que tus usuarios no se pierdan dentro de tu página y terminen con una cara como la de la niñita a continuación.

Niña Molesta

Tomemos por ejemplo las páginas de colegio en Caracas. Fijense en la página del colegio San Ignacio de Loyola. En uno que otro enlace, te dice donde estas. Es decir, si eliges ASIA, si aparece un letrero que dice que estas en ASIA. Pero si eliges “Enlaces institucionales”, ¿cómo sabes que página estas visitando?.

Fijense en la página del Colegio 12 de Febrero. Hay aspectos de esta página que me gustan. A diferencia de la página de San Ignacio, fijense que esta si tiene navegación local. Si sigues Galerías > Maraton 2011, puedes ver un menu local mostrando que llegaste de la siguiente forma: Home > Galerías > Maratón 2011. Pero por ejemplo fijanse que el enlace de “Tecnología” te lleva a un sitio muy distinto. Es como si entraras a la tienda y existiera una sección que no es parecida a la tienda en general. Vas a sentir que te perdiste.

Y así como estos errores, hay bastantes:

  • Colocar música apenas entras a una página(como el caso del Emil Friedman).
  • No colocar el cursor del mouse para que aparezca como una mano cuando pasas por encima de un link(Como en el caso del Champagnat).
  • Colocar tantos elementos que se confunde la navegación global(como el caso de La Salle La Colina.
  • Casi ninguna página de un colegio en Caracas tiene un buscador arriba a la derecha que tenga el campo de búsqueda y un botón que diga “Buscar”(No siempre se entienden cuando es un campo de texto y se asume que tienes que darle a enter para buscar).

En mi opinión de humilde programador web, pienso que si nos enfocamos en hacer las cosas sencillas e intuitivas para el usuario, nos irá mejor. Mostrar poca funcionalidad pero muy bien organizada puede llevarte más lejos. Todos estos errores los comentó no a manera de frustración, sino para que aprendamos que existe una mejor manera de hacer las páginas. Y quizas para que reflexionemos de eso la próxima vez que perdamos nuestra paciencia explicando a nuestra mamá.