viernes, 5 de abril de 2019

11vo núcleo: ¿Sueñan los androides con ovejas eléctricas?


La novela escrita por Philip K. Dick presenta un mundo post-apocalíptico en el cual todos quieren escapar de algo para llegar a algún lugar mejor. Lo más curioso es que, por cada cosa, lugar o situación de la que alguien (o algo) huye, alguien más quiere conseguirlo. Los humanos huyen de la Tierra para escapar de la posibilidad de ser infértiles o convertirse en un “especial”, mientras que los colonos pareciera que extrañan su hogar y los androides tienen como único objetivo vivir de manera “normal” en la Tierra. Los humanos usan la religión del Mercerismo para huir del mundo real y vivir sin dolor, unidos por el lazo invisible de la empatía. Los androides buscan, a veces de manera inconsciente, esa clase comunidad entre ellos, el poder pertenecer a ese mundo con los demás.

De estos escapes surge una lucha entre dos grupos, los androides y los humanos.  La perspectiva del lector surge a través de varios personajes, todos humanos y teniendo como principal al cazarrecompensas Deckard. Este personaje va cambiando continuamente a lo largo de la historia, primero viendo como simplemente objetos o computadoras a los “andrillos”. Mientras va retirando al grupo de Nexus-6 renegados, se da cuenta de su valor, no sólo como objetos, sino también como entidades. Ellos lo quieren muerto, eso le queda claro, pero aun así siente empatía por cómo parecen sentir miedo, deseo y un sentido de preservación. Al final valora a las criaturas eléctricas y pareciera que los considera vivos, pero diferentes a la vida humana.


Los androides, por su parte, quieren vivir una vida normal. Sin embargo, debido a su intelecto y su alta capacidad de raciocinio, no dudan en hacer lo que sea para mantenerse escondidos, desde matar a otros humanos hasta engañar o entregar a sus compañeros con tal de seguir con “vida”. La culminación de esta misión se refleja con los androides mostrando cierto nivel de odio y alegría quitándoles a los humanos aquellos diferenciadores. La primera se muestra a través de Rachael Rosen, engañando a Deckard para que no tenga el valor de terminar con el grupo y matando a su cabra, cosa que le daba alegría y lo hacía sentir más “orgánico”. La segunda lo muestra el grupo de androides escapados cuando Buster demuestra que el Mercerismo es una mentira. Ellos concluyen que ahora no hay diferencia entre humano y androide, sin embargo, siguen demostrando falta de empatía hacia otros animales. Las personas, por su parte, parecen no ser afectados de gran manera, puesto que pueden seguir compartiendo emociones a través de la caja de empatía y con sus acciones diarias. Ejemplo de esto es cuando Iran pide comida y herramientas para cuidar de la rana eléctrica que encontró su esposo y con lo que estaba tan ilusionado. 

Creo que al final, los androides si tenían vida. Esta no tiene que expresarse a través de la empatía necesariamente, cada forma o categoría expresará su deseo de mantenerse en este mundo de una forma o de otra.

sábado, 30 de marzo de 2019

10mo núcleo: MapReduce


La herramienta de MapReduce mencionada en el artículo de esta semana nos muestra un poco más de los detalles técnicos que conlleva programar en paralelo, como el manejo de memoria, medios de comunicación, programación distribuida y la reacción a fallos, todo esto a través de un modelo que toma sus bases de dos de las funciones más usadas de los lenguajes funcionales. Aquí me he podido dar cuenta de cómo algunas cosas que nos mencionan en la escuela, tal como utilizar la menor memoria y tiempo posible no aplican igual en la industria de la programación con gigantes como Google.

El autor menciona en múltiples ocasiones lo fácil y accesible que es trabajar con esta implementación, escondiendo todos los detalles que implica trabajar de manera paralela, reduciendo el código resultante de manera sustancial. Es interesante como pueden existir esta clase de herramientas desde inicios de la década pasada y que aun así la generación de buenos programas concurrentes no sea ya el estándar en la educación de software. Esto además que muchas personas usen herramientas de bajo nivel cuando no sea ni lo necesario y el usuario preferiría usar formas más fáciles.

Es un poco extraño leer como usan una gran cantidad de computadoras que además de dividirse los datos y/o tareas, también se reúsan al final como garantía de que ningún fallo físico o de red va a interrumpir el progreso del programa. Esto nos habla de cómo hay veces que tenemos que pensar en muchas otras cosas diversas y no sólo en el SW cuando queremos realizar un proyecto poderoso con gran alcance o que cumpla con una gran cantidad de requerimientos funcionales y no funcionales.
Creo que sería muy interesante trabajar en esta clase de proyectos, puesto que no sólo se están resolviendo problemas que son difíciles, sino que estaría ampliando y dando a conocer las ventajas que lleva la programación concurrente sin traer también todo lo malo.

sábado, 16 de marzo de 2019

9no núcleo: ¡¿Erlang no es Ericsson Languague?!


Al leer este artículo y ver la intención del autor de usar Erlang como un claro ejemplo de la Programación Orientada a Concurrencia, me doy cuenta de los varios beneficios que ofrece Erlang como herramienta educativa, especialmente en la parte de la abstracción de los hilos y procesos que pueden hacer de estas prácticas un tanto pesado. El uso de una máquina virtual propia que se encargue de manejar los hilos con el Sistema Operativo lo vuelve una herramienta poderosa que permite concentrarse en lo que realmente importa al momento de diseñar un programa. 

Su estructura de envío de mensajes y su paradigma funcional ciertamente le funcionan para lograr un paralelismo más seguro que otros lenguajes, sin embargo, esto también genera un distanciamiento de lo que un programador, sin importar si es joven o viejo, puede llegar a estar acostumbrado. Esto es entendible, pero puede generar que muchas personas no lleguen a probar todo lo que puede ofrecer el lenguaje y dejar la ilusión de que hasta los lenguajes diseñados para concurrencia y paralelismo son difíciles de entender. Parece compartir este trato Erlang con el lenguaje Clojure, aunque Clojure se apega más al extraño y bizarro mundo conocido como “hijos de Lisp”. Ambos lenguajes son fuertes en concurrencia, hacen uso de funciones como armas principales y descansan sobre una máquina virtual.

Viendo estos lenguajes, me pregunto si no existirá otra forma de lograr una concurrencia fácil y sin mucho trabajo además del uso de funciones. Creo que la memoria inmutable es algo esencial, así que van por buen camino; las funciones permiten el uso de copias, sin embargo, tal vez falta algún elemento para lograr que las deficiencias de Erlang parezcan una cosa arcaica y se pueda usar este paradigma en más ámbitos de la industria del software. Uno no puede saber de dónde vendrá este milagro. Quien sabe, tal vez hasta venga de PHP.

sábado, 9 de marzo de 2019

8vo núcleo: Rompiendo nuevas fronteras


Erlang me ha parecido un lenguaje extraño y familiar a la vez, tomando cosas de tantos lugares que parecería como un lenguaje tipo monstruo de Frankenstein. Para este punto de mi vida he visto unos cuantos paradigmas de programación y diferentes lenguajes que los implementan. Sin embargo, no me deja de sorprender este curioso lenguaje. Hasta su origen es poco común. No pensé que la telecomunicación en esa época llevara a las empresas al límite de generar lenguajes  con propósitos tan específicos. Demuestra de cierta manera que esta rama se alimenta de sí misma, generando nuevas áreas de especialización que continúan cambiando el conocimiento y herramientas básicas que afectan a muchas más personas que las que se pensaba originalmente. Tampoco esperaba que su dieño haya empezado de Prolog.

Además de esto, muchos de sus características como el runtime, su otp e interpreta lo posiciona y se define como algo que un lenguaje, sino como toda una plataforma o forma de programar y resolver problemas. Creo que incluso puede ser un buen lenguaje para aprender a programar de manera secuencial de la misma manera que Java es para objetos. Ambos, al menos de lo que se de Erlang, parecerían que tienes que hacer uso de esas herramientas para las cosas más mínimas. De esta manera, se refuerza el por qué y cómo de estas prácticas e ideologías.

También es curioso como parecería que el lenguaje está resurgiendo por cuestiones técnicas de hardware. Es decir, por el alza en el uso de procesadores multinúcleo. Aunque obviamente la implementación y alcance del lenguaje ha cambiado y mejorado con los años, es interesante ver que el paradigma de esa época siga vigente, demostrando que no necesariamente hay que ver lo de vanguardia para encontrar cosas buenas para la programación actual. Me hace preguntarme si algunas de las técnicas o tecnologías de antaño guardan más secretos para avanzar en el futuro de las ciencias computacionales y en la industria de la programación.

jueves, 28 de febrero de 2019

7mo núcleo: Alan turing y el juego de las mentiras


La verdad es que me ha gustado mucho la película del ‘Código Enigma’, todo el drama que presenta, así como el leitmotif de Turing visto como un incomprendido que puede ver el panorama general mientras los demás lo excluyen o molestan por su carácter, sexualidad o su intelecto. De veras genera emoción y tensión al momento en que el computólogo y matemático y el resto de su equipo descubren una nueva pista, intentan con un nuevo acercamiento o cuando le ocurre alguna tragedia a Turing, lo cual es bastante seguido durante la película. Dado mi carrera, ya había escuchado de Alan Turing varias veces en mi vida, aprendiendo algunos de sus datos personales y de sus logros. No sabía que había sido involucrado en la Segunda Guerra Mundial y que había sido responsable de descifrar los mensajes de los Nazis. 

Fue por eso que me puse a investigar más sobre su vida y su verdadera participación en estos eventos. Indagando un poco, descubrí que muchos sucesos que ocurren en el filme son exagerados para efectos de drama, mientras que otros igual o más interesantes  ni siquiera son mencionados. Un ejemplo muy claro, cómo lo menciona Anderson (2014) es el de su homosexualidad y sus acusaciones como espía. En realidad, Turing era muy abierto sobre sus preferencias sexuales, llegando incluso a confesar abiertamente cuando se la acusó en 1952. El doble agente que funge como uno de los criptólogos del equipo de Alan en realidad nunca lo conoció y mucho menos tenía idea de las relaciones que mantenía Turing. ‘Christopher’ la máquina que se acabaría convirtiendo en la madre de las computadoras ya había sido inventada por criptólogos polacos algunos años antes, Turing sólo mejoró su diseño e incorporó circuitos eléctricos a la misma. Sigue siendo un logro muy grande en la historia de nuestra área de estudio y creo que hubiera sido magnífico si lo hubieran mostrado como de verdad fue.

Referencias:

Anderson, L.V. (2014) How Accurate Is The Imitation Game? Slate. Recuperado el 28/02/2019 de: https://slate.com/culture/2014/12/the-imitation-game-fact-vs-fiction-how-true-the-new-movie-is-to-alan-turings-real-life-story.html

Grant, A. (2014) ‘The Imitation Game’ entertains at the expense of accuracy. ScienceNews. Recuperado el 28/02/2019 de: https://www.sciencenews.org/article/%E2%80%98-imitation-game%E2%80%99-entertains-expense-accuracy