Somewhat aside from @Mariah‘s response, while the developer may have written the code to function properly “when properly directed by the user”, you as the user may have skipped an input or step that the program requires for proper function. And in that case, the program encountered an unexpected error and crashed.
It’s still a programming error, because the programmer should have bullet-proofed his program with proper error-handling routines to account for all potential and likely user errors, such as informing the user that a step has been skipped, an input ignored, or some other user error has occurred which the user needs to rectify.
Programming isn’t all that difficult. Error trapping and handling is a bitch.