smol projects

learning to walk (program) again

3 min read

I came across an interesting CLI library the other day, which was written for Go. I don’t know the first thing about Go, but there was a similar library for bash. I got my hands a little dirty with Gum (that’s the bash equivalent), and had a decent time.

It turns out that charm-cli, or charmbracelet on GitHub, has a slew of cute, quirky CLI apps - mostly written in Go. I thought to myself:

“This is cool. The Go ecosystem seems sick. Maybe I’ll just go learn it. I’m a programmer. Everyone says Go is easy to pick up. How hard can it be?”

Harder than I expected, it turns out.

First, I struggled with the syntax. Did the parens for a function’s return type come before, or after the function’s arguments? What’s the difference between var and :=? Then, I got frustrated with the tooling. How did imports work? Why does Go keeps complaining about modules in PATH? Then, I wrestled against the new concepts: What’s dereferencing? WTF is a receiver?

At this point, I’d had it. “Go just sucks”, I reassured myself. “It’s not worth it.”

And then I met Rust.

Almost everyone (and when I say everyone, I really do mean everyone) who’s worked with Rust wants to do it again. Everyone can’t be wrong.

How hard could it be?

Well, it turns out… Very hard.

And I really want to talk about expectations here.

  • I expected my prior programming experience to carry me some of the way there. But what basis could I possibly have for that expectation?
  • I expected to get up and running, and be at least minimally effective quickly. But again - why?
  • I expected for it not to be too difficult. After all, people say it isn’t.
  • I expect to like it (the verdict’s still out on this one).

I’m not a programmer by training - I studied business. When I first started programming, I could barely understand the DOM. I couldn’t figure out how to use CSS classes. I had dreams (nightmares) about loops in Ruby. Those things were new at the time. These things are new, now. Why should this time be any different? It will be difficult - I see this now. My expectations should be adjusted accordingly.

I used to have a certain mental framework when it came to learning something new:

  • If I’m coming across something for the first time, I should not expect to understand it. It’d be great if I did, but I should be content to know that something exists.
  • On the second pass, I should remember having come across it before.
  • On the third, I should try to absorb something
  • On subsequent encounters, I should build on the base that I’ve created, little by little. Kaizen.

Seemingly, I’ve forgotten this! When something becomes easy, we tend to diminish how hard it was in the beginning.

He who would learn to fly one day must first learn to stand and walk and run and climb and dance; one cannot fly into flying.

And so, I’m going to be nice to myself.

I’m going to take it slow, and enjoy the journey. If there are sights to see along the way, all the better.

Remember to be nice to yourself, too.

Built with Astro and Tailwind 🚀