sábado, 6 de abril de 2019

¿Sueñan los androides con ovejas eléctricas?


El libro de “¿Sueñan los androides con ovejas eléctricas?” de Philip K. Dick me pareció bastante divertido de leer. La trama es bastante completa, hay momentos donde me quedé muy clavado leyendo y, aunque las lecturas semanales contemplaban un límite de capítulos por leer, a veces leía de más porque no podía quedarme con la duda. La idea, aunque ya un poco vieja, de los androides que pueden simular ser humanos hasta un cierto punto, me pareció intrigante desde el inicio del libro. Porque personalmente tengo interés en inteligencia artificial y me parece que la forma en que se aborda este tema en el libro va muy de la mano con los objetivos de la inteligencia artificial, la prueba de Turing, etc.
Una de las cosas más interesantes, a mi punto de vista, fue la caja empática junto con el Mercer. No terminé bien de comprender cómo se supone que funcionaba el compartir tu alegría con otros que pasaban por situaciones complicadas, cómo esto se relacionaba con el hombre subiendo la colina, pero, sobre todo, cómo era posible que recibieran daño físico de las piedras de la grabación si era precisamente eso, una grabación. Creo que podría darle una segunda leída al libro porque probablemente se me escaparon detalles que hicieron que me confundiera. En cuanto a los botones que te permitían inducirte un estado de ánimo desde la alegría inconmensurable hasta la más dura depresión, me pareció un tema muy interesante y me pregunto si alguna vez eso existirá en la realidad. Sería un invento completamente innovador, aunque dejaría sin trabajo a los psicólogos.
Sin embargo, he de admitir que esperaba un final un poco más intenso. Personalmente, el final que Dick le dio a su obra no me gustó porque creo que tenía potencial para más, esperaba alguna lucha con más androides, que él resultara ser un androide al final de todo, que sucediera algo con Rachel Rosen por el asesinato de su oveja, pero no.

sábado, 16 de marzo de 2019

Teaching Concurrency with Erlang


Erlang como lenguaje de programación me ha demostrado ser una cosa completamente maravillosa. Desde la primera vez que tuvimos el acercamiento en la clase de programación concurrente y paralela me di cuenta de que es un lenguaje con el total potencial para aprovechar los núcleos de un procesador para optimizar los tiempos de ejecución de casi cualquier sistema. Obviamente, y como lo dice el artículo, tiene sus ventajas y desventajas pues, hasta donde he podido notar, en los sistemas de cómputo no hay una bala de plata para nada, siempre existen distintas formas de alcanzar el mismo objetivo. Dicho esto, puedo asegurar que, aunque existen otros lenguajes de programación que permiten el cómputo paralelo y concurrente, Erlang ha demostrado ser de mayor facilidad y mejor aprovechamiento de los recursos que otros como C# o Java.
 
  Si bien es cierto que conocer otros lenguajes de programación nos permite tener más herramientas para seleccionar el más adecuado para determinada situación, creo que Erlang se acomoda bastante bien para un sin número de aplicaciones. Lo importante es conocer sus ventajas y desventajas, así como practicarlo lo suficiente para extraer su máximo potencial. He tenido la oportunidad de cursar la materia con el profesor Ariel y me parece que los ejercicios que nos ha dejado son lo suficientemente retadores para que aprendamos del potencial de Erlang y nos demos una idea de hasta dónde puede llegar. Pero para esto tenemos que tener bien claras las limitaciones del lenguaje, así como los conceptos de concurrencia, paralelismo y (aunque aún no hemos tenido oportunidad de utilizarlo) sistemas distribuidos.
 
  Finalmente quiero agregar que podría ser de mucha utilizar relacionar un poco más el lenguaje con aplicaciones más reales, adicionales a los ejercicios retadores que propone el profesor, de forma que podamos tener de primera mano la experiencia de utilizar este lenguaje para solucionar un problema real que nos permita verlo como algo funcional.

sábado, 9 de marzo de 2019

Joe Armstrong on Erlang


Una vez leídos los capítulos 1 a 4 del libro de Joe Armstrong pude entender, en su mayoría, cómo funciona el lenguaje Erlang, pero en su podcast hace algunas afirmaciones que me dejan intrigado. Una de las cualidades más relevantes del sistema es la concurrencia manejada por el mismo lenguaje de programación, pero no por el sistema operativo, esto se lleva a cabo a partir de una implementación del System Runtime muy pesada y completa. Básicamente el sistema operativo se encarga de manejar archivos y sockets, pero todos los procesos que se crean y el manejo de mensajes de un proceso a otro lo hace el mismo sistema.

   Es interesante que a Joe y su equipo de trabajo se les ocurriera hacer el sistema utilizando la visión que tienen del mundo concurrente, sabiendo que las tareas que realizamos en el día a día son concurrentes y no secuenciales. Se dedicaron a definir los procesos como objetos y manejar la transmisión de información a través de mensajes, de la misma forma en que se hace en el mundo real. Esto les permitió eliminar los problemas de deadlocks, starvation, race condition y el acceso a memoria, porque ya no existe la memoria compartida en este lenguaje de programación, en su lugar de utiliza información inmutable. Todas las variables son declaradas una sola vez y no pueden cambiar su valor, lo que permite que sea más fácil manejar la información entre procesos.

   Ahora bien, la simplicidad con la que se desarrolló el sistema utilizando como base que los programadores saben lo que están haciendo, me impresionó. Saber que solamente hay que programar el happy path y que el programa automáticamente funcionará de manera concurrente me parece maravilloso. Nos facilita el trabajo a los programadores para hacer uso de los nuevos procesadores que salen ya con multinúcleo. Aprovechamos estas herramientas para crear código más entendible, más corto, más funcional, más eficiente y que requiere menos tiempo y esfuerzo.

martes, 26 de febrero de 2019

El código enigma


El código enigma aborda muchos temas de relevancia, algunos relacionados con los sistemas computacionales, otros con derechos humanos, igualdad de género e inclusión. A mi punto de vista es una película que deja ver la realidad de la naturaleza humana y nos permite tener una comparación del ahora con el antes sobre cada uno de estos aspectos.

  Primero, relacionado con los sistemas de cómputo, me parece que la máquina de Turing es importante por ser uno de los primeros modelos de cómputo diseñados. Creo que el nivel de abstracción y la inteligencia de Alan Turing le permitieron diseñarla, pero tan sólo tener la idea de que algo como eso era posible me parece impresionante.

  Segundo, la igualdad de género ha sido un tema que genera polémica desde hace ya varios años. En la película podemos ver cómo las mujeres tienen tareas designadas en las que no requieren hacer algo que requiera ingenio, son actividades más mecánicas y simples. Incluso, cuando Joan Clarke llega a hacer el examen para incorporarse al proyecto se puede ver cómo, por ser mujer, asumen que es simplemente una secretaria e incluso la consideran incapaz de haber resuelto el crucigrama que se presentó en el periódico. Lo que me llamó mucho la atención y me gustó fue que Alan no pensó dos veces en tratarla como una igual; sin embargo, creo que la razón por la que lo hizo está relacionada con su homosexualidad. Este es otro de los temas relevantes de la película para mí.

  La homosexualidad de Alan Turing fue suficiente para que, a pesar de sus aportes para detener la segunda guerra mundial, su intelecto superior, sus aportaciones a la computación, entre otras cosas, le fuera despojada su dignidad. La lucha por los derechos humanos y en específico los derechos de la comunidad LGBTTTIQ+ se ha llevado a cabo desde hace ya varios años, pero el mundo ha vivido acostumbrado a ver las diferencias como símbolo de lo antinatural en lugar de un símbolo de diversidad. Incluso hoy, que existe una mayor apertura y protección hacia la comunidad, se siguen hablando de crímenes de odio hacia ese colectivo, existen personas que usan la religión para atacarlo e incluso el gobierno les tiene prohibidos algunos derechos como lo es el matrimonio igualitario. Considero que Alan Turing es uno de varios ejemplos de que la homosexualidad no es una limitante para nadie, es simplemente una característica más de una persona y no define de lo que es capaz. Indirectamente ha sido un promotor de la lucha por la igualdad.

jueves, 21 de febrero de 2019

The State of Parallel Programming


Nuevamente nos encontramos con el conflicto del avance tecnológico que está dejando detrás las habilidades de quienes trabajamos con estas tecnologías. Es importante recalcar que se vuelve inútil que la tecnología avance tanto si las personas que la utilizan no saben hacerlo para aprovechar su potencial al máximo, que es justo lo que está sucediendo con la creación de procesadores multinúcleo. Hoy existe un rezago educativo tremendo en tema de programación paralela, lo puedo decir desde mi perspectiva como estudiante de ISC que siempre se me enseñó a programar de forma secuencial y de vez en cuando, como una herramienta semi-útil, me decían que podía usar múltiples hilos de ejecución, pero no se le daba la importancia que merecía. En mi octavo semestre de la carrera, a menos de 1 año de titularme, es cuando por fin me entero de que la programación paralela es tan importante y apenas empiezo a especializarme en ella. Un poco tarde, a mi parecer.

  Ahora bien, tal y como lo menciona el artículo, no solamente la educación es un problema sino las herramientas que nos permiten generar código paralelo con menos errores y más eficiencia. Desde que aprendimos a programar, al menos en mi generación, hicimos uso de herramientas IDE’s que nos facilitaban acceder a librerías, paquetes, clases, métodos, funciones y muchas otras herramientas de un lenguaje en particular para facilitarnos la escritura del código y que nosotros sólo nos enfocáramos en que el algoritmo se ejecutara de manera correcta. Esto es prueba de que las herramientas permiten que se escriba código mejor estructurado, con menos errores y mayor eficiencia. Entonces, ¿por qué no utilizamos herramientas para generar cómputo paralelo también?, pues porque no es tan sencillo desarrollar estas herramientas.

  Yo creo que una gran parte de los programadores deberíamos poner atención en esta nueva oportunidad que se presenta, de trabajar en herramientas o lenguajes de programación nuevos que nos permitan aprovechar el hardware al 100% y generar aplicaciones más eficientes, sin errores de concurrencia y que, además, no requieran esfuerzo innecesario con trivialidades como mantener la consistencia en la información o el acceso a los datos.

sábado, 16 de febrero de 2019

Welcome to the Jungle


Hemos visto desde hace ya varios años que el crecimiento del poder de procesamiento de las computadoras es exponencial, siempre atendiendo a la Ley de Moore; sin embargo, también es claro desde ya bastante tiempo que esta ley no continuaría siendo vigente por mucho más y tendríamos que buscar una forma diferente de seguir aumentando esta capacidad de procesamiento. La solución la encontramos en el procesamiento multinúcleo y la programación paralela.

  Un punto importante que se aborda en este artículo son los núcleos heterogéneos y la elasticidad del cómputo en la nube. Si bien es cierto que los procesadores llegarán a un número “máximo” de transistores debido a las limitaciones físicas de espacio y tamaño, no es lo único que se puede explotar para seguir aumentando las capacidades de las computadoras. Esta especialización de núcleos para escenarios y tareas específicas permitirá que los programadores diseñemos aplicaciones enfocadas en explotar esta infraestructura y, a su vez, generará nuevas metodologías de desarrollo y nuevas oportunidades tecnológicas.

  Finalmente, es de suma importancia considerar, para efectos de adquisición de tecnología, el impacto que tendrán estos nuevos dispositivos y sus capacidades. Digamos que, como lo menciona el autor en su artículo, llega un punto en que los dispositivos móviles tienen igual o mayor capacidad de procesamiento que las computadoras de escritorio, debería existir un diferenciador bastante grande para optar por una computadora de escritorio que, desde hoy en día, no está siendo una de las mejores opciones debido a sus limitaciones de movilidad. La principal razón por la que hoy se compran equipos de escritorio es precisamente porque los móviles no cumplen con los requisitos para llevar a cabo ciertas tareas, pero cuando puedan hacerlo es posible que estos equipos dejen de ser útiles o, en su defecto, se abra un nuevo nicho de mercado con alguna idea innovadora que los ponga a la altura de los dispositivos móviles.

domingo, 3 de febrero de 2019

Parallel Computing on any Desktop


Como hemos visto desde que empezó el semestre, el paralelismo en el cómputo se ha vuelto algo más que útil, necesario. Esto debido al incremento de potencia que se necesita en las computadoras para resolver los problemas que se presentan hoy en día, y más en específico a la cantidad de información que se tiene que procesar para generar resultados. Hemos visto en los últimos años que las computadoras se han optimizado en cuanto al hardware, vemos procesadores que salen con mayores núcleos físicos y lógicos, con mayor velocidad del reloj, incrementando el caché, etc. Sin embargo, es poco el uso que realmente se le da a esta capacidad de los procesadores debido a que la mayoría de los programas y aplicaciones están escritas en código secuencial y no aprovechan los multinúcleos.

  Creo que las directivas del modelo de programación OpenMP serían bastante útiles para tratar de convertir programas secuenciales en programas que usen multithreading; sin embargo, al menos con la explicación del artículo, no me parece especialmente útil para generar programas muy complejos y que requieran, además del multithreading, utilizar distintos dispositivos para procesamiento. Pues la sincronización de los dispositivos y la memoria a la que se accede corre por cuenta del programador, por lo que el modelo OpenMP no sería de mucha ayuda en estos casos.

  Ahora bien, si bien es cierto que pensar en un paradigma de programación concurrente es bastante más complejo que pensar en uno secuencial, se está volviendo una necesidad para los desarrolladores hoy en día. Por tanto, me parece de suma importancia que desarrollemos esta habilidad haciendo uso de las herramientas que tenemos hoy en día, pero sobre todo tomando en cuenta que en el futuro el multithreading será obligatorio y por tanto deberemos saber aprovecharlo al máximo. Este será un diferenciador en la calidad y rendimiento de las aplicaciones que se desarrollen después, y será un pilar en el desarrollo de los nuevos desarrolladores.

domingo, 27 de enero de 2019

The Free Lunch Is Over


La tecnología avanza a pasos agigantados todo el tiempo, desde que tengo memoria he visto aparecer y desaparecer tecnologías de un momento para otro. He visto mejorar enormemente la eficiencia de aplicaciones, dispositivos y servicios basados en tecnología debido a la innovación constante de las empresas de TI. Pero considero que el cambio más radical que he visto es en procesamiento, cuando era niño me tocó trabajar con computadoras que solo podían hacer una cosa al mismo tiempo o se trababan. Ver un video, abrir una página de internet, ejecutar un juego eran tareas tardadas porque los procesadores no tenían la velocidad suficiente. Después sucedió que los procesadores empezaron a salir con más núcleos, físicos y lógicos, y a mayores velocidades. Cambió totalmente el uso que todos le dábamos a las computadoras, de ser solamente para documentos y oficina se hizo posible hacer edición de video, gaming y streaming. Una locura.

  Me parece que la programación concurrente y paralela es fundamental para las aplicaciones del futuro debido a la capacidad aumentada que se crea cuando se utiliza más de 1 sólo hilo. Y más aún, considerando que la ley de Moore no será válida por mucho tiempo más debido a las limitaciones físicas de la creación de los transistores y los circuitos integrados. Esta programación paralela nos abre a la posibilidad de continuar aumentando la eficiencia, reduciendo el tiempo de respuesta de nuestras aplicaciones aun cuando la velocidad o la memoria caché de los procesadores no siga aumentando al mismo ritmo. El constante avance tecnológico obliga a requerir cada vez más poder para ejecutar ciertas aplicaciones, ya sea en el área de diseño, producción, big data, entre otras. Y considero de vital importancia que los programadores conozcan y fomenten este tipo de programación para aprovechar al máximo sus beneficios.

martes, 15 de enero de 2019

Comentario crítico sobre el documental Silicon Valley


En mi opinión, el tema más importante que abarca el documental es el liderazgo.

  A lo largo de la historia hemos visto grandes empresas nacer debido a innovaciones en diferentes campos. Pero su crecimiento no se debió solamente a su capacidad de generar una idea nueva, sino también a la capacidad de los líderes de coordinar a los equipos de trabajo y enfrentar los retos que se presentan. De tomar las situaciones del entorno e incluso los fracasos como oportunidades de mejora y crecimiento.

  En el documental pudimos ver claramente cómo Robert Noyce, a mi parecer el personaje más importante del documental, tomar la situación política y social actual como una herramienta para lograr los objetivos de la empresa. Tomar las oportunidades que se presentaban a pesar de los grandes retos que implicaban, arriesgándose al fracaso, pero siempre con la mente fija en la meta. Me parece sorprendente y recalcable que, a pesar de los logros que obtuvo, nunca perdió la madera de líder, pues siempre se mostró como un ejemplo a seguir para sus colaboradores y jamás se le subió el éxito a la cabeza.

  Pero el liderazgo no se trata solamente de coordinar equipos y lograr objetivos sino empoderar a nuestros colaboradores y compañeros a superarse, a hacer su labor por convicción. Me pareció interesante cuando, al fundar Intel, decidieron eliminar la jerarquía entre jefes de área, coordinadores y productores para facilitar la comunicación y promover un ambiente más ameno. Lograron que los trabajadores se sintieran conformes con su labor, que se sintieran parte de algo importante y que el trabajo que realizaban día con día estaba provocando un cambio en el mundo.

  Me parece que ver este tipo de documentales nos sirve a nosotros como futuros profesionistas a ver que el liderazgo no es sólo una materia más de relleno en nuestras carreras sino una oportunidad de hacer algo grande y contar con el apoyo de la gente que hará su mejor esfuerzo por el sentido de pertenencia que pueden generar hacia el proyecto. Es una herramienta que puede cambiar el mundo un paso a la vez.

Presentación

Mi nombre es Ethan Bautista, tengo 22 años y estudio Ingeniería en Sistemas Computacionales.

  De la materia de programación concurrente y paralela espero aprender a optimizar las aplicaciones que desarrolle aprovechando al máximo los núcleos de los que dispongo. Me gusta el área de inteligencia artificial, así que considero que podría aplicar las herramientas aprendidas en esta materia a las aplicaciones que desarrolle en este campo.

  Mis hobbies son los videojuegos, la música, la lectura y el baile. Mi videojuego favorito es League of Legends, pero también me gusta World of Warcraft, Diablo III, Left 4 Dead 2 y Overwatch. Mi libro favorito es Momo de Michael Ende. Los bailes que me gustan son salsa, cumbia, bachata, merengue, rock & roll y danzas africanas.