2023-10-12
How to become a professional rust developer

Rust
I am self taught (i.e. no traditional learning experiences as a software engineer). I see myself as a hacker, knowing operating systems, cloud systems, and networking, using BASH scripts for some simple automation; transitioning to becoming a proper engineer being formally trained in sorting algorithms, data encoding / decoding, and formal mathematical understanding of it all.
To determine how realistic it would be to transition into a Rust focused software engineering and anyone who has any general suggestions or recommendations (not just for me specifically, but anyone) looking to get into Rust professionally, let me know. But I feel a minimum skill-set should be rooted in first principles.
Computer Science 101
Computer Science is the core to understanding Rust. If you have a solid understanding of the Computer Science subject, that lays the foundation of the core ideas.
Computer Science skills can quite easily be studied online, there is tones of material on YouTube, Coursera etc. Specifically cs50.
Rust can be used in many diverse domains, everything from embedded to client side web applications. Since Rust is a systems/low level language in general I think it is always good to know the fundamentals of software and hardware theory, first principle things:
How the CPU operates on assembler/machine code level including registers, stack, SIMD etc.
How CPU caches work and how to structure data to make efficient use of them.
Being able to implement basic data structures like array vectors, hash maps, linked lists, binary trees, heaps, queues, stacks etc. and algorithms like sorting, binary search, tree/graph traversal etc., and learn what performance/memory characteristics and trade offs they each have.
How heap allocators work and being able to implement a simple one yourself.
Different type of automatic memory management techniques like ref counting, tracing GCs etc.
How synchronization between threads and CPU cores works on a primitive (CPU) level, and how to build high level concurrent constructs like channels, tasks, mutexes, STM etc. on top of that.
How async works on a fundamental level.
How network protocols like TCP, UDP, HTTP etc. work on a fundamental level, implement your own web server for example.
Crypto algorithms like AES, SHA, RSA etc., when they are applicable and what level of security they provide.
Basic knowledge about data compression algorithms like LZ, JPEG, MPEG etc., when each is applicable and what trade offs they have.
Basic knowledge about how to utilize GPU’s for compute and graphics, and in what use cases it’s applicable.
Basic knowledge about operating system concepts like kernels, drivers, processes, file systems, shared libraries, shared memory etc.
While not Rust specific knowledge these first principles are applicable to all software development, It’s even more relevant for a low level language like Rust. Rust is an excellent language to use to learn this stuff.
On top of that you will of course need more specialized domain knowledge depending on what you will be working on, but a lot of that will come with working experience.
From the fundamentals Rust will be much more manageable or at least better quantified. Computer Science is a core to draw from.
Conclusion
So going forward is going back again, back to basics, and back to careful attention to developing and implementation of the Rust code-base. I feel that in learning Rust a user will go full circle in their completeness of computational knowledge.
Even when dealing with crypto, nodes, cryptography, merkle tries, and conventional algorithms. Refocusing on the basics will help reinforce and solidify proper and time honoured software practices.
