[18] HABLEMOS DE PROGRAMACIÓN

programacion

Hemos hablado en algunas entregas anteriores sobre programas informáticos, bugs, software libre, código fuente, y protocolos. Si todo esto te ha despertado el interés y desde entonces vienes preguntándote ¿yo podría aprender a programar?, ¿dónde está el misterio? y ¿por dónde empiezo?, pues entonces este meta-programa es para ti.

En la media hora que sigue vamos a hablar de programación, y para ello tenemos la compañía de una amiga que nos trae con su voz el calor del caribe y nos recuerda que pocos obstáculos hay cuando una está determinada a aprender.

Hola, yo soy Rosa Amelia y estudio ciencias de la computación en La Habana en Cuba.

Vaya por delante que acá en el Desarmador somos bastante escépticas hacia esa visión de que hoy en día saber programar es como era hace cien años saber leer. Ni mucho menos creemos que programar tenga que ser una actividad obligatoria, ni que forzosamente aprender un lenguaje de programación vaya a mejorar la calidad de vida de las personas que nos rodean. No queremos desde aquí alimentar el solucionismo tecnológico, pero tampoco creemos que el arte de la programación sea algo que tenga que estar reservado a ingenieros y hipsters a los que nadie entiende cuando hablan. Como tantas otras cosas, tú tendrás que decidir si esto es para ti o no, si te atrae, o si te apasiona. Como con cualquier artesanía, un gran placer espera a quien practica la técnica durante un tiempo, y en este caso, cuando se trata de hacer que la tecnología trabaje para nosotras, si lo puedes imaginar, seguro que se puede programar.

. . .

Bueno, comencemos por lo básico. La programación informática es el proceso de diseñar, codificar, depurar y mantener el código fuente de programas de computadora. Recordemos que el código fuente de un programa informático no es más que un conjunto de líneas de texto escrito en un lenguaje de programación que dicta los pasos que debe seguir una computadora para ejecutar dicho programa.

Un aspecto interesante a tener en cuenta cuando se habla del código fuente de un programa informático es si su licencia permite que dicho código fuente esté disponible para que cualquiera pueda estudiarlo, modificarlo o reutilizarlo, pero de esto ya hemos hablado en un programa anterior.

Sabemos que la computadora entiende instrucciones codificadas en binario, un lenguaje en el que las palabras son 1s y 0s. Al inicio de la amistad entre el ser humano y los procesadores de silicio, intentamos hablarles en su idioma y por un tiempo no nos fue mal. Pero a medida que la complejidad de las tareas que realizaban las computadoras aumentaba, se hizo necesario disponer de un método más sencillo para programar, y pues fuimos inventando otros modos. Así surgieron varios lenguajes de programación.

Rosa: Lo más cercano que tiene una niña a un lenguaje de programación es el lenguaje natural, simplemente. Es expresar cosas como mi nombre es "Rosa Amelia" y eso sería como una variable [nombre] que sea igual a "Rosa Amelia". Yo cuando estaba en la universidad al inicio le intentaba explicar a mis amigas las cosas básicas de programación, qué era una variable, qué era un programa, y ellas más o menos lo entendían y me seguían.

A medida que pasó el tiempo, los lenguajes de programación fueron abstrayéndose más de los detalles particulares de cada máquina, también en cierto modo se hicieron más sencillos de aprender y utilizar, y recibieron el calificativo de “lenguajes de alto nivel”, por contraposición a los lenguajes que están más abajo, más cerca del código máquina.

Una de las preguntas más frecuentes para las que quieren iniciarse en la programación informática es ¿qué lenguaje de programación debería aprender?, y es una pregunta sin una única respuesta, cada lenguaje tiene sus particularidades. En general, si lo que te gusta es la comunicación, si te interesa la usabilidad y la relación son las usuarias, puedes dedicarte al diseño y a la programación web, una buena elección acá seria aprender Javascript, que es un lenguaje interpretado que corre en cada navegador, y muy útil para manipular los elementos de las páginas web, es decir, html y CSS. En cambio, si lo que quieres es desarrollar herramientas de escritorio o aplicaciones web puedes aprender lenguajes como Python o Ruby.

A grandes rasgos, también diremos que hay lenguajes compilados y lenguajes interpretados. Un compilador transforma el código fuente en un ejecutable, mientras que un intérprete es como un músico que lee al vuelo una partitura. Alguna gente piensa que los lenguajes interpretados (como Python, Ruby, Javascript) son más asequibles para principiantes que los compilados (como C, C++, Go, Rust, ya que hay un paso menos para ver el resultado de tu código.

Rosa: A mi me gusta Python más bien por la sencillez y porque es un lenguaje muy poderoso. Lo he comparado con otros y me ha tocado hacer cosas como interfaces visuales y uso Pyqt y es muy fácil, trato de usar en C# WindowsForms y no me es tan intuitivo como Python, para cosas numéricas de trabajar con librerías por ejemplo matplotlib, numpy para multiplicar matrices y esas cosas lo hacen muy eficiente, incluso muchas de estas librerías están programadas en C++ lo que es mucho más rápido. Tiene muchas cositas tocadas también, azúcar sintáctico y esas cosas que a cada uno le gusta mucho cuando lo prueba, está bien.

Comencé a programar en Python si mal no recuerdo en tercer año, en algún proyecto, el que más recuerdo es un proyecto de sistemas distribuidos que hacíamos cosas con la red, cosas con unas librerías de Python, pyro4, y era muy útil para trabajar con cosas con la red, sistemas distribuidos, enviar ficheros, recibir ficheros, era muy usable, ya después de esto me encantó Python por lo sencillo que es, lo intuitivo, lo fácil que es trabajar con él. Incluso se lo recomiendo mucho a personas que se dediquen a la matemática y hacer programas con matemáticas porque tienen muchas librerías que se usan mucho para este fin.

Antes de que escojas un lenguaje para aprender, terminemos de entender un poco como va eso de la programación. Nos habíamos quedado en que el código fuente está escrito en un lenguaje de programación. Si es un lenguaje compilado, pues habrá que compilarlo, es decir, traducirlo completo a lenguaje máquina. ¿Cómo se hace esto? Pues lo hace un compilador, que es un programa informático que usualmente sirve para eso mismo, para traducir un programa al lenguaje binario. Quizás te acuerdes de Richard Stallman, el de GNU y la GPL, él comenzó el proyecto GCC, que es el compilador GNU para el lenguaje C, que es el lenguaje en que están escritos la mayoría de sistemas operativos de hoy en día. Durante la compilación, de ser necesario se toman recursos de alguna librería, ya que no toda la información necesaria para que un programa cobre vida la escribe una persona, también hay otros recursos de los que se echa mano, a este paso se le llama enlazado. En el caso de los lenguajes interpretados, pues no necesitamos compilar, sino que el interprete, que es otro programa, interpretará nuestro código. En realidad lo que ocurre es que el interprete compila al vuelo, pero no entraremos ahí por hoy.

Otro concepto interesante es el de algoritmo. Un algoritmo es una secuencia clara, ordenada y con una extensión limitada de instrucciones que han de seguirse para resolver un problema. Un programa informático normalmente usa una serie de algoritmos. Es más fácil pensar en un algoritmo si lo visualizamos: veremos un diagrama de flujos donde hay un comienzo, luego vamos siguiendo unos pasos sucesivos, quizás algunas bifurcaciones, y al final llegamos a una solución. En la vida cotidiana usamos con frecuencia algoritmos para completar tareas o resolver problemas, por ejemplo los manuales de usuario, que muestran algoritmos para armar un mueble o ensamblar un juguete.

Haciendo un paréntesis histórico, y por si todavía no lo sabías, el primer algoritmo de la historia fue escrito por una mujer, considerada hoy en día la primera programadora: Ada Lovelace Byron. Lo interesante es que ella y Charles Babbage trabajaban sobre una máquina hipotética, el "motor analítico", que en aquel momento no llegó a construirse. Pero Ada fue una visionaria en su época: estamos hablando de que llegó a imaginarse cosas como la reproducción digital de música, allá por 1840, antes incluso de que Darwin publicara "El Origen de las Especies".

Entonces, volviendo al tema, ¿qué ocurre cuando alguien decide crear un programa informático para resolver un problema específico?. Lo primero sería tener una idea de qué es lo que hace el programa y qué no: es decir, que resultado tiene que tener el programa cuando se le dan unas entradas específicas (un programa llamado "suma" debería producir 4 cuando las entradas sean 2 y 2, y no 5). Después diseñamos la arquitectura del programa, que quiere decir cómo se relacionan entre sí las partes del programa. Luego recién codificamos el programa, escribimos tests, en ciertos casos habrá que compilarlo, y finalmente lo ejecutamos, es decir, lo ponemos en funcionamiento.

Los programas no llegan a tu computadora por arte de magia. Todos los programas fueron escritos por personas, y en cierto modo están escritos para que otras personas puedan también leerlos y modificarlos. También hay códigos que escriben códigos, pero vamos al caso sencillo. Una persona, o varias, colaboran para escribir el código fuente de los programas. Este puede ser el programa final, o parte de una librería, que son programas que pueden ser usados por otros programas.

Hace muchos años, la forma de compartir código era dejar los programas en un cajón - sí: en un cajón, los programas entonces se escribían haciendo agujeros en unas tarjetas de cartulina, y se asumía que cualquiera que necesitara un programa lo buscaría en el cajón. Hoy en día, lo más común es usar una herramienta de control de versiones, como Git, para escribir código entre varias personas, y poder tener diferentes versiones del código. En el caso del software realmente libre, o algo menos libre como el software que solo tiene las "fuentes abiertas", una puede ir a sitios como Github y buscar librerías y programas que se pueden reusar.

Luego está la labor de las personas que empaquetan y mantienen los programas dentro de una distribución. En el caso de windows, una pues no tiene muchas más opciones que buscar por internet un programa y generalmente acabamos instalando cosas de sitios dudosos del internet. Hemos mencionado muchas veces de que así, corriendo programas que no sabemos de donde vienen, es como nos pescamos virus, gusanos, troyanos, malware y el resto de la fauna maliciosa que circula por la red. Con el software libre, en cambio, tenemos distribuciones, como las varias de GNU/Linux, que son colecciones de programas que un grupo de personas, algunas de las cuales programadoras, algunas sysadmins, y algunas gente como tu y como yo, han escogido para distribuir y actualizar juntas, en unas versiones específicas. Al instalar un paquete, como "Gpodder" por ejemplo - que es un lector de podcasts, en una ubuntu, o arch linux, o alguna otra distribución, estamos instalando los paquetes de un repositorio central donde los mantenedores los han colocado, jalándolos por un canal seguro de ese lugar hasta nuestra compu, donde se desempaquetan y se ejecutan.

Es una certeza que han existido grandes mujeres informáticas, como por ejemplo Grace Murray Hooper, pionera en el mundo de las ciencias de la computación que, entre otras cosas, en las décadas de los 50 y 60 desarrolló el primer compilador para un lenguaje de programación.​ No nos alcanzarían los minutos para hablar de las grandes mentes femeninas en el mundo de la informática en un solo programa, así que lo haremos de a poco en los que vienen.

Rosa: Aquí en cuba no son muchas las mujeres que programan, son pocas, y más o menos en estos últimos años sí ha aumentado el número de mujeres que por lo menos ha entrado a mi carrera, y las que se han mantenido por su puesto, también ha aumentado eso. Pero nada, yo les recomiendo a todos que estudien computación, que aprendan a programar, que no tiene que ser en una institución, puede ser autodidacta, puede ser en internet.

Y aquí queremos darle un giro al programa. Como da cuenta Rosa, hoy en día la escasez de mujeres que estudian Ciencias, Tecnología, Matemática o Ingeniería (STEM por sus siglas en inglés) es una realidad. Y más aún lo es, la invisibilidad de las mujeres en puestos de decisión estratégica, de infraestructura lógica y física de las redes digitales, y de desarrollo de software y administración de sistemas. Llamémosle la brecha digital de género - una brecha global.

Como nos dice Graciela Natansohn "el desarrollo de las tecnologías no escapa a las relaciones de poder que producen desigualdades y contradicciones en las dinámicas de acceso, uso, diseño y producción de las TIC entre hombres, mujeres, blancos, negros, pobres y ricos".

Cuando hablamos de una brecha digital de género nos referimos no sólo a las dificultades de acceso a la red, sino a los obstáculos que enfrentan las mujeres y otros géneros no masculinos para apropiarse de la cultura tecnológica, y esto sucede muchas veces a causa de la hegemonía masculina en las áreas estratégicas de la formación, la investigación y el empleo en tecnologías de información y comunicación. Comprender estas brechas, nos dice Graciela "supone conocer, interpretar y entender cómo el género opera sobre la construcción de la ciencia y la tecnología y cómo las jerarquías de la diferencia sexual afectan al diseño, el desarrollo, la difusión y la utilización de las tecnologías".

Aclaremos que no entendemos la brecha de género como un problema cuantitativo de cuántas mujeres o cuántos hombres están activos en el mundo de las tecnologías. Desde el feminismo cuestionamos el propio funcionamiento del sistema tecnológico y científico, de la cultura tecnológica de las empresas, universidades e instituciones sociales, que es de por sí refractario a las mujeres y a otros géneros no masculinos, por efectos de una extendida cultura machista (Graciela Natansohn).

Sin embargo, creemos en la posibilidad emancipatoria de las tecnologías, y en la capacidad de las mujeres de transformarlas. Estamos convencidas de nuestra resiliencia para lidiar con desigualdades sociales y con desigualdades de acceso, como nos cuenta Rosa en su posición de mujer estudiante en La Habana.

Rosa: Yo trato de depender lo menos posible de internet, muchas veces. Porque internet lo puede responder todo. "Como puedo hacer tal cosa" le preguntas a Google y Google te lo responde. Yo lo que más o menos trato es de empaparme - hay veces que como estás haciendo muchas cosas no te da tiempo, ¿no? - pero bueno yo más o menos trato de empaparme con lo sencillo de algún tema, cómo puedo trabajar con él y dependo lo menos posible de internet. Ahora estamos dando inteligencia artificial y habían recursos que tenía google que estaban muy muy buenos, a los que nosotros no podemos acceder primeramente porque somos cubanos y hay muchas cosas bloqueadas. Pero bueno, se puede, sin internet se puede trabajar sí que se pasa un poco de trabajo, tal vez cosas que están ahí en internet que ya están hechas y no puedes acceder a ellas tal vez cosas que tengas que descargar. Un ejemplo si hay un software que yo quiero descargar que sea de un giga, espero a fin de mes, para que no se me acabe la cuota entera, o puedes hablar con las personas que se encargan de eso y te lo descargan para que tu no tengas que gastar tu cuota, si es algo muy importante en la escuela también te lo descargan, existen facilidades. Ahora mismo aumentó el ancho de banda en la facultad y subieron las cuotas a los estudiantes en correspondencia con que había aumentado el ancho de banda de la facultad, y ya, vamos avanzando poco a poco.

. . .

Vamos cerrando el programa. El día de hoy hemos echado un vistazo breve pero intenso al mundo de la programación informática. Hemos aprendido qué es un lenguaje de programación, cuáles existen, cómo va el proceso de desarrollo de un programa informático, hemos hablado de algoritmos y del código fuente. Naturalmente se nos han quedado muchos conceptos fuera, pero como ya saben, les dejaremos recursos interesantes en nuestra página web.

También y para no perder la costumbre, hemos criticado el sistema tecnológico y el ecosistema social e institucional que lo mantiene con vida. Brevemente hemos indagado en lo que entendemos por brecha digital de género, y aunque no hemos analizado a profundidad el tema y es difícil saltar a conclusiones, en las palabras de Rosa hemos visto la resiliencia y la capacidad de formación de las mujeres, que ya son primeros pasos para transformar el campo de la tecnología y sus "reglas androcéntricas, supuestamente apolíticas y objetivas" (Graciela Natansohn).

Nos despedimos agradeciendo a Rosa por los valiosos minutos compartidos, y a todas ustedes les mandamos abrazos que duren un mes.

Rosa: Muchas gracias por escucharme y chau chau.

NUESTRAS FUENTES

EN TEXTO

EN AUDIO

ALGUNOS ENLACES DE INTERÉS