How does...one reach this level of understanding in systems programming? My coursework in this area was very general at best. Are there any courses out there that focus on this theory-meets-real-world level that you folks would recommend? Would prefer one in Linux, but I'm not that picky.
Or does one just happen into these jobs as an apprentice and spend years learning on the job?
I used to work with wireless driver guys. Some of them had no degrees (including one who worked at Lucent on Apple's Airport). Just started out doing small stuff and worked their way up. Others had EE backgrounds. One of the things about wireless is that the salient concepts are more EE than CS, even if you're on the software side. A specialized EE course on wireless communications will teach you a lot of the underlying concepts you need to understand.
In the specific case of 802.11 (different from 'Wi-Fi' which is a marketing term from the Wi-Fi consortium), you'll also need to be familiar with the IEEE 802.11 specifications. You can do this by putting aside a block of time to read parts of the actual specs [1], supplemented by the O'Reilly 802.11 books by Matthew Gast [2] which I found to be really helpful during my time working with various 802.11 modules.
wow specs that are free.. in the wireless world a lot of specs are free, as I just googled.
however later that day I worked with NXP NTAG's 213-216 and tried to figure out more specifications especially about NDEF and they were put behind big paywalls. very very sad (http://nfc-forum.org/our-work/specifications-and-application...)
I always wonder how to push such technologies, if you can't implement it without paying. it's just akward.
Adrian could speak for himself but my guess is from what he has written in the past that he got his start by being mentored by one of the FreeBSD developers. FreeBSD is big on assigning mentors to those interested in developing for it. So if you have an interest in getting all up in the underwear of an Unix OS you might consider developing for FreeBSD. I'm sure they would love be to have another developer join their ranks!
As most other things it comes to passion. If you literally write C in your dreams and spend every waking hour hacking OS kernels you'll get to be very good.
By doing it. If you look at enough code, ask specific questions on IRC or mailing lists, and follow through on the references, you'll eventually learn.
> If I chose, say, the Intel 11ac parts then I'd have to implement a lot more of the fiddly stuff to get good behaviour
Okay, I'll have to wait another year to get 11ac on my laptop :) It's not, like, super critical to me, 11a is enough for most daily tasks and for e.g. system upgrades I just connect to Ethernet (BTW it's super easy to set up seamless handover between Wi-Fi and Ethernet on FreeBSD, using link aggregation)
Or does one just happen into these jobs as an apprentice and spend years learning on the job?