sábado, 5 de julio de 2014

Electiva Hipotética: Introducción a la Programación Competitiva

Actualmente mucho departamentos de la USB han sufrido una fuga importante de personal docente, lo que ha supuesto una reducción significativa en la cantidad de cursos electivos que se ofrecen. ¿Por que? Las cargas docentes de los profesores restantes se cubren en materias obligatoria y básicas. Aún así, es cada vez más difícil cubrir todas las necesidades docentes en estas materias. Esto supone un buen grado de frustración a los profesores, ya que no les es posible dictar cursos en sus diferentes áreas de especialización y tener acceso a estudiantes interesados en dichas áreas para futura investigación y proyectos de grado.

En mi caso, tengo la fortuna de que mi principal área de especialización (lenguajes de programación) tiene tres materias obligatorias en el pensum de Ingeniería de la Computación en la USB:

  • Lenguajes de Programación I.
  • Laboratorio de Lenguajes de Programación.
  • Traductores e Interpretadores.

Por lo tanto, suelo estar asignado al menos a una de ellas por trimestre. ¡Son asignaturas que me encantan! Pero como todo, puede volverse monótono. En el caso de traductores, la he dado ya 2 veces como preparador, 3 veces como ayudante docente y 3 veces como profesor (con miras a una más, el trimestre que viene). Sería interesante poder trabajar algunas de las otras áreas que me interesan e incluso comenzar a investigar nuevas áreas. Con esto en mente, comenzaré una serie de artículos en este blog con "electivas hipotéticas". Esto es, con materias electivas que podrían comenzar a abrirse algún día cuando la USB vuelva a su antigua grandeza y haya mayor libertad para ser creativo.

Mundial ACM-ICPC 2010 en Harbin, China.
(Aquí participó un equipo de la USB)

De estas electivas hipotéticas plantearé un contenido y un plan de evaluación tentativos, de los cuales me encantaría tener feedback. ¿Quién sabe? Quizá se pueda abrir alguna de estas en un futuro no tan lejano (soñar no cuesta nada, jajaja). A continuación entonces, la primera de la serie de electivas hipotéticas.

Asignatura: Introducción a la Programación Competitiva
Créditos: 4 
Objetivo principal: Familiarizar al estudiante con las destrezas técnicas necesarias para participar en competencias de programación al estilo ACM-ICPC. 
Contenido:
  • Semana 1: Introducción a las competencias de programación, sus herramientas y reglas. Medición general del nivel de los estudiantes previo al curso. Dinámica individual y grupal.
  • Semana 2: Problemas ad-hoc: Saber interpretar bien un enunciado, la especificación de entradas y salidas, restricciones de las mismas y tiempos límite.
  • Semana 3: Algoritmos voraces (greedy): ¿Como reconocerlos? Los peligros de confiar en una solución voraz. Criba de Eratóstenes. Búsqueda binaria. Potenciación logarítmica y Fibonacci.
  • Semana 4: Programación dinámica (básica): Los peligros de la fuerza bruta. Principio de optimalidad de Bellman. Top-Down vs. Bottom-Up.
  • Semana 5: Programación dinámica (avanzada): Inicialización virtual. Máscaras de bits.
  • Semana 6: 1ra competencia y discusión.
  • Semana 7: Grafos (básico): Búsqueda en grafos. Flood fill. Árboles cobertores. Componentes conexas.
  • Semana 8: Grafos (avanzado): Máximo flujo, mínimo corte y apareamiento bipartito.
  • Semana 9: Cadenas de caracteres: Suffix trees. Tries. KMP. Expresiones regulares.
  • Semana 10: Consultas en árboles. Segment trees. BIT. RMQ. LCA.
  • Semana 11: Algoritmos aproximados y heurísticas. Primalidad. Coloración de Grafos. Geometría y probabilidades.
  • Semana 12: 2da competencia y discusión.  
Evaluación:
  • 10 Tareas - 5% cada una, para un total de 50%.
  • 1ra Competencia - 20%.
  • 2da Competencia - 30%.
(Nota: Las competencias no se evaluarán por posición alcanzada, sino por la aplicación de los conocimientos adquiridos a los problemas presentados y dinámica de equipo. Sin embargo, habrán puntos adicionales para los ganadores de cada una.)

Y esto concluye la descripción de la primera electiva hipotética. Estoy seguro que me faltaron cosas por incluir, así que cualquier comentario es bienvenido. Hasta una próxima entrada. :D

viernes, 4 de julio de 2014

¡Se acabó el trimestre/semestre!

Finalmente, ha llegado el final de la semana 13 (o 21, si se cuenta desde el principio en Febrero). Ha sido un trimestre difícil en la USB, envuelto en una situación nada fácil para Venezuela, desde muchos puntos de vista. Sin embargo, poco a poco y con el mayor esfuerzo logramos dar buen final a este período académico.

Bueno, ni tanto... Pero más o menos. XD

Este trimestre estuve en dos cursos. En primer lugar, tuve a mi cargo un total de 61 estudiantes en la teoría de Lenguajes de Programación I. ¡Muy buen grupo! Dispuestos a aprender y trabajar. El primer parcial vio muy buenos resultados y el segundo fue un éxito sin precedentes (aún me siento orgulloso por el excelente desempeño de todos). El tercer parcial tuvo resultados no tan alentadores, lo cual debo admitir que supuso una gran frustración para mi. Después de todo, si todo un grupo sale mal es culpa del profesor, no del grupo. Pero varias personas me han convencido de que la situación de cansancio, de que estamos en pleno mundial de fútbol y de la falta de práctica de los temas que correspondían al laboratorio (que algunos tienen incluso años sin ver) fueron los principales motivos del empeoramiento de los resultados. Finalmente, casi un 80% del salón aprobó la materia y sin una pizca de regalo. ¡Todos se lo merecen y me siento sumamente orgulloso por eso!

Notas definitivas: Notas.pdf

El segundo curso en el que estuve fue en un Miniproyecto de Desarrollo de Software, en el que junto a Leonid Tineo, Rosseline Rodriguez, Soraya Carrasquel y David Coronado, servimos de guías y evaluadores a un grupo de tres estudiantes que desarrollaron una extensión de PostgreSQL para tratar con datos difusos de tipo 3 (así como consultas con ORDER BY y GROUP BY sobre los mismos). ¡Excelente trabajo y merecido 5 para todos!

En fin, fue un trimestre laaaargo y difícil, pero con excelentes resultados. Esto únicamente desde el punto de vista docente, que se agrega a otros eventos académicos importantes. Como... no sé... que me gradúo... por ejemplo. XD Eso y muchas otras cosas más.

Al finalizar el curso de lenguajes, decidí hacer una encuesta para ver como mejorar la experiencia del curso para futuras ocasiones. A continuación lo que mandé en el correo:

Hola a todos, 
   Ya se encuentran disponibles en la página las notas definitivas, con revisión y rezagados incluídos. Las notas que aparecen ahí ya fueron pasadas a DACE y... ¡con esto concluye oficialmente el curso de Lenguajes de Programación I! 
   Ante todo quiero agradecerles a todos por el empeño que pusieron en aprender y asimilar esta materia. No es una materia fácil y eso creo que ya nos consta bastante a todos, jejeje. Además el trimestre/semestre tampoco fue el más cómodo para cursarla, pero finalmente pudimos darle buen final. ¡Todo gracias a ustedes! Incluso para algunos de ustedes que no lograron aprobar, el empeño que pusieron y el conocimiento que adquirieron les servirá muchísimo para una próxima vez (incluso yo mismo reprobé lenguajes la primera vez que la vi. XD). Sigan todos así, con la iniciativa, curiosidad y empeño que mostraron este trimestre y les espera nada menos que la grandeza en sus futuras vidas profesionales. :) 
   También quería disculparme por todas las cosas malas que pudiera haber tenido el curso, asegurándoles que yo también aprendí mucho este trimestre y me gustaría seguir aprendiendo. Por esto, me gustaría pedirles en la medida de lo posible que me respondan a este correo las siguientes preguntas: 
   1) ¿Cuál fue tu impresión general de la materia?
   2) ¿Qué fue lo que se te hizo más dificil?
   3) ¿Qué cosas te ayudaron a aprender/avanzar con el material?
   4) ¿Qué cosas sientes que falten y que podrían haber ayudado a entender mejor la materia?
   5) ¿Qué recomendaciones tienes para una próxima vez que se abra la materia? 
   Es algo como una encuesta de opinión (pero más útil, jajaja). La idea es tomar sus recomendaciones y adaptar el curso como sea necesario para asegurar que los futuros estudiantes aprovechen la materia y puedan aprender más e incluso salir mejor. :) 
   Por ùltimo, me toca hacer publicidad. Muchos de los que están viendo la materia ya vieron Traductores. Para los que no, en traductores se muestra un lado más técnico de los lenguajes, concentrándose más que todo en la implementación de los mismos. La teoría de la materia presenta los conceptos y algoritmos abstractos que fundamentan todo esto, finalizando con el estudio formal de la computación misma. En este curso, el laboratorio trata de implementar un lenguaje de programación relativamente sencillo (usualmente un interprete). Seguido de Traductores y Lenguajes, lo que continúa es la Cadena de Lenguajes de Programación. En esta cadena unimos las interpretaciones de Lenguajes de Programación I y Traductores. ¡Les toca diseñar su propio lenguaje! Para implementarlo hace falta traductores, pero para diseñarlo bien hace falta lenguajes. Es una cadena sumamente interesante y donde se aprenden muchas técnicas que son útiles incluso más allá de la implementación de lenguajes. Si les gustó este curso y más aún, si les gustó/gustará traductores, les recomiendo muchísimo esa cadena. Mitos urbanos: ¿Es muy dificil? Realmente no tanto, hay cadenas más dificiles. ¿Lleva mucho trabajo? OHHHHH SI!!! XD Es el proyecto más grande y complejo que harán en la uni y posiblemente afuera de ella también, pero vale muchísimo la pena. :) 
   Con esto me despido, totalmente agradecido por compartir con ustedes esta experiencia y quedando totalmente a la orden (ya sea que quieran sólamente pasar a discutir algun tema interesante o incluso si buscan talleres de desarrollo o tesis en lenguajes de programación). *come to the dark side, we have cookies* :D 
Saludos a todos y felices vacaciones,
Ricardo
Recibí algunas respuestas sobre la encuesta (algunas hasta graciosas) que confluían en que lo que más ayudó fue las guías que se hicieron y las consultas. Las recomendaciones se centraron en hacer más guías para algunos de los otros temas que son difíciles de entender (como tipos de pasaje de parámetros, mezclado con orientación a objetos) e intentar de alguna forma compensar la falta de práctica de quienes vieron el lab hace tiempo (si bien sea insistiendo en que vuelvan a entrar o al menos practiquen con tiempo). ¡Gracias a todos los que me ayudaron son sus comentarios! Tomaré en cuenta sus consejos e intentaré hacerlo aún mejor una próxima ocasión que pueda dar la materia.

Y esto era lo que quería compartir por ahora. ¡Será hasta una próxima entrada! :D

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.

domingo, 25 de mayo de 2014

Más allá de unas guías

Desde que defendí la tesis mucha gente me ha preguntado lo que se siente no tener nada que hacer y lo realmente curioso, es que no lo sé. He tenido un montón de trabajo con el cual ponerme al día y nuevos compromisos por doquier para seguir avanzando y creciendo académicamente. Algunos me han preguntado cual es el plan y siempre respondo lo mismo "sentir que soy libre por un tiempo", lo cual muchos entienden completamente pero también genera todo tipo de confusiones. Muchos me presionan para que continúe con un doctorado, otros para que publique todo lo que he hecho y otros para que deje ya todo y me vaya del país.

Much Guías, So Tarea, Very Bibliografía, Many LDC, WOW!

Pero cualquier decisión es una difícil y una para la cual quiero estar calmado y descansado al tomarla. Mi mayor pasión en este mundo es la docencia. Nada me llena el alma como dar clase y ayudar a las personas a aprender y crecer. Esto fue lo que me atrajo de ser profesor en primer lugar, más aún habiendo sido preparador sempiterno y ayudante académico mientras pude. La mayoría de mis colegas profesores están en la universidad pues les apasiona investigar, descubrir y crear. El dar clases es una carga más, que pueden realizar muy bien pero que no es su pasión. Mi caso es justamente lo contrario. Mi pasión es dar clase y aunque también pueda disfrutar de investigar, no es lo que más me motiva.

Este trimestre estoy impartiendo el curso de Lenguajes de Programación I y tengo asignados 61 estudiantes. Esta es una de las materias más pesadas y más importantes de la carrera de Ingeniería de la Computación. Y es una que suele costar mucho a la gran mayoría de las personas. ¿Pero por qué cuesta tanto? Es mi creencia que es 50% miedo y 50% falta de buen material de apoyo. El libro del curso: "Programming Languages Pragmatics" de Michael Scott, es un excelente libro y dice casi todo lo que debe saberse en un curso como éste. Sin embargo, también es cierto que el libro está escrito en un inglés muy técnico que puede hacer su lectura pesada e incluso insoportable para quien no está acostumbrado.

Por lo tanto, decidí desde hace un tiempo crear una serie de guías cortas complementarias al libro con información útil sobre la forma en la que se espera que se enfrenten los problemas en la materia. Comencé por una guía de Diagramas de T y Bootstrapping (Algo que el Scott no maneja de la misma manera) y seguí con guías sobre Alcance y Asociaciones, Iteradores y Recursión de Cola. Las primeras dos guías cubrieron materia del primer parcial y debo decir que los resultados obtenidos en las preguntas relacionadas fueron totalmente inspiradoras. No puedo estar seguro de que haya sido por las guías el éxito del salón, pero armado del beneficio de la duda continúo creándolas, ayudando en lo que pueda a que sigan saliendo lo mejor posible.

Claro, no es la primera vez que hago guías para una materia. Por ejemplo, del Laboratorio de Algoritmos I tengo guías para Subrutinas y Recursión; de Traductores e Interpretadores tengo guías para Derivadas, Minimización de Autómatas y Máquinas de Turing; y muchas pequeñas guías más, regadas en diversas materias. Y entonces la gente me pregunta: ¿Si tienes tanto que hacer, para qué pierdes el tiempo haciendo estas guías? Y la respuesta es sencilla: porque no es perder el tiempo, sino invertirlo. Es una inversión que se traduce en personas que han aprendido y pueden mostrarlo. La inversión que se convierte en la satisfacción de saber que tuviste un poco que ver en ese crecimiento. Además, es una inversión que supera la barrera del tiempo. Este material podrá ser utilizado por quien quiera y pueda en muchas futuras iteraciones del curso.

Y por supuesto, no sólo las guías. Es mi creencia personal que examen que se haga debe ser publicado con sus respuestas y con explicaciones detalladas de las mismas. Esto es un trabajo enorme realmente y más aún, imposibilita la reutilización de preguntas en exámenes posteriores. Pero éstos son argumentos de comodidad del profesor, no de aprendizaje de los alumnos. Creo que tener una guía sobre lo que se va a evaluar los ayuda a tener una visión más clara de a que prestar atención al estudiar y en consecuencia salen mejor y con un conocimiento dirigido más sólido.

Y bueno, esto era lo que quería compartir por ahora. Realmente me apasiona muchísimo lo que hago, aunque a veces me reste mucho tiempo de mis demás responsabilidades, jeje. Hasta una próxima entrada. :)