21 agosto 2020

Programando

Votación remota
Me escribe mi buen amigo Oscar, enviándome un link al artículo Expertos analizaron la factibilidad de realizar votación electrónica en nuestro país, resulta que finalmente se convenció que mientras el voto sea secreto nunca será factible la votación remota ni la electrónica. Le contesto:

Claro Oscar, si el voto dejara de ser secreto -algo que sería muy conveniente- y las bases de datos con la votación fueran de acceso público para que cualquiera las pueda bajar y analizar con Excel por ejemplo, el voto electrónico sería factible y mucho más transparente, solo imagínate la cantidad de cruces y análisis electorales que se podrían hacer. Con voto secreto es totalmente imposible cualquier sistema distinto del actual, se prestaría para toda clase de fraudes.

El sistema electoral chileno es el mejor que puede existir manteniendo el voto secreto, modelo en el mundo, pero a la larga sería excelente que las elecciones se transparentaran, que el voto dejara de ser secreto y que cada uno se haga públicamente responsable de la opción por la que votó.

Anda mucho ignorante por estos días -sobre todo políticos, pobres diablos que con suerte leen el Condorito- dando sesudas explicaciones sobre la conveniencia de establecer votaciones por vía remota, es muy peligroso tener gente así proponiendo y votando para aprobar leyes ¿Cómo pudimos equivocarnos tanto eligiendo a esos esperpentos?

Programando con Python
Ayer estuve todo el día aproblemado tratando de mejorar el programa de genealogía para extraer los datos de este informe y convertirlos en este otro. Me tomó el día completo pero aprendí mucho y aproveché de sacarme el óxido que cubría mis neuronas compitinas, que no son muchas pero todavía funcionan.

Soy casi un completo ignorante en Python, pero trabajé programando con VBA por muchos años y eso facilita las cosas, es más o menos como saber manejar un auto pero ahora tienes que conducir un camión, la mayoría de tus habilidades te sirven pero hay que aprender otras nuevas. Por suerte Python es prácticamente igual al VBA en su estilo, lo que facilita mucho aprender a usarlo.

Aprender un lenguaje de programación es casi lo mismo que aprender idiomas, pero con una diferencia importante: si quiero aprender, por ejemplo, alemán, tendré que memorizar unas 10.000 palabras para empezar, para apreder un lenguaje de programación en cambo hay que aprender menos de veinte "palabras", eso también facilita mucho las cosas. Por eso es tan fácil enseñar a programar a los niños.

Cuando yo me ganaba el caviar en eso, el trabajo consistía fundamentalmente en programar inventarios, cuentas corrientes, contabilidad y emitir documentos de manera automática. Hacia el año 2000, Microsoft ya había perfeccionado la genial idea de incrustar una versión del Visual Basic en sus versiones de Excell y Word, lo que cambió mucho la manera de hacer las cosas, generalizando el concepto de API ( Application Programming Inerface) una de las ideas más potntes de la programación moderna.

Los programadores antiguos, con los años íbamos guardando pedazos de código en forma de subrutinas que se podían usar para muchas cosas sin tener que escribir todo el código de nuevo, las llamaban "snippets", por ejemplo una subrtina general que dibujaba una pantalla para entrada de datos o para el despliegue, cuando las interfaces gráficas todavía no existían. Eran como cajas negras a las que entrabas solo los parámetros que variaban, por ejemplo le ingresabas un número y te lo devolvía separado con puntos en grupos de miles y cosas por el estilo.

Eso mismo son las APIs, el proveedor de un programa (que pasaron a llamarse "aplicaciones" en el newspeak) dejaba una serie de "bibliotecas" con subrutinas que permitían modificarlo a un nivel más profundo que el del usuario común y corriente, sin necesidad de intervenir el código. Así por ejemplo, Microsoft nos permitía "intervenir" el Excel para que hiciera cosas más complicadas programándolo con VBA.

Como pasa siempre en computación, este concepto se ha ido sofisticndo más y más cada vez. Los servicios de Google tienen una API con una gran biblioteca de funciones que pueden usarse con Python por ejemplo, lo mismo Twitter que, con acceso a su API facilita la creación de bots o falsos usuarios automatizados. 

En fin, casi todos los proveedores de software "abren puertas" a sus aplicaciones, para que podamos programarlas sin necesidad de meternos a su código, esas puertas son las APIs. Últimamente con la aparición del concepto de "nube" esta idea se ha extendido con la virtualización de servidores, el "softwre como servicio" donde grandes proveedores como  AWS, MS Azure y Google Cloud nos arriendan espacios y servicios en su enorme infraestructura.

¿Por qué Python? Junto con Java Script, un lenguaje para programar principalmente en el browser del usuario, Python se ha convertido en el estándar para la programación de aplicaciones, destronando al C++ que reinó indiscutido por muchos años en eso y ahora ha quedado más o menos relegado a la programción de infraestructura, o sea los programas enormes que pueden tener millones de líneas de código y necesitan de una estructura muy estricta para no enredarse.

La gracia de Python es su capacidad para manipular palabras más que números, los lenguajes antiguós estaban muy centrados en números y cálculos, Python en cambio es uy potente manipulando texto que no está estructurado.

Los datos estructurados son, por ejemplo, lo que se guarda en bases de datos, ya sea en filas y columnas tipo Excel (estructura relacional) o en forma de árboles tipo XML (estructura jerárquca), en esos casos tenemos "datos" bien identificados, caracterizados por sus propiedades.

Pero la información es mucho más que esos datos, podemos obtener información de mucha mator calidad leyendo un relato, una crñonica de prensa o una novela que examinando los datos almacenados en filas y columnas, los datos podemos contrlos y agruparlos, no mucho más que eso, pero los textos sin estructura podemos interpretarlos y sacar conclusiones mucho más complejas y sutiles.

¿Y cómo podemos interpretar datos no estructurados? Una de las primeras herramientas que se usan son para "extraer" la información con significado que nos interesa desde una masa de otra información, que no es relevante para nosotros. El pequeño programa que hice para extraer solo los abuelos, desplegándolos ordenados y con un buen formato desde un libro lleno con otra información que no me interesa, es un ejemplo básico pero muy bueno para entender hacia donde va la programación en el futuro.

Python es "potente" para estas cosas, porque tiene entre sus instrucciones y en librerías que le podemos agregar muchas "subrutinas" (para decirlo en lenguaje anticuado) que nos facilitan cosas como analizar y extraer información. Un paso más en esto es la evolución de los antiguos "sistemas expertos" -programas que se usaban para diagnosticar por ejemplo- en sistemas de análisis semántico.

Esto significa que podemos -hasta cierto punto- tomar un texto cualquiera y analizarlo para que un programa extraiga su significado, o sea lo entienda y pueda eventualmente contestarlo. Para eso se usa un montón de intelgencia artificil y motores de aprendizaje, cosa muy complicada que lo dejaría solo para expertos.

¿O no? Claro que no, Google por ejemplo nos ofrece su infraestructura de inteligencia artificial e interpretación de textos a la que podemos acceder libremente, además mientras la probamos el software aprovecha de aprender y se refina. Si queremos usar la herramienta a un nivel más profundo ¡para eso están las API! Google nos ofrece además acceso a su API que podemos usar -naturalmente- con Python, que es el lenguaje ofcial de Google para sus APIs.

Es un asunto fascinante y está al alcance de cualquiera, aprender Python es bstante fácil y alguien que ya sepa algo de programación puede aprender en tres días, según San Yo. Otra cosa bonita es que la programación volvió a ser algo personal, durante la histeria de la Programación Orientada a Objetos, que enseñaron por décadas en las universidades como la única forma "seria" y "profesional" de hacer las cosas, la programación se convirtió en un trabajo de obreros soso y aburrido, entonces yo escribí mi famoso manifiesto El Programador Hereje, que no lo leyó nadie y dejé la programación para siempre, cosa que tampoco le importó a nadie.

Estaba revisando mi antiquísimo sitio El Programador Casual, que tengo botado desde el 6 de octubre del 2001 -cuando dejé de programar- y me encontré un artículo que me parece divertido y que tendría que colocar en alguna parte es este Consultas por mail, me reí releyéndolo y creo que todavía debería servir.

Ahora que la programación está volviendo a ser personal gracias a las APIs, programar vuelve a ser divertido, aunque creo que estoy muy viejo para dedicarme a eso todavía puedo hacer una que otra cosita sencilla y aprender.  

Aunque parezca raro, el estilo de programar tiene que ver con la manera de ver la vida de cada cual, por ejemplo el Dr. Chuck Severance, en su excelente libro recomienda usar las "expresiones regulares" que son un meta-lenguaje que permite hacer ciertas cosas de manera más corta y elegante. Yo con los años he llegado a convencerme de lo contrario: al escribir un código podemos hacerlo de cien maneras distintas para lograr lo mismo, pero mi preferencia es siempre usar el algoritmo más obvio y claro de entender, aunque use muchas más líneas de código, y por supuesto abundantemente comentado. Todos los estilos valen, depende de la personalidad de cada cual.

Las soluciones concisas y elegantes, ingeniosas, dejaron de gustarme hace años, para mi ahora un código elegante es cuando el algoritmo lo puede entender un niño al primer vistazo, no importa cuantas líneas tenga. A propósito curioseando sobre eso me encontré que eso se ha convertido en un "estilo" de programación lo llaman "estilo del transbordador Challenger" o algo así y en sus primeras líneas incluye un comentario que dice "si usted tiene la idea de un algoritmo más ingenioso por faavor no lo escriba aquí, llevamos más de 20 años llevndo gente al espacio sin una sola falla y queremos que esto siga igual", bueno, no es exacto, estoy citando solo de memoria.

Fe de RATAS me había equivocado con el código, el que hice y funcona es este
Y mi código para sacar los abuelos es este, mucho mejor que el que había escrito antes, gracias a que apliqué el estilo Challenger: siempre usar la solución más obvia, aunque sea fea o poco elegante

5 comentarios:

  1. Hace siglos que no programo nada pero si llegué a un estilo, o etapa, fue a esos de las subrutinas. Todas mis pantallas se parecían por esa causa. Realmente se pueden armar cosas complejas con unas cuantas de esas "cajas negras" conectadas al tronco principal del programa. Supongo que también, en algún momento, quieres usar tu colección de subrutinas siempre y te vuelves repetitivo - y no óptimo.

    ResponderBorrar
  2. Viendo los comentarios de ese señor Therry de Saint Pierre en la noticia sobre el voto electrónico, me queda claro que tiene algo que vender. Es nuestro deber informar a la población que si un informático dice que el voto electrónico es posible (en el contexto de votación democrática, es decir, secreto), es un ignorante en su profesión o es un mentiroso que quiere vender un sistema de votación electrónica.

    ResponderBorrar
  3. Uñschmidt, en los viejos tiempos, cuando todavía no se inventaba casi nada, los programadores armábamos nuestras propias cajas de herramientas con subrutinas para dibujar pantallas, desplegar datos, formatear números y fechas ¡ordenar e indexar! Todo eso se hacía a mano, recuerdo la subritina que tenía con el "Quicksort" era lo máximo. Bueno la cosa es que sin conocernos al final todos hacíamos más o menos lo mismo y eso fue recogido por la industria. Me acuerdo de la maravlla que fue cuando apareció DBase ¡el primer motor de bases de datos! ya no había que hacer índices ni nada de eso, era una maravilla, pero la idea de unas subrutinas que lo hicieran estaba en el aire desde hace rato. Nosotros inventamos la rueda. Y al final uno mirando un programa se podía dar cuenta quien lo había programado, porque se usaban las mismas cosas siempre, de allí vino la idea de encapsular, la programación orientada a objetos y todo eso, cuando programar se puso aburrido.

    Leus, sin duda hay que gritar hasta quedarnos roncos para que quede claro que los que quieren meter el voto electrónico o formas de voto remoto son unos sinverguenzas, cualquiera que sepa un mínimo como funciona la cosa debería saberlo, es increíble que haya ignorantes que no se den cuenta y le crean a estos tránsfugas-

    ResponderBorrar
  4. P.D ¡me habia equivocado con el código! ahora puse el correcto

    ResponderBorrar
  5. Una rápida averiguación me muestra que Ese tal Saint Pierre está a cargo de la turbia empresa "Morpho" la misma del "caso pasaportes". Huele a pescado podrido de lejos.

    Todo pasando en chilito, es "el festín de los audaces" en su máxima expresión

    ResponderBorrar

"Send me a postcard, drop me a line
Stating point of view
Indicate precisely what you mean to say
Yours sincerely, wasting away
Give me your answer, fill in a form
Mine for evermore
Will you still need me, will you still feed me
When I'm sixty-four"