lunes, 23 de junio de 2014

Lo que todo Computista debería saber (en Teoría)

Últimamente he visto muchos artículos sobre las herramientas o lenguajes que debería conocer todo computista. Generalmente son artículos muy buenos y con buenos consejos. Por ejemplo: Saber usar debbugers y profilers, saber expresiones regulares, saber control de versiones, etc. Sin embargo, hoy me gustaría compartir con ustedes cuales son los conocimientos teóricos que, en mi opinión, debería tener todo computista.

Árboles Rojo-Negro, FTW!!!

A continuación aquellas áreas que me parecen más relevantes para un profesional de la computación:
  • Lógica y Matemáticas Discretas: Indiscutiblemente el más importante de los conocimientos que debe tener un computista. Nadie dudaría que un mecánico deba saber de física; de la misma forma un computista debe saber de matemáticas (en particular las discretas). Para un mecánico la física es la estática (lo que define el mundo) y la dinámica el movimiento (como evoluciona e interactúa la estática). Para un computista la construcción es análoga, aplicada al mundo abstracto. La matemática es la estática y la algoritmia es la dinámica.
  • Algoritmia: Un computista no debe ser solo un programador, debe conocer de estructuras de datos diferentes y algoritmos que las utilicen astutamente. En particular, debe conocer de listas y sus variantes (pilas, colas, colas de prioridad, etc.), árboles en todas sus presentaciones, grafos, programación dinámica, metaheurísticas y demás. Es imprescindible que un buen computista sepa realizar análisis de eficiencia, tanto teóricos (con notación asintótica) como empíricos (usando análisis de desempeño).
  • Autómata: Aunque aplicados al reconocimiento de lenguajes, el tipo de pensamiento que proporciona el conocer de autómatas se aplica a casi cualquier proceso en computación. Se tiene una entrada que se consume, un conjunto de estados conectados por transiciones y un estado final al que se desea llegar. Conocer sobre analizadores sintácticos y sus adentros es quizá ya más un extra que un conocimiento básico, sin embargo también ayuda a programar mejor y usar las bondades de los compiladores.
  • Sistemas de Operación: Desde hace décadas que la mayoría de los programadores se desenvuelven en una capa de abstracción sobre la máquina, que proporciona muchísimas facilidades: un sistema de operación. Es importante saber como funcionan estos sistemas para aprovecharlos de la mejor manera posible. ¿Qué hace a un buen sistema de archivos? ¿Como se crean, manipulan y destruyen procesos? ¿Que es la fragmentación, la paginación y como puede afectar el rendimiento de los programas? Todas estas son preguntas que todo computista debería poder responder fácilmente.
  • Bases de Datos: La cantidad de información que se manipula en el mundo actual es abrumadora y los datos asociados lo son aún más. Un computista debe saber como definir y crear bases de datos (no solo relacionales, sino en otros paradigmas como el objeto-relación o bases de datos de grafos). Además, debe saber manipular y acceder eficientemente a estos datos. Para esto, es conveniente saber de Álgebra Relacional, de Índices y del uso de metadatos en un DBMS. Es importante no ligarse fuertemente a un manejador en particular, sino comprender estos conceptos de la forma más general posible.
  • Estadística: Ohhh si, la temible estadística. Pero no la que nos enseñan en los cursos que compartimos con las demás carreras en las diferentes universidades, sino una versión mucho más orientada a computación. Lo que nos hace falta saber es análisis de desempeño. Un profesor y amigo una vez me dijo: "Lo que no se mide, no se gerencia" y es una cita excelente y totalmente acertada. Saber realizar una buena medición de los programas que se desarrollan, ya sea en el consumo de recursos, calidad de las soluciones, etc. es fundamental para un buen computista. No hablo de conocer las fórmulas para las funciones de distribución clásicas; pero si, por ejemplo, saber realizar un proceso de cross-validation para probar soluciones o calcular una desviación estándar en tiempo de ejecución.
  • Inteligencia Artificial: Muchos de los grandes problemas a resolver están asociados con la inteligencia artificial. Y con esto no me refiero a robótica, sino a técnicas de búsqueda eficiente en espacios combinatorios, aprendizaje de máquina, optimización, etc. Al menos conocer los conceptos es necesario, saber lo que significa un conjunto de entrenamiento y un conjunto de prueba, conocer acerca de minería de datos y sus posibles aplicaciones, etc.
  • Ingeniería de Software: Cualquier programa que pase más allá de un ejemplo sintético en un salón de clase, necesita pasar por un buen diseño y planificación antes de pasar a implementación. Un computista debe ser capaz de diseñar abstractamente sin pensar en detalles de implementación, organizar su flujo de trabajo, evaluar las herramientas a su disposición, conocer de patrones de diseño, pruebas unitarias, mantenibilidad de código y buena documentación. Quien se rige por la filosofía de "fue difícil de escribir, debe ser difícil de entender" sólo colabora con su propio ego y no con el desarrollo del conocimiento y avance tecnológico de la humanidad.
Cualquiera que me conozca se quedará extrañado de que esta lista no incluya Lenguajes de Programación, pero esto tiene una explicación. La lista que propongo es sobre conocimientos teóricos fundamentales. La "teoría" asociada a lenguajes de programación es más que todo semántica formal en sus diferentes sabores (axiomática, operacional y denotacional) y las diferentes teorías que sustentan los lenguajes de programación como el lambda-cálculo, los modelos de Herbrand, monoides de instrucciones, etc. A pesar de ser un gran plus, pues un computista con estos conocimientos está preparado para abordar los problemas con una visión mucho más abstracta y flexible, no lo considero un conocimiento fundamental. La práctica en Lenguajes de programación (paradigmas, herramientas, estructuras de datos y control de flujo, etc.) es algo sumamente necesario, pero eso es material quizá para otra entrada.

Se podría discutir que otras áreas del conocimiento como Redes, Big Data, Computación Gráfica, Seguridad, etc. son también fundamentales. Sin embargo, a mi me parece que dichas áreas ya son especializaciones. Un computista debería poder conversar a un nivel técnico moderado con especialistas en estas áreas, pero no tiene por que manejarlas a profundidad.

Y esto, a menos que se me escape algo (que seguramente así será), es lo que en mi opinión todo computista debería saber en cuanto a teoría se refiere. Claro, recordando que ningún conocimiento es en vano y mientras más áreas se dominen mejor profesional se terminará siendo. La intención es continuar aprendiendo y mejorando. Pero ningún computista puede estar realmente completo sin un buen conocimiento de las áreas que mencioné arriba (claro, todo esto es desde mi punto de vista limitado a mi poca experiencia, pues aún me queda demasiado por aprender). Con esto los dejo hasta una próxima entrada.

domingo, 22 de junio de 2014

Festival de Cervezas Artesanales

Ayer y hoy se celebró en la terraza del Mercado de Chacao un festival de cervezas artesanales y EXCELENTE le queda corto. De verdad, la variedad de sabores disponibles era abrumadora y cada una era mejor que la otra.

¡Todas excelenteeeee! \m/

¿Como empecé a interesarme en estas cervezas? Hace algunos años tuve la suerte de visitar Argentina y empezar a conocer las cervezas clásicas estilo alemanas (en Argentina hay muchos alemanes) y quedé totalmente enamorado. Aquí en Venezuela solamente había Pilsen, lo cual es un agüita amarilla en comparación, jajaja. La única manera de tener un poco de sabor era con la Solera Verde y a duras penas. Pero de un tiempo para acá, las cervezas más fuertes y sabrosas fueron agarrando terreno. Primero la Destilo, que es más bien un Ale, pero pertenece a la familia de las Cervezas. ¡Excelente Marca! Y un tiempo después, la Solera Märzen. ¡Esta si era una cerveza vaaale! La producción fue baja y ya no se consigue lamentablemente, pero aún es mi favorita entre las más comerciales.

Pero poco a poco fueron surgiendo marcas de cerveza artesanal. Entre las primeras que probé está Coloniera. ¡Muy buena cerveza! Cabe destacar que la perseguimos muchísimo antes de poder encontrarla, jajaja. Fuimos al OktoberFest de la Colonia Tovar y ya se había acabado. Pero eventualmente lo logramos. Estas cervezas se empezaron a vender en locales selectos y con una producción sumamente limitada (eran muy difíciles de conseguir), hasta que se empezaron a poner de moda y la cantidad aumentó considerablemente. Ayer y hoy, un grupo como de 15 cerveceras artesanales trajeron sus sabores al festival que auspició Cerveza Zulia (en uno de los movimientos de mercadeo más astutos que he visto) y la ACAV (Asociación de Cerveceros Artesanales de Venezuela).

Todas las cervezas estuvieron BUENÍSIMAS e incluso se ha notado evolución en algunas marcas que ya había probado. Y el evento estuvo realmente full. Litros y litros de cervezas artesanales corrieron y se acabaron antes de terminar el segundo día. De verdad, excelente la experiencia.

A continuación mi top 5 de las cervezas que probé entre estos dos días:
  1. La "Brown de Papelón" de Dakonons
  2. La "Porter" de Cacri
  3. La "Red Ale" de Dos Leones
  4. La "Indian Pale Ale" de Norte Del Sur
  5. La "Blanca" de Dakonons

Y una mención especial a los panas de Keger que se atrevieron a experimentar con una cerveza aumentada con Mango. ¡Un sabor bien interesante!

El festival estuvo tan bueno que terminamos yendo los dos días. ¡Espero el siguiente! Y esto es lo que quería compartir por ahora, jaja. Será hasta una próxima entrada. ¡Y salud! :D

viernes, 20 de junio de 2014

Foro de Emprendedores: WIN!

Hoy se celebró en el Departamento de Computación y Tecnología de la Información de la USB, nuestro último coloquio de este trimestre (o bueno, semestre más bien con lo que ha durado, jajaja). Como un esfuerzo continuo para comenzar a unir industria y academia para crecer mutuamente, se invitó el día de hoy a algunas empresas para que nos hablen de su experiencia como emprendedores y hacer un foro/discusión con respecto al tema.

Coloquios FTW!!!

En particular, este tema es sumamente relevante para el Departamento ya que prontamente comenzaremos a ofrecer la opción en la USB de realizar proyectos de grado orientados al emprendimiento. El conocer sobre casos exitosos en diversas etapas de desarrollo nos ayudó a tener una visión un poco más clara de lo que queremos lograr con estos proyectos. :)

Los ponentes de hoy estuvieron excelentes y más aún, pude ver a muy buenos amigos que tenía tiempo sin ver (porque... eran los ponentes. XD). Como moderador disfruté muchísimo mi trabajo, mas o menos llevando la conversación (aunque sinceramente se llevó sola, jajaja) y siento que tuvimos un buen foro que fue interesante tanto para la audiencia de profesores presentes como para los ponentes. ¡Excelente, de verdad!

Este coloquio fue el primero que publicité a través del grupo de Facebook: Coloquios USB. Aunque no tuvimos la presencia de estudiantes (que era la idea) y realmente faltaron algunos profesores. Esto ha sido recurrente en los últimos coloquios, lo cual es sinceramente preocupante. La intención de estos coloquios es la de compartir nuestras experiencias y vernos las caras aunque sea una vez cada dos semanas. Salir de la rutina de un área en particular y un mismo grupo de investigación, para compartir con los colegas de otras áreas. Más aún, me gustaría que este "compartir" se hiciera interdepartamental. Y este es uno de los objetivos fundamentales del grupo de Facebook antes mencionado. Ojala puedan agarrar más importancia estos eventos. Tanto conocimiento y cosas geniales que se hacen en el contexto universitario y que pasan desapercibidas. Me gustaría poner mi granito de arena para ir remediando eso.

Por último, les dejo la invitación que mandé para asistir al coloquio, que incluye las empresas invitadas, ponentes y demás:

Hola a todos,

Este Viernes finalizamos nuestro ciclo de coloquios del Departamento con una charla sobre emprendimiento en la industria de la computación. La charla será dada por representantes de empresas que han sido emprendedoras exitosas en el mercado nacional.

Los invito entonces, en nombre del Departamento de Computación y Tecnología de la Información, a nuestro coloquio de esta semana:


Fecha: Viernes, 20 de Junio de 2014.

Hora: 1:30 pm.

Lugar: Sala de Reuniones del Departamento de Computación, MyS-216.

Título: Foro de Emprendedores en Computación

Presentadores:

    • Por Mobile Media Networks:
      • Ricardo Blanch (Director de Innovación)
      • Sabrina Fernández (Gerente de Proyecto)
    • Por PRX Control Solutions:
      • Miguel Ambrosio (Lider de Proyecto - Front End)
      • Narbelys Oropeza (Lider de Proyecto - Back End)
    • Por Ludopía:
      • Saúl González (Director Creativo y Técnico)

Moderador: Ricardo Monascal

Resumen:

En el marco de un mercado mundial que cada vez llama más al emprendimiento y a un modelo de empresas "start-up", es el momento ideal para sacar a flote nuestras ideas y aplicarlas para generar un beneficio real tanto personal, como para resolver necesidades autenticas de la sociedad actual.

En este contexto hemos invitado a diversas empresas del área de computación y tecnologías de información para que nos relaten su experiencia emprendiendo en el mercado Venezolano, como han alcanzado el éxito a partir esa idea emprendedora y que recomendaciones tienen para futuros emprendedores en el área de computación.

Las empresas invitadas en esta ocasión son Mobile Media Networks, PRX Control Solutions y Ludopía. Al finalizar la charla de cada empresa, se procederá a una discusión general sobre el emprendimiento y el éxito en la industria de la computación.

Empresas Invitadas:

    • "Mobile Media Networks" es una de las primeras empresas de desarrollo y publicidad móvil de Latinoamérica. La empresa genera productos y servicios innovadores con soluciones y soporte creativo en un rango muy amplio para las iniciativas o soluciones que tengan los anunciantes.
    • "PRX Control Solutions" es una empresa que ofrece soluciones para el mercado asegurador y la industria farmacéutica, enfocadas en el control y la gerencia de prescripciones médicas.
    • "Ludopía" es un emprendimiento en videojuegos acelerado por Wayra Venezuela. Su primer producto, Quiro, es un videojuego de simulación que permite a los estudiantes de medicina desarrollar sus habilidades quirúrgicas.

Y bueno, esto es lo que quería compartir por ahora. ¡Hasta una próxima entrada! :D

domingo, 8 de junio de 2014

¡Una semana genial!

Hay veces que un día sale bien y uno se siente realizado cuando termina. ¡En esta ocasión fue más bien una semana entera que fue sumamente genial y excelente!

Ohhh, yeah!

Para empezar, pude ver a mi papá que estuvo un mes en España por trabajo. Y trajo muchas cosas geniales de vuelta, jajaja. La mejor de toda, mi nueva bebé (una tablet), que con el cambio oficial que le daba la empresa salió super económica. Mis respetos para Android, pues la tablet y su sistema son lo máximo. XD

Luego llegó el Lunes, día de la defensa final de los chicos del taller de desarrollo de software. Necesito recalcar lo excelente del trabajo que hicieron estas tres personas (Jonathan Melian, Jose A. Goncalves y Javier Antonini) durante el taller y fue con orgullo y sin duda que decidimos colocarle 5 en la materia a los 3 (Es una materia de 8 créditos, un 5 ahí no juega carritos, jajaja).

El Martes les tocó presentar el segundo parcial a los chicos de Lenguajes de Programación I, con 35% de la nota. Era un parcial largo, si bien no tan difícil. Sin embargo, los resultados excedieron con creces mis expectativas. El promedio del salón fue 27.53/35, con un total de 3 personas con 35/35 (Oscar Burguillos, Daniela Rodriguez y Alessandro La Corte). ¡Que excelente trabajo! No podría estar más orgulloso y contento por como salieron todos. Se nota que están esforzándose y aprendiendo. :) Me han dicho que mucho fue gracias a las guías que les subí, lo cual me alegra muchísimo, pero no hay que disminuir el esfuerzo que han hecho todos por entender y aprender.

Aquí está el archivo con las notas acumuladas de la materia:

El mismo Martes comenzaban las 7mas JOINCIC y logré llegar a tiempo para la mesa de trabajo de mi hermano. Aunque al inicio estaba accidentado (por la falta de videobeam y algunas aplicaciones necesarias), finalmente quedó BUENÍSIMA y aprendí sobre como hacer OpenGL con Haskell (dos de las cosas más divertidas que tiene computación juntas, jajaja). Muchos asistentes no tenían experiencia en Haskell o OpenGL, pero aún pudieron aprovechar la mesa y todavía pueden trabajar los detalles más a fondo luego (mi hermano les mandó la presentación a los que la querían).

El Miércoles tuve mi propia ponencia en las JOINCIC y me divertí muchísimo dándola. Para empezar, que privilegio y que magnífico el poder pararme en pleno Aula Magna para dar una charla. El sentimiento no tiene comparación (y como orgulloso USBista, debo confesar que no existe auditorio más épico y magistral que el gran Aula Magna de la UCV). No puedo estar seguro de como salió, pero recibí muchísimos comentarios positivos y halagos, lo cual me hace sentir que algo se logró, jejej.

Aquí está la presentación que usé para la charla:

El Jueves volví a la USB para dar revisión del parcial y lo cómico es que la gente pasaba era a darme las gracias. Estoy seguro que no sólo por la nota que sacaron, sino por que sienten que se la merecen realmente. ¡Este tipo de cosas me llena muchísimo! Luego tuve la oportunidad de ir a ver la obra de la agrupación Contratexto: "Hamlor, No es Hamlet, Es Hamlor", la cual estuvo EXCELENTE. ¡Me reí muchísimo! De verdad valió la pena. Esos panas nunca defraudan. :)

El Viernes decidí ir a las JOINCIC para ver las charlas del día. Las de la mañana estuvieron todas buenísimas (y ni se diga el acto cultural, jajaja.) Luego fui invitado a compartir con los organizadores de las JOINCIC en una reunión para celebrar que se había culminado el evento. A muchos ya los conocía, pero también tuve el gusto de conocer a muchos otros más. La rumba estuvo buena, pero lo que más me gustaba de todo era que no se notaban nichos de personas donde cada universidad estaba por su lado. Claro, uno que otro grupo había así, pero la mayoría era una mezcla de muchas universidades disfrutando y celebrando juntos. ¡Ojala siempre fuera así! Yo me siento orgulloso de conocer a tantas excelentes personas de tantos excelentes lugares.

El fin de semana ha sido relajado, trabajando un poco para compensar los días de escape. Sin embargo una cosa genial es que ahora tengo un colchón nuevo en mi cama. ¡Y cómo hacía falta! El colchón viejo ya hasta tenía los resortes salidos, jajaja. De ayer para hoy dormí como un bebé total. XD

Y bueno, esto era lo que quería compartir por ahora. Una semana entera llena de orgullo, felicidad y buenas vibras. ¡Gracias por todo a todos los que la hicieron posible! Será hasta una próxima entrada.