sábado, 28 de marzo de 2015

¡Un nuevo idioma: Portugués!

Hoy tuve el gusto de conquistar un nuevo éxito: Terminé el curso completo de Portugués (desde Español) en Duolingo. ¡Qué alegría!

\m/ ¡Ohh yeah! \m/

Desde Noviembre del año pasado me dispuse a aprender Portugués. ¿Por qué? Bueno, ningún conocimiento es en vano y me encanta aprender. Quizá haya alguna otra razón más pragmática, pero si tales razones en verdad existieran preferiría mantenerlas privadas por los momentos, jajaja. Y por supuesto, el primer lugar que busqué para aprenderlo fue la excelente y divertida página para aprender nuevos lenguajes: Duolingo.


Ya en Duolingo había intentado aprender Alemán y Francés (ambas desde Inglés), pero confieso que no pude avanzar mucho más allá de la primeras lecciones, quizá por falta de motivación y de tiempo. Aunque haber terminado este lenguaje me da nuevas energías para retomarlos o incluso alguno nuevo. Creo que Alemán podría ser una buena elección para un próximo proyecto. :)

Claro, incluso habiendo terminado el árbol completo de Duolingo estoy en un nivel muy básico de Portugués. Estoy seguro que podría desenvolverme con bastante trabajo en un entorno donde se hable el lenguaje, pero ni cerca de ser fluido. Sin embargo, me parece que es un excelente inicio. Además, el Portugués como lenguaje es muy similar al Español. Aprenderlo fue relativamente natural, aunque si hay algunas cosas extrañas, palabras difíciles y gramática peculiar (por ejemplo, nuestro verbo haber es usualmente sustituido por tener en Portugués). Entre algunas de las diferencias divertidas está que lo que en Español es ancho, en Portugués es largo; mientras que lo que en Español es largo, en Portugués es longo. xD

Y bueno, sólo quería compartir con ustedes mi alegría del día al completar este pequeño éxito. ¡Estoy muy contento de seguir aprendiendo nuevas cosas y maneras de pensar! Hasta una próxima entrada.

sábado, 21 de marzo de 2015

Filantropía y misantropía

Estoy consiente que soy una persona absurdamente positiva en la gran mayoría de los casos y eso es algo extraño para muchas personas. Sin embargo, hay actitudes hacia la vida y hacia otros que son increíblemente comunes y que sinceramente no logro explicarme. Una de éstas es la misantropía generalizada que existe en la mayor parte de la especie humana. El ser humano simplemente no soporta a otros miembros de su propia especie, salvo por un puñado de otras personas que llama sus amigos.

¡Así es!

Desde que tengo uso de razón, me considero un filántropo. No en el sentido comúnmente utilizado de la palabra, en la que voy a andar con una ONG tipo Greenpeace viajando por el mundo ayudando a combatir la pobreza, la crueldad o cualquier otro problema social. Aunque lo admiro enormemente, no es el estilo de ayuda que mejor estaría adaptado a ofrecer. Me refiero al sentido estrictamente etimológico: philos (amor) anthropos (hombre). No tengo nada sino amor por el ser humano, pues es una especie maravillosa llena de un potencial de grandeza verdaderamente increíble. Claro, también tiene un potencial enorme de destrucción y horror, pero es una cuestión de perspectiva y de actitud fijarse más en una u otra característica.

Me han acusado de cosas como querer ser amigo de todo el mundo. Y en realidad... soy culpable. ¿Y cómo no querría? Es una cuestión de estadística básica. No importa en qué sitio del mundo uno esté, siempre va a poder hacer amigos y llegar a tener confianza con un puñado especial de personas. ¿Qué hace especiales a estas personas más allá de casualmente estar en el mismo sitio que uno? Una bonita amistad se puede desarrollar con casi cualquier persona, en casi cualquier lugar. Y creo honestamente que siempre vale la pena intentarlo. Si, tengo muchísimos amigos y gente a la que le tengo cariño y confianza. Me siento enormemente afortunado por eso y aún quiero seguir conociendo a muchas personas más, de todos los tipos y lugares. ¡Me encanta conocer gente nueva!

Es increíble la cantidad de comentarios negativos que leo a diario, sobre personas, sobre grupos, sobre todo. El ser humano suele dar mucho más peso a lo negativo que a lo positivo. Una excelente persona puede equivocarse una vez, y ya es un perdedor para muchos y hasta pudieran llegar a odiarlo. No entiendo este pensamiento. Yo soy de una filosofía totalmente diferente. Para mi cualquier persona es buena e inocente hasta probar lo contrario, y aún cuando lo hace creo en la redención y en la grandeza interior que esa persona puede llegar a tener. Esto no quiere decir que no tenga pensamientos negativos o hasta vengativos (que no me gusta tener) hacia una persona o grupo, pero es la excepción y no la norma.

Algunas amistades incluso me han dicho que mi mundo es más positivo y veo a la gente mucho más chévere de lo que es porque "me están jalando bolas" por mi puesto como profesor. Realmente no creo que algo pudiese ser más falso (si, Sheldon, algo es falso o no; no puede graduare, lo sé. xD). Prefiero pensar que es más por la actitud positiva constante y porque me gusta ser muy cercano a todo el mundo, en especial a la gente a la que le doy clase. Quizá exista alguien que me trate por interés, realmente no lo sé. Pero tampoco me importa realmente. Compartir y pasar buenos momentos no tiene por qué oscurecerse buscando razones ni complots extravagantes. Creo que debemos aprender a disfrutar mucho más del presente.

En verdad, creo que todo el mundo tiene algo que enseñar y es un potencial mejor amigo. Y ésta es otra de esas cosas enfermamente positivas que he escuchado que algunos no soportan, jajaja. Tampoco entiendo cómo se puede no soportar a alguien por ser positivo, pero si va, cada loco con su tema. xD Esto era lo que quería compartir por ahora. ¡Sean filántropos y verán cuanto amor les llega de vuelta! Hasta una próxima entrada. :)

martes, 3 de marzo de 2015

Cómo Programar

¡Me encanta programar! Es una de las cosas que más me divierte y me llena de mi carrera. Programar es una actividad que involucra tanto la creatividad, como la habilidad técnica y hacerlo bien puede potenciar incluso múltiples regiones de la mente.

¡Programar siempre es emocionante! :D

Sin embargo, quienes me han visto programar sabrán que yo suelo programar "extraño".

¿Cómo así?

Yo puedo pasar horas sólo viendo la computadora o incluso estar aparentemente procrastinando por la web, pero eventualmente abro el editor y básicamente escupo todo el código en cuestión de minutos. Algunos confunden la procrastinación con flojera, pero es muy al contrario. Cuando parezco estar haciendo nada, en realidad estoy pensando y planificando como voy a programar lo que necesito: las estructuras que hacen falta, algoritmos eficientes y patrones reutilizables de otras cosas que ya haya hecho. De repente, sale todo ese código y la gente se queda sorprendida con la velocidad en la que se me ocurrió todo. Pero la verdad, es que no hay realmente ninguna velocidad extravagante involucrada. Sólo una metodología de pensamiento diferente, donde primero se diseña y luego se programa. :)

La gente de Sistemas de Información, a pesar de sus documentos infinitos (los cuales, hay que confesar, contienen mayormente información inútil), tienen sin embargo un concepto acertado: Para programar bien, primero hay que planificar. Lamentablemente esto se enseña en torno a requerimientos y, en menor medida, a herramientas y patrones. Pero realmente no se enseña a planificar y diseñar soluciones con tipos de datos y algoritmos adecuados. Se enseña muy bien a tener claro lo que se desea hacer, pero muy poco se ahonda en tener claro cómo hacerlo.

Por todo esto, quisiera compartir con ustedes cuales son las reglas fundamentales en mi proceso al programar (al menos en la mayoría de los casos):
  • Regla fundamental No. 1: No echar ni un caracter de código, hasta haber planificado la estructura y funcionamiento básico del programa. Esto ahorra muchísimo trabajo al final, en especial de refactorizaciones constantes. Al principio no se verán resultados tangibles, pero cuando comiencen a aparecer será tan veloz que parecerá algo mágico, jajaja.
  • Regla fundamental No. 2: Los lenguajes y herramientas son diversos por algo. Cada problema tiene diferentes características y diferentes herramientas pueden ser mejores o peores en determinados momentos. Es importante conocer y dominar varias formas de pensar y resolver problemas para así poder seleccionar la más adecuada en cada situación. Por poner un ejemplo, creo que nadie duda que hacer una aplicación web en C sería un dolor de cabeza, pero para programar sistemas de operación pocos lenguajes se le comparan. ¿A su vez, cómo sería programar un sistema de operación en un lenguaje como Ruby? Cada herramienta tiene su dominio y por esto es importante saber distinguir entre ellos.
  • Regla fundamental No. 3: Pensar a futuro. Este es un hábito difícil de adquirir, pero sumamente útil si se domina. La verdadera parte complicada al programar está en diseñar la solución. Una vez el diseño de estructuras y algoritmos está completo, efectivamente programar la solución es en verdad un trabajo mecánico. Como tal, consume muy poco procesamiento mental realmente. Por lo tanto, es posible (aunque repito, difícil en un principio) seguir planificando a futuro mientras se programa lo que ya está planificado. Algo así como el pipeline del procesador que mientras ejecuta una instrucción ya interpreta la siguiente. Esto hace que la programación sea un poco más fluida y rápida. Además mantiene la mente activa y evita los peligros de contraer flojera crónica entre "sprints" de implementación.
  • Regla fundamental No. 4: ¡Reutilización por siempre! Y no sólo me refiero a reutilización de código, sino también de procesos mentales. Muchos problemas son parecidos o tienen componentes parecidas entre si. Aunque finalmente el código no sea el mismo (por una u otra razón), el proceso mental que llevó a solucionar un problema puede llevar a solucionar otro. Por ejemplo, si se pasó un par de días resolviendo una conexión entre una aplicación web y una base de datos de forma eficiente, el mismo proceso puede reutilizarse si en algún momento se debe conectar eficientemente una aplicación móvil a una base de datos local (a pesar de que muy posiblemente, el código sea bastante diferente).
  • Regla fundamental No. 5: Nunca perder la práctica. Es importante mantenerse programando y no únicamente en un área específico. Se debe intentar explorar nuevas áreas sin descuidar aquellas que ya se han explorado antes. Por ejemplo, a un programador web deberían poder asignarle un trabajo de bajo nivel (implementar un driver, por ejemplo) y no debería ser el fin del mundo para él, sino sólo un reto más a superar y una nueva oportunidad para aprender y practicar algo diferente.
Las tres primeras reglas fundamentales, potenciadas con la cuarta y la quinta, hacen que un programador luzca como un verdadero mago. Después de unos minutos pensando en un problema complejo, puede producir código muy rápido que lo soluciona. Y muy posiblemente, código eficiente, reutilizable y hasta seguro. Todo depende de cuanta experiencia se tenga. Como ejemplo personal, estoy claro que al programar en un lenguaje funcional (como Haskell) puedo llegar a hacerlo sumamente rápido. Pero eso no es más que una mezcla de pasión y experiencia. Eso no me hace más inteligente que nadie, ni mucho menos. Estoy totalmente seguro que todos y cada uno son mejores que yo en algo. Pero finalmente, creo honestamente que la experticia en cualquier herramienta o dominio siempre puede lograrse no más que siguiendo estas 5 reglas fundamentales.

Todas estas reglas dependen claro, de una que es incluso más fundamental y básica:

  • Regla fundamental No. 0: No puedes escribir un programa para resolver un problema que no entiendes. Es sumamente nocivo intentar resolver un problema, cuando no se tiene claro cuál es siquiera el problema que se necesita resolver. Esto, lamentablemente, es más que común por los tiempos apresurados de producción en la industria de la computación. Sin embargo, debe evitarse a toda costa. Lo primero que debe asegurarse siempre es haber entendido el problema, luego entender cómo resolverlo, luego con que herramientas y sólo entonces se debe echar manos a la obra e implementar. (gracias a Ernesto Hernandez-Novich por el comentario que inspiró esta regla adicional).
Y bueno, esto quería compartir con ustedes hoy. Éste es mi extraño método y debo decir que muchas veces me ha funcionado bastante bien (aunque puede ser terrible cuando hay deadlines cercanos involucrados, pero ese es otro cuento, jajaja). Cualquier comentario, como siempre, es más que bienvenido. ¡Hasta una próxima entrada! :D