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

jueves, 21 de febrero de 2019

6to núcleo: Paralelismo como futuro imperfecto


Los artículos anteriores a este punto se han dedicado principalmente a pronosticar cómo el paralelismo va a ser un factor constante al momento de diseñar y desarrollar software, mencionando el alza de las computadoras multinúcleo y de demás aparatos que usan más de un procesador. Un claro ejemplo de esto es la lectura de “Welcome to the Jungle” de Herb Sutter (2011), mencionando los diferentes tipos de paralelismo y manejo de memoria que nosotros como desarrolladores tendremos que trabajar, declarando: “…a single compute-intensive application will need to harness different kinds of cores, in immense numbers, to get its job done”.

Es curioso ver como todos estos análisis se comparan contra la realidad que ofrece el texto de UBM TechWeb. Pareciera que las profecías se cumplieron y ahora todo puede ser hecho de manera, al menos, concurrente. Sin embargo, el mundo de la industria del software y sus habitantes no parecen estar preparados, buscando incluso a ciegas como paralelizar código y aprovechar la enorme ventaja que representa esta clase de arquitecturas. Lo más interesante es como los productores de chips como Intel o AMD aprovecharon o más bien fueron forzados a aprovechar la arquitectura multinúcleo para seguir siendo vigentes en el mercado. Sin embargo, los creadores de IDEs y de demás herramientas en el mercado parecen estar atrasados y no seguir esta tendencia. Esta diferencia en las acciones de mercado muestra la falta de conocimiento sobre que necesitamos como programadores para poder trabajar de manera eficiente bajo estas condiciones.

Algo que menciona el artículo y que concuerdo con ello, es la importancia de tener herramientas para hacer un correcto análisis de memoria y de errores dentro del código paralelo. Los métodos de depuración como revisiones a mano de código o uso de prints se vuelven obsoletos. Creo que si queremos integrar estas técnicas de programación a nuestro desarrollo diario, es necesario que nuestros hábitos y herramientas cambien acordemente.

Referencias:
Sutter, H. (2011) Welcome to the Jungle Or, a Heterogeneous Supercomputer in Every Pocket. Sutter’s Mill. Recuperado el 21 de febrero de 2019 de: https://herbsutter.com/welcome-to-the-jungle/

sábado, 16 de febrero de 2019

5to núcleo: De los almuerzos a la jungla


La lectura en general me ha parecido muy buena, con muchísima información bien respaldada para apoyar argumentos sobre lo que está pasando y lo que va a pasar en cuanto al futuro del hardware y la forma en que lo explotamos. Cuando me imaginaba siendo programador, no me imaginaba trabajando para arquitecturas y chips tan diferentes que requirieran pensar en tantos aspectos de optimización y flexibilidad. A decir verdad, me asusta un poco lo que plantea el autor conforme al futuro, aunque las consecuencias y los productos que significan me emocionan de igual manera.

Algo que me llamó mucho la atención sobre lo que menciona este Nostradamus es que, algunas de las consideraciones o dificultades a tomar en cuenta para la heterogeneidad y cómputo en la nube es que se podrán esconder o enmascarar bajo el uso de librerías o tecnologías intermedias. De cierta manera, creo que ya estamos viviendo en situaciones similares, aunque para diferentes tecnologías. Un ejemplo de esto es la gran diversidad de chips y arquitecturas de bajo nivel que tenemos, así como de los sistemas operativos. Cada vez es más común que haya lenguaje, compiladores y en general soluciones que nos permiten, como dice un pionero en la materia, “Write Once, Run Anywhere”. Creo que, en general, la expectación y el miedo que pueda causar esta nueva etapa se irá calmando conforme personas inteligentes hagan el trabajo más fácil para todos los demás. Esto me lleva a mi siguiente punto. 

Herb Sutter habla de cómo estamos en un punto intermedio entre dos etapas o “minas”, la marcada por la Ley de Moore y la de la Nube. Aunque se ha visto que esta técnica de aprovechar recursos ha cambiado la forma en que codificamos aplicaciones, creo que es un parte aguas para algo más grande. En general, se compara que la Informática y las Tecnologías de la Información con otras ramas de Ingeniería y de cómo le falta madurar con técnicas que permitan generar productos viables, fiables y de calidad con cierta facilidad.  Tal es el caso de la Arquitectura, por ejemplo. Pienso que, si de veras entramos en etapas que nos hacen la vida más difícil, vamos a encontrar maneras de hacerlo fácil, aunque nos cuesten mucho trabajo al principio. Tal vez eso es lo que pase ahora con lo que está por venir.

sábado, 2 de febrero de 2019

4to núcleo: Paralelización a la puerta de tu casa


Algo que he notado con estas últimas lecturas, es el tono que usan los autores para describir las diferencias entre el paradigma de programación secuencial contra el paralelo. Más o menos siempre mencionan a las mismas, como que la paralela requiere de tener más cuidado con los errores sutiles o trampas que se pueden generar (deadlocks, race conditions etc.), así como la dificultad al momento de diseñar programas en torno a la paralelización. Varios autores mencionan que, aunque es difícil y “no muy atractivo”, este salto de perspectiva mental es necesario si se quiere llegar a optimizar y mantener a la par el uso de prácticas de hardware y software.

Creo que, como grupo de programadores, hemos vivido una muy buena parte de nuestra vida tecnológica en un mundo secuencial. Me incluyo a mí y a prácticamente todos los estudiantes de la carrera de sistemas porque ese es el modo de enseñar actual. No creo que este mal, al fin y al cabo, este enfoque permite entender de una manera simple cómo funcionan las computadoras y los programas y aplicaciones de una manera sencilla y sin meterse a detalles muy técnicos. Sin embargo, así como se enseña una clase de POO que, aunque a muchos no les gusta por el esfuerzo extra y cambio de mentalidad que requieren, es necesario impartir materias que tengan que ver con el paralelismo.

Este comentario no viene solamente porque me parece interesante el concepto de hacer varias cosas a la vez, sino también de como la tendencia en el hardware ya no va hacia la rapidez solamente, sino de cuantas cosas puedes hacer al mismo tiempo. Esto proviene de las limitantes físicas que tenemos al momento de hacer los componentes de nuestras computadoras. Debido a esto, creo que es un buen momento de pasar a esta tendencia, antes de que llegue una nueva y vuelva a cambiar el juego por completo. Como la computación cuántica, por ejemplo.