Rust should faciliate solid knowledge.
(One of) Rust’s selling point is safety.
It seems we, as a community, assume that as soon as Rust spreads out it will make the world safer. We encourage that spreading by trying to improve things like the too steep learning couve and making better documentation.
But knowing Rust does not make safe programs. The second ingredient to safe or good programs is knowledge and experience.
As soon as any programm gets big, we constantly need to make decisions. Only with experience I can even think of more than one way to go on, make assumptions to where those approaches lead, weight the pros and cons and make an acceptable decision in a matter of seconds.
On the other hand it needs knowledge. Good programs consists of more than code. It is documented in a good way, it uses the right algorithms where appropiate, it knows where edge cases occour, it knows which encryption standards to use…
At the time this is not a problem. The reason for this are the people in the Rust ecosystem. I guess most of us have vast experience in programming in general and in systems programming. [survey :)] But as Rust grows, lots of new people will enter. Large parts of them are young and some of them are from areas where good programming did not matter.
Confession: I think I am a good programmer but yesterday I learned that I cannot reassign a reference in C/C++. Somehow I missed (or forgot) this essential bit of information in 10+ years of (occasionally C++) programming. Maybe I thought this would not be important? Now I know that when I assign a reference, the operator= of the original variable is called.
I know stuff. Since I started learning Rust, I read the TWIR. That has been a huge learning ressource (incl. RFC discussions). I learned things like teach don’t tell, that there is a thing like an ABI. Through TWIR and other sources I learned about TDD, that there is something like the clean code movement that gives you tips, their grade system, that people thought about principles to solve common meta problems, DRY, KISS, FCol, ISOP, SLA, SRP, SoC, code conventions, integration tests, mockups, code coverage analysis, fuzzy testing, travis, toyotas ask ‘why?’ multiple times, MISRA-C, knowing what undefined behaviour means, virtual adress space, …
One problem is: I don’t know what I don’t know. Because I learn by chance. There is probably a lot of (meta) stuff around safe and good programming that I don’t know.
If Rust wants to be an empowering/safe/fearless language and create a safer world, I believe it must also empower its users to have solid knowledge, above simple ‘getting stuff done’.
I wish some of the very experienced people would give me mostly complete a picture of what there is to learn. That would allow me to learn in a more structured way. At least I would know what I don’t know.
For example, this could be a courated list of links to interesting blog posts, RFCs, articles, bad examples, good examples … (But let’s try to discuss the story before discussing the how.)
Something like that should permanently and prominently be visible for new users and not vanish in some old TWIR issue blog post link.
PS: The selling point discussion
I haven’t developed this thesis fully, but I’ve been thinking that Rust’s model is a better version of functional programming, and we lack a good term for it (since it’s obviously not a pure functional language).
Maybe Rust is a guiding language.
It guides to memory safety and better program layout, but it also guides to correct API usage (because most library authors decided to create guiding APIs via type system restrictions, even if they could have done otherwise). It also let’s you guide your programming peers.
This would explain why people say: ‘Once compiled, it mostly works’.