tips for learning rust 2019-12-31

I'll discuss tips from my experience learning Rust. And use the word "metacognition".

That name floated amongst hungry buzzwords of 2015. I probably saw it somewhere on the Internet. I meaningfully heard about Rust 3ish years ago from Carol's talk at Pittsburgh Techfest. I only seriously considered learning Rust in early 2018 and stumbled into a meetup that January. For those who have not wintered in Pittsburgh, imagine cold, dark, and more cold. The folks at Pittsburgh Rust Coffee, however, warmly welcomed me. Those few times I went encouraged me to keep learning Rust. I have now mostly committed.

How did I learn? What have I learned? What blocked or confused my learning? Metacognition is a term in teaching describing this process. It is "thinking about thinking".

I already dumped thoughts for exercism.io. Fashioning them into practical tips will toast year-end to my prolific posting.

reading books

I have read through the bulk each book and referred back to them frequently:

Both do excellent jobs of explaining the language and demonstrating concepts with examples. "Programming Rust" is more exhaustive and geared toward individuals who have had more programming experience. (There is a 2nd edition coming too) I enjoy print books because they help me focus and let me live screen-free.

working through the exercism.io track

I heard about exercism.io at the Rust and Coffee group. I only started working through the track earlier this year. Working on some exercises helped me apply my grasp of the language, but I got stuck on other ones. Given my humanities background I think some of the more mathematical exercises expose my lack of formal training for some subdisciplines. I'm looking at you pythagorean triplet.

One challenge in the Rust track has been the wait times for mentoring. Because it is a free service and depends on real people giving up some of their time I decided to chip in since it has helped me. That also taught me a lot as I had many opportunities to explain some concepts I had just learned myself. Given I am not cursed with all Rust knowledge yet, the fresh experiences have helped me teach others.

contributing to projects with responsive maintainers

In my experience contributing to an open source project varies as much as people do. I have been fortunate that two projects I have contributed to have generous and responsive maintainers.

  • rust-rosetta This project houses Rust solutions for the Rosetta Code project. euclio responds quickly to pull requests and gave great feedback.
  • tectonic tectonic is a self-contained TeX/LaTeX engine. Think typesetting for books and academic papers. I found it while detoxing from javascript-html-json-pdf conversion tools. pkgw responded quickly and welcomes any kind of contribution. I applied how to use structopt by migrating tectonic from clap.

My self-cynic says ok, so what, you made a couple of pull-requests. Why does that matter?

Barring deeper questions about the meaning this dismissal misses a key connection. I learned using structopt from euclio in one of my pull requests. I then saw the opportunity to do the same change in tectonic. This incremental growth, however small, has been a vital way that I continue to learn Rust. So don't feel like you have to author grand and glorious pull requests or everything from scratch. Small things matter.

building something, inviting folks to join

The company I work for, Innovu, enables clients to do data analysis using our web application. Users often need to export data into different formats. We had the need to export to Microsoft Word and I had the privilege to write that part of our application in Rust. It is closed-source project for now but is otherwise a find and replace tool for the once controversial OOXML format. Or, as I like to say, the other ECMAScript. Not aloud to other people of course.

Alongside this tool I have been rereading "The Rust Programming Language" with my colleagues. Similar to mentoring on exercism.io, I am far from a Rust expert but have nurtured further learning in these conversations.

auld lang syne

Hopefully some of this discussion has shown you additional ways to learn a programming language or motivate you to explore. I wrote about Rust because that was one topic I studied this year but you could adapt it to another topic just as easily.

My understanding of the language keeps progressing. My next goals are to finish the exercism.io track and find ways to assess and apply in depth learning. I have appreciated how learning the language has caused me to think differently about writing software. This is one of my reasons for learning Rust. You have reasons? Shoo cynic!

Thank you for reading. Until next erratic post time.