So I've been busy with my MSc
A bit of both. It takes some embedded programming knowledge to interpret the signals coming from the radio receiver (I don't bother with trying to make those), figuring out what it is saying, then applying whatever actions you are looking for to the motors or possibly modifying the signal from the receiver and passing it on to servos. The actual 'speed control' is pretty easy electronics wise, particularly if you don't want reverse. If you want reverse and breaking it becomes a bit more complicated and uses about 4x the components, as well as the risk of destroying hardware if you have bugs in your code. You get chips that do it all for you, but then you might as well just buy a commercial solution since you lose a lot of the fine-grained control that the custom solution gives. Servos can also be done custom, but it's easier just to get a commercial one since servo control is a surprisingly complicated problem involving damping, oscillations and holding torque, all of which are dependant on the exact specs of the motor, geartrain and the voltage the servo is running off of. So, low level programming applied to a knowledge of fairly standard power electronics.