@robby @qorg11 @EZsnake At uni we start teaching programming to computer engineering undergrads with C. It’s brutally hard, and I secretly believe the best predictor of student performance in the class is prior exposure to programming (i.e., it’s not a very gentle introduction). They do have a digital design course in parallel, so the idea is the learn how to program the hardware and how to design it at the same time.
That said, C skills are still indispensable for low-level software (and even if we rewrote the world in Rust, lots of problems that Rust fixes only make sense with some C or C++ experience). Just make sure you do everything “properly”, and do not ignore any compiler warnings. Due to how C works, it’s easy to make a mess that somewhat works without understanding stuff sufficiently well (this often bites my students). Unfortunately, tools for “checking your own work” like valgrind rely on relatively advanced concepts, so it’s hard to verify whether your program actually does what you think it does, or only works by accident (and will be broken next time you modify something – loud cursing frequently ensues).
For associates degree students, we actually start with Python as a much gentler introduction. It has the advantage that you only have to learn basic programming concepts, and low-level computer engineering stuff may come later (C forces you to do the two at the same time). On the other hand, the syntax differences between Python and other programming languages may trip you up later a bit.