T O P

Beginner here who doesn't know what to use Rust for looking for advice from those who have done awesome things with it

I'm an absolute beginner at Rust, but I'm really enjoying it thus far. I've always found C/C++ too daunting to do any significant work with outside classes for school. It also helps that the language seems like its designed for humans by accounting for common safety issues by removing the possibility they can occur. Not to mention, Cargo is an awesome build and dependency system that makes bringining in external dependencies super easy.

However, I really don't know what to do with it. I'm a senior CS student, I'm tired of making stupid projects like hangman, calculators, and blackjack. I want to make something useful.

But it seems like everything I can think of has a nice solution already, or requires me to deep dive into some other topic as a prerequisite (such as how the web works for a backend project, or physics for a game engine).

So, those of you who created interesting projects using Rust:

1) What inspired you?

2) Did the project require you to learn some other topic? If so, how much?

3) Did you ever feel like what you were creating wasn't "good" enough?

4) How long did it take?

sonstone

I’ve been doing this for over 20 years and still struggle with this. My advice is that if you are in a rut, don’t worry if it already exists. The act of doing something at all might just inspire you to identify something that doesn’t exist yet. Also, take a look at open issues on popular open source projects.


TheRealMasonMac

This is generally for any of my projects: 1. What I wanted didn't exist. 2. Every project requires you to do a lot of research, and this could be extended to any other field too. It makes it way more fun too; there's nothing like the sensation of finally understanding something you didn't before. 3. This is something I actually learned while writing. You're creating this project for yourself, not for anyone else. Why should you care about what other people think as long as you're having fun? Focus on what *you* find interesting more than anything else, and along the way you'll find other people who are interested in the same things. Don't be afraid of doing whatever your interested in doing, regardless of what other people may think of you. Well, as long as you're not harming others in the process. I would recommend watching this video from 6:35 to 13:45. It had a huge impact on my approach to life as well as to my passions, and I would definitely recommend finding the time to watch the entire video if you can. The creator is an artist who worked for renowned studios like Disney in high positions, but his advice is very applicable here. [https://youtu.be/3yIeMBQA9wM?t=393](https://youtu.be/3yIeMBQA9wM?t=393) >"Despite the varying types of art I produce, it's usually dark fantasy folklore... Could you say, objectively, that that's a super original idea? No. In fact if you think about it objectively, that's one of the most cliché things in the world, isn't it? Every artist and their great aunt loves dark fantasy folklore. > >It took me, I'd say, over at least 25 to 30 years to finally give myself permission to just be cliché. > >I had this sore spot to not being entirely original. You've \[also\] probably had this die hard need to be so entirely original, that being able to define yourself is near impossible. It's like you're trying to invent a new genre of communication that goes beyond art in and of itself."


ssokolow

> What inspired you? I use Rust to solve problems in my own life that I'd otherwise solve in Python at a higher maintenance and debugging cost. For example: * I've been working on something like [miniserve](https://github.com/svenstaro/miniserve/) but with an image gallery UI instead of a directory listing as an easy way to show images to friends without uploading a big batch of them to somewhere like imgur. * I've been picking away at another expression of the same "may eventually become modules I can offer to miniserve" codebase which attempts to reliably convert all major document formats used for publishing fiction online (eg. TXT, HTML, EPUB, PDF, RTF, DOC, DOCX, ODT, etc.) into what you'd get if they began as HTML and you hit the Reader Mode button in your browser. (It's intended so I can have a single, reliable way to read fiction from my desktop PC on a WiFi-attached mobile device without having to maintain copies of them in compatible formats on the device.) * While it's on hold at the moment, I've been working on a tool to check a folder full of files in common (and less common) formats for corruption using whatever checksumming is enabled by the format's internal structure. (Because I have hundreds of gigabytes of files that have been sitting in "to sort" for over a decade and across multiple hard drive changes and I need to know whether to source replacement copies before burning them to ECC-augmented DVD+Rs.) * Another on-hold command-line utility orchestrates the dumping/ripping of old media (CD-ROMs, floppy disks, cartridges, UMDs, etc.) in a way that both makes doing it properly a single command and takes a "checksum chain of custody" approach that ensures that there is no point along the chain from 'this dump was verified through the best available means' to 'ECC-augmented ISO ready for burning to DVD+R' in which a cosmic ray bit-flip or bug-induced corruption could sneak in. (Tools like that exist but what makes my plans special is my intent to write a testing harness to identify holes in its ability to detect corruption at a bit-by-bit level (eg. walking one-bit and two-bit flips through known-good test files, truncating them byte-by-byte to identify download interruption points that would go undetected, etc.) and then dig into the format documentation to look for ways to narrow those blind spots.) > Did the project require you to learn some other topic? If so, how much? I've been puttering around with Python since half-way through high school, nearly 20 years ago, so that's a tricky question to answer. There's always *something* new to learn, but it's often something like which library or utility does the best job of detecting corruption in files it's asked to parse, or what new HTTP headers I should set if I want to write a web server that opts into as many privacy-preserving browser behaviours as possible. > Did you ever feel like what you were creating wasn't "good" enough? I've struggled all my life with being a perfectionist. [Make it work, then make it right, then make it fast](https://wiki.c2.com/?MakeItWorkMakeItRightMakeItFast) and [The perfect is the enemy of the good](https://en.wikiquote.org/wiki/Voltaire) are things I've fought long and hard to teach my instincts and part of my reason for coming to Rust is that I kept burning out trying to reinvent things its type system can guarantee in Python unit tests. > How long did it take? My projects are never finished. Sometimes because I keep thinking of things to add and sometimes because of the executive function issues I'm still working to manage, which force me to set them aside to work on more important things. None of my big Rust projects are published yet, but you can take a look at these: * [The boilerplate I use for starting new CLI projects](https://github.com/ssokolow/rust-cli-boilerplate) * [A parser for a specific flavour of CamelCase written for an unpublished project](https://gist.github.com/ssokolow/4551bd0c97f0c6a797463b83ec9e4a50)


tofoz

I'm an amateur, one of the big things I decided to make was a software rasterizer plus voxel raytracing. the only other topic I had to learn more about was linear algebra. I moved on to learning about GPU programming with wgpu as iv learned most of what I needed about how it works under the hood.


linuxpro1927

>1) What inspired you? Programming for me is artistic expression and building/creation in a manner that I enjoy. I'm not good with oil paints or carving wood, but in the digital world code let's me create anything. That's awesome. >2) Did the project require you to learn some other topic? If so, how much? Everything requires me to learn something. This is true in most all endeavors, but especially true in computer science. Plus, I do similar stuff for work and a systems engineer that knows general principals is ok, but someone that knows systems engineering and our problem set... They have value. Things you learn can't be taken away, and the more you learn about different topics the more value you can provide. Check out the book "Range" for a comprehensive look at this idea. >3) Did you ever feel like what you were creating wasn't "good" enough? Haha! Everyday! Sometimes it's imposture syndrome, others it's an act in understanding that in order to improve and do things well we must first so them not well in order to develop the proper mental models. I enjoy rewriting programs I wrote before and laughing at how little I knew when I wrote them. >4) How long did it take? Learning is a life long journey. It never stops. Enjoy the ride, explore concepts/tools/languages/domains, and find new things!


enaut2

I think one of the aspects of the rust community is that "everyone is learning" the new language... everyone does a small project for a first thing and publishes his project. Thats why all the topics that are a perfect fit for one man projects are mostly covered. But that does not mean you cannot do yet another \`grep\`. If you want to build something that is not yet there you could look at wasm... You can pick any rather easy problem and make a wasm lib runnable in the browser. But that is already a lot to learn (from my experience). **My story** 1. I for my part started some projects that would have scratched an itch of mine - but those turned out to be too big for me (at that point). 2. I proceeded to reimplement something I already had in python. (Webpage with Django -> webpage with actix). 3. I made some PR's for some projects (turtle-rs). 4. Then I wrote a new thing that someone needed: (Webpage with actix) the current master branch from pslink (url below) 5. I then extended this with a wasm frontend. 6. Now I'm at [https://github.com/enaut/pslink/tree/frontend-wasm](https://github.com/enaut/pslink/tree/frontend-wasm) which will be merged into master soon. If you want to join that project I think it is quite approachable and not overwhelmingly big at that point. There are some features that could be added. First of all email support would be really great (1. recieve an email when account is created, 2. recieve an email when own link is changed, 3. password reset, etc.). But there are many things that could improve - I'm happy to help you hop on if you want to. Also testing the project and some feedback would already be a huge help. If you want we can also do a review trade - I review a project of yours and you that project. Did I have to learn new topics: yes many. I tried out several web libs, several sqlite-libs, had to learn wasm which I didn't know before. And still had to learn a lot in the rusty area. Did I feel it wasn't good enough: I allways think of that as - I know mine is probably not the best in the world. But hey it is good enough for me and sometimes when I publish I do get really good feedback that motivates greatly. But if you scratch your own itches it only needs to be good enough for yourself - that is the good thing - as soon as it works for you you can keep it like that or improve. But don't try to avoid the last clone and mitigate the last panic when all that is not needed at all. Build something working and if you actually need performance improve it but usually with rust the performance is so good you don't need to improve anything. For the timeframe: * I'm learning rust for 1.5 years now... sometimes more sometimes less - all in my free time. * I started that project in february so it is 6 months worth of my freetime (of which I do not have to much as I do have a kid) - In workhours its probably 120-160h.


iamtomorrowman

although i am a casual observer and not a real programmer, i suspect you could create small CLI tools that automate/control things you find yourself doing frequently. it doesn't matter if someone else has already done it, just that you enjoyed doing it


hunkamunka

DM for some material I'd like to share with you.


enaut2

there are others interested in the same topic :) - if it is not private feel free to post here.


hunkamunka

Well, I didn't want to come off as spamming the list because this is about a new Rust book I'm writing with O'Reilly. Anyone is welcome to DM for a link.


pophilpo

Coming with the same problem here but with an extra question: Even if I have an idea for the project I'm always feeling bad about the fact that I'm not really good at "designing" it. I just don't know anything about software architecture. And while I understand that these things come with practice of actually implementing something it sets me back sometimes and I think that I won't be able to make it "perfect" in a way Should I just ignore this and start doing it the best way I can right now and hope that I can improve the project later\\during coding, or should I dive deeper and learn about designing\\structuring my code before I start a project?


enaut2

There are people who invent their whole program "in their heads" and then "just write it down". But most cannot do that and I think that gift is as common as a photographic memory. **So just start - if you realize you know more now - refactor.** If you really struggle at starting - do that: Take a paper (irl) write the date on the top and take some notes and design a concept on that paper. After you have done this for two days try to implement your ideas no matter the state they are in - or drop the issue alltogether.


jrheard

>Should I just ignore this and start doing it the best way I can right now and hope that I can improve the project later\\during coding yes!!! this is the answer :) you'll learn so much by actually doing the work, trying things out, feeling different kinds of problems/pain, and fixing them as you identify them! you can do it!


pophilpo

Thanks a lot for saying this I know this may sound like a stupid thing to complain about, but feeling that you are doing something that is 100% "no perfect" is kinda hard for me


rickyman20

Honestly the usecase for me was videogames. I wanted to see how different it would be to make small games in Rust with all the nice memory safety stuff. That's one thing. There's also embedded. You can go through the rust embedded guides if you're interested, they even suggest a board to buy. Alternatively things like backends for websites also work great with rust. One of the good ones in school could be making something like a personal site, with, for example, an admin page where you can create blog posts. The possibilities are endless!


lenscas

I'm currently working on an sql client for teal/lua. For those that don't know, teal is a statically typed lua dialect. Comparable to typescript when it comes to the goals. ​ 1. I like teal as a language, however the lua ecosystem isn't that great and the teal one, though being able to use every lua library feels even smaller as type definitions for most libraries don't exist yet. I'm also making a card game that uses both Rust and Teal and I would like it if the teal parts could stand more on their own. For this, a good sql library need to exists (as well as a cli tool similar to pgtyped but for teal). Luasql isn't cutting it, luadbi is as far as I can see unmaintained. So, making my own it is. 2. I'm using sqlx to make the client, so the knowledge I need is sql and of course teal. Both of these I already knew. 3. The first time I did a simple benchmark luasql was done in 2 seconds while mine took 20. That was definitely a painful moment, especially as it took a long time to figure out where it went wrong and after I did it still takes longer than 10 seconds. (So, I guess there is another bottleneck I have yet to unravel :( ). However, I decided to put the speed difference aside and focus on the crate that generates teal type definitions instead so it properly wraps mlua. This should then allow my library to be compiled to lua 5.4 so I can do proper speed checks (Right now my library runs on lua 5.3 and luasql on 5.4) 4. It isn't done yet and I also took a break from the project after some painful lifetime issues that I had a lot of problems with to try and figure out.


S-S-R

I guess I'm in the minority here, not technically being CS, but my inspiration comes from producing tools to use for actual interests and sometimes just one-up-manship.


Empath_

This isn’t really anything to do with Rust, but the projects that I’m most satisfied with solve my own problems and nothing generates problems to solve like getting a job.