Mis andanzas y conocimientos: uno no aprende del día a la mañana

Nunca me he considerado una buena programadora, pero hoy tenía las ganas de avanzar un poco con mi nivel de programación… Realmente, siempre he sido una muy mala programadora, porque no era capaz de entender los conceptos que estaba leyendo o me estaban enseñando. Es simplemente que el enfoque era simplemente incorrecto. Es por ésto que muchas veces me atasco con tonterías…

Aprendí a programar y realmente hacer algo útil con lo aprendido en 2001 (lo de antes con el html en 1998 eran garabatos), cuando tuve la oportunidad de crear un programa para gestionar una imprenta en la que curraba en Cornellà. Además ahí ya estaba empezando a aburrirme, estaba jugando ya con un servidor en gnu/linux, y estaba jugando en hacer pequeños programillas chorras, como descargar los frames del radar de lluvias de la web de metereología y ponerlos en un gif para poderlo visualizar en el applet del tiempo de gnome2. Con ésto pillé curiosidad y sin darme cuenta ya estaba programando y cuando llegó la propuesta (que un poco fue mía porque estaba entusiasmada con lo que estaba haciendo… ¡estaba creando!) pues estaba preparada para ir más allá, con un objetivo, una meta.

La programación que aprendí era muy simple, al principio no había ni siquiera funciones, había una página php con todo su código html repetido para cada página, ¡un horror!, poco a poco conocí a las funciones y pude darme cuenta que podía reducir muchísimo código e ir mucho más rápido a medida que iba alcanzando objetivos funcionales del programa, desde recoger la información del cliente, con el presupuesto, que podías pasarlo al departamento de edición, para su maquetación, ahí a ctp y luego a impresión, ya cuando estaba a punto de irme de la empresa, estaba en la parte de calcular los tiempos de impresión de forma automática y poder así planificar las impresiones y aumentar el rendimiento de las máquinas, ahorrando los cambios de colores continuos que obligan a tener la producción en marcha. El proyecto, lo estuve siguiendo durante un año, como siempre funcionaba pues había poco contacto, hasta que llegó un día que se estropeó el servidor, no me avisaron y simplemente volvieron al sistema viejo, el sobre con la ficha pegada en una cara y éstos sobres apilados en el mueble de entrada en el departamento de diseño. Aquella gente, no supo reaccionar y se quedó atrás… espero que a día de hoy ya estén un poco mas modernizados, en unos momentos que se tiene que buscar la alta productividad y unos costes menores.

Tras la muerte de aquel programa, estaba agobiada por programación en el ciclo formativo, que me había quemado un poco porque mientras programaba el db3, el programa de la imprenta, dejé un poco de lado la programación, además que en el trabajo nuevo en el que estaba, tenía que aprender a usar un lenguaje de programación de Navision financials que era vomitivo! el C/AL. Lo intentaba, pero por mas que lo intentaba era incapaz de hacer cosas con aquel lenguaje… incluso ahí traté de entender el lenguaje de programación C/AL en comparación con lo que había aprendido programando db3. No podía! y terminé enganchandóme de nuevo al PHP, ya estaba empezando a jugar con mas soltura la consola gnu/linux y empezaba mis pinitos con el bash scripting. Pasó el tiempo y mi interés por el C/AL decrecía, estaba centrada migrando el NT4 a active directory, ahí aprendí muchísimo de windows, directamente a las tripas! además que tenía ganas de estar con gente y atendía con excelencia a los usuarios. Mientras había algunos problemas en casa, el trabajo era mi sitio de huída, hasta en 2009, que la empresa hizo un ERE y me quedé en la calle… como ya me lo olía, me puse a buscar trabajo “por si a caso”, para ver lo que había en el mercado laboral, como asomar un poquitín así la cabeza… pam! ERE (también admito que mi rendimiento había bajado un poco porque me estaba entusiasmando con otras cosas) a la semana siguiente ya estaba en una consultora.

Ahí pude crecer mucho a nivel técnico, entendí la importancia de muchas cosas de mi antiguo trabajo, además meses antes de tener que irme de la otra empresa, me habían apuntado a un curso de nosecuantasporrecientas horas sobre el plan general contable del 2009. Para mi aquel curso era como las libretas éstas de contabilidad, con un lado rojo o azul, que sirve para marcar todas las entradas y salidas de dinero, con una serigrafía de como si hubiesen puesto una jirafa dentro de una lavadora. Al ir avanzando el curso, pasaron muchas cosas, incluso desaparecí durante un mes (nadie a excepción de mi jefe y la casera sabían donde me escondía de todo durante aquel mes de Marzo), con mi portátil y un cdrom con una instalación offline de freeBSD y también de gentoo… tenía el móvil parado y estaba usando otro telefono con otra sim para si necesitaba el móvil para una emergencia. La casera era psicologa en un colegio, no supe aprovechar la ocasión, simplemente me encerré en mi. Apenas recuerdo nada de aquellos días, sólo algunas imágenes de momentos que me reservo.

El cambio de trabajo me hizo espabilar, prepararme para dar el salto a empezar a crecer como persona, a hacer lo que realmente te gusta. El trabajo lo disfrazaban todo como muy bonito, pero ahí había cosas estrañas con los contratos o que mi forma de funcionar quizás no les estaba encajando, yo hacía el trabajo que me pedían, pero siempre era como que no estaba nunca bien del todo… esto me convirtió en una persona mucho mas exigente. Además de herida por lo ocurrido durante muchísimos años, exigente y con miedo a los cambios.

Finalmente en 2011, 10 años mas tarde de haber empezado a trabajar como informática, después del 15-M, guifi.net, de los hacklabs, las casas okupas, la chispa de estar siempre haciendo cosas y de estar siempre arriba y abajo, atareada para ocultar mis demonios, mantener la cabeza ocupada y en continua conversación y poco a poco ir desconectando de lo que realmente quería, estaba ayudando a los demás porqué yo quería simplemente ayudar a los demás, para tratar de recibir su aprobación, pero estaba rodeada de gente muy tóxica, en aquella época no avancé absolutamente nada a nivel de programación, si quizás a nivel de sistemas y redes gracias a un proyecto en el que estaba en la consultora y guifi. Hasta que mi cuerpo simplemente dijo basta, no me acuerdo de si días antes del summercamp, ahí simplemente fue cuando desaparecí de la órbita. Terminé con las cosas que no podía dejar sueltas y el resto simplemente lo tiré por la ventana.

Me pasé los siguientes dos años dando vueltas por toda la península, dando charlas de guifi.net, administrando servidores, aprendiendo sobre wordpress, mediawiki, mailman, mikrotik, networking, internet, etc. poco a poco entendiendo realmente como funcionaban los sistemas por detrás, como mejorar su rendimiento y sobretodo su estabilidad, muchas veces desde una óptica holística, de sistemas que interactúan unos con otros (todo rollo muy cyberpunk!), y todo ésto con unos recursos mínimos. Máquinas que nos traía la gente. Todo ésto que venía de hacía meses atrás, en aquellos alrededores de los 2012, se estabilizó y permitió desarollar la parte más lógica del proyecto, el interactuar con la inteligencia de las máquinas, de que puedes controlarlas… ahí me puse de nuevo con la programación, mas concretamente con bash scripting, la idea era automatizar los errores que iban apareciendo en el sistema, a modo de parches hasta que pudiese solucionar definitivamente el problema, pero como estaba sola, no avanzaba, simplemente trabajé de forma casi inconsciente en hacer que cuatro chatarras pudiesen dar servicio, no a mucha gente, pero que oye! parecía que si que sabía cuidar alguna cosa y no se me daba mal, y los usuarios confíaban en el servicio que estaba ofreciendo, ¡ésto era nuevo!

La cosa fue avanzando hasta que un día salió la necesidad de generar un panel web para gestionar una centralita de telefóno, andábamos ya por los 2013 o 2014 mas o menos, junto a craem, hicimos una pequeña herramienta bastante funcional y permitía a una operadora no técnica administrar una centralita de teléfono, el servicio y el sistema estaba funcionando, y la empresa a la que le implantamos la bluebox, estaba descontenta porque el programa no era capaz de conectar con la aplicación que les estaba haciendo un desarrollador… yo ahí estaba abrumada, no era capaz de hacer lo que me estaban pidiendo, pensé incluso de dejarles directamente acceso a la base de datos… pero ésto era acceder a la máquina y ver la purria de código que hacía funcionar todo aquello (también el desarollador de la web del cliente era un poco estúpido y no me decía exactamente lo que quería). Siempre me he avergonzado de mi código cuando lo enseño, pero cuando lo programo, me enfado con él, y luego cuando veo que funciona me enamoro de aquel pedacito de código o incluso notar como poco a poco el programa se convierte en un monstruo y me siento mas responsable… ésta sensación la tengo con la whale, el programa que empecé a programar a partir de la bluebox (la bluebox se basaba en el db3, el software de la imprenta) pero mejorando muchísimo el código.
Vamos que aquella empresa dejó de usar nuestro programa y se llevó con él a la persona que controlaba de la parte de asterisk. Pero no perdimos el contacto, seguimos implantando una centralita en capa8, ahí tuve que currarme todas aquellas ideas que me habían dado de mejoras en el programa y poco a poco las fuí implantando, iba mejorando el código y cuanto mas avanzaba menos tiempo tenías que invertir a gestionar la centralita y aumentabas el rendimiento… ¡otra vez! las maquinas están para ayudarnos y saber decirles lo que tienen que hacer, hay que interactuar con ellas!

Paralelamente la whale, que lo empecé en abril de 2016, tuvo varias fases, ya en una fase muy temprana empecé a usar git para poder desplegarla de forma automática o semiautomática (antes, cada vez que editaba un fichero lo subía por scp al servidor en cuestión), tuve que hacerlo porque tenía 2 whale en producción, la de lamardebits y la de capa8 (como curiosidad, la carpeta donde está la whale es lmdb). Con los otros dos chicos de lamardebits estoy aprendiendo mucho de sistemas, también a tratar de ir mas relajada, han habido momentos duros, pero ahora estamos en uno de muy dulce :)

A medida que iba desarrollando la whale, iba mejorando a veces cosillas de la bluebox, además un día me cansé del código de la bluebox y en un mes desarrollé casi desde 0 la bluebox, si ahora miras el código de la bluebox, podrás ver como programaba hace 2 años. Últimamente no tengo que tocar mucho la bluebox, salvo hace unos meses que tuve que hacer que la bluebox fuese multilingue, mas o menos por aquellos días también surgió el problema de un cliente de capa8 no aceptase una factura en catalán y tuve que editarla directamente con el inkscape, vamos superineficiente si nos lo pedían los clientes, así que me puse a saco a hacer la bluebox multilingue y cuando terminé me puse a hacer la facturación multilingue, en aquel momento no tenía tiempo para programar, así que hice un apaño, pero me anoté lo de revisar el código de la whale a fondo para ver como implantar la propiedad de multiidioma a la whale. El diseño base no es malo y permite a veces poder hacer ciertos frankensteins que quedan bastante bien cosidos… con el tiempo los mejoro e integro. Contínuamente voy revisando el código cuando se me hacen peticiones o los dos usuarios que tengo de éste programa no me usan las cosas que implanto o se quedan que es un rollo hacer algo, luego trato de darle un par de vueltas como agilizar el proceso y pam! aparece una nueva idea para avanzar.

Ayer fue un día de éstos, llevo unos días tonteando con el código de la whale, terminé la parte de proveedores, para agilizar la entrada de facturas de proveedores y poder así seguir con los libros contables, pero me apareció una idea para resolver una petición muy compleja de uno de los dos usuarios, el agilizar la creación de un documento (presupuesto, factura, etc.), ahí me animé y me puse a poner crucecitas de + en la tabla de usuarios, incluso le daba alegría un poco de verde entre tanto azul! y estoy de nueva enganchada a seguir mejorando el código… pero ésta vez es un momento de salto, supongo que también un poco una representación de como estoy internamente durante todos éstos días, que todo parece super plácido, tranquilo. Ayer, después de volver a llamar una función dentro de una función, decidí empezar a usar objetos y crear mis propias clases. Así que hoy me he puesto con ello, por la mañana tonteaba con la cabeza mientras le hacía una clase muy básica de programación en PHP a un chico de la oficina (además sin zapatos!) y por la tarde ya me he puesto a ello, pero me he atascado, me he agobiado un poco y cuando me he dado cuenta, he dicho, me voy a casa! en el viaje de vuelta, seguía mosca con que era lo que fallaba, además a medio camino empieza a charlarme una persona que me ha ofrecido su ayuda, pero como siempre, ¡PHP es una mierda! pero al llegar a casa finalmente ha terminando explicando donde estaba el problema, pero no era capaz de verlo… finalmente, tras analizarlo comparando la corrección que me ha hecho él y lo que tenía yo, lo he visto! en aquel momento algo ha hecho click en mi cabeza! la frase que había leído centenares de veces cada vez que me leía la documentación de las clases y los objetos, apareció de nuevo, pero ésta vez desde mi boca! una frase tan simple como “La classe es la definición del objeto” ha sido reveladora, ahí mi cabeza ha empezado a reestructurar el código y pensar cuál es la mejor manera para mejorar más aún el código.
Estaba tan entusiasmada que he seguido charlando con “el muso”, que he empezado a analizar un trozo de código de muy pocas líneas que hacía muchas cosas, y tratar de asociar lo que sabía de PHP a Python… a lo mejor trato de volver a mirar hacia Django… ya veremos! me estoy dejando llevar por lo que realmente quiero y necesito.

Cuando he decidido abrir el ordenador para anotar éstas palabras, que en un principio iban a ser sólo cuatro líneas, estaba reviviendo las sensaciones y las ocurrencias de éstos últimos días con la programación, las veces que he pensado en ella, sobretodo éstos dos últimos días y me ha venido a la cabeza una imagen de los objetos conectados a lo que aparece en la pantalla por vías en el suelo, los objetos se hallaban primero por el centro, pero poco a poco se iban extendiendo a todo alrededor, los objetos se representaban como pilares de madera, como de árboles huecos con vida dentro, la vida de dentro son las clases, lo que forman el alma del objeto, lo que permite hacerle llegar una orden con una información y devuelve un resultado o realiza una acción. Es como si el programa fuesen las manos ciberneticas del programador, y con una magia especial el programa cobra vida y pasa a ser un miembro mas del equipo, éste no pide un sueldo, éste pide horas, el dedicarle tiempo. Es como tener que cuidar el niño interior, como siempre estamos pendientes de lo que ocurre fuera, si un programa nos trae un beneficio lo mejoramos para que sea mas eficiente, en el interior, tenemos también un programa, pero muchas veces nos olvidamos de él, porque lo que nos aporta éste programa, muchas veces nos requiere mucha energía y de forma inconsciente solemos escapar, y es que éste programa, además de tiempo, requiere introspección, el pararse, el estar presente y ésto no es siempre fácil, para que haya tranquilidad interior, tiene que existir tranquilidad exterior, buscar cosas que nos hagan seguir avanzando y poder identificar aquellos destellos a través de los hechos diarios y cotidianos.

One Comment

  1. A parte de tu proceso de desarrollo personal, es interesante tu proceso de empezar viviendo la programación como algo ajeno y externo a ti, y poco a poco ir viendo las similitudes entre la programación profunda y el funcionamiento humano.
    En parte es lógico, los sistemas de programación están desarrollados por humanos, por lo que es normal que tendamos a desarrollar herramientas de programación que tiendan a reproducir la manera en que funcionamos internamente. Seguramente los programadores que desarrollaron esas herramientas no eran muy conscientes de que eso era así, pero si vieron que les era más fácil manejarse de esa manera.

    Me alegro de que hayas descubierto el uso primero de funciones y después de objetos y clases. Siguiendo con el guión de tu texto, podríamos decir un objeto es una “entidad” que solo sabe hacer una cosa (o algunas pocas cosas, pues si hace muchas seria mejor fraccionarla en subobjetos) pero la debería saber hacer muy bien. Y ella misma ya sabe que datos necesita y que datos saca. Es como tener un “guerrero” muy bien entrenado y que es muy bueno y estricto cumpliendo su “misión”.
    Y por una parte vas trabajando en el programa global y por otra vas “entrenando” a cada “guerrero” es decir afinando el algoritmo que lo maneja, y si hace falta “le enseñas” a manejar algún dato más. Y puedes trabajar en el programa o en los objetos, sin interferencias.

    Hacer un buen programa es como hacer un viaje. Tienes que ver donde estás y a donde quieres ir, es decir, que datos tienes (y como los guardas) y que datos vas a obtener. Por mi experiencia en esta parte es donde se suelen hacer las grandes “cagadas” de programación, y luego en todo el resto ya vas de culo “parcheando lo imparcheable”. Y una vez tienes eso, tienes que ver que medios necesitas para poder hacer ese viaje.

    Es aquello de “actuar localmente pensando globalmente”.
    Primero piensa globalmente todo lo que tienes que hacer, organizando bien la estructura de datos y su proceso, la interface humana o con otras máquinas, y siempre pensando en “que pasa si”. Que pasa si el sistema crece, ¿colapsará? ¿cuales serán los cuellos de botella? ¿si el sistema resetea en plena operación como afectará y como recuperará sin daños? ¿es coherente todo el planteamiento de estructura de datos y procesos?
    Solo cuando tienes claro todo eso se puede empezar a entrar en detalles y programación (escoger la mochila, los zapatos, el vehículo, etc).
    Ya después te vas a encontrar siempre con cosas que no se te habían ocurrido y te obligan a replantear alguna cosa importante, pero si no has hecho eso, al final lo tienes que cambiar todo y es como empezar de nuevo y además todo es una chapuza reparcheada..

    Los que han aprendido a programar con Gigas de RAM y de disco duro no suelen prestar atención a los recursos que está usando cada parte de la aplicación y por eso muchas veces los sistemas colapsan sin que nadie se lo espera y generan un código que ocupa y consume una burrada de recursos.
    Los que aprendimos a programar con 16Kb de RAM y cinta de cassette (uno ya tiene unos añitos, jeje) prestamos mucha atención a ese byte de más o de menos que puede parecer insignificante en un registro, pero que en una base de datos con cientos de miles de registros son cientos de miles de bytes, y lo que eso va significar de tráfico conjunto y de espacio de datos. Ejemplo: ¿si algo lo puedo hacer con “Byte”, porque usar “Double”?

    En fin, no me enrollo más. Gracias Blackhold por compartir tu experiencia.

    Respon

Respon a Josep Vergés Cancel·la les respostes

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.