The last few days I’ve been stubbing out a prototype api with Go. Like Elm, I’ve circled around Go a few times but haven’t used it much (other than poking around the minimalchat daemon). For a time, I was listening to a lot of the podcast Go Time, but wasn’t writing much Go code. You know. Just circlin’. Hoverin’. Rubber Necking. Yeah.

This time around, I’m havin’ a grand ol’ time! Working through some of Build Your Own Lisp stuff has definitely made me more comfortable with the syntax of lower level / system level languages (still much work to do on the more complex topics though). I think, originally, the surface-level appearance / ecosystem of Go turned scared me off:

The GOPATH

I was not a fan of the GOPATH originally. Uh…still not sure about it, but I at least have a respect for it’s pragmatism and purpose (much of which I’m sure goes over my head). When I first started poking at Go I was thrown off at the idea of organizing my code with the Go project dictating where folders should be on my computer (in a fullstack setting that is). Beyond that, the typical arguments/frustrations at the dependency story was also on my mind. But! Modules have landed on 1.11 and so that incentivized coming back to Go. Little things. And besides, maybe the people who designed AN ENTIRE language, kinda, like, know what they’re doing. It bums me out when I catch myself complaining about open source. Open the mind! Open the $GOPATH! Summon VSCODE and activate GoFmt on save for NO MANA.

The Syntax

In general, I have little production exposure to strongly typed static languages. Other than poking around at Java for use with Processing, it’s just out of my wheelhouse. That lack of experience made the first few tries with Go painful and confusing. But again, the BYOL C stuff and doing a bit more Java recently has made things feel much more approachable. It sounds obvious perhaps, but I’m just happy seeing a relatively correlative line between powers of deduction and general experience programming. Progress is there, if sometimes under a magnifying glass.

At least with syntax, anyway, It’s nice to think, “Oh, that’s just like a closure in javascript, but with some extra words surrounding it and describing it”. Yes! What’s this?—it was no big deal all along? What’s more?—The Champions of Knowledge are lining up along the sides of a newly unveiled bridge in my mind? A ribbon cutting ceremony for me? Confetti? Wow! I must be very special and important. etc etc

So. That. Is. Exciting!

Tangentially related, and I don’t know why exactly yet, but I also love the idea of single file executable that comes out of working with a language like Go. I don’t know why it’s so appealing to me. I just love the idea of a single box holding everything I need to perform a task. It certainly sounds like it makes deployment and dev ops waaaaay easier. There just seems to be less ceremony than having to run around with runtimes, searching through bins for the right version and it’s subsequent package manager etc etc.

I don’t know what direction this is heading, but I’m glad to be doing something I’m familiar with (a plain ol’ crud REST API’s) with something new. In some ways I’m still cringing at the syntax after writing a lisp—things feel verbose, chunky and repetitive—but I can see what I’m learning here as definitely applicable in other places. Maybe this will slowly chip away towards doing some stuff with hardware, or maybe building some audio or midi tools with C or even Rust. Gotta start somewhere.