A Potential Rust Learning Project Group

This would be awesome! Rust does have a steep learning curve. Having a steep learning curve is only bad if there is no one there to help. Ironically, I took on the challenge of learning Rust just on the fact that it was difficult.

I will answer some questions based own my experience. I had two attempts in 2020 at learning Rust, and it was not until the second attempt that I started to get it. Thanks to videos by @rylev and @jonhoo, The Book, and other materials. I still do not understand everything, nor do I think I need to understand everything and might even be unsafe to do so. In my opinion I do not think there will be a one solution fits them all based on how we learn, experiences and current programming environment. I have over 20 years of programming with various languages and environments. Currently .NET and C#. With that experience I still could not get Rust. It is difficult but not impossible. Part of my learning was to unlearn what I have learned over the years. I also think that part of learning Rust was to know what it can do as of now and what it can do potentially in the future. One might not want to learn Rust because it can not do XYZ, but it might be able to soon. Needs based.

My learning is based on doing, give me an end goal then start to work towards that end goal. As I walk through those steps, I am learning without knowing that I'm learning. Show me outcomes as I get there. I used a book that I use to learn programming concepts, The Ray Tracer Challenge by Jamis Buck. Here is my outcome from that book rustic-ray. The book is great because the language is pseudo code. My point is that the book walks through progressively more difficult coding paradigms leaving the implementation up to the reader and the language they use. Challenging me to learn how to implement and learn aspects of Rust using a real-world program. How to use traits, how to struct data, if doing bidirectional cyclic data struct is challenging how else can you solve the problem. Move beyond the book and try multithreading. Try to implement cyclic bidirectional data structure and would RC<T> help. How would you add a GUI to the app, my current challenge?

I enjoy progressive learning and when I get to things like traits, lifetimes, multithreading I have already learned the foundational things like struct, implementation, that learning the more difficult items are not convoluted with learning the more mundane things. Not only do I learn the language paradigms I also learn the syntax, cannot forget that learning includes syntax and file structure. I think repetition is good as well.

I think with Rust there is a lot that can go wrong because of the nature of being safe. Ironically and it might be counter intuitive to teach by correcting a lot of mistakes. They say we learn a lot by our mistakes. Teach by correcting code that does not compile. Teach by showing ways to fight the borrow checker and win! Teach how something does not work because of lifetimes and then correct it. Do not start with a project that works start with one that does not.

Teach the tools that come with Rust that might be more difficult in other languages or not built in. Teach how to document code, format code (fmt) and write code idiomatic using clippy. Once I learned documenting, I was blown away how easy it was, the ability to put example code that runs, and documentation that has a well formatted outcome at almost no cost to me. Next, I'm learning crates.io and publishing a library. Teach the whole rust ecosystem.

Rust by no means is missing this, just can be better and more. To compare learning Rust with other languages in particular Go, “The Book” was the selling point. Which works only if you learn by reading. Which for me is okay, because back when I started programming all I had where books, the bookstore, and a library, it was easy. But how can The Book be put into different mediums if reading is not the way? "The Video"?!?! The Rustlings was a good start as well, but my suggestion is to have that online. Trying to build something I don't know to teach me the thing I don't know was a challenge and a bit counterintuitive.

  • Teach by unlearning what one already knows. You won't get the same thing here as you do elsewhere.
  • Teach by using multiple mediums of the same topic, reading, writing, and watching. It is a challenge to read something but not have a video of the same thing or a sandbox to write the same code. The documents do well with running the examples.
  • Teach progressively baby steps, crawl, walk, run, drive a car! Going from safe ----> unsafe! Going from easy ----> challenging!
5 Likes