Language is very small part of it. For example me contributing a anx7688 driver for pinephone to make convergence work was C coding, yes, but also reading through type-c spec, battery charging 1.2 spec, usb-pd specs, alt-dp specs, and figuring out how it all works from 0 knowledge, to tie all that together on a quirky HW design, with several hardware bugs that I had to discover first, and non-cooperating PMIC/and type-c controller, on 3 different pinephone HW variants.
C coding is the easiest thing. Hard part is figuring out what needs to be done and getting quite detailed understanding of how everything works on HW level, lots of trying and testing with various USB devices in various scenarios. There's also a lot of reverse engineering, because no HW vendor cooperates with random fucks from the internet and gives them free support. :)
Killer apps for me are physical keyboard, GUI bootloader that can do multi-boot (so that I can switch between one of the mobile distros and a Xorg based i3wm desktop, because there's no way mobile distros will ever have reasonable performance for convergence use), convergence with accelerated video playback and a reasonably smooth web browsing, possibility to run Arch Linux ARM as is with access to the entire package repository of software (that is not ad laden or spyware by default) on my fingertips, and full control over the security of my phone by being sure I can run my OS without the CPU ever touching any code on any modifiable storage inside the phone,... :) That's already there with original Pinephone.
C coding is the easiest thing. Hard part is figuring out what needs to be done and getting quite detailed understanding of how everything works on HW level, lots of trying and testing with various USB devices in various scenarios. There's also a lot of reverse engineering, because no HW vendor cooperates with random fucks from the internet and gives them free support. :)