Ever since I started programming I've been using interpreted languages. I started with Python, got my first job in PHP and now mostly coding in Ruby. I've never done any systems programming, and have done tiny amounts of C.
Then I found out about Rust, which suddenly made lower level languages seem much more accessible to me. The principles behind the language and syntax decisions really appeal to me. However, it's pretty much impossible to learn a language without a project of some sort, and for me I like to have a project that will have some practical use either for me or the community. I also find it difficult to come up with a problem where Rust is a good solution.
Does anyone have any good suggestions for a first project?
Another thought I had was to try my hand at creating a Rust library, but being new to the community have absolutely no idea what the community wants or needs. I'm not expecting that my first attempt will be good or releasable, but having a purpose will help to focus my efforts.
Any ideas are welcome! Also, any suggestions around the best way to learn Rust other than walking through the docs and [rustbyexample.com] are equally welcome.
I have found the Rust in Detail: Writing Scalable Chat Service from Scratch articles really good. Also, I found The Book to be better read in the order of sections 1, 2, 5, 3, 4.
I think the question is "What do you want to make the computer do?".
I got into programming because I wanted to make the computer do something. Back when I started programming that was basically making electronic Madlibs with Basic on a Vic 20. Then a teacher introduced me to fractals which I still find fascinating.
Then there are things like Conway's game of life which are always fun. And reading the WIKI someone came up with an algorithm for doing it with Hexagons...which I might need to play with in the near future. These kind of non deterministic algorithms I always had fun with. Like creating an ecosystem with genetic algorithm organisms.
With rust I'm using hyper to provide the embedded HTTP server. I do my calculations in rust and still use the browser for my UI. Not sure if this architecture will work for you, but it works for I tend to create.
So what is your dream application? What do you want the computer to do that it doesn't already do? Or doesn't do quite right?
I believe many people might have gotten into programming to create games, unless you are artistic or know someone you can team up with who is, I would recommend staying away from that. You might be able to create a kick ass back end, but if the graphics are crap, nobody is going to notice how great the engine is.
I agree about games: that's something I'm staying away from, for the artwork reason and because game programming is a huge area about which I know nothing.
I'm a web developer by day, so I'd like to do something suitably different. Especially since I'd be directly comparing my speed of development in the two languages, which probably wouldn't be helpful.
I might give Conway's game of life a go actually. Another idea I had was re-implementing a simplified version of some common shell tools, like
grep, just to get a feel for the language.
Thanks for your reply!
You could always run through Rosetta code problems. They typically don't require any GUI work.
Go through various challenges on codewars.com . They
don't yet support the Rust language but that doesn't mean you can 't try them for yourself in Rust.
Thanks everyone for your suggestions, they're great ideas. I've got my work cut out!
I am late to the party, but I'd like to suggest implementing a ray tracer in Rust
It needs a fair amount of time to implement (I'd say about 1000 line of code and a knowledge of basic linear algebra), but it has a lot of cool properties as a learning exercise, especially for Rust.
- nice visual output
- thoroughly stresses several aspects of a language:
- static dispatch
- type system expressiveness
- dynamic dispatch
- data parallelism
- raw computation speed
- medium scale architecture
- infinite possibilities for the extension
- large enough to learn the language
- no dependencies on 3d party libraries