First, a bit of recent history for me…

Over the summer, I switched from my Ruby/Opal combo to Elixir/Elm.

Then I made the mistake of taking a whole bunch of months off from doing anything new in those languages while I was distracted by school work.

It became a big problem because after a certain point, I really wanted to get back into it, but I felt like I had forgotten it all. I had what definitely felt like writer’s block. But for programming.

So how did I get back into it?

It started by deciding that I wanted to learn Haskell as a way to get back into programming / make myself a better programmer. And though I didn’t really get very far with that, taking this step planted the seed of getting me back, by basically spending time watching conference talks/tutorials, reading relevant forums, etc. In short, I was starting to feel like a programmer again.

Then one day came the tipping point.

I was telling a classmate that I wanted to build my own kanji worksheet site and he proceeded to basically do what I’d call gatekeeping. I don’t completely remember the details since the text conversation is long since deleted, but I remember it being along the lines that it was pointless for me to build my own because I was still a beginner at kanji. I couldn’t possibly know what all a kanji learner would need. It seemed like his point was that, if I couldn’t build the most comprehensive kanji site with every possible feature that a learner could ever need, there was no point in even trying.

I took offense to it, because hey, I know exactly what I’ve been needing this whole time. I had spent the previous semester running a hacked version of this kanji project where I had tweaked the worksheet layout and it had worked out well for me, but there was still a bunch of conveniences I wanted to add to make it work even better. I didn’t need to please the whole world. I just needed to please me.

So for possibly the first time ever, someone pissed me off enough to get me to do something (generally I just internalize the hate and do nothing). And I set out to build the first version of my kanji site. Later that night, Kanji by Hayley was officially born and out in the world.

And I kept going.

Ultimately, I went on to build:

I was on a roll but I was also paranoid AF to stop or take a break because I had been back at it for such a short time, that I feared falling back into programmer’s block and obtaining programmer’s amnesia again.

And this was also why I hesitated to do any backend work in Elixir or Haskell, while I was on this roll. To me, my most exciting unimplemented ideas are all things that will be front-end based. And I knew how much of a sidetrack it was to start working on Elixir stuff last summer when I had been doing a lot of stuff with Elm. I basically stopped on Elm things the whole time I worked on Elixir.

So fast forward to a little over a month after the roll started and I hit a wall. I lost the desire to spend countless hours every night building new things. Knowing me, the burn out was inevitable regardless of how hard I had pushed myself. I think a big part was also the fact that, in theory, it’s great to build things for yourself, but it gets a bit lonely to be the only user of what you’ve built. Intrinsic motivation dries up over time and you have no extrinsic motivation to bolster you back up.

So at this point, I’ve basically got nothing to lose momentum wise (though I am still pushing ahead a bit with Elm stuff), because the massive momentum is gone.

So what a perfect time to learn Rust!

so let’s learn Rust

I’ve taken gambles before when chasing after new programming languages (“new” as in, new to me). First, was leaving Python to chase after Node.js. Fast forward a month and I’d accomplished nothing. I had stopped all work in Python (because I’m not good at being a computer polyglot) and managed to do absolutely nothing of substance in Node. So that didn’t pay off. It was just wasted time.

But…

Instead of going back to Python, I chased after something new again. Ruby. And Ruby ended up being my language of choice for a really freaking long time (with the exception of leaving and playing with Node.js again somewhere in the middle, then coming back to Ruby). So that gamble paid off in a big way.

This summer was a gamble too. Going from being productive in Ruby, to having to start over and learn elixir and elm somewhat from scratch.. well, it sucks. I’m not a programmer who can take a weekend and suddenly be productive in something new. It takes way longer for me. And sometimes I never become productive in the new tool.

But flashforward to today, and on my second round of Elm, I can say that I’m like 95% certain that the Elm gamble was worth it. I’m really starting to wrap my head around the whole Elm architecture. And it really feels like I’ve found the language that I’m going to be happy to stick with for front end work. More so than that, a language I’d even be eager to work in rather than just tolerate.

However, my last round with Elixir didn’t leave me any strong sensation now that it was definitely the right choice for backend work.

Elxir could still end up ultimately being my choice for backend work. Right now, I assume my new backend language will ultimately end up being one (or possibly more realistically a mix) of the following:

  • Elixir
  • Haskell
  • Rust

But I’m still chasing after what I’ve started to experience with Elm, which I guess can be best summed up as: I want to rewrite previous projects in Elm. Like, it’s somewhat killing me that I’m holding off on rewriting Tornado HQ’s live storm tracker page, because there’s so much I’d like to add/restructure now that I know Elm.

And I never experienced that “I must rewrite all the things” with Elixir. I’m not saying that I necessarily would feel that way with Rust or Haskell either, but…

so why Rust

I’d been hearing about Rust off and on for some time. I’d say it was bumping into two different projects that kind of were the tipping point for “okay, I’ve got to take a proper look at this language”:

  • IMDb ratings visualizer - I found out about it via Elm since the frontend was in Elm. But I was pretty surprised to look at the code and find that the backend was written in Rust.
  • ripgrep - I found out this stupid fast file searcher was written in Rust when I went looking for a way to search using unicode escape characters, though as of now, you can’t.

I’d say what mainly has me interested in Rust is:

  • chasing developer happiness
  • to build fast things

developer happiness

A big pull is that I just keep reading about people who are nuts about the language. As an outsider, I can’t see why. I want to know why though.

Eventually, I just kind of decided that Rust was something that I needed to sink some time into, to see if it would eventually click with me.

to build fast things

Rust seems like a good way to go about this. Speed was one reason I was attracted to Node.js back in the day.

Granted, I tend to think that, of the projects I’ve personally done, Tornado HQ is the only one where the backend itself needs to be fast. Everything else has just been a matter of making sure that the front end pages load snappily (mostly solved by building everything as static HTML pages).

Still I have the attitude that, if you can get speed “for free”, why not?

the theoretical plan

I’d say the plan would be to give it a go for at least a month. However, for that month, I’ll be trying to actively maintain my Elm skills by continuing to move forward on projects with that. But I still think a mixed month would be enough time to know if Rust is looking like something I’m going to love or something that just wasn’t worth it for me (hello, Node.js).

In all honesty, there are things like web scraping, and builing a multiplayer game backend, that I’m just not sure if Rust will be appropriate for. But it’s time to find out.