Cosas que Hacer en Vacaciones

Quizás algunos de nuestros lectores comiencen hoy unos días de descanso (no aquí en Estados Unidos, en la mayoría de los sitios de esta parte del océano la semana que viene es una semana normal de trabajo) y tengan tiempo de aprender cosas nuevas. Por ello, aquí van unas recomendaciones con el que ocupar el tiempo para aquellos que emplemos los ordenadores en economía con más frecuencia:

1) Aprender Julia. Acaba de salir el primer libro específico sobre este lenguaje.

2) Comparar Julia con otros lenguajes de nueva generación. Aquí una breve introducción. Personalmente me ha llamado la atención lo interesante que es Elixir, sobre todo para metaprogramación. Hace un par de semanas perdí (o gané, según uno lo mire), una tarde de domingo programando ejercicios sobre este tema.

3) Percatarse que el futuro es funcional: aquí y aquí. Una vez que uno empieza a pensar en términos de funciones anónimas es difícil volver a pensar de ninguna otra manera. Además, los problemas de concurrencia con los que Juan Rubio y yo constantemente nos encontramos al implementar monte carlos secuenciales en paradigmas imperativos/objeto-orientados claramente indican que este es el camino del futuro.

4) Actualizar nuestros conocimientos de C++. C++14 es realmente divertido (expresiones lambda, auto-especificaciones y semánticas de movimiento). A mis estudiantes de macro computacional del otoño que viene les va a caer algo de esto en clase seguro. Este libro me ha parecido que estaba muy bien como introducción a muchas de estas cosas. Espero con interés este otro.

Postdata: Un amigo me reprocha no haber citado el último libro de Alexander Stepanov (el diseñador principal de la STL) sobre programación genérica. Tiene toda la razón del mundo. Otro gran libro para leer.

Hay 19 comentarios
  • ¿Hasta qué punto es la velocidad de proceso, hoy en día, un obstáculo para la investigación de macro?

    • Un obstaculo de primeriso orden!!!!!! La mitad de los modelos que escribo son imposibles de computar incluso con paralelizacion masiva. Un modelo interesante con, por ejemplo, heterogeneidad individual tiene decenas de variables de estado. Una solucion no lineal del mismo es casi imposible incluso con las mejores maquinas existentes, paralelizacion muy agresiva y C++ altamente optimizado.

      Buena parte de mi investigacion profesional (escribir en el blog no deja de ser un hobby) es sobre este tema y la velocidad de proceso es mi enemigo numero uno.

      • Y esos modelos tienen que correr en tiempo real?
        Si no, porqué no usar modelos de computación distribuida (tipo MapReduce, etc.)? Basta con poner a trabajar algunos servidores (por ejemplo con Hadoop, o en amazon, aunque este es un poco caro) y listos.

        Estoy ojeando el paper muy por encima y me parece curioso que se usen cosas en economía como el filtro de partículas (que yo conozco por su uso en robótica). Parece que la separación entre disciplinas es cada vez más difusa 🙂

        • Normalmente no los corremos en tiempo real. Pero incluso empleando programacion en paralelo muy agresiva (con decenas de procesadores, ya sea en AWS o en un servidor dedicado), muchos de mis modelos pueden tardar varias semanas en ejecutarse. Esto dificulta muchisimo la investigacion.

          Por ejemplo, en el filtro de particulas, voy a necesitar solucionar las PDEs que me generan la representacion en el espacio de estados para cada valor de los parametros del modelo. Estas PDEs puden tener, facilmente, 24 o 28 dimensiones. Y luego filtrar con 28 estados los datos y construir la verosimilitud.

          Como ademas quiero repetir este proceso para muchisimos valores de los parametros (por ejemplo porque estoy caracterizadon la posteriori de los mismos con una cadena de Markov por Monte Carlo -MCMC-), termino teniendo que solucionar el problema facilmente 50000 veces. Y aun peor, como los MCMC no son facilmente paralelizables por su naturaleza secuencial (algo se puede hacer, pero no muchisimo), tienes un cuello de botella gravisimo.

          Ahora tengo un proyecto, por ejemplo, con un grupo de gente en Princeton que son expertos mundiales en solucion de problemas en altisimas dimensiones y tenemos a 1 postdoc y 3 estudiantes de doctorado casi a tiempo completo con la progamacion del tema. Los tipos programan como los angeles (no son de economia, son ingenieros) y aun asi no conseguimos correr las cosas en un tiempo razonable.

          Si, las disciplinas son muy similares 🙂 Por eso tenemos a tantos Ingenieros industriales o de teleco en primero de doctorado.

  • Hola Jesus!

    Tu crees que todavía es útil aprender bien fortran? Me lo han aconsejado mucho y yo mismo he computado modelos macro con heterogeneidad individual que tardaban toda la noche en matlab y ni una hora en fortran, pero cada vez que hablo de fortran con amigos de computational science me rien de mi!

    • Yo en mi clase de computacion no aconsejo aprender Fortran. Mientras que es verdad que las versiones mas recientes (Fotran 2008) suple algunas de las carencias mas graves del lenguaje y que este tiene la ventaja de ser relativamente sencillo de aprender, uno pronto se encuentra con las limitaciones graves del mismo (objetos poco poderosos, ninguna implementacion funcional, ...) y programar con el en GPUs es mas complicado que con C++.

      Es por ello que a mis estudiantes mas diligentes les recomiendo C++2014.

      En todo caso, ser pragmatico es fundamental, y si una herramienta (en este caso Fortran) cumple con la mision para la que la necesitas, no es obvio que la quieras cambiar. Una decisicion ex ante (cuando uno no sabe nada) y ex post (cuando uno ya sabe algo) es muy distinta 🙂

  • En cuanto al Julia, ¿que usas para escribirlo?

    Había probado a Julia dos veces, el primero con ijulia notebooks, el segundo con (el ya muerto) Julia Studio. Me gusta Julia en sí, pero no lo voy a adoptar en el día a día hasta que tenga una buena IDE (una cúal da información acertada sobre errores para debugging).

      • ijulia me gusta mucho para escribir codigos de 50 a 100 lineas. Para 500 o 1000 lineas en mí experiencia no es muy conveniente.

        Hace 6 meses que miré a Julia, así que volveré en 6 más. Por lo visto cada año (de los últimos dós) ha mejorado mucho así que creo que con un o dós más ya va a estar bien para el día en día.

        ¿Que opinas de quant-econ.net de Sargent and Stachurski?

        • Sargent es coautor y Stachurski un amigo, asi que no soy muy objetivo si lo aprecio mucho 🙂

          Ya me contaras las experiencias con Julia en unos meses

  • En desarrollo de software lo que se está demostrando a lo largo de la historia es que ningún paradigma sustituye completamente a otro, sino que se van complementando unos con otros.
    La programación funcional puede ser la elección más adecuada para cierto tipo de software, pero no para todos. No me veo haciendo una aplicación de gestión con programación funcional como base principal, sino como apoyo en tareas concretas. De hecho ya lo hago con Java 8.

    • Gracias por tus comentarios. Los libros que recomiendo tienen un poco el mismo mensaje que tu comentario: no es cuestion de hacerse "taliban" de la programacion funcional, solo darse cuenta que es muy util en ciertas ocasiones. Eso es, ademas, por lo que hable de C++2014 (que es quizas el caso mas claro de lenguaje multiparadigma; se puede escribir con el desde cosas "Fotranish" hasta cosas casi puramente funcionales) mas que de un lenguaje 100% funcional como Haskell o incluso Clojure.

      En economia, en particular, es francamente util porque permite que la coincidencia entre las matematicas del problema y la estructura del codigo sea muy alta, lo cual facilita muchisimo el desarrollo y debugging.

  • Hola. Hay un curso clásico del MIT sobre programación en general y funcional en particular (Structure and Interpretation of Computer Programs) que es altamente recomendable. Utilizan un lenguaje de programació (Lisp/Scheme) que a simple vista parece poco convencional. Lisp por si mismo quizás no es un lenguaje extremadamente útil, excepto si eres usuario de Emacs, pero los conceptos que hay detrás sí son útiles a la hora de programar, y por otro lado Lisp tiende a aparecer en los lugares más insospechados. Por ejemplo, lenguajes como Julia o R en realidad no son más que dialectos de Lisp.

  • Lambda, the ultimate.

    La diversidad de intereses y profundidad de conocimientos del porf. Fernández-Villaverde sigue admirándome -y dándome envidia.

    • Gracias por el piropo 🙂 Pero tampoco tiene mucho secreto. Esto es lo que hago en el dia a dia. Mi clases en el doctorado de Penn son de computacion en economia, asi que en realidad no he hecho otra cosa que copiar una lista de cosas que le di a los estudiantes.

    • Gracias. Pero en economia hay muchos que hacemos computacion 🙂 Tampoco tiene mucho secreto.

      No le doy mucha importancia al articulo. Periodicamente salen este tipo de cosas y nunca llegan a ningun sitio. Sinceramente, de tratar con otras areas de conocimiento en la universidad (en EEUU hay mucha mas interactuacion al no existir "facultados", todos los departamentos de ciencias y letras dependen directamente de la "School of Arts and Sciences") y comparnos con ellos, me quedo muy tranquilo sobre el estado de la economia.

Los comentarios están cerrados.