Commitment issues
Over my brief (6 year) career as a software engineer, I have mostly written native Android applications in Java (and more recently worked on AOSP platform development). I have had some experience working on native libraries written in C and C++ as well as web development (LAMP), but my exposure to these areas has not been extensive. Committing to learning and mastering a language can be daunting, considering the time and effort required, but, to make progress, you have to take a step out of your comfort zone and be vulnerable to risk.
I love learning. As such, I have played around learning several different languages, but I’ve been hoping to find a language that interested me enough to start a side project with.
Some of the the languages I explored include:
- JavaScript/TypeScript (This was number one. I’m interested in web applications, but considering my area of expertise, and future goals, I don’t know how many more tech areas I can feasibly branch off to)
- Python (This is used everywhere and was near the top of the list)
- Rust (Officially introduced into AOSP in 2021)
- Kotlin (I will probably learn this anyway… eventually)
- C / C++ (Useful in many projects within the defense contracting world. I already have a foundation, but have not written enough code to feel that I’ve mastered the language)
- Go (There is a lot of buzz about Go, and it is used in the AOSP build system, which would be useful)
What made me commit to learning Rust?
Well, several things
-
My first sighting of Rust was when I saw that it won the most loved language by its users in the 2021 Stack Overflow Developer survey and in several years past ( 2020, 2019, 2018, 2017, 2016 )
-
Recently, Linux officially announced that Rust is an official second language
-
Android development, both app development and platform development, is my main area of knowledge. So after reading the Google article in which Google explains the decision to support Rust in AOSP development, my interest was certainly piqued
-
With the reasons above, I continued my research of the language by watching several tech conference speeches about Rust 1 2 3
- This video by speaker Sergio Benitez really sold me. And as you’ll see, inspired the core of my "curriculum"
-
I have been looking for avenues to start learning embedded development. Rust, is a suitable language for embedded development, and after poking around a bit, I found a fairly explicit learning path which I will cover next
Approach to learning
As referenced above, the speech titled A Case for Oxidation: The Rust Programming Language given by Sergio Benitez inspired my approach to learning Rust.
At the end of the speech, he explains that he created an experimental college course in 2018 at Stanford, teaching OS fundamentals and implementing an OS entirely in Rust on a Raspberry Pi. This course serves as a free, high quality, easy to follow, well structured learning path. What more could you ask for?
Personally, I learn best when I have a structured curriculum to follow. I use the rigid structure of the given course/book as a guide and take tangents when I feel the need to internalize a particular detail or idea within a section of the material.
As supplemental learning material, I may create small pet projects with Rust and work through a Rust book in addition to covering the required reading for the CS140e class.
Goals
When undertaking any task, it is always advisable to set realistic goals, to assess success or failure. I aim to achieve several goals during my learning process.
- Become proficient in writing Rust code
- This is a bit of loosely defined goal, but I’ll know once I feel proficient
- Complete all assignments from the CS140e course
- I plan on posting all completed assignments to my Github
- Adapt the course assignments from the CS140e course to a
BeagleBone Black
- This is a stretch goal. Adapting the course to a new hardware platform will serve as proof that I have a solid foundation in embedded development using Rust
You can follow my progress through the course and throughout my Rust journey in future blog posts and at my Rust Github repo