Reaprendiendo a programar
Estos días ando un poco perdido y apenas tengo tiempo para escribir en el blog. Como me consta que hay quien lo sigue y lee casi cualquier cosa que escribo ─no entiendo muy bien las razones, pero alguna tendrán─, he decidido contar un poco qué ando haciendo estos días para estar tan ocupado... estos días de aislamiento y cuarentena, cuando se supone que tenemos tiempo hasta para hacer pan o repostería.
Sin embargo, he estado liado, no creo que haga falta contaros toda mi
vida. El caso es que he estado muy liado con un curso de seguridad
informática para psicólogos, que ya está completo y colgado en la
plataforma virtual del Colegio de Psicólogos a la espera de que le den
el visto bueno y decidan abrir las inscripciones para el público. Es
el primer curso que realizo para la plataforma moodle
y estoy
expectante, ─y también algo nervioso─, por ver si funciona bien o no.
El resto del tiempo lo he dedicado a largas siestas y a rascarme el ombligo... bueno, no exactamente: alguna siesta ha caído, evidentemente, pero también estoy en medio de otras cosas y proyectos personales. Ya hablé por aquí de que quería aprender erlang durante esta cuarentena y en ello me hallo. Me leí un par de libros haciendo ejercicios que proponían e intentando comprender cómo funciona el lenguaje en sí. Pero la mejor forma de aprender es utilizándolo. Durante el aprendizaje de erlang me acompañó un colega del CAAD y ya puestos nos metimos en un proyecto de aprendizaje. Me permitiréis que no hable del mismo, porque cada vez que hablo de un proyecto acaba en vaporware. Así pues, me guardo los detalles. Sólo diré, como se puede deducir, que siendo erlang el lenguaje, tiene que ver con un sistema concurrente cliente-servidor, y que, siendo ambos del CAAD, es un proyecto lúdico.
Ese proyecto de aprendizaje me está obligando a redescubrir herramientas, que si bien venía utilizando, lo hacía de una manera más superficial o completamente distinta a como las estaba utilizando hasta ahora. Por ejemplo, emacs se había convertido en mi editor por defecto, pero curiosamente escribía poco código con él, lo que más hacía era utilizarlo para escribir documentos, consultar la agenda, etc. Igual que también utilizo git, pero no de la forma que lo estoy haciendo ahora.
Redescubriendo herramientas
Como podéis suponer, mi editor de trabajo por defecto es emacs. Bueno, por defecto y sin defecto, es mi editor y basta. Realizar un proyecto de programación trabajando con él me ha hecho redescubrir muchas cosas que aunque ya las conocía y las utilizaba, la perspectiva personal sobre las mismas se ha visto modificada por el uso continuo.
Sobre alguna de esas herramientas ya he hablado aquí y no quiero hacer un artículo demasiado profuso y aburrido sobre algo de lo que ya hablé en su día. Pero dejadme puntualizar algunas cosas.
Git y Magit
Hasta ahora mi trabajo con git ha sido bastante plano y simple. Es
decir, aunque lo he utilizado en muchas de mis cosas, mis repositorios
apenas tienen ramas. Por ejemplo, la contabilidad, que la llevo con
Ledger-Cli, ya lo conté por aquí, tiene un repositorio git donde
voy actualizando los gastos y las facturas. Sin embargo, no hay
ramas, es un repositorio unipersonal muy sencillo: git commit
, git
push
y nada más.
Este blog también tiene su repositorio. Vale que tengo una rama para borradores de artículos y la principal para publicarlos. Pero también es un repositorio unipersonal y lineal: las ramas no se mezclan, no se cruzan, hay dos ramas: una para escribir y otra para publicar. No hay rebasado ni mezcla entre ellas.
El utilizar git para programar, en un repositorio compartido y con una profusión de ramas a la que no estoy acostumbrado, me está obligando a aprender cómo funciona git en realidad, con un ejemplo concreto de lo que es un repositorio de desarrollo. Me obliga a aprender a hacer rebases y merges.
Redescubrir git implica que estoy redescubriendo también magit
.
Todo lo que aprendo nuevo lo hago desde la línea de comandos. Eso me
permite con posterioridad hacerlo desde magit
con más conocimiento
de causa. Desde el buffer de magit-status
se pueden lanzar un
montón de comandos pulsando una sola tecla: commit
, pull
, fetch
,
push
, rebase
, merge
, log
...
También, me he encontrado algún problema. Es decir, no problemas por
mal funcionamiento de las herramientas sino por despiste del usuario:
como estar convencido de estar en una determinada rama y estar en
otra. Eso me recuerda que siempre, cada vez que voy a realizar alguna
acción tengo que pulsar C-c g
, ─la combinación de teclas para el
comando magit-status
que tengo asignada─, y comprobar que
efectivamente estoy en la rama que debo estar antes de hacer un
merge
o un rebase
.
Projectile
Hasta ahora tenía instalado Projectile para la gestión de proyectos, pero apenas lo utilizaba. Tampoco es que haya dando un salto cuantitativo con él, creo que apenas lo utilizo un mínimo porcentaje de toda su funcionalidad, tan sólo estoy utilizando unos pocos comandos con profusión y con el nuevo proyecto le he encontrado alguna función interesante:
- Compilar:
C-c p c
. El proyecto cuenta con unMakefile
que hace todo el trabajo, incluso con un comandomake run
que compila y lanza el proyecto de forma automática, pero lo veremos después. Le puedes decir a Projectile que lo utilice en lugar del escuetomake
. Si hay errores, en la ventana de compilación puedes navegar por los errores de forma sencilla para solucionarlos. - Buscar en el proyecto:
C-c p s g
. Busca una expresión en todo el proyecto. Bueno, esto lo utilizo más cuando escribo en el blog, porque me permite buscar en todos los ficheros y saltar al que me interesa desde la lista de resultados. - Abrir fichero:
C-c p f
. Muestra una lista de ficheros que pertenecen al proyecto y es más fácil buscar el que te interesa, al menos en proyectos pequeños, que navegando conDired
. - Ejecutar el proyecto:
C-c p u
. La primera vez que lo llamas pide el comando para iniciarlo. En este casomake run
, luego cada vez que lo quiero lanzar es suficiente con la combinación de teclas. Hay que tener en cuenta que en esta ocasión lanza también un entorno erlang y que hay que pararlo para hacer más pruebas. - Cerrar los buffers del proyecto:
C-c p k
. Hace un kill de los buffers abiertos del proyecto. Algo que me viene muy bien porque suelo utilizar emacs en su modo daemon. Cuando cierras la ventana de emacs los buffers siguen abiertos, por lo que cambiar de actividad, pasar de un proyecto a otro puede sobrecargar el editor con demasiados buffers abiertos. Cerrar de forma selectiva un grupo de ellos es muy útil.
Erlang y erlang.el
Cuando comencé con el erlang me pareció un lenguaje muy marciano. Bueno, sigue pareciéndomelo, no es comparable a otros lenguajes que conozco y tiene una sintaxis un tanto extraña.
Después de varias semanas trabajando con él me encuentro cómodo y poco a poco mis esquemas mentales se van adaptando a otra forma de pensar y hacer las cosas.
Un problema con el que me he encontrado es con el indentado, ya sabéis lo especial que es emacs con los indentados, precisamente porque delega en los modos este aspecto, resulta un poco caótico. Depende de los gustos de quien haya programado el modo. No siempre esos gustos coinciden con todo el mundo.
Concretamente, me estoy acostumbrando a no utilizar TAB
para
realizar la indentación, porque lo hará al modo establecido en
erlang.el
y sí a utilizar M-i
que, tiendo tab-width
establecido
a 4 espacios, realiza la identación sin llamar a lo establecido en el
modo y haciendo los saltos de cuatro en cuatro espacios.
Conclusiones
Pues a estas cosas me estoy dedicando y es curioso, redescubrir herramientas que creía ya conocidas y cómo les encuentras ese detalle que te facilita aún más la vida.
El comprobar que emacs tiene más recovecos que los que se ven a simple vista tampoco es algo nuevo, a poco que hayas trabajado con él. Sin embargo, cada vez que trabajo con él, tengo la sensación de que apenas he rascado un poco en la superficie de las herramientas que proporciona. Siempre aprendiendo, siempre descubriendo y eso hace que mi curiosidad se vea incentivada.
No he querido hablar del proyecto en concreto, está en una fase muy inicial y avanzamos muy despacio, intentando hacer las cosas correctamente, con el lastre añadido de que es un proyecto de aprendizaje. Efectivamente, estamos ─al menos yo─ aprendiendo mucho: sobre programación funcional en general, sobre erlang en particular y sobre emacs y sus herramientas, de modo tangencial.
Comentarios