As Easyrider83 mentioned, considering that some PIC families have a quite limited architecture, it is very important to understand the fundamentals of the microcontroller core that you are working with, as well to comprehend its instruction set in order to know what is it capable to do with the built in resources and also to have a notion of the overhead that a specific implementation in firmware would subject it. High level languages abstract the programmer from the hardware level, not rarely being the reason for the program malfunctioning.