When designing a device driver, programmers look at the functionalities of the device that are to be implemented and write the driver accordingly
I prefer C / C++ for writing a device driver but have seen driver in assembly language also
overall process is dependent on device itself