Editorial: @idabzo
“And when I fail, I carry those scars with honor. After all, to cycle, you must open yourself to the possibility of bruised knees.”
Before I learned how to cycle, I was really eager to feel how my peers felt balancing their bodies on two moving wheels. An activity they particularly seemed to enjoy with their infectious smiles ear to ear. And surely, I did put work into it and learned how to cycle. Afraid of getting bruised while at it, but knowing at the end, would be a boy who knows how to cycle and pedals with a smile.
Now, I am a bit older, and while I’m not learning how to cycle, I am learning how to build software. How to hack. How to be a good computer scientist. How to be a multi-passionate human in STEM. And these, like in the younger years (lol) comes with struggles. Struggles that sometimes are unique and sometimes not. It’s the 7th week of my Outreachy internship at Nix@NGI and these, have been my struggles.

The part I use NeoVim
barbar. mason. lsps. conform. formatters. All these sounded gibberish when my mentor, @eljamm, walked me through configuring and using NeoVim (I use Kickstart, btw). Coming from using an already configured editor (read VsCodium), I was not aware of the small, yet significant parts that work together to make a ready-to-use IDE. Unlike most graphical IDEs, which ship with these parts, that is not the case for a TUI editor like NeoVim. You want a tab bar, install barbar. You want to catch warnings, errors, and other language intelligence tools, install mason and the language LSP. Ooh, you want to format your code in a particular style, then install conform and the formatter you want. This was not apparent to me and I believed all editors have them natively.
So the struggle began. To re-learn NeoVim and this time, with awareness of these parts (plugins) that bring features to the editor. The Lua language which exposes the Nvim API added complexity. All this while my project tasks still needed to get done. You may ask why not continue using the easier, more familiar editor. And honestly, I do not have an answer. What I know is that I now love understanding the abstractions. Difficult, bruising, but I am still pedalling.
The part I learn Nix
# I use NixOS, btw :)
Once you know one language, know loops and conditionals, learning a new language should not be that difficult. That is what *they said. Until you meet a purely functional, declarative language that has an entire ecosystem around it. The language, the package manager and the OS. Nix is not one thing. It’s many things, everywhere, all at once. When I started the internship, I struggled connecting these parts. How the language is used to make derivations. Then, how these derivations are used. Not withstanding, before I started writing a loop in Nix, Flakes entered the room. And now I had to figure out inputs and outputs.
Learning Nix has been slow, bruising, and rewarding. Slow because sometimes I only understand half of what my mentors teach. It feels discouraging when I have to read a concept over days. But when I finally get it, it is as if there is nothing better I was meant to do in this world. I go through it with my mentor again and this time, I can work on a task alone. But soon after, another concept. A few days of relearning and wooop, I got it! It’s a loop I’m enjoying. Witnessing progress in pedals made, is all I need to know that the boy will cycle.

The part I get challenged
People. Pairing. Learning. There is intense effort in our line of work to have machines build software. Essentially, one software, building another. However, people remain the best bet to create softwares with a soul, an intention, and a love for the game, that I do not see machines having. And these are the kind of people I work with at Nix@NGI. People with an intention so apparent, I sometimes struggle keeping pace. What takes me hours, they figure in minutes. They see between the cracks where I cannot tell there are any. I have caught and sometimes beat myself for ‘falling behind’, for not knowing, for being a human who is learning.
When I began the internship, pairing sessions with my mentors were the most dreadful. “Will they think I’m dumb or I’m not learning fast enough?” I would ask myself. You know, that human instinct to think you should know ‘it’ already. However, I gradually leaned into the discomfort of not yet knowing and I look forward to these sessions now. Because if I don’t know, I have the opportunity to ask. Again and again, until I understand. I’m embracing these teachable moments because truly, they are why building software feels human, feels like personal growth, and most importantly, it is where learning happens.

Whenever I’m bruised, confused, ashamed and struggling, I remember that to cycle, I must be willing to get the knees bruised. The boy must cycle. And cycle smiling.